node.js / golang이 큰 장점을 가진 언어임에도 불구하고 쉽게 개발자들이 선뜻 적용하지 못하는 이유가 새로운 분야의 학습 곡선과 문제가 발생했을시 drill down해서 해결하는 노하우가 아직 널리 공유되지 못하는 이유이기도 하며, 여러 프레임워크의 아키텍처나 구조등이 개발자에게 널리 공유되지 못한것도 있다.
일전의 포스트에서와 본것과 같이 etcd를 요즘 살펴보고 있는데, go lang을 잘 적용한 프로젝트라서 보려고 해도 이 녀석의 아키텍처가 잘 공유되어 있지는 않다.
어떠한 철학으로 layering되어 있고, 의존성들은 어떻게 관리하는지 더 나아가 profiling까지 보고 싶으나… golang은 아직 역사가 짧기 때문에 profiling이나 의존성 관계를 파악하는 도구등이 java / .net 진영보다는 부족하다고 할수 있다.
급한데로 찾아보니 나랑 비슷한 고민을 해본 사람이 있고 나름 괜찮은 프로젝트가 있어서 공유한다.
go 파일간의 dependency를 그래프로 시각해 주는 툴들
살펴본 결과 goviz가 더 나아 보인다. 일단 depth 별로 추출해주는 기능과 다양한 포멧을 지원해서 편하다.
mongodb가 혜성처럼 등장해 많은 사랑을 받은 이유가 여러가지 있다. 가장 큰 덕은 모바일의 폭발적인 성장이지만, 개발자에게는..
- auto-sharding
- schemaless + json 데이터 저장
- 자체적으로 가지고 있는 master-slave high availability 기능
정도 되지 않을까 생각한다.
sharding이라는 것은 꽤 귀찮은 작업으로 어떻게 데이터를 분배해야 할지 많은 고민을 해야 되는데, 굳이 크게 고민하지 않고 auto-sharding을 쓸수 있는 적당한 규모의 프로젝트라면 마다할 필요가 없다.
또한 High Availiability를 자체적으로 지원을 하는데
1) 별도의 watcher인 arbiter 를 셋업하여 master-slave를 감시하는 방법
2) watcher없이 master-slave가 서로 heartbeat 메세지를 보내고 문제를 감지해 failover를 처리하는 방법
이렇게 두가지를 지원한다. 개발자에게는 야호하고 소리를 지를수 있는 좋은기능! (단 죽은 master를 어떻게 살리지는 개발자 여러분의 몫 – 좋은 방법이 있으면 공유를…)