2012년 7월 2일 월요일

distributed read/write cache for type value store


riak을 ram(memory) backend로 설정도 해보고,
redis/memcached도 고려해 보고,
couchBase도 고려해보고,
RabbitMQ를 이용한 방식도 생각해봤다.
scalaris도 설치해봤다.

riak은 내부적으로 erlang의 ets를 사용하는데, stress test시 garbage collection을 제대로 처리 못해서, swap memory를 사용한다. 그래서, 갑자기 퍼포먼스가 떨어진다.

redis/memcached는 memory flush out에 callback을 붙이는 것이 단기간에는 쉽지 않았다.

couchBase는 license비용 때문에, 엄두가 나질 않았다.

scalaris는 설정하다가 실패. 아직 찾아볼 자료도 별로 없다. 소스 리뷰는 도움이 된다.

결국, cache에 대해서는, mnesia를 사용해서 자체적인 분산처리 agent를 만들기로 결정했다.

결론적으로, 현재의 best practice는 memory cache 를 read only로 redis를 사용하고,(그것이 싫다면 자체제작) persistence에 대해서는 riak의 bitcask를 사용하는 것인 듯.

mongoDB와 riak은 근본적으로 분산처리 알고리즘이 다르다.
어떻게 다른지, 잘 알고 써야 한다. mongoDB는 controller를 통해서, hash key를 통제하는 방식이고, riak은 vnode를 사용하여, peer끼리 gossip하며 balance시키며 교환하는 방식이다. mongoDB는 자체적으로 memory cache를 갖고 있기 때문에, 성능이 더 좋다. 하지만, 잘 쓰기 나름이다. 개인적으로 riak이 더 마음에 든다.
Riak의로 AP를 확보하고, Memory Cache로 C(Consistency)와 성능을 확보하면 완벽할 듯.