1. 클러스터란 무엇인가? 사용자 관점에서 클러스터는 '단일 머신'처럼 보이도록 만들어주고, 동적으로 변화하는 다른 서버 네트워크와 통신할 때 발생하는 모든 복잡성으로부터 안전하게 보호하는 역할을 한다. 클러스터에 많은 서버가 있더라도 사용자 입장에서는 하나의 서버로 접속하는 것처럼 보일 수 있고, API를 사용할 때도 하나의 서버와 통신하는 것처럼 동작하게 해준다. 그런데 클러스터가 이 기능을 구현하기 위해서 해결해야하는 프로토콜과 책임이 존재한다. 2. 클러스터 0계층 아래는 클러스터가 가져야 할 가장 기본적인 부분이다. 이것은 클러스터 0계층이라고 부를 수 있다. 1.1 어떻게 클러스터에 조인할까? 클러스터에 조인하려는 새로운 서버 노드가 있다면, 이미 클러스터에 조인한 다른 노드와 통신하는 방법을..
참조 https://learnyousomeerlang.com/supervisors#from-bad-to-good 1. From Bad To Good 이전에 구현했던 Supervisor는 process_flag(trap_exit, treu)를 이용해 시스템 프로세스가 되어서 워커 프로세스의 종료 신호를 받고 되살리는 작업을 했었다. 그런데 이 단순한 Supervisor는 근본적인 문제 두 가지를 가지고 있다. 단순 통신 오류로 Retry 한번만 다시 하면 사용할 수 있는 프로세스인데, 죽이고 처음부터 시작해야 함. 하나의 Supervisor는 하나의 워크 프로세스만 관리할 수 있음. OTP에서 제공해주는 슈퍼바이저는 위 단점을 해결해준다. 2. Supervisor Concepts 슈퍼바이저는 슈퍼바이저 -..
들어가면서 HyParView라는 클러스터 멤버십 프로토콜을 이용하면 빠르고 확장 가능한 클러스터를 만들 수는 있다. HyParView는 수 천개의 노드로 클러스터를 구축할 수 있지만, 각 노드는 전체 클러스터의 작은 하위 집합(부분 클러스터)하고만 활발하게 대화할 수 있는 '부분 보기'라는 개념을 사용했다. 모든 노드가 상호 연결되지 않은 클러스터는 확장하기 쉽다. 그러나 몇 가지 경우에 명백한 한계점이 존재한다. 단일 노드가 클러스터의 다른 모든 노드에 메세지를 브로드캐스트 하려는 상황 이런 상황에서는 어떤 프로토콜을 사용해 볼 수 있을까? 이런 문제는 Gassip 프로토콜 중 하나인 Plum Tree를 통해서 해결할 수 있다. https://www.bartoszsypytkowski.com/plumtr..
참고 https://learnyousomeerlang.com/what-is-otp#its-the-open-telecom-platform 1. What is OTP? erlang에서 안정적인 코드 작성을 위해서 link, monitor, servers, timeouts, trapping exits, hot cod loading, naming processe, supervisor 등의 기능을 사용해야했었다. 그런데 이런 코드들은 비즈니스 로직과 관련되었다기 보다는 부수적인 기능이다. OTP Framework는 이런 기능들을 프레임워크 형태로 지원해주고, 덕분에 개발자는 비즈니스 로직에만 집중할 수 있게 된다. 따라서 OTP Framework를 사용하는 것이 좋다. 2. The Common Process, A..
참고 https://learnyousomeerlang.com/designing-a-concurrent-application#A-Test-Drive 컴파일 하기 표준 erlang의 구조는 다음과 같다. 이 때 Emakefile을 하나 만들어주고 아래 내용을 추가해준다. {'src/*/*', [debug_info, {i, "src"}, {i, "include"}, {outdir, "ebin"}]}. 이 Emakefile은 src/*/*아래에 있는 모든 erl 파일을 컴파일해서 ebin/에 넣을 수 있도록 해준다. 만약 src 바로 아래에 있는 파일만 컴파일 하고 싶다면 src/*로 처리해주면 된다. $ cd /dev/erlang-study $ erl -make 컴파일을 하기 위해서는 다음 명령어를 사용하면 ..