An update on Redis Streams development

Salvatore Sanfilippo

Redis Streams 개발 현황 업데이트

Streams가 어떻게 진행되고 있는지, 언제쯤 프로덕션에서 사용할 수 있게 되는지, 그리고 전반적인 일정과 계획이 어떻게 되는지에 대해 문의하시는 분들이 많았습니다. 이 글에서는 앞으로의 진행 상황을 조금 더 명확하게 정리해 드리려 합니다.

우선 지금은 Streams가 저의 최우선 과제입니다. Redis 커뮤니티에 매우 유용하다고 믿는 이 작업을 마무리하고 바로 Redis Cluster 개선 작업을 시작하고 싶습니다. 사실 Cluster 관련 작업은 이미 시작되었습니다. 동료 Fabio Nicotra가 Cluster 관리 도구인 redis-trib을 기존의 redis-cli 안으로 옮기는 작업을 진행 중입니다. 이 과정에는 코드를 Ruby에서 C로 포팅하는 작업이 포함됩니다. 한편 저는 몇 주 전에 Streams 코어 작성을 마쳤고, “streams” 피처 브랜치를 삭제한 뒤 모든 내용을 “unstable” 브랜치로 병합했습니다.

이후 컨슈머 그룹(consumer groups) 명세를 여러 차례 다시 검토했습니다. 몇 주 전 마침내 결과에 만족하게 되었고, 해당 명세의 구현을 시작했습니다: https://gist.github.com/antirez/68e67f3251d10f026861be2d0fe0d2f4. 명령어 이름이 꽤 많이 바뀌었다는 점은 참고해 주시기 바랍니다. API는 대략 다음과 같은 형태가 되었습니다: https://gist.github.com/antirez/4e7049ce4fce4aa61bf0cfbc3672e64d.

현재 구현은 절반 정도 진행되었습니다. 첫 500줄 정도의 코드를 작성한 뒤 오늘 XREADGROUP 명령을 사용하는 클라이언트가 이전 메시지를 가져올 때 자신의 로컬 히스토리만 볼 수 있는 것을 확인했습니다. 구현 과정에서 중요한 이정표였습니다. 또한 XACK도 이제 사용할 수 있습니다. 기본적으로 streams 컨슈머 그룹을 지원하는 모든 자료구조는 동작하고 있지만, 모든 명령어 구현을 마무리하고 XREADGROUP의 블로킹 연산 등을 지원하며 리플리케이션과 RDB 및 AOF 퍼시스턴스를 처리해야 합니다. 앞으로 한 달 정도면 모든 준비를 마칠 수 있을 것 같습니다.

컨슈머 그룹 때문에 Streams의 RDB 포맷은 현재 “unstable”이 사용 중인 것과 비교해 크게 바뀔 예정입니다. 호환성을 어차피 깨야 하는 김에 RDB 파일이 키의 마지막 접근 정보를 함께 저장할 수 있는 기능도 추가할 예정입니다. 이렇게 하면 RDB를 수반하는 Redis 재시작이나 슬레이브 로딩 시에도 키 제거(eviction)를 올바른 방식으로 계속 수행하는 데 필요한 모든 정보를 유지할 수 있습니다. 현재는 그 정보가 모두 유실됩니다. 이러한 RDB의 대대적인 변경 때문에 계획도 조금 바뀌었습니다. Streams는 Redis 4.0이 아니라 5.0에서 선보일 예정이지만, 5.0은 약 두 달 뒤 GA로 출시될 것입니다. 5.0이 RDB 변경을 제외하면 사실상 4.0에 streams만 추가된 버전이 될 것이기 때문에 가능한 일정입니다.

요약하자면, 중요한 PR이나 이슈를 확인하는 시간을 제외하면 거의 전적으로 Streams 작업에 매진하고 있으며, 두 달 뒤 Redis 5.0으로 업그레이드하시면 컨슈머 그룹이 완전히 구현된 프로덕션 사용 가능한 streams를 이용하실 수 있습니다. 문서화 작업도 상당히 남아 있습니다. 약 한 달 뒤 RC1 단계에 들어가면 명령어 매뉴얼과 streams에 대한 상세한 소개 글을 모두 작성할 예정이며, 이를 통해 릴리스 후보 단계에서 테스트하시는 분들께 필요한 문서를 제공해 드릴 것입니다.

이 글이 Streams 진행 상황에 대한 궁금증을 해소하는 데 도움이 되었기를 바랍니다. 곧 Redis 5.0으로 다시 인사드리겠습니다 :-)

원문은 Salvatore Sanfilippo님이 에 게재했습니다.

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