2019 年 5 月,华为云发布全球首个基于自研 ARM 架构的分布式缓存鲲鹏 Redis,搭载华为 LibOS+华为编译器+安全容器引擎三项黑科技,在保证 Redis 强劲高性能外,还降低客户 30%的使用成本,真正实现了好用不贵的普惠型分布式缓存 Redis 产品。 (延伸阅读:华为云发布:全球首个自研 ARM 架构分布式缓存 Redis)
本文从技术视角解读华为云鲲鹏 Redis 是如何通过数据中心基础设施、芯片、硬件、软件等全栈创新优化,达成以上效果。
为什么 ARM 架构适合 Redis?
众所周知,Redis 是一款风靡全球的高性能、高灵活性、数据结构类型丰富的 key-value 内存数据库,拥有毫秒级的响应时延。因此 Redis 对服务器内存、网络带宽时延要求极高,即:Redis 的高性能能否发挥出来取决于服务器内存、网络性能。
2019 年 3 月, Redis 之父 Salvatore Sanfilippo(网名:antirez)就 Redis ARM 架构发展趋势发表观点,他表示把 ARM 作为 Redis 运行架构,并且通过了所有测试与验证、性能稳定性非常好,Antirez 列举了很多测试数据,得到了广大网友的支持。
由于 Redis 在设计上就采用单线程架构,所有 IO 和数据处理都是在同一个线程中完成的,所以单节点的 Redis 最多只能使用一颗 CPU 核心,单节点 Redis 的性能基本达到 10 万 QPS 的量级后就没法再向上扩展了。
在现实的业务系统中,对 Redis 性能往往都要求达到 100 万 QPS 以上,甚至 1000 万以上,这种场景下需要通过 Redis 集群的方式来扩展 Redis 性能,而集群性能的瓶颈成为了 Redis 架构性能优化关键的的因素。
01 Redis Proxy 集群架构性能关键点
Proxy 集群作为业界广为流行的 Redis 集群,其架构如下:
Redis 集群架构
在这个架构中,Redis 集群由负载均衡器、Redis Proxy 和 Redis Server 这三类节点组成。在此 Redis 集群架构中,Proxy 节点和 Redis Server 都可以水平扩展,通过增加节点数量就可不断提升 Redis 集群的整体性能。根据不同的业务诉求,集群性能可弹性扩展到 100 万至 1000 万 QPS。
也正是由于可通过增加节点数来提升集群整体性能,所以 Redis 单节点虽只用一颗 CPU 核心,CPU 最高主频限制 Redis 单节点性能,但在集群水平扩展模式下 cpu 主频限制已经不太重要了。
在整个集群架构中,业务系统发出的 Redis 请求需要经过负载均衡器和 Redis Proxy 的两次转发后,才能到达 Redis Server 被真正处理,端到端的链路性能才是整个集群的最大性能瓶颈。实测结果也表明,Redis 集群的端到端链路时延每减少 1 毫秒,集群整体性能可提升 10%+。
02 Redis Cluster 集群架构性能关键点
Cluster 集群作为 Redis 官方标准的集群,逐步成为客户的集群首选架构,并实际应用到线上业务中。其架构如下:
Redis Cluster 集群架构
Cluster 集群相比 Proxy 集群减少了网络跳数,性能更高、灵活性很强。该架构和 Proxy 集群一样,突破了 Redis 集群对于 CPU 单核性能的依赖性,而端到端的链路性能才是整个集群的最大性能瓶颈。
从上述架构剖析可以了解到,Redis 单核性能的关键在于 CPU 的处理能力,但 Redis 真实在 CPU 中操作的时间在纳秒级别,不超过端到端时延的 10%,因此 Redis 横向扩展核心靠链路性能优化。
华为云鲲鹏 Redis:三项黑科技助力 Redis 性能
LibOS 构建高性能云服务基础设施,助力 Redis 性能 2 倍提升
LibOS 兼顾资源利用率和隔离性,同时满足公有云资源利用率和多租户隔离的诉求,成为公有云 runtime 的重要发展方向。创新的 LibOS 技术将 Redis 的软件栈由 10 层压缩到 4 层,实现了超低延时。
1)SOCKET 标准接口,实现从内核态网络栈平滑切换到用户态。
2) 轻量级协议栈,支持每个 Redis 实例有独立的协议栈,避免协议栈共享导致的锁竞争问题。
3) 业务线程和用户态协议栈共线程,零调度开销。
4) 发挥网卡极限性能,避免了中断和调度导致时延增加。
华为编译器通过智能动态编译优化,提升热点代码性能 15+%
华为自研编译器针对公有云业务应用场景特征,通过智能动态编译优化,提升热点代码性能 15+%:
由部署在云服务环境内的轻量级性能特征采集 Agent,保存程序动态运行时的关键性能特征信息;
通过智能编译调优工具,以动态性能特征作为输入,结合静态代码分析,产生更优的编译策略;
自研 ARM64 编译器使用新的编译策略重新编译生成优化后的应用程序,热点代码性能提升明显。
华为 iSula 自研安全容器引擎技术,以更少的系统资源占用,实现秒级实例分发与迁移
iSulad 是华为自主研发的高性能、低开销的容器引擎,通过镜像下载加速技术和最小化启动调用链条,实现容器的秒级启动和迁移。配合 LibOS,可实现可媲美虚拟机级别的安全隔离性,确保租户只能使用它们可用的资源。
强悍性能支撑客户业务成功
在某电商大客户中,客户业务数据量大、读写请求量大、峰值明显且扩容频繁、需求变化快等特点,对 Redis 依赖很重、性能要求很高,现网同时维护 200+个 Redis 实例,疲于应付容量扩容、性能下降、链接无响应、持久化失败等各种现网问题,给研发团队带来巨大挑战。
为了应对业务增长带来的大数据并发,解决系统瓶颈问题,客户决定考察华为云鲲鹏 Redis。在多次的技术场景交流、PoC 验证后,客户果断决策将自建的 Redis 实例全部迁移到鲲鹏 Redis 上,主要效益如下:
1) 性能效益。 华为云基于全栈整合之后单实例性能达到 10 万 QPS 以上,Cluster 集群支持性能的线性扩展至千万级别,足够应付 2019 年的业务增长目标。
2) 价格效益。 鲲鹏 Redis 降低客户 30%使用成本后,在做到同等规格实例比自建 Redis 更省钱的同时,资源使用率提升了 20%。用花更少的钱,享受更大的容量。
3) 技术效益。 鲲鹏 Redis 提供专业的技术支持,具备从硬件链路到软件优化的能力,可以提供更优的系统级优化方案。
迁移是有开销的,包括割接的稳定性测试与保障等,都需要人力投入。但客户表示:
华为云提供了很好的迁移保障,大大提升迁移的效率减少了对现网业务的影响。相比长期合作所带来的收益,这个开销基本忽略不计。
本文转载自公众号中间件小哥(ID:huawei_kevin)。
原文链接:
https://mp.weixin.qq.com/s/qVKLXY25nDHqH3LM0GoA5A
评论