Redis 6.0.0 GA 출시!
원문은 Salvatore Sanfilippo님이 에 게재했습니다. 이 블로그 구독하기
드디어 Redis 6.0.0 안정 버전이 출시되었습니다. 이번에는 첫 번째 릴리스 후보 버전부터 최종 안정 버전 출시까지의 사이클이 비교적 짧았습니다. 약 4개월 정도 걸렸는데, 짧은 시간은 아니지만 과거 기록에 비하면 그리 긴 편은 아닙니다 :)
주요 소식은 이전에 발표된 내용과 같지만, 몇 가지 주목할 만한 변화가 있습니다. 기존에 소개된 기능은 다음과 같습니다. SSL, ACLs, RESP3, 클라이언트 사이드 캐싱, Threaded I/O, 레플리카에서의 Diskless replication, Redis-benchmark의 클러스터 지원 및 개선된 redis-cli 클러스터 지원, Redis 모듈로서의 Disque 베타, 그리고 Redis Cluster Proxy(현재 https://github.com/RedisLabs/redis-cluster-proxy에서 확인 가능)입니다.
그렇다면 RC1부터 오늘까지, 안정성 외에 무엇이 달라졌을까요?
1. 클라이언트 사이드 캐싱이 일부 측면에서 재설계되었으며, 특히 캐싱 슬롯 방식은 폐기되고 키 이름을 직접 사용하는 방식으로 바뀌었습니다. 다른 Redis 코어 팀원들의 도움으로 대안들을 분석한 끝에, 결국 이 방식이 더 나아 보였습니다. 그 외에도 백로그에 있던 기능들이 마침내 완성되었는데, 특히 “broadcasting 모드”는 이 기능의 가장 인기 있는 사용 방식 중 하나가 될 것이라고 생각합니다.
broadcasting 모드를 사용하면 서버가 더 이상 각 클라이언트가 요청한 키를 기억하려고 하지 않습니다. 대신 클라이언트는 키 prefix를 구독하고, 해당 prefix와 일치하는 키가 수정될 때마다 알림을 받게 됩니다. 이는 더 많은 메시지(다만 선택한 prefix에 한해서)를 의미하지만, 서버 측에서는 메모리를 소모하지 않습니다. 또한 이제 opt-in / opt-out 모드가 지원되어, broadcasting 모드를 사용하지 않는 클라이언트도 자신이 캐시할 대상을 서버에 정확히 알려 무효화 메시지의 수를 줄일 수 있습니다. 기본적으로 이 기능은 저메모리 모드가 필요할 때나, 매우 선별적인(저대역폭) 모드가 필요할 때 모두 훨씬 더 좋아졌습니다.
2. 이는 많은 사용자들이 오래전부터 요청해 온 기능입니다. 이제 Redis는 복제에 사용되는 RDB 파일이 더 이상 필요하지 않으면 즉시 삭제하는 모드를 지원합니다. 특정 환경에서는 데이터를 디스크에 남겨두지 않고 메모리에만 유지하는 것이 좋습니다.
3. ACL이 몇 가지 측면에서 개선되었습니다. 첫째, 새롭게 추가된 ACL LOG 명령어를 통해 ACL을 위반한 모든 클라이언트를 확인할 수 있습니다. 허용되지 않은 명령어에 접근하거나, 접근해서는 안 되는 키에 접근하거나, 인증에 실패한 경우 등이 모두 해당됩니다. 이 로그는 실제로 메모리에 저장되므로, 외부 에이전트가 언제든지 “ACL LOG”를 호출해 무슨 일이 일어나고 있는지 확인할 수 있습니다. 이는 ACL 문제를 디버깅하는 데 매우 유용합니다.
하지만 제가 가장 선호하는 기능은 ACL GENPASS의 재구현입니다. 이제 SHA256 기반 HMAC을 사용하며, 생성하고 싶은 추측 불가능한 의사 난수 문자열의 비트 수를 서버에 알려주는 선택적 인자를 받습니다. Redis는 시작 시 /dev/urandom으로부터 내부 키를 시딩하고, 이후 HMAC을 카운터 모드로 사용해 나머지 난수를 생성합니다. 덕분에 API를 마음껏 남용해도 됩니다. 언제든 호출해도 매우 빠르기 때문입니다. 애플리케이션에서 추측 불가능한 세션 ID를 생성하고 싶으신가요? 그냥 ACL GENPASS를 호출하면 됩니다. 그 외에도 다양하게 활용할 수 있습니다.
4. 복제 프로토콜인 PSYNC2가 개선되었습니다. 이제 프로토콜 마지막 부분의 PING을 제거할 수 있게 되어, 레플리카와 마스터가 공통 오프셋을 찾을 가능성이 높아졌고, 부분 재동기화를 더 자주 수행할 수 있습니다.
5. 타임아웃이 있는 Redis 명령어가 훨씬 개선되었습니다. 기존에 초 단위만 받던 BLPOP 등의 명령어가 이제 소수점 단위도 받을 수 있게 되었을 뿐만 아니라, 실제 해상도도 개선되어 접속한 클라이언트 수에 관계없이 현재 “HZ” 값보다 나빠지지 않도록 했습니다.
6. 이제 RDB 파일 로딩 속도가 더 빨라졌습니다. 파일의 실제 구성(값의 크기)에 따라 20/30% 정도의 성능 향상을 기대할 수 있습니다. 또한 클라이언트가 많이 연결되어 있을 때 INFO 명령어도 더 빨라졌는데, 이는 오랫동안 존재하던 문제가 마침내 해결된 것입니다.
7. 복잡한 문자열 알고리즘을 구현하는 새로운 명령어 STRALGO가 추가되었습니다. 현재 구현된 알고리즘은 LCS(최장 공통 부분 수열) 하나뿐이지만, 이는 코로나바이러스의 RNA를 비교하는 등(그리고 일반적으로 다른 생명체의 DNA와 RNA를 비교하는 데) 사용되는 중요한 알고리즘입니다. 지금 일어나고 있는 일은 너무나 큰 사건이라, Redis 안에 어떻게든 그 흔적을 남겨둘 필요가 있었습니다.
Redis 6은 지금까지 나온 Redis 릴리스 중 가장 큰 규모이므로, 안정 버전이라 하더라도 신중하게 다루고 프로덕션에 적용하기 전에 반드시 워크로드에 대해 테스트해 보시기 바랍니다. 지금까지 큰 문제는 발견되지 않았지만, 주의하는 것이 좋습니다. 버그 리포트가 모이는 대로 최대한 빨리 Redis 6.0.1을 준비해 릴리스할 예정입니다.
이번 릴리스에서 함께 코드를 작성해 준 많은 분들과, 제 작업(고맙습니다, Redis Labs)과 다른 기여자들의 작업을 후원해 준 모든 회사(고맙습니다, 다른 회사 분들)께 큰 감사를 드립니다. 또한 세심하게 버그를 제보해 주고, 때로는 변경 후 재현하는 지루한 과정을 거치거나, 온갖 개선 사항을 제안해 준 많은 분들께도 깊이 감사드립니다.
언제나처럼 Redis 6은 여러 곳에서 찾을 수 있습니다. https://redis.io에서 tarball 형태로, 그리고 GitHub 리포지토리에서 “6.0.0” 태그로 확인할 수 있습니다.
Redis 6을 즐겨보세요,
antirez
글을 무작위로 읽기
댓글
로그인하고 댓글 남기기