들어가기 전이 글은 RAFT 알고리즘 논문을 공부하며 개인적으로 정리한 글입니다. 틀린 부분이 있을 수 있으니 이해에 참고만 하시고, 피드백 주실만한 부분은 언제든 댓글로 부탁드립니다. 알고리즘 논문 erlang으로 구현한 학습용 코드 1. RAFT IntroductionConsensus 알고리즘은 여러 노드로 구성된 클러스터에서 일부 노드가 장애를 겪고 있더라도, 클러스터가 일관된 상태로 잘 동작할 수 있도록 지원한다. 이런 이유 때문에 Consensus 알고리즘은 신뢰할 수 있는 대규모 소프트웨어 시스템을 구축하는데 핵심적인 역할을 한다. RAFT 알고리즘 이전에는 Paxos 알고리즘이 Consensus 알고리즘에서 중요한 역할을 해왔다. Paxos 알고리즘의 큰 문제점은 이해하기 어렵다는 것이다. ..
들어가기 전이 글은 다음 포스팅을 참고하여 공부하며 작성한 글입니다. erlang으로 구현된 학습용 코드는 이곳에서 확인할 수 있습니다.1. 시작이전 게시글에서 간단하고 직관적인 멤버쉽 프로토콜인 SWIM을 공부했다. 그러나 초기 SWIM 프로토콜은 Full Membership을 유지하기 때문에 규모가 큰 클러스터로의 확장은 상대적으로 제한된다. 이번 글에서는 HyParView(Hybrid Partial View) 프로토콜을 다룬다. HyParView 프로토콜은 규모가 큰 클러스터에서도 경량화 된 방식으로 잘 동작하는 멤버쉽 프로토콜이다. 2. 직관적으로 바라보기HyParView에 대한 직관을 가질 수 있도록 일상 생활을 예로 들어보자. 우리는 노드를 사람, 클러스터를 사람의 무리라고 치환할 수 있다. ..
들어가기 전이 글은 다음 블로그 글을 보고 공부하며 작성한 글입니다. 이 글에서 다룰 plum tree는 Gossip Protocol이지만, 특정 클러스터 내에서 함께 동작하기 때문에 최종적으로는 Distributed Membership Protocol에 Integrated 되는 형태로 작성될 것입니다. 이 블로그에서 작성한 Distributed Membership Protocol은 다음 글들을 참고해주세요.SWIM Membership protocolHyParView Membership ProtocolHyParView Protocol + Plum Tree 프로토콜이 Integrate된 학습용 코드는 이곳을 참고해주세요. 코드는 erlang으로 작성되어있습니다. 1. 들어가면서 이전 글에서 HyParVi..
들어가기 전이 글은 이 블로그 글을 참고로 학습한 글입니다.원글은 SWIM 프로토콜을 F#으로 구현한 코드를 제공합니다.이 글에서는 erlang으로 SWIM 프로토콜을 구현하였으며, 원글에서는 구현되지 않았던 suspect - alive 반박, SWIM 프로토콜 메세지 사이의 동시성 문제를 해결하기 위해 Incarnation을 고려한 코드를 추가했습니다. 제가 구현한 코드는 이곳에 있습니다. 1. 클러스터란 무엇인가?사용자 관점에서 클러스터는 '단일 머신'처럼 보이도록 만들어준다. 여러 서버가 상호 연결된 클러스터는 새로운 서버가 추가되거나 제거되기도 하는데, 클러스터는 이런 개념들을 '단일 머신'으로 추상화해준다. 이 덕분에 클라이언트는 클러스터에서 발생할 수 있는 여러 복잡한 시나리오들을 고려하지 ..
들어가기 전 이 글은 핵심 이론부터 프로그래밍 실습까지 분산 컴퓨팅을 읽고 정리한 글입니다. 몇몇 참고 글도 있습니다. 요약 분산 시스템의 스냅샷은 프로세스 / 채널 State가 모두 포함됨. 분산 시스템의 스냅샷을 챈디 - 램포트 알고리즘을 통해서 작성할 수 있음. 챈디 - 램포트 알고리즘은 마커를 이용해서 채널의 State를 정확히 기록함. 10.1 단체 메세징 어플리케이션 문제 10.2 벡터 시계 10.3 전역 스냅샷 분산 시스템에서 특정 시점의 상태를 잘 보존해둔다면 분산 시스템 운영에 많은 도움이 될 수 있다. 예를 들어 장애가 발생해서 분산 시스템을 전체 재기동 해야하는 경우, 해당 시점의 상태로 돌아가는데 사용할 수 있기 때문이다. 분산 시스템에서 상태 보존의 대상이 되는 것은 크게 두 가지..