作者:luzizhuo

原文来源: https://tidb.net/blog/7496ee47

本文来自涂鸦智能的刘筠松在 PingCAP DevCon 2021 上的分享,包括 TiDB 在 IoT 领域,特别是在智能家居行业的使用。

  • 视频回顾: https://www.bilibili.com/video/BV1oy4y157N8
  • 讲义下载: 涂鸦-刘筠松-涂鸦智能选型 TiKV 的心路历程.pdf (1.4 MB)

关于涂鸦智能

涂鸦智能是一个全球化 IoT 开发平台, 打造互联互通的开发标准,连接品牌、OEM 厂商、开发者、零售商和各行业的智能化需求。基于全球公有云,实现智慧场景和智能设备的互联互通。涵盖 硬件开发工具、全球公有云、智慧商业平台 开发三方面; 提供从技术到营销渠道的全面赋能,打造中立且开放的开发者生态。

目前涂鸦在国内外已经有超过十万家的合作伙伴,在 IoT PaaS 和 IoT 的开发者平台的生态客户数量已经达到 32 万 +,其涉及到制造业、零售业、运营商、地产、养老、酒店(PaaS)等。涂鸦赋能的有欧美品牌和中国品牌,包括飞利浦,国内的海尔以及三大运营商。

海量数据的实时响应:TiKV 选型历程

涂鸦的设备在全球每天处理 840 亿请求,平均处理高峰次数能达到 150 万 TPS,平均响应时间要求小于 10 毫秒。因为涂鸦是物联网行业,区别于传统行业,没有低峰点,写入量非常大,涂鸦用六年的时间不断选型尝试,探索最合适的数据架构。

涂鸦之所以有这么大量的数据,是因为目前人们家里应该都会使用到智能设备,例如智能电灯、扫地机器人,设备联网后就与涂鸦平台有了通讯的能力,而智能设备的各种定时触发,比如家里的摄像头巡更、扫地机器人的位置信息都需要上报给涂鸦的 Zeus 平台。Zeus 系统作为涂鸦平台最重要的角色,负责处理 数据上报,业务拓扑 如下图所示,应用网关收集到智能设备上报的 MQTT 消息之后会发送到 Kafka 和 NSQ 上面,Zeus 系统会消费这些消息进行解密,处理过后要放到存储里面。本文主要描述的也正是从 Zeus 到存储之间的这段产品选型。

AWS Aurora

涂鸦在早期使用的是 AWS Aurora。Aurora 跟阿里云的 PolarDB 类似,是 存算分离 的架构,涂鸦在 Aurora 上稳定运行了三年,在前三年使用中 Aurora 完全满足需求。物联网在六七年前还比较冷门,智能家居设备没有这么普及,用户用的不多,但后来随着业务的扩展,近几年设备呈指数级的成长,每年都要翻三到五倍,Aurora 就无法承受暴增的数据量,特别是物联网响应时间要求是 10 毫秒以内,即使进行分库分表,拆散集群也达不到涂鸦的业务需求。

Apache Ignite

于是涂鸦开始尝试使用 Apache Ignite,也是一个分布式的 KV 系统 ,类似于 PingCAP 的 TiKV,它是基于JAVA 架构进行数据分片的,其分片比较大,1G 的数据一个 Partition,并且其扩容没有 TiKV 这么线性。如果涂鸦的业务量翻倍,在机器要扩容的时候就不得不停机,还会有数据丢失的风险。这个时期我们在一个 Ignite 后面下挂了 Aurora 作为灾备,数据会同步写到 Aurora 里面。然而随着业务量的暴增,一个 Ignite 也不能满足涂鸦的业务需求,就需要进行扩容,而 Ignite 架构下扩容的时候要求停机,这是物联网所无法容忍的。

TiDB 3.0 和 4.0

在 2019 年涂鸦在尝试替换掉 Ignite Cluster 的时候,美国区的存储设备已经达到 12 台节点。恰逢 PingCAP 在杭州举行 TUG 活动,我们对 TiDB 3.0 进行了验证测试。但是 TiDB 3.0 上线没有满足涂鸦的要求,因为延迟高,吞吐也上不去,尝试了几个月以后只好作罢。

时间来到 2020 年,TiDB 4.0 上线了。我们又对 TiDB 4.0 进行了测试,对比 3.0 有非常大的进步,但是延迟高,吞吐量不足的问题依旧存在。这时候 PingCAP 研发团队针对这个问题进行了深入分析,发现主要的耗时就在 SQL PARSER 层,而 TiKV 底层的存储是完全闲着的,因为涂鸦的写入量大,对延迟要求高,完全达不到预期。

