Plans for Redis 3.2

Salvatore Sanfilippo

Redis 3.2 계획

원문은 Salvatore Sanfilippo님이 에 게재했습니다. 이 블로그 구독하기

파리에서 돌아왔습니다. DotScale 2015는 매우 흥미로운 컨퍼런스였습니다. 떠나기 전에는 unstable 브랜치에서 Sentinel 작업을 하고 있었습니다. 주로 커넥션 공유에 관한 작업이었죠. 간단히 말해 소수의 Sentinel이 많은 마스터를 모니터링하면서 확장할 수 있는 기능입니다. 떠나기 전부터, 그리고 돌아온 지금도 Redis 3.2의 기반이 될 기능들을 ‘확정’하려고 노력했습니다. 앞으로 몇 주간은 이 기능들 개발에 집중할 예정이라, 목록을 최대한 빨리 공유하는 것이 좋겠다고 생각했습니다.

Geo hashing API: 이 작업은 원래 Redis의 포크였던 Ardb에서 시작됐고(https://github.com/yinqiwen/ardb), 이후 이를 Redis로 포팅한 Matt Stancliff(https://matt.sh/redis-geo)가 추출해 개선한 것입니다. 오픈소스, 멋지지 않나요? 현재 코드가 sorted set 구현의 일부를 중복하고 있어 리팩터링이 필요합니다. API에 대해서도 몇 가지를 변경할 가능성은 있습니다. 아직은 확실하지 않지만, 고쳐야 할 부분이 있다면 고칠 겁니다. 요점은 이겁니다. 정말 훌륭한 기능인데, Matt이 더 이상 Redis에 기여하지 않으면서 이 작업을 잃을 위험이 커졌기 때문에, Redis 3.2의 첫 번째 작업으로 리팩터링과 리뷰, 머지를 직접 해내려고 합니다. Redis API에 정말 흥미로운 추가가 될 거라고 생각합니다.

Bloom filters: 3.2에서는 블룸 필터를 선보일 예정입니다. HyperLogLog처럼 String 타입의 기능으로 구현할지, 아니면 새로운 별도 타입으로 구현할지는 아직 확실하지 않지만, 후자일 가능성이 더 높습니다. 자명하지 않은 시맨틱을 제공하려면 새로운 타입으로 제공하는 편이 더 쉽기 때문입니다. 블룸 필터에 대해서는 여러 설계 아이디어가 있지만, API 차원에서 정확도와 공간 효율 사이의 트레이드오프를 제어할 수 있게 하고 싶다는 점은 확실합니다. 아마도 비트 수나 사용할 해시 함수 개수를 직접 지정하는 로우 레벨 방식이 아니라, 좀 더 하이 레벨한 방식이 될 겁니다. 이 API에 꼭 넣고 싶은 또 다른 기능은 블룸 필터가 스스로 자동 정화되는 능력입니다(여러 개의 로테이팅 필터를 사용하는 방식 등). 관련된 문헌을 모두 읽어보고 결정하겠지만, 어쨌든 이 기능은 3.2에 포함될 겁니다.

Memory PRs: Redis 메모리 사용량을 개선하기 위한 RedisLabs의 중요한 PR 두 건이 있습니다. 둘 다 머지할 예정입니다.

Memory introspection command: 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가 있습니다. 일반적으로는 기존 타입에 대한 몇 가지 커맨드가 Redis 3.2에 추가로 더해질 가능성도 있습니다. 기본적으로 이번 버전은 한동안 Redis의 운영 측면에 더 집중해 왔던 만큼, API 측면에서 더 많은 것을 원했던 분들을 만족시키기 위해 설계된 버전입니다.

일정에 대해 말씀드리자면, 작업은 월요일에 시작되며 9월 말까지는 마무리되길 바랍니다. 그때 첫 번째 RC를 푸시할 예정입니다. RC가 나온 이후 RC에서 Stable로 전환되는 기간은 정해져 있지 않으며, 크리티컬한 버그가 제보되는 시점에 따라 달라집니다. 몇 주 동안 더 이상 심각한 이슈가 보고되지 않으면 stable로 전환할 것입니다.

위에서 나열한 개별 항목들에 대해서는 Geo hashing이나 블룸 필터 최종 구현 및 API 설명 등 각각에 대한 새로운 블로그 포스트로 후속 소식을 전해드리겠습니다.

그동안은 Redis 3.0을 즐겨 주세요!

이 글은 muse-spark-1.2-contributor 모델을 사용해 번역했습니다.

댓글