Redis 3.2 계획
파리에서 돌아왔습니다. DotScale 2015는 아주 흥미로운 컨퍼런스였습니다. 떠나기 전에는 unstable 브랜치에서 Sentinel 작업을 하고 있었습니다. 주로 커넥션 공유에 관한 작업이었죠. 간단히 말해 소수의 Sentinel이 많은 수의 마스터를 모니터링하면서도 확장될 수 있도록 하는 기능입니다. 떠나기 전부터 그리고 돌아온 지금까지 Redis 3.2의 기반이 될 기능들을 확정하려고 노력했습니다. 앞으로 몇 주간은 이 기능들을 개발하는 데 집중할 예정이라, 목록을 최대한 빨리 공유하는 게 좋겠다고 생각했습니다.
Geo hashing API: 이 작업은 원래 Redis의 포크였던 Ardb에서 시작됐고, 이후 Matt Stancliff가 이를 추출·개선해 Redis로 포팅한 것입니다(https://github.com/yinqiwen/ardb)(https://matt.sh/redis-geo). 오픈소스, 멋지지 않나요? 현재 코드는 sorted set 구현의 일부를 중복하고 있어 리팩터링이 필요합니다. API에 대해서도 몇 가지를 바꿀 가능성은 있습니다. 아직 확신할 수는 없지만, 고칠 부분이 있다면 고칠 예정입니다. 중요한 건 이 기능이 정말 훌륭하다는 점입니다. Matt가 더 이상 Redis에 기여하지 않게 되면서 이 작업을 잃을 위험이 커졌기 때문에, Redis 3.2의 첫 번째 과제로 리팩터링과 리뷰, 병합을 직접 수행하려고 합니다. Redis API에 아주 흥미로운 추가가 될 거라고 생각합니다.
Bloom filter: 3.2에서는 Bloom filter를 만나보실 수 있을 겁니다. HyperLogLog처럼 String 타입의 기능으로 구현할지, 아니면 완전히 새로운 타입으로 만들지는 아직 확신할 수 없지만, 새로운 타입으로 제공해야 좀 더 복잡한 처리를 구현하기 쉽기 때문에 후자일 가능성이 큽니다. Bloom filter에 대해 많은 설계 아이디어가 있지만, API에서 정확도와 공간 효율 사이의 트레이드오프를 조절할 수 있게 하고 싶다는 점은 분명합니다. 아마도 비트 수나 해시 함수 개수를 직접 지정하는 저수준 방식이 아니라 좀 더 고수준의 방식으로 말이죠. 이 API에 꼭 넣고 싶은 또 다른 기능은 Bloom filter가 스스로 오염을 해소하는 기능입니다(여러 개의 회전 필터를 사용하는 방식 등으로). 가능한 문헌을 모두 읽어보고 최종 방향을 정하겠지만, 어쨌든 이 기능은 3.2에 포함될 예정입니다.
Memory PR: RedisLabs에서 Redis 메모리 사용량을 개선하기 위한 중요한 PR 두 개가 올라와 있습니다. 두 개 모두 병합할 예정입니다.
Memory introspection 커맨드: LATENCY 커맨드처럼 메모리 정보를 제공하는 커맨드입니다. 다만 대상이 메모리 사용량이라는 점이 다르죠. 메모리가 어디에서 소비되고 있는지에 대한 힌트, 과거 피크 메모리 사용량 때문에 RSS만 높게 나타나고 있는 것은 아닌지, 클라이언트 출력 버퍼가 차지하는 메모리 양에 대한 힌트, 필요할 경우 메모리를 절약하기 위해 해시 테이블 크기를 조정하는 기능 등을 제공할 예정입니다.
Redis Cluster 멀티 DC 지원 일부. 아마도 Cluster 슬레이브에 대한 “static” 옵션 형태로 제공될 예정이며, 이 옵션이 설정된 슬레이브는 마스터 장애 시 승격 과정에 참여하지 않습니다. 이렇게 하면 CLUSTER FAILOVER TAKEOVER를 이용해 마이너리티 파티션에 있는 모든 슬레이브를 승격시키는 것이 가능해집니다.
새로운 List 타입 연산: LMERGE 같은 O(1) 리스트 연산 몇 가지와, 보통 N이 아주 작을 때 사용되므로 사실상 대부분 O(1) 연산처럼 동작하는 O(N) 연산들, 예를 들어 한 리스트에서 다른 리스트로 N개의 엘리먼트를 옮기는 연산 등이 추가됩니다.
AOF 안정성 기능: https://github.com/antirez/redis/pull/2574
AOF 재작성 시 선택적으로 RDB 프리앰블을 사용하도록 하여, AOF를 재작성하고 시작 시 내용을 다시 로드하는 속도를 높입니다.
SPOP COUNT 옵션(이미 구현되었으며, 3.2가 이 기능을 포함하는 첫 번째 안정 버전이 될 예정입니다)
Redis Cluster redis-trib rebalance 커맨드. 키를 자동으로 리해싱하여 노드 간 메모리 사용량을 보다 균일하게 만드는 기능입니다.
원래 3.2에 계획됐던 몇 가지 기능은 안전하다고 판단되어 3.0으로 앞당겨졌습니다. 최근 사례로는 NX, XX 같은 옵션을 지원하는 ZADD가 있습니다. 일반적으로 기존 타입과 관련된 몇 가지 커맨드가 3.2에 추가로 더해질 가능성도 있습니다. 기본적으로 이번 버전은 한동안 Redis의 운영 측면에 더 집중해 왔던 만큼, API 측면에서 더 많은 것을 원했던 분들을 만족시키기 위해 설계된 버전이라고 할 수 있습니다.
일정에 대해 말씀드리자면, 작업은 월요일에 시작되며 9월 말까지는 첫 번째 RC를 내놓을 수 있기를 바랍니다. RC가 나온 이후 RC에서 Stable로 전환되는 기간은 따로 정해져 있지 않으며, 치명적인 버그가 보고되는 속도에 따라 달라집니다. 몇 주 동안 더 이상 심각한 문제가 보고되지 않으면 Stable 버전으로 전환할 예정입니다.
위에 나열한 개별 항목들, 예를 들어 Geo hashing이나 Bloom filter의 최종 구현과 API 설명 등에 대해서는 앞으로 블로그 포스트로 더 자세히 다룰 예정입니다.
그동안 Redis 3.0을 즐겨 주세요!
글을 무작위로 읽기