dist. system 6

Zookeeper를 이용한 분산 시스템 공용 데이터 관리

이미지 검색 시스템이 있고, 시스템 자체가 여러 대의 클러스터로 구성되어 있다. 특정 인물의 처리를 무시하기 위해서 PASS_LIST를 두어 공용으로 관리하고 싶은데 무겁게 DB까지는 쓸 필요가 없이, 주키퍼를 이용해서 노드를 만들어 놓고 데이터를 저장/접근하면 된다. (이미 주키퍼 앙상블이 구축되어 있다고 가정) 이후에, 모든 클러스터에서 주키퍼 앙상블에 접속하여 해당 노드에 저장된 값을 얻어서 의도된 작업을 수행하면 된다. ex) /abcsystem/passlist python client가 필요했기 때문에 kazoo.readthedocs.io/en/latest/basic_usage.html Basic Usage — kazoo 2.6.0 documentation To begin using Kazoo,..

dist. system 2020.11.03

Zookeeper 구조와 일관성에 대해

주키퍼 서버 구조 주키퍼 서비스를 구성하는 각 서버는 Request Processor를 제외한 각 컴포넌트의 복사본을 복제한다. 그림의 Replicated Database는 in-memory DB이며, 전체 데이터 트리를 가지고 있다. - Update의 경우엔 복구를 위해 로깅 되며, - Write의 경우엔 디스크에 serialized 되어 저장된다. 각 주키퍼 서버는 클라이언트에게 서비스를 할 수 있다. - 클라이언트는 정확히 한 대의 서버로만 요청을 보내고, - 요청 받은 서버는 로컬 레플리카 데이터베이스로 부터 요청을 서비스한다. 서비스의 상태를 변경하는 요청이 발생하는 경우 Agreement Protocol에 의해 처리 된다. * Agreement Protocol ; 모든 쓰기 요청을 '리더'를 ..

dist. system 2020.10.26

Zookeeper 설치법 정리

회사에서 이미지 검색 시스템을 구축할 때 분산 메시지 플랫폼으로 카프카를 이용하였는데, 카프카 클러스터의 코디네이션 시스템인 zookeeper를 먼저 구축해야했다. 잊기 전에 주키퍼 앙상블의 구축 방법을 간략히 정리하고, 주키퍼의 컨셉에 대해서 정리해 놓자. '카프카, 데이터 플랫폼의 최강자' 설치법 부분을 많이 참고하였다. 정말 좋은 책! 서버 세팅 (3 대) OS ; centOS 7.4 MEM ; 8GB SWAP ; 8GB Partition ; - SAS 1TB * 2 (raid 1) - / ; sda1 (100G, OS) - /data ; sda3 (나머지 몰아 줌, log 용) - /SAS 2TB * 2 ( /data1, /data2) 주키퍼 설치법 cd /usr/local wget http://..

dist. system 2020.10.26

NATS streaming client example

https://github.com/nats-io/stan.py nats-io/stan.py Python Asyncio NATS Streaming Client. Contribute to nats-io/stan.py development by creating an account on GitHub. github.com STAN을 쓰는 방법을 정리해보았다. 문서와는 다르게, ip 주소 및 포트를 명시해야 했다 (커스텀 포트를 써서 그런듯) stan은 nats를 기반으로 돌아가기 때문에 nats client를 생성해서 stan client에 전달해줘야한다. stan의 첫 인자는 클러스터 아이디로 클러스터를 실행시킬 때 명시를 하지 않았다면, 디폴트가 test-cluster라고 한다. 중요 포인트중 하나는 각 st..

dist. system 2020.09.25

nats streaming server (NATS.io)

NATS에 대해서... 서브 프로젝트에서 NATS(넷츠)라는 메시지 큐를 사용하게 되었다. https://docs.nats.io/nats-concepts/intro What is NATS docs.nats.io 프로젝트의 메인 언어인 Golang으로 구현이 되어있고, 다양한 언어로 작성가능한 클라이언트 라이브러리를 지원하고 있으며, 무엇보다 사용이 간편, 가볍고, 설정이 쉬운 장점이 있어 쓰기로 했다. 기본적으로 Pub/Sub 구조를 지원하며, 데이터는 인코드 되어 전송되고, 받은 메시지는 디코드되어 처리된다. NATS의 기본 코어는 'at most once' QoS를 지원한다는 것을 기억해야한다. subscriber가 특정 subject(topic)을 구독하고 있지 않다면, 메시지를 받을 수 없다. N..

dist. system 2020.09.02