本文分享自华为云社区《手把手教你物联网平台如何实现业务配置中心》,作者:华为云IoT高级工程师 张俭。
上一篇《华为云物联网高级攻城狮的4年配置中心实践分享》文章中分享了业务配置中心。
本文讲述业务配置中心(下文简述为配置中心)的关键技术和实现方式。华为云物联网平台按照本文的实现方式实现了一个业务配置中心,该配置中心2020年1月上线,平稳运行至今。
和用户无关,通常为集群界级别的配置,程序只会进行读取,如数据库配置、邮箱服务器配置、网卡配置、子网地址配置等。
作为SaaS 服务,每个用户在上面都有一些业务配置。如用户的证书配置、用户服务器的流控配置等,这些业务配置相对运维配置来说更加复杂,且可能会有唯一性限制,如按用户 id 唯一。这部分配置数据一般由用户操作触发,代码动态写入,并且通知到各个微服务实例。通常,我们希望这些配置能在界面展示,且支持人为修改。上述逻辑如果由各微服务自己实现,会存在大量重复代码,并且质量无法保证。我们希望由一个公共组件来统一实现这个能力。开源或体量较小的项目就不会选择依赖一个配置中心,而是直接通过连接数据库或etcd来解决问题
代表一个部署环境。
代表环境下的集群。常见于单环境下蓝绿发布,蓝集群、绿集群、金丝雀集群等。
配置名称,如用户证书配置、用户流控配置等。
配置的唯一键,如用户id。
配置唯一键对应的值。
我认为应该只通知Key,具体的数值让应用程序再去配置中心查询。仅通知Key实现简洁易懂。同时通知Key&Value需要多考虑定期同步和通知两条通道并发,可能引起的竞态冲突。
本小节描述业务配置中心的所有业务流程,并试图从交互中抽象出与具体实现无关的接口
分布式场景下,通知有可能无法送达,如程序陷入网络中断(或长gc),通知消息送达超时,待程序恢复后,数据不再准确。因此需要对数据做定期同步,提高可靠性。
同步过程中,仅仅请求交互id和version,避免传输大量数据。应用程序接收到需要同步的数据后:
服务启动也可看做是一个同步的流程,只是需要同步大量的数据添加。为了避免向配置中心频繁大量的请求,引入批量操作来减轻压力
该配置中心设计思路依赖客户端可把数据全量放入到内存中,如用户量太大,则不适合采用这种模式。
注:一个节省内存的思路是,内存中只放置全量的id和version,数据只有当用到的时候再去查询。这个思路要求配置中心持久化一些老旧数据以供以下场景的查询使用
除此之外没有任何区别。
从上述描述的业务场景,我们抽象出业务配置中心的交互接口和抽象实现。接口的Swagger Yaml已上传到Github:https://github.com/Shoothzj/config-center/tree/master/swagger
配置中心存储层需要存储配置和配置值数据,支持UpdateByVersion,且需要捕捉数据的变化,用来通知到应用程序
为了使应用程序连接到配置中心,需要一个发现机制可以让应用程序感知到配置中心的地址。高可用的方式很多,如K8s发现、ZooKeeper、Etcd、ServiceComb、业务环境变量注入ELB地址(ELB后端挂载配置中心的地址)等。
根据这个抽象,我们可以进行关键技术点选型,来实现业务配置中心。
只要实现上述接口和抽象能力,都可以实现业务配置中心,也可以这么实现
当然也可以
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://huaweicloud.blog.csdn.net/article/details/124315111
内容来源于网络,如有侵权,请联系作者删除!