且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

从零到百万级iot系统架构演进(会不断更新

更新时间:2021-08-01 08:18:56

2017年6月第一版本,采用的是单体结构进行开发,全部业务功能和通讯功能都集中在一个项目中,由于一开始只在***地区运作,系统没有做国际化处理,时间都是东八区时间;机柜的通讯方式为WebSocket和Netty,其中主要以WebSocket为主,下面是第一版本架构图:从零到百万级iot系统架构演进(会不断更新

2018年1月,项目开始需要往国际化方向发展,开始了第一次重构。此次重构,主要从粗粒度的拆分原有系统的角度,把相对独立的功能模块抽取出来。原有项目CMS管理后台,APP接口,机柜WebSocket和Netty服务都跑在一个项目中,功能复杂,且难维护,所以次把原有项目拆分为cdb-admin(CMS管理平台),cdb-api(APP接口),cdb-task(任务调度服务),cdb-websocket(机柜通讯服务),cdb-server-monitor(服务健康监控服务)等五个服务,服务之间,通过RabbitMQ通讯,把功能从业务中抽离出来,Netty服务由于机柜原因,不在使用,下面是第一次重构后的版本架构图:
从零到百万级iot系统架构演进(会不断更新

2018年7月,我们正式取消websocket和netty服务,全面拥抱阿里的iot平台,下面是iot的对接逻辑:
从零到百万级iot系统架构演进(会不断更新

2018年12月,由于销售及维护人员业务需求,在年中增加BD相关业务和app(cdb-sale),12月增加BO相关业务和APP(cdb-bo),运营报表业务服务(cdb-report)以及年中更换换代的全新三代机柜,开始大量回收市面上一二代机柜(使用WebSocket的机柜,但还是有少量在市面上运行)。新换代的三代机柜,通讯方式采用阿里云的IOT平台,阿里云的IOT平台会将机柜上报的数据保存到阿里云IOT产品下,对应名称的队列中,因此,增加一个cdb-mns服务,对IOT平台的消息队列进行消费。也随着服务量的增加,对日志查询的需求日益增长,所以我们开始搭建了ELK日志收集平台,下面是新增业务需求后的系统架构图:从零到百万级iot系统架构演进(会不断更新

2019年7月,由于现有系统无法满足日益增长的业务量,对现有项目进行第二次重构,这次重构的目标是实现大中台,小前端。为了快速把公用或核心的业务沉淀到中台中,我们第一步考虑把机柜相关的核心业务逻辑,从现有项目中抽离出来,搭建机柜中心,沉淀到中台能力中去。这又是对于iot独立部署重大尝试,对于现有服务中原先与机柜业务耦合在一起的业务逻辑,我们会提供一个机柜能力聚合层,让现有项目直接使用能力聚合层的Restfull Api接口,调用机柜中心的服务,完成相关的业务功能,下面是抽离出来机柜中心后,原有项目中cdb-api和cdb-admin,与机柜中心的混合架构图:
从零到百万级iot系统架构演进(会不断更新

我们在搭建业务中台的各个中心,同时基于阿里iot的平台进行了融合,搭建了双通道的iot平台,就是我们在机柜里面会用MQTT连着两个服务,一个是阿里iot平台,一个是我们的自己平台,一旦阿里iot平台出现国外断服务的情况下,能无感切换到自己的服务平台,并且异步不断尝试连接阿里iot的服务,随时切换回阿里iot服务