本文分享自华为云社区《手把手教你物联网平台如何实现业务配置中心》,作者:华为云IoT高级工程师 张俭。

前言

上一篇《华为云物联网高级攻城狮的4年配置中心实践分享》文章中分享了业务配置中心。

本文讲述业务配置中心(下文简述为配置中心)的关键技术和实现方式。华为云物联网平台按照本文的实现方式实现了一个业务配置中心,该配置中心2020年1月上线,平稳运行至今。

1      概念

1.1      运维配置

和用户无关,通常为集群界级别的配置,程序只会进行读取,如数据库配置、邮箱服务器配置、网卡配置、子网地址配置等。

1.2      业务配置

作为SaaS 服务,每个用户在上面都有一些业务配置。如用户的证书配置、用户服务器的流控配置等,这些业务配置相对运维配置来说更加复杂,且可能会有唯一性限制,如按用户 id 唯一。这部分配置数据一般由用户操作触发,代码动态写入,并且通知到各个微服务实例。通常,我们希望这些配置能在界面展示,且支持人为修改。上述逻辑如果由各微服务自己实现,会存在大量重复代码,并且质量无法保证。我们希望由一个公共组件来统一实现这个能力。开源或体量较小的项目就不会选择依赖一个配置中心,而是直接通过连接数据库或etcd来解决问题

1.3      env

代表一个部署环境。

1.4      cluster

代表环境下的集群。常见于单环境下蓝绿发布,蓝集群、绿集群、金丝雀集群等。

1.5      配置

配置名称,如用户证书配置、用户流控配置等。

1.6      Key

配置的唯一键,如用户id。

1.7      Value

配置唯一键对应的值。

2      配置中心设计梗概

2.1      业务配置特点

  • 虽然业务配置写入可能存在并发,但并发量不大,频率较低。
  • 业务配置常常以用户为id,单集群用户量有限,一般不超过5万。

2.2      配置中心要解决的问题

2.3      设计要点

  • 单配置要求有配置id,每个id上通过version的乐观并发控制来解决多版本冲突问题
  • 通知不追求可靠,应用程序和配置中心断链无法接收通知的场景下,通过定期同步数据来保证数据的可靠
  • 支持Schema的变更,因Schema变更不频繁,也采用version的乐观并发控制来解决多版本冲突问题

2.4      通知是否包含消息内容

我认为应该只通知Key,具体的数值让应用程序再去配置中心查询。仅通知Key实现简洁易懂。同时通知Key&Value需要多考虑定期同步和通知两条通道并发,可能引起的竞态冲突。

3      配置中心业务流程

本小节描述业务配置中心的所有业务流程,并试图从交互中抽象出与具体实现无关的接口

3.1      配置的增删改查

3.2      配置值的增删改查

3.3      定期同步

分布式场景下,通知有可能无法送达,如程序陷入网络中断(或长gc),通知消息送达超时,待程序恢复后,数据不再准确。因此需要对数据做定期同步,提高可靠性。

同步过程中,仅仅请求交互id和version,避免传输大量数据。应用程序接收到需要同步的数据后:

  • 删除操作,触发删除通知,从本地缓存中移除数据。
  • 添加、修改操作,向配置中心查询最新数据,触发通知并写入本地缓存。

3.4      服务启动

服务启动也可看做是一个同步的流程,只是需要同步大量的数据添加。为了避免向配置中心频繁大量的请求,引入批量操作来减轻压力

3.5      限制

该配置中心设计思路依赖客户端可把数据全量放入到内存中,如用户量太大,则不适合采用这种模式。

注:一个节省内存的思路是,内存中只放置全量的id和version,数据只有当用到的时候再去查询。这个思路要求配置中心持久化一些老旧数据以供以下场景的查询使用

  • 业务流程中,需要使用该配置值的。
  • 回调业务程序修改的时候,需要提供旧值的。

除此之外没有任何区别。

4      业务配置抽象实现

从上述描述的业务场景,我们抽象出业务配置中心的交互接口和抽象实现。接口的Swagger Yaml已上传到Github:https://github.com/Shoothzj/config-center/tree/master/swagger

4.1      配置相关接口

  • 提供env、cluster、配置名称、配置Schema、配置版本号添加配置
  • 提供env、cluster、配置名称删除配置
  • 提供env、cluster、配置名称、新Schema、新Version来修改配置
  • 提供env、cluster、配置名称来查询配置

4.2      配置值相关接口

  • 提供env、cluster、配置名称、Key、Value来添加配置值
  • 提供env、cluster、Key、ValueVersion(可选)来删除配置值
  • 提供env、cluster、Key、Value、ValueVersion(可选)修改配置值
  • 提供env、cluster、Key查询配置值
  • 根据env、cluster、应用程序当前的配置数据来做定期同步
  • 根据Key列表批量查询配置值

4.3      通知相关接口

  • 通知某env某cluster下,配置项中的一个Key发生变化,新增、修改或是删除。可选方式有HTTP长链接(Inspired by Apollo)、Mqtt、WebSocket等。

4.4      配置中心存储层抽象实现

配置中心存储层需要存储配置配置值数据,支持UpdateByVersion,且需要捕捉数据的变化,用来通知到应用程序

4.5      服务发现抽象实现

为了使应用程序连接到配置中心,需要一个发现机制可以让应用程序感知到配置中心的地址。高可用的方式很多,如K8s发现、ZooKeeper、Etcd、ServiceComb、业务环境变量注入ELB地址(ELB后端挂载配置中心的地址)等。

