摘要:华为云IoT提供了一站式的物联网应用开发的基础能力,这些能力做到高可用是非常不容易的,那到底是怎么做到的呢?
单元化是高可用架构当中的一个杀手锏。本文主要是想重点分享一下高可用架构演进之单元化,总共分为三个部分:
1. 华为云IoT是如何理解高可靠、高稳定的 。
2. 华为云IoT的架构是怎么做的,单元化的一些理念和实践。
3. 单元化技术能力在产品上是如何使用的。
物联网平台是使能数字化的基础设施
首先摘取了三组分析师的报告,我们可以看出,物联网的平台已经变得越来越成熟,2021年整个物联网连接规模将达到70亿,三分之二的企业已经在采用IoT。
这些数据背后意味着整个物联网平台包括整个物联网技术都应用在我们生活的方方面面。我们这些年说的非常多的就是数字化,其实数字化时代与信息化有什么不同?信息化是以人与流程为主轴的,而数字化很大的增量,其实就是以物为核心的OT数据,所以数字化的基础物联网是非常核心的部分,物联网平台也是整个数字化的重要基础设施。
那说到基础设施,我们会想到的例如水、电、煤。基础设施应该是具有一些特点的:
可以开箱即用,很容易地运用在各种场景。
要高可用,做为基础设施如果是不高可用的,意味着在上面构建的应用或者场景都很难可靠。
就是可持续,即要保证业务的连续性。
稳定性是目前物联网客户最大诉求
去年对一些物联网的开发者做过一次调研,结论是开发者最关心的还是稳定性。在这里分享一个案例,有一家企业规模比较大,研发实力也很强,就选择了自研的物联网平台。整个物联网平台做好了,功能很ok,就偶尔一些不稳定,基本上重启、修复还是可以用的。但有一天,突然整个全网的设备就无法连接了,重启、扩容,反复折腾了将近一天也没有定位到问题所在。后来寻求华为云IoT的帮助,问题的主要原因是它的负载均衡,它本身设置有问题,架构伸缩性也有问题,物联网设备规模比较大的时候流量一抖动,触发了连接风暴。这个企业的架构师分享了一个观点,他们过去在做这种架构的时候,更多考虑的是人工成本和服务器成本,忽略了机会成本,也就是系统不可靠带来的业务损失,他们当时一天服务中断造成的业务损失其实是超过了使用物联网平台十年的成本,所以作为架构师,做方案的时候更应该关注稳定性。
物联网平台的高可用挑战
稳定性这么重要,是不是就把它做好就可以了?是的,如果做好了确实是可以的,但是,做好这件事并不是那么容易,物联网平台具有专业性以及独特性的挑战,主要体现如下:
1. 物联网的架构
物联网的业务跟我们生活、民生、生产都是息息相关的。过去整个互联网基本在消费上发展起来的。消费互联网现在进入物联网时代,物联网小到出行,如果上班赶时间,共享单车开不了锁,会对生活产生一些影响。工厂里,因为物联网平台的不稳定影响工厂的生产造成停工停产甚至在还会危及到人生的安全。所以他对高可靠的要求要高于消费互联网的。我们过去技术的发展,大部分的中间件都是在消费互联网的基础上构建出来,现在很多产品的SLA都要求达到99.9%甚至更高。
2. 物联网的场景
物联网场景很大的特点就是碎片化非常严重。操作系统的碎片化是移动互联网时代的一个痛点,我们互联网时代的端其实更多,它的操作系统更不统一,资源受限,所以端的差异化非常严重。有些嵌入式的端的协议站不完整,云端会收到很多奇形的报文,甚至是死循环,对云端发起疯狂的连接。物联网还有一个最大的场景威胁,就是连接风暴。很多时候设备都是长连接的,像十万百万千万甚至一亿的设备连接进来,一断网或者是网络有些抖动,所有的设备突然掉线然后突然蜂涌而至的向平台发起连接,就像我们生活中的踩踏事件,尤其在接连的时候,是非对称加密的,对资源的消耗非常大,交付非常多,所以这种连接风暴突然爆发的时候服务器的压力是十倍甚至更高的。这些都是对平台会产生极大的一个挑战。
3. 物联网的安全
安全威胁大有两个特征,第一是对黑客来讲做这件事的诱惑比较大、利益比较大;第二是物联网的这种链路比较长,相对来讲很容易有安全难度也比较高,在端上会有一些薄弱的环节,所以相对来讲攻击的难度也会低一点。
4. 物联网的运维
排查物联网网络问题需要非常专业的技术,一些自建平台做好了功能,当网络不稳定设备多的时候,稳定性就会下降,出了问题难以定位和快速恢复。
华为云IoT一站式提供了高可用的物联网服务
华为云IoT过去近一年SLA做到了99.99% 。提供了一站式物联网平台服务,那到底提供了哪些服务呢?我们从设备的上云之路一起来看一下。
首先,做物联网开发肯定是离不开设备的。设备的开发需要操作系统,可以使用华为LiteOS操作系统也可以使用其他操作系统。然后使用SDK进行接入,可以选择直连或通过IoT边缘接入。接着会面临选择网络的问题,像wifi、2g/3g/4g等 。如果选择无线网络,华为云还有全球SIM连接服务,它可以提供eSIM空中写卡能力,可以根据你的需求去跟更换运营商,非常方便。
这个设备就具备了接入的前提,接下来是设备发放服务。
我们在开发的时候在生产的时候不知道设备未来会连接到哪里,可能是连接北京也可能连接在广州或者是海外。那我们可以设备发放的服务在设备首次接连的时候来根据你设定的策略,发放到不同Region的物联网平台。
那这个发放做完了我们设备就可以接入了。华为云IoT提供了一些多协议的接入能力,还提供了一些联动等设备的全生命周期的管理能力。数据上来以后如果想到其他的云产品也可以通过流转服务流转到其他的产品上,也可以流转到数据分析服务。数据分析服务提供了温、冷、热的数据处理的能力。还有资产模型,可以做一些虚设点的计算,如果要深层次的去使用你的数据也可以使用我们的AMQP把数据定位到你自身的应用里面去。
好的架构是高可用的重要前提
华为云IoT提供了一站式的物联网应用开发的基础能力,这些能力做到高可用是非常不容易的,那到底是怎么做到的呢?首先作为一个高可用前提是要一个好的架构,包含了四个非常关键且具有通用性的特征:
1. 限流降级
前面也提到物联网连接风暴是很大的威胁,那限流就非常关键了。
限流有多维度的限流,可分为单机的,设备级的、产品级的、租户级的,还有根据间连限流、上报限流、订阅限流。
还有自适应降级,一些情况下需要优先保证一些重要的业务,会把一些像运维这方面做一些降级。
2. 弹性伸缩
对于一些异常做限流,但对于一些合理的业务增长,则需要弹性能力。弹性这块就需要底层部署调度做得非常好,资源要能够柔性伸缩,但资源伸缩的前提是架构也能水平的扩展。
3. 容灾
我们知道系统不可能做到百分之百,难免会有可能出现一些异常,所以我们会需要容灾。现在华为云IoT的产品单个Region都是具备3 Az的容灾。AZ我们一般叫可用区,实际上是一个隔离的数据中心,AZ跟AZ之间的这个物理距离一般在100公里以内,他们的时延一般是2~3毫秒。多AZ容灾基本上一个数据中心出现异常了,对业务也没什么影响。再高级一点就是多Region容灾,会更加复杂而且成本也比较高。
4. 单元化
想做一个高可用的系统,单从架构做好也是不够的,还涉及到设计、编码、测试、运维,甚至包括一些流程制度,这是一个体系化的事情。
横向单元化——构建平行的多单元可以联合提供服务
我们传统的模式是单一集群,里面有很多的实例。当把单一集群拆分成很多的单元,一些实例会去共享一个单元,也有一些实例会独占一个单元,就是根据产品设计去决定的。那这样就形成一个多单元的集群,它又有什么优点呢?
1. 隔离
就像水密舱,它能有效地控制爆炸的半径,避免级联的故障,所以在这种情况下能有效的非常有效地隔离故障
2. 可扩展
它可以满足百亿的规模,物联网很多场景,设备之间是不可以交互的,这就决定了很多产品是可以很好的去做Partition的,有些企业想做一个百亿的规模,我们可以用100个1亿的单元构成。设计1个支持1亿设备的单元,相对来讲难度更容易,系统也更容易做到可靠。
3. 有效的去应用一个灰度的策略
变更最容易出问题的地方,但通过单元化这种技术,把一个集群拆成十几二十几个,甚至百个单元,就是以单元级别做灰度的,能够更有效的管控变更的风险。
4. 亲和
因为相对来讲根据我们一定的分区来说,单元列的数据相关性会更高,所以缓存的命中率也会更高,基本上的热点数据,数据都被相对集中起来,所以它对性能上也是有很大的帮助。
纵向单元化——从公有云到智能站点构建多单元
既然有横向单元化,那也有纵向的单元化。我们在公有云上有物联网平台,混合云上有华为云Stack,它是部署在客户的现场,一般是几个机柜、几十台物理机这样的规模。想要轻量一点就可以使用华为云的智能站点,只需要一个机柜,三台物理机起,可以部署在客户的机房,甚至部署在办公区域,这是构建了一个纵向的单元。像工厂这种场景,数据量比较大,会希望就近处理数据,因为这样比较快,而且更可靠,减少了公网的依赖,还能有效地减少数据上云,可以在本地做处理。像这三种形态有不同的应用场景,它们可以独立的部署,完全自制,就是说我们的业务场景可以选一个单元去做这样的事情,选一个形态,也可以实现单元联合,可以协同。
IoT单元的定义
前面介绍了这么多单元,那么华为云IoT的单元是怎么定义的?华为云IoT单元职责的定义是一个独立完整的业务处理闭环,它是可以独立部署、独立去做业务的。那又有什么特征呢?
1. 它存储是独立的,不会出现两个单元共用一份存储的情况。
2. 计算是独特的。
3. 网络也是独立的,公有云上我们每个单元都是一个独立的网络。
4. 流量尽可能的去封闭,避免流量外溢。
5. 公有云一个单元属于一个Region。
6. 公有云一个单元至少3AZ部署。
IoT单元间的协同
单元很大的一个优势就是在单元之间的协同,有几种典型的协同:
第一种就是联合。联合是通过合理的Partition做分区,通过多个单元构建一个更大的业务,例如用10个1000万的单元构建1个1亿的业务或者是用10个亿的单元构建10亿的业务。
第二种是容灾。容灾就是单元和单元之间通过数据的转发,两个单元可以做多活,这是一种高可用的场景。
第三种是级联,通过很多单元层层级联构建一些复杂业务。比如城市物联网平台,城市的业务当中有区级的、市级的、省级的、厅级的物联网平台,这么多的物联网平台像一个一个烟筒一样。华为云IoT的物联网平台,无论市区的、省厅的到最后通过整个级联,构建互联互通,形成一个整体的方案。
单元化实现的挑战
单元化有很多优势,但单元化也非常复杂,实现的难度比较高,那他有哪些挑战呢。
第一个运维挑战很大。只管理几个集群的时候,发布、安装部署、运维也比较容易的,当管理起十个甚至上百个单元的时候挑战就来了。怎么安装,怎么升级,怎么确保单元能有效的去运维起来。这对工具、自动化的要求是非常高的。
第二个大的挑战就是分区的调度。当存在单元不均衡问题时,要考虑怎么有效的分区,怎么定Partition策略,怎么保证单元均衡,这会涉及到一些数据的迁移。
第三块就是协同复杂度很高。级联很好,但是级联本身协议和策略怎么去制定,这么多单元,数据一致性怎么去保证。
单元化的全景图
这是华为云IoT单元化的一个全景,既有横向的也有纵向的,构成了多单元的联邦协同。它的核心理念是,任一单元的接入可以做到设备全域协同。假如某个业务场景的特征决定暂时不使用公有云,使用智能站点。有一天,觉得本地处理能力不够了,或者想借云端的算力做一些更高级的分析,那可以在公有云上开一个实例,也不需要做什么代码开发,数据只要做一些简单的配置就可以平滑的上公有云。又或者是某个公有云业务,设备接进来了,有一天需要本地更快的处理,或者是节省一些流量的时候,可以在这个基础上再加选只能站点或者华为云Stark,那也不需要做太多的代码改造就可以新增一个单元来做业务。只要我们想达到的,不用担心通过什么方式什么形态接入进来,只要你做过这样一个接入,我们最后能都能保证设备的全域协同。最终是运用这种单元技术通过不同的组合满足一些高可用、高容量、高性能的需求。
设备接入服务多实例类型,让联接按需定制
单元化在华为云IoT产品上有什么体现呢?我们设备接入服务有多实例的一个形态,它可以让联接按需定制。华为云IoT设备接入服务有三个版本,基础版、标准版和企业版。基础版和标准版其实就是多个实例共享多个单元。企业版是一个实例独占一个单元,它是独立的VPC,有独立的网络,支持公/私网的对接。
华为云IoT多形态部署,让联接无处不在
纵向单元化体现的就是华为云多形态部署。一共有4种的这种形态。
1. 公有云支持一级设备的接入,开箱即用,有多种实例,可以按需选择适用的场景。
2. 华为云Stack,服务器部署在客户的现场,能满足一些行业对网络合规的要求以及一些大型企业想建自己数据中心的诉求,它的设备规模一般是千万级。
3. 智能站点,它非常轻量,基本上一个机柜三台服务器即可。适合百万级设备的接入。可以云边协同,云端可以远程运维。
4. 边缘网关,业务时延低于50ms。
本文分享自华为云社区,作者:咸蛋超人。