揭秘丨7分钟看懂华为云鲲鹏Redis背后的自研技术【华为云技术分享】
2019年5月,华为云发布全球首个基于自研ARM架构的分布式缓存鲲鹏Redis,搭载华为LibOS+华为编译器+安全容器引擎三项黑科技,在保证Redis强劲高性能外,还降低客户30%的使用成本,真正实现了好用不贵的普惠型分布式缓存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架构性能优化关键的的因素。
1 Redis Proxy集群架构性能关键点
Proxy集群作为业界广为流行的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%+。
2 Redis Cluster集群架构性能关键点
Cluster集群作为Redis官方标准的集群,逐步成为客户的集群首选架构,并实际应用到线上业务中。其架构如下:
Cluster集群相比Proxy集群减少了网络跳数,性能更高、灵活性很强。该架构和Proxy集群一样,突破了Redis集群对于CPU单核性能的依赖性,而端到端的链路性能才是整个集群的最大性能瓶颈。
从上述架构剖析可以了解到,Redis单核性能的关键在于CPU的处理能力,但Redis真实在CPU中操作的时间在纳秒级别,不超过端到端时延的10%,因此Redis横向扩展核心靠链路性能优化。
二、华为云鲲鹏Redis:三项黑科技助力Redis性能
1.华为自研LibOS构建高性能云服务基础设施,助力Redis性能2倍提升
LibOS兼顾资源利用率和隔离性,同时满足公有云资源利用率和多租户隔离的诉求,成为公有云runtime的重要发展方向。创新的LibOS技术将Redis的软件栈由10层压缩到4层,实现了超低延时。
1) SOCKET标准接口,实现从内核态网络栈平滑切换到用户态。
2) 轻量级协议栈,支持每个Redis实例有独立的协议栈,避免协议栈共享导致的锁竞争问题。
3) 业务线程和用户态协议栈共线程,零调度开销。
4) 发挥网卡极限性能,避免了中断和调度导致时延增加。
2.华为编译器通过智能动态编译优化,提升热点代码性能15+%
华为自研编译器针对公有云业务应用场景特征,通过智能动态编译优化,提升热点代码性能15+%:
1) 由部署在云服务环境内的轻量级性能特征采集Agent,保存程序动态运行时的关键性能特征信息;
2) 通过智能编译调优工具,以动态性能特征作为输入,结合静态代码分析,产生更优的编译策略;
3) 自研ARM64编译器使用新的编译策略重新编译生成优化后的应用程序,热点代码性能提升明显。
3.华为iSula自研安全容器引擎技术,以更少的系统资源占用,实现秒级实例分发与迁移
iSulad是华为自主研发的高性能、低开销的容器引擎,通过镜像下载加速技术和最小化启动调用链条,实现容器的秒级启动和迁移。配合LibOS,可实现可媲美虚拟机级别的安全隔离性,确保租户只能使用它们可用的资源。
三、强悍性能支撑客户业务成功
在某电商大客户中,客户业务数据量大、读写请求量大、峰值明显且扩容频繁、需求变化快等特点,对Redis依赖很重、性能要求很高,现网同时维护200+个Redis实例,疲于应付 容量扩容、性能下降、链接无响应、持久化失败等各种现网问题,给研发团队带来巨大挑战。
为了应对业务增长带来的大数据并发,解决系统瓶颈问题,客户决定考察华为云鲲鹏Redis。在多次的技术场景交流、PoC验证后,客户果断决策将自建的Redis实例全部迁移到鲲鹏Redis上,主要收益:
1) 性能收益。华为云基于全栈整合之后单实例性能达到10万QPS以上,Cluster集群支持性能的线性扩展至千万级别,足够应付2019年的业务增长目标。
2) 价格收益。鲲鹏Redis降低客户30%使用成本后,在做到同等规格实例比自建Redis更省钱的同时,资源使用率提升了20%。用花更少的钱,享受更大的容量。
3) 技术收益。鲲鹏Redis提供专业的技术支持,具备从硬件链路到软件优化的能力,可以提供更优的系统级优化方案。
迁移是有开销的,包括割接的稳定性测试与保障等,都需要人力投入。但客户CTO表示,华为云提供了很好的迁移保障,大大提升迁移的效率减少了对现网业务的影响。相比长期合作所带来的收益,这个开销基本忽略不计。
华为云鲲鹏Redis,业界首个基于自研ARM-Based全栈整合的Redis云服务,支持双机热备的HA架构,提供单机、主备、Proxy集群、Cluster集群实例类型,满足高读写性能场景及弹性变配的业务需求。
揭秘丨7分钟看懂华为云鲲鹏Redis背后的自研技术【华为云技术分享】的更多相关文章
- [转帖]10分钟看懂Docker和K8S
10分钟看懂Docker和K8S https://zhuanlan.zhihu.com/p/53260098 2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司. 这 ...
- 十分钟看懂AES加密
十分钟看懂AES加密算法 今天看了Moserware的<A Stick Figure Guide to the Advanced Encryption Standard(AES)>收获了不 ...
- 5分钟看懂Code128条形码
什么是Code128条形码? 相信大家看到这个都不陌生吧 1.前言 条形码种类很多,常见的大概有二十多种码制,其中包括:Code39码(标准39码).Codabar码(库德巴码).Code25码(标准 ...
- 10分钟看懂Docker和K8S
本文来源:鲜枣课堂 2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫"dotCloud"的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的 ...
- 十分钟看懂,未来Web前端开发最新趋势
首先,展望未来趋势我们就要弄懂过去的一年,也就是18年,web前端开发的重要新闻.重要事件和JavaScript的各种流行框架.模式发展趋势. 我们来快速回顾一下. NPM热门前端框架下载 先来看最热 ...
- 干货满满!10分钟看懂Docker和K8S(转)
2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的容器技术. LXC,就是Linux容器虚 ...
- 0160 十分钟看懂时序数据库(I)-存储
摘要:2017年时序数据库忽然火了起来.开年2月Facebook开源了beringei时序数据库:到了4月基于PostgreSQL打造的时序数据库TimeScaleDB也开源了,而早在2016年7月, ...
- 干货满满!10分钟看懂Docker和K8S
2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫“dotCloud”的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的容器技术. LXC,就是Linux容器虚 ...
- 10 分钟看懂 Docker 和 K8S!
2010年,几个搞IT的年轻人,在美国旧金山成立了一家名叫"dotCloud"的公司. 这家公司主要提供基于PaaS的云计算技术服务.具体来说,是和LXC有关的容器技术. LXC, ...
随机推荐
- 个人项目-WC (java实现)
一.Github地址:https://github.com/734635746/WC 二.PSP表格 PSP2.1 Personal Software Process Stages 预估耗时(分钟) ...
- 小程序插件集成functional-page-navigator真机调试报错
小程序集成插件 插件里面有functional-page-navigator标签 一."小程序开发版已过期,请重新扫码连接" 真机在调用插件的时候报错 "小程序开发版已过 ...
- 解决debugJDK源码看不到局部变量的值
背景:使用的jdk1.8.0_201 问题描述:在eclispe中调试代码进入到JDK源码中,想看到某个变量的值得变化,发现此变量的值没法看到 解决方案: 1.进入到你安装本机的jdk目录下,找到sr ...
- MySQL基本库表管理
基本管理指令 mysql登陆 第一种 [root@wei ~]# mysql -u root -p 第二种(带参输入) [root@wei ~]# mysql -uroot -proot 注意:每个命 ...
- 通过vjudge刷Uva的题目(解决Uva网站打开慢的问题)
最近在跟着算法竞赛入门经典刷题,发现Uva网站打开超级慢,进个主页面都需要好几秒.后来发现可以通过vjudge网站刷Uva的题目,很是方便,在这mark一下,顺便做一下推荐. vjudge网址:htt ...
- WTL 9.0的变化 - atlapp.h
忽然发现WTL更新到9.0.4140了,便对比了一下 8.1.12085. 先看看atlapp.h中有什么大的变动. 第61行: #if defined(_SYSINFOAPI_H_) &&a ...
- 【大数据】0002---MongoDB集群自动分离创建新集群
场景:MongoDB集群运行后,自动产生新的集群 解答:可能没有理解问题,理清思路如下 1.日志分析 2.配置文件检查(日期.版本) 3.网络IP变化 4.github 5.stack overflo ...
- 2.8/4/6/8mm/12mm焦距的镜头分别能监控多大范围?
2.8/4/6/8mm/12mm焦距的镜头分别能监控多大范围? 相关介绍 一.焦距和监控距离的关系 我司IPC镜头焦距有2.8/4mm/6mm/8mm等多种选择,可以满足室内外各种环境的拍摄需求.IP ...
- 使用docker部署nginx+tomcat架构(2):访问mysql数据库
上一篇完成了通过docker部署nginx+tomcat的基础软件架构,但是距离一个真正可用的软件架构还差得很远.其中最重要的一点是缺少数据库这个角色的存在,那么本篇就来完善这一点. 废话少说,直接进 ...
- Log4j Threshold指定输出等级&&Append指定是否追加内容
Threshold指定输出等级 有时候我们需要把一些报错ERROR日志单独存到指定文件 ,这时候,Threshold属性就派上用场了: Threshold属性可以指定日志level Log4j根据日志 ...