4.6      抽象总结

根据这个抽象,我们可以进行关键技术点选型,来实现业务配置中心。

5      配置中心实现

5.1      华为云物联网配置中心实现

  • env+cluster+config组成数据表的名称
  • 一个key、value对应一行数据

5.2      另一种实现方式

只要实现上述接口和抽象能力,都可以实现业务配置中心,也可以这么实现

  • env+cluster+config+key 组合成etcd的key
  • 一个key、value对应一个键值对

5.3      又一种实现方式

当然也可以

  • env+cluster+config+key 组合成RocksDB的key
  • 一个key、value对应一个键值对

点击关注,第一时间了解华为云新鲜技术~​

IoT平台如何实现业务配置中心相关推荐

  1. java B2B2C电子商务平台分析之十一------配置中心和消息总线

    Spring Cloud Bus Spring cloud bus通过轻量消息代理连接各个分布的节点.这会用在广播状态的变化(例如配置变化)或者其他的消息指令.Spring bus的一个核心思想是通过 ...

  2. Mycat监控_监控平台安装Mycat-web_作为配置中心注册发现用---MyCat分布式数据库集群架构工作笔记0037

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 下面咱们去安装mycat-web 先把mycat-web上传到opt下 然后解压

  3. Mycat监控_监控平台安装zookeeper_作为配置中心注册发现用---MyCat分布式数据库集群架构工作笔记0036

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 好咱们去安装zookeeper,这个很简单 首先看看这个zookeeper的官网,然后 这里点击d ...

  4. 4G Modbus Json边缘网关接入阿里云IoT平台

    LTE-669P 4G边缘网关系列 阿里云平台连接教程 今天介绍物联设备 LTE-669P 4G边缘网关如何接入阿里云平台系列. LTE-669P是一款工业级4G JSON无线边缘解析网关,支持RS4 ...

  5. 华为云物联网高级攻城狮的4年配置中心实践分享

    本文分享自华为云社区<华为云物联网高级攻城狮的4年配置中心实践分享>,作者:华为云IoT高级工程师 贺张俭. 自 17 年入职华为之后,一直在使用配置中心,4年期间经历了自研配置中心到 A ...

  6. 华为云物联网四年配置中心实践

    使用到的配置分类 从场景分类 运维配置,即程序只读的配置 人工配置.通过人工在配置中心界面进行配置,而程序只进行读取,如数据库配置.邮箱服务器配置.网卡配置.子网地址配置等.这部分配置数据不要求代码动 ...

  7. NB-IoT使用CoAP协议接入华为IoT平台教程

    文章目录 1.准备 1.1.NB-IoT模组 1.2.NB-IoT SIM卡 1.3.IoT平台 2.模块配置与IMEI号的获取 3.设备注册 该文章为本人原创,首发在华为云社区 上一次我们讲了&qu ...

  8. 阿里物联网平台(IOT)——业务服务器获取阿里iot平台接入设备的实时设备采集数据

    基于HTTP/2通道的服务端订阅-设备状态和数据 一.服务端订阅 服务端订阅流程 在IoT场景,有时候我们期望业务服务器能接收到设备状态和设备采集的数据,而不是通过云产品中转, 这时我们可以开启服务端 ...

  9. RLCenter云平台配置中心

    榕力RLCenter云平台配置中心以图形界面的方式实现对云桌面系统的统一管理,包括用户管理.服务器管理.虚拟机管理.策略管理.可配置U盘类设备的读写权限,避免企业敏感信息泄密.实行数据集中存储,支持用 ...

最新文章

  1. Tomcat(一):背景知识和安装tomcat
  2. aliyun redis 链接超时_用redis做异步队列,原来还可以这样
  3. 从源码角度深入分析ant
  4. 3/3 常用符号:转义字符
  5. 视频倒退编辑android,视频倒放剪辑app下载-视频倒放剪辑 v2.6.3 安卓版 - 下载吧...
  6. gear s3刷android wear,三星gear s3怎么刷机 智能手表gear s3刷机方法【图解】
  7. Smarty模板技术学习(二)
  8. zxing 如何识别反转二维码
  9. android - Drawable - ColorDrawable 学习笔记
  10. SAP屏幕设计器专题:表格控件属性的设定(七)
  11. Go语言详细介绍:logo和版本
  12. Objective-C中内存管理的一些特例
  13. Deepin 的远程连接
  14. springCloud教程链接
  15. 如何提取差异脑区的灰质体积与临床量表算相关?——基于体素的形态学方法(VBM)
  16. oracle的imp导入数据,初识oracle-imp导入
  17. ThingJS如何收费的?
  18. 百度贴吧发帖的方法技巧
  19. C专家编程 模块化与有限机编写cdecl声明程序
  20. 使用hutool工具类,计算日期差

热门文章

  1. 建立一个成功的OpenStack组
  2. firefox 开源_Firefox 10岁了,Microsoft开源了更多,等等
  3. JS模块化开发_思维导图
  4. 视觉SLAM十四讲学习笔记-第一讲
  5. linux race window,java开发环境(QTrace)
  6. 曲线绕x轴旋转曲面方程_几何代数50 ----柱面及其方程
  7. web前端篇:html基础知识
  8. 12、scala函数式编程集合
  9. vue开发 - 将方法绑定到window对象,给app端调用
  10. K8s创建pod yaml文件详解