既然出现的延时都消耗在 SQL PARSER 层,而物联网写入的数据虽然 TPS 高,但业务逻辑没有那么复杂,能不能去掉 SQL 层,直接写入 TiKV 层?我们参照了 PingCAP 提供了 TiKV 的官方 API 文档,宣称已经 支持 JAVA、GO 和 Rust ,开始了尝试和探索。

上线应用的结果很惊喜,得到了全公司的认可。之后我们在全球各个地区都上线了 TiDB 4.0,经过一年的测试,运行正常没有发现什么问题,原本需要 12 台机器,同等配置下现在只要 3 台机器就能搞定了,也就是说 硬件成本只有原本的四分之一

涂鸦吞吐量上线的时候已经有 20 万 TPS,以北美区的集群来看,当时的版本是 4.0.8,查询的响应时间 99% 是 150 微秒,写入是 360 微秒(不到一毫秒),有类似场景的小伙伴们可以尝试一下。

新的挑战:跨区域部署

但是我们没有高兴多久就遇到了新的挑战,因为 AWS 部署的时候是三个可用区的部署,比如法兰克福一部署就是 ABC 三个区域,三个副本之间通讯是要消耗流量,而流量是要收费的,而且涂鸦所有的应用也是部署在三个区,也需要跨区域的调用,TiKV 并没有像 Dubbo 那样同区调用的策略,所以这个费用的成本居高不下,尽管涂鸦只有以前四分之一的机器,但是成本比原本还高。目前进行的解决方案是进行了基于 RPC 的压缩,降低网络的流量,但这种流量只能解决 Region 复制的流量,应用代码跨区的复制流量还是没有降下来。

我们发现出现这种问题的原因是因为 TiKV 的服务端没有进行服务端过滤,需要把 TiKV 存储的数据取回到本地进行应用程序的过滤,然后再塞回去,这个跟 TiKV 的研发团队进行了沟通, 后续的版本可能会推出 基于服务端的过滤,降低服务器的负载,流量成本也可能会下降

降本增效:从 X86 到 ARM 的架构升级

IoT 行业之所以注重降低成本,因为 IoT 行业的毛利率非常低,我们需要降低每一件模组的成本。在 2020 年 6 月,AWS 推出了 C6G 的产品,性价比宣称比上一代 C5 高出 40%,于是我们对 AWS 的 C6G 进行了尝试,但用 TiUP 编译直接部署的时候发现响应时间比 X86 架构慢 6 到 7 倍,即 TiUP 部署的是通用编译版本,跟硬件不是那么贴切。经过测试验证,发现现有的 TiKV 版本不支持 SSE 指令集,也就是说目前 TiKV 4.0 使用的 RocksDB 版本是不支持 SSE 指令集的。

SSE 指令集主要是进行 CRC 校验、HASH 和浮点运算的。当时进行了折中方案就是混合部署,TiKV 这边使用的是 X86 架构,其他节点使用的是 ARM 的架构,但这样也带来不方便,如果升级版本的话,指向的镜像一会是 X86 的,一会是 ARM 的,这样会是很麻烦,于是则整体切回了 X86 的架构。

到了今年,TiKV 推出了 5.0 版本,TiKV 5.0 是支持了 aarch 64 优化过的 CRC32C 指令集,也就是 SSE 4.2 指令集,但前提条件是 RocksDB 版本要大于 6.1.2,而 TiKV 5.0 版本的 RocksDB 的版本是 6.4.6,并且在 TiKV 上面可以找到 TiKV 针对 SSE 指令集的优化,也就是说 TiKV 5.0 现在已经完全支持 SSE 指令集了 ,下半年将会纳入重点进行测试,这样的话成本有可能会更大幅的下降。

业务展望

未来借助 TiDB 5.0 和 5.1,涂鸦有信心能够承接数倍的业务增长,预计年底 TiKV 的流量又会翻到现在的三到四倍。大数据平台也用了 TiDB 作为大屏展示,并且物联网的设备流水也正在考虑使用 TiKV 5.1 作为存储,更大程度上 提高易用性 ,TiDB ARM 版本的部署也在下半年的规划之中。

涂鸦智能选型 TiKV 的心路历程相关推荐

  1. 涂鸦智能 dubbo-go 亿级流量的实践与探索

    作者 | 潘天颖,Github ID @pantianying,开源爱好者,就职于涂鸦智能 dubbo 是一个基于 Java 开发的高性能的轻量级 RPC 框架,dubbo 提供了丰富的服务治理功能和 ...

  2. 【博客话题】我的linux心路历程

    2011年的某一天,程程同学在QQ上跟我说"linux 20周年了,有没有关于linux话题的好点子",回神一想,是啊,linux都20周年了,是应该搞一个有意义的话题了,我就建议 ...

  3. 涂鸦智能dubbo-go亿级流量的实践与探索

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! dubbo 是一个基于 Java 开发的高性能的轻量级 RPC 框架,dubbo 提供了丰富的服务 ...

  4. 【回眸】Study with me!计算机二/三 级(物联网)刷题的心路历程

    计算机二级(物联网)刷题的心路历程 1.NB-IoT的具体应用不包括__________. A.智能水表 B.共享单车 C.智慧门锁 D.高清视频监控 这题比较难的地方就在于NB-IoT是什么东西,笔 ...

  5. 跨越平台桌面应用开发框架electron使用的心路历程

    前言 首先声明一下这篇文章不谈代码,只谈心.     从接触Electron到真正去做出一个桌面应用,再到今天写下这边文章,大概花了三个月时间吧,到不是因为有多难,主要是这纯碎是个人兴趣,自己是在业余 ...

  6. 微软亚洲研究院成立20年,现任院长洪小文自述心路历程

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 述者 洪小文 原标题 <微软亚洲研究院成立20年,洪小文自述心路历程> ...

  7. 涂鸦智能全功能智慧植物生长系统(硬件)

    在前面,我们分析完市面上的植物生长机,也选了一款植物生长机进行了拆机,接下来我们就开始搭建一个全功能智慧植物生长系统. 我们想要实现的功能有这些: 涂鸦智能APP远程遥控.监测 光照监测 温湿度监测 ...

  8. Android-嵌入式蓝牙 多年蓝牙产品开发学习心路历程分享-A2DP音频流的建立、A2DP播放暂停音乐命令交互、HFP、AVRCP、RFCOMM、OPP、AVDTP

    序言 当你点进来看到这段话的时候,证明你真心想学好蓝牙,哈哈哈,本来想搜索蓝牙某个协议,却成了一大段废话文,但此时,别退出去,如果你是一个牛逼的蓝牙开发者,只是想了解蓝牙某个协议或者知识点,那么直接点 ...

  9. 探究!一个数据包在网络中的心路历程

    来自:小林coding 前言 想必不少小伙伴面试过程中,会遇到「当键入网址后,到网页显示,其间发生了什么」的面试题. 还别说,这真是挺常问的这题,前几天坐在我旁边的主管电话面试应聘者的时候,也问了这个 ...

最新文章

  1. 微信小程序的数字有部分会自动加粗的解决方法
  2. JS可以写操作系统?Windows 95被装进Electron App
  3. linux创建的kvm无法运行,使用virt-manager运行虚拟机的方法(创建第一个虚拟机)...
  4. 对ThreadLocal实现原理的一点思考
  5. sql还原数据库备份数据库_有关数据库备份,还原和恢复SQL面试问题–第IV部分
  6. python函数缺省参数实例_Python中函数及默认参数的定义与调用操作实例分析
  7. 下载VCForPython27.msi
  8. linux下sybase创建数据库,Linux下Sybase数据库安装
  9. 程序员记录biji的工具_程序员专用笔记 Quiver
  10. java构造函数注释_@Autowired的使用:推荐对构造函数进行注释
  11. NLP(二):n元模型
  12. 第12届蓝桥杯 我的第一个比赛
  13. 数据分析入门必备基础知识
  14. c++builder:Project Project1.exe raised exception class EAccessViolation with message 'Access violati
  15. Learning Standard C++ as a New Language ( By Bjarne Stroustrup )
  16. C语言例题——简易计算器
  17. 【LaTex】第二行作者居中(IEEEtran模板)
  18. 抛弃easyconnent桌面端,使用浏览器插件连接校园内网
  19. Python之freshman04
  20. okl4 linux,Ubuntu下用skyeye运行OKL4

热门文章

  1. python kazoo 踩坑记录
  2. 计算机管理员怎么说的高大上,高大上的档案管理系统界面是如何设计的?答案在这里...
  3. Linux内核网络协议栈流程及架构
  4. sed找到指定字符并进行替换或者删除
  5. C#在控件中绘制矩形、圆、线段等(切换不同的图片,自定义翻页控件,通过委托监控某个字段)
  6. 半条命java版_《半条命》1.1.3版本mod
  7. 电脑检测工具eve_使用windows自带的工具来检测电脑硬件,轻松排除故障!
  8. 苹果11:系列评测,万元巨款哑铃表现如何?
  9. unify v2.5主题
  10. Unify学习笔记1