Erlang의 경량 프로세스와 메시지 전달에 관한 것이 아닌 본질 (2023)

4 weeks ago 19

배경

  • Erlang은 신뢰할 수 있는 분산 시스템을 구축하기 위해 개발된 언어로, 처음에는 Prolog 라이브러리로 시작하여 독립적인 언어로 발전함.
  • Ericsson에서 전화 교환기를 프로그래밍하는 데 사용되었으며, 1998년에는 오픈 소스로 전환됨.
  • Joe Armstrong는 Erlang의 주요 설계자 중 한 명으로, 그의 박사 논문은 소프트웨어 오류가 있는 상태에서 신뢰할 수 있는 분산 시스템을 만드는 방법에 대해 다룸.

행동(Behaviours)

  • Erlang의 행동은 Java나 Go의 인터페이스와 유사하며, 여러 구현을 가질 수 있는 타입 서명 모음임.
  • 행동은 프로그램의 비즈니스 로직을 정의하는 코드만 작성하면 되고, 인프라 코드는 자동으로 제공됨.
  • 행동은 전문가에 의해 작성되며, 최선의 실천을 기반으로 함.

일반 서버 행동

  • gen_server는 키-값 저장소를 구현하는 예제로 설명됨.
  • handle_call은 상태를 업데이트하거나 키를 조회하는 역할을 하며, 모든 동시성은 gen_server 구성 요소에 숨겨져 있음.

이벤트 관리자 행동

  • gen_event는 이벤트 관리자로, 이벤트 핸들러를 등록하고 메시지가 도착하면 실행함.
  • 오류 로깅에 유용하며, 간단한 로거 예제가 제공됨.

상태 기계 행동

  • gen_fsm은 gen_statem으로 이름이 변경되었으며, 프로토콜 구현에 적합함.

감독자 행동

  • 감독자는 다른 프로세스가 정상적으로 작동하는지 확인하며, 실패 시 미리 정의된 전략에 따라 재시작함.
  • one_for_one 전략은 실패한 프로세스만 재시작하며, one_for_all 전략은 하나의 프로세스가 실패하면 모든 자식을 재시작함.

애플리케이션 및 릴리스 행동

  • 애플리케이션은 감독자 트리와 필요한 모든 것을 포함하며, 릴리스는 하나 이상의 애플리케이션을 패키징함.
  • 업그레이드 실패 시 롤백 가능해야 함.

행동의 구현

  • Erlang의 경량 프로세스와 메시지 전달보다 행동의 구조가 신뢰할 수 있는 소프트웨어로 이어짐.
  • 다른 언어에서 행동을 구현하려면 인터페이스 서명을 사용하여 시작할 수 있음.

행동의 정확성

  • 시뮬레이션 테스트는 분산 시스템의 테스트를 용이하게 하며, gen_server 행동의 구조를 사용하여 문제 해결을 간소화할 수 있음.

기여

  • Martin Thompson의 작업에서 아이디어를 도용하여 빠른 이벤트 루프를 만들고, 비동기 I/O를 추가하는 등의 아이디어가 있음.
  • 관심이 있거나 의견, 제안, 질문이 있는 경우 연락 가능.

Read Entire Article