一文说清部署架构
部署架构描述了软件如何部署到一个物理环境,这个物理环境可能是一台主机,也可能是机房,也可能是运营商提供的云计算服务。物理环境境涉及到网络、主机,包括CPU和内存参数等,基础软件服务,如数据库,Reids等。
部署架构同其他技术架构一样,同样是质量驱动架构,重点的质量属性是高可用,可伸缩性,以及安全特性。
下图描述了一个小型的生产环境物联网的部署架构,图中4C16G,代表了4核CPU和16G内存。4C16G*2 表示有两台服务器。 可以看部署架构分为5部分,
- Redis 集群,使用了代理模式,Redis包含了2个分片,每个分片带有一个从分片。每个分片大小为2G,CPU为1个。采用分片,使得Redis具备可伸缩性。使用主从,使得Redis具备高可用性。
- 数据库使用了MySQL,采用主从架构。主数据库用于管理系统保存网关配置和保存网关集群的运行状况, 从库用于主网关读取配置和网关集群的运行状况。主从库配置是2C16G。并配置了3个从库。
- 主网关管理控制台:包含了1台配置较低的2C服务器用于主网关的配置管理,因为配置管理系统是个内部管理系统,没有高可用要求,所以只配置一个服务。
- 主网关负责告诉设备应该连接哪个网关节点,图中包含支持MQTT协议和WebScoket协议,各配置了4个节点和2个节点。外部设备短连接方式通过LoadBalancer服务询问主网关其设备的接入网关地址。
- 接入网关负责设备的实际接入,图中,配置了64个MQTT节点,每个节点是4C16G。,以及4个4C*16G 的WebSocket网关。随着设备量增加,可以添加部署的接入网关并在主网关管理服务配置集群,以实现伸缩性,高可用和高性能
- Load Balancer,设备通过负载均衡器访问主网关,获得接入网关的实际链接地址。 Load Balancer是云厂商提供的代理服务器。保证了主网关的可高可用。

此部署架构每一部分都保证了高可用并具备伸缩性。当物联网系统自身不断优化(质量优化或者降本增效)以及遇到的问题时候需要参考此此架构,比如
- 此系统部署在国内阿里云,是否能同样部署在华为,腾讯云上,或者能否部署在国外亚马逊云上?解决:需要研究相应的云厂商对Redis,主从数据库,以及LoadBalance的支持情况和价格。同时,需要排查是否使用了阿里云产品的特定功能,比如定制化的Linux和JVM。
- 如果接入网关使用的某一个IP被运营商误封,如何解决?解决: 需要在网关管理控制台系统对此网关进行下线操作,立即部署一个新的接入网关,并在控制台配置即可
- 主网关是否只需要一个从库即可,网关集群配置并不经常更新。解决:是的,网管集群配置信息可以一次性缓存到主网关应用里,并定时刷新。
- 如果Redis集群暂时不可用,比如升配过程中,网关系统是否正常。解决:此时的Redis集群规模很小,升配过程很快完成。当Redis暂时不可用时候,网关运行状态的的旧数据可以使用。但需要保证网关系统能在Redis不可用时候,记录报错但不业务正常使用,且Redis恢复正常后网关和主网关能自动重连
- 网络极端情况考虑:如果机房网络出现问题,设备全部下线,网络恢复后,全部设备是否能在数分钟内上线。上线过程中,会发生什么情况。关于这一点,可以参考软件架构对网关的改造。
- 数据库极端情况考虑:如果数据库较长时间不可用,理论上主网关仍然能使用本地缓存数据进行地址分配。同样,极端情Redis长时间不可用,主网关拿不到最新的网关运行数据,导致分配出现不均衡情况
同其他技术架构一样,很难在一个架构图中展示部署架构所有信息,这时候可以提供高层部署架构图,然后再分解成各个部署图或者用专门文档说明。比如上图仅仅是物联网系统中网关部分的的部署架构图,大多数部署架构都强调安全特性,这需要与运维人员一起从安全视角描述部署架构,架构图包含网络隔离和数据传输加密的信息。
