大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!
什么是 DragonflyDragonfly 是专为现代应用程序工作负载构建的内存数据存储。
同时,Dragonfly 与 Redis 和 Memcached API 完全兼容,无需更改代码即可采用。 与传统的内存数据存储相比,Dragonfly 的吞吐量提高了 25 倍,缓存命中率更高,尾部延迟更低,并且对于相同大小的工作负载,运行资源最多可减少 80%。
Dragonfly 目前支持约 185 个 Redis 命令以及除 cas 之外的所有 Memcached 命令。 与 Redis 5 API 几乎相同,Dragonfly 的下一个里程碑将是稳定基本功能并实现复制 API。
对于 Dragonfly 原生复制,也正在设计一种分布式日志格式,支持更高数量级的速度。在复制功能之后,将继续为 Redis 版本 3-6 API 添加缺失的命令。
目前 Dragonfly 在 Github 通过 MIT 协议开源,有超过 22.1k 的 star、是一个优质的开源项目。
Dragonfly vs. Memcached在 AWS 上的 c6gn.16xlarge 实例上将 Dragonfly 与 Memcached 进行了比较。
在延迟相当的情况下,Dragonfly 吞吐量在写入和读取工作负载方面均优于 Memcached 吞吐量。 由于 Memcached 中写入路径上的争用,Dragonfly 在写入工作负载中表现出更好的延迟。
为了测试内存效率,使用 debug populate 5000000 key 1024 命令向 Dragonfly 和 Redis 填充了约 5GB 的数据,使用 memtier 发送更新流量,并使用 bgsave 命令启动快照。
下图展示了每台服务器在内存效率方面的表现:
Dragonfly 在空闲状态下的内存效率比 Redis 高 30%,并且在快照阶段没有出现任何明显的内存使用增加。 在高峰期,Redis 内存使用量增加到 Dragonfly 的近 3 倍。总之,Dragonfly 更快地完成了快照,几秒钟之内。
Dragonfly 设计决策新颖的缓存设计Dragonfly 具有单一、统一、自适应的缓存算法,该算法简单且内存高效。
开发者可以通过传递 --cache_mode=true 标志来启用缓存模式。 一旦启用此模式,Dragonfly 将逐出将来最不可能偶然发现的项目,但仅限于接近最大内存限制时。
相对准确的到期期限有效期范围限制为约 4 年。
对于毫秒精度的到期期限(PEXPIRE、PSETEX 等),对于大于 134217727 毫秒(大约 37 小时)的期限,四舍五入到最接近的秒,其误差小于 0.001%,对于大范围来说应该是可以接受的。 如果这还不适合用例,可以联系官方或提出一个问题来解释您的案例。
本机 HTTP 控制台和 Prometheus 兼容指标默认情况下,Dragonfly 允许通过其主 TCP 端口 (6379) 进行 HTTP 访问。 即可以通过 Redis 协议和 HTTP 协议连接到 Dragonfly ,服务器在连接启动期间会自动识别该协议。
访问 URL :6379/metrics 查看 Prometheus 兼容的指标,同时查看 Prometheus 导出的指标与 Grafana 仪表板兼容。
值得注意的是,HTTP 控制台应在安全网络内访问。 如果将 Dragonfly 的 TCP 端口暴露在外部,建议您使用 --http_admin_console=false 或 --nohttp_admin_console 禁用控制台。
安装 DragonflyDragonfly 在 Docker 中安装Dragonfly 经过专门优化,可在 Cloud 中运行。 但是,开发者依然可以通过 Docker 在本地轻松运行。
docker run --network=host --ulimit memlock=-1 docker.dragonflydb.io/dragonflydb/dragonfly// linux 安装docker run -p 6379:6379 --ulimit memlock=-1 docker.dragonflydb.io/dragonflydb/dragonfly// macOS 安装开发者还可以使用 docker-compose 运行 Dragonfly。 如果计算机上没有安装 docker 和 docker-compose,请先安装 Docker 和 Docker Compose。
// Download Official Dragonfly Docker Compose Filewget https://raw.githubusercontent.com/dragonflydb/dragonfly/main/contrib/docker/docker-compose.yml// # Launch the Dragonfly Instancedocker compose up -d// # Confirm image is updocker ps | grep dragonfly// ac94b5ba30a0 docker.dragonflydb.io/dragonflydb/dragonfly "entrypoint.sh drago…" 45 seconds ago Up 31 seconds 0.0.0.0:6379->6379/tcp, :::6379->6379/tcp docker_dragonfly_1// # Log follow the dragonfly containerdocker logs -f docker_dragonfly_1// Dragonfly 将立即响应 http 和 redis 请求!安装后,Dragonfly 将立即响应 HTTP 和 RESP(Redis 序列化协议)请求! 用户可以使用任何与 Redis 兼容的客户端来测试与 Dragonfly 的连接。以下示例使用 “redis-cli”:
// Connect to Dragonfly using `redis-cli`:$> redis-cli -p 6379// Start to interact with Dragonfly:127.0.0.1:6379> SET hello worldOK127.0.0.1:6379> KEYS *1) “hello”127.0.0.1:6379> GET helloworld使用 Helm Chart 在 Kubernetes 上安装先决条件:
Kubernetes 集群(如果您想在本地进行实验,请参阅 Kind 或 Minikube)。选择 Dragonfly 版本: 对于最新版本,设置:VERSION=v1.13.0helm upgrade --install dragonfly oci://ghcr.io/dragonflydb/dragonfly/helm/dragonfly --version $VERSION接着将以下内容添加到 myvals.yaml 值文件中(如果不存在,则创建一个新文件):
storage: enabled: true requests: 128Mi # Set as desiredextraArgs: - --dbfilename=dump.rdb - --snapshot_cron=* * * * * # cron formatpodSecurityContext: fsGroup: 2000securityContext: capabilities: drop: - ALL readOnlyRootFilesystem: true runAsNonRoot: true runAsUser: 1000接着运行下面命令:
helm update -f myvals.yaml --install Dragonfly oci://ghcr.io/dragonflydb/dragonfly/helm/dragonfly --version $VERSION如果集群中安装了 Kube-Prometheus,则可以通过在值文件中启用 serviceMonitor 和 prometheusRule 将其设置为监视 Dragonfly 部署。例如:
serviceMonitor: enabled: trueprometheusRule: enabled: true spec: - alert: DragonflyMissing expr: absent(dragonfly_uptime_in_seconds) == 1 for: 0m labels: severity: critical annotations: summary: Dragonfly is missing description: "Dragonfly is missing"本文总结本文主要和大家介绍 Dragonfly,其是专为现代应用程序工作负载构建的内存数据存储。同时,Dragonfly 与 Redis 和 Memcached API 完全兼容,无需更改代码即可采用。 因为篇幅问题,关于 Dragonfly 只是做了一个简短的介绍,但是文末的参考资料以及个人主页提供了大量优秀文档以供学习,如果有兴趣可以自行阅读。如果大家有什么疑问欢迎在评论区留言。
参考资料https://github.com/dragonflydb/dragonfly
https://github.com/dragonflydb/dragonfly/blob/main/docs/differences.md
https://github.com/dragonflydb/dragonfly/blob/main/docs/dashtable.md
https://www.dragonflydb.io/docs/getting-started/docker-compose
https://medium.com/@kn2414e/do-you-know-dragonfly-which-is-faster-than-redis-1bbee95b867e
https://github.com/dragonflydb/dragonfly/blob/main/docs/dashtable.md