MDM CF模板化改造手册
改造原因
由于原有MDM系统部署结构为使用单一EC2形式, 通过docker run的形式直接部署的, 并且各个模块间通过指定固定IP的方式配置, 存在较大弊端和隐患, 因此需要对现有MDM进行AWS云上架构适应性改造, 相关对比表格如下:
| 改造前 | 改造后(测试环境) | 是否更优解 |
|---|---|---|
| 运行于单一EC2, 所需节点配置较高 | 以多个m5.xlarge(暂定)节点分散负载 | √ |
| 运行于单一EC2, 存在单点故障的可能 | 多节点负载应用, 避免单点故障 | √ |
| 可运行于多节点, 但需指定每个节点的IP | 通过ELB对服务进行注册, 避免IP变动引发服务不可用 | √ |
| 如服务容器异常, 需人工登录处理 | ECS服务自托管, 不需要人工干预, 容器挂掉自动拉起 | √ |
| 容器在实例重启后可能无法正常启动 | 不依赖EC2环境, 如某个EC2实例出现问题, 可通过Auto Scaling 重新拉起新EC2, 快速恢复业务 | √ |
| 对单服务多容器支持不好, 需指定容器对应宿主机端口 | ELB可以支持单服务多容器的方式部署, 且自动分发流量, 不需要配置多个地址 | √ |
| 单一服务器成本, 可按需或购买RI | 增加了ECS/ELB/EFS/Redis使用费用, 会导致费用上升1 | × |
AWS托管资源说明
| 资源名称 | 资源型号 | 资源数量 | 需求原因 | 备注 |
|---|---|---|---|---|
| ELB | Internal NLB | 5 | MDM系统使用ECS必需 | MDM系统需求固定IP/域名如: 注册中心 Eureka, 配置中心 Apollo, 系统网关Zuul, 系统入口Portal(Home), 系统应用App, 更多细节见下文架构图 |
| RDS | MySQL 5.7 | 1 | MDM系统配置及数据存储必需 | 所有系统配置及数据均存储于数据库, Apollo只是配置分发中心, 并不存储配置 |
| EC | Redis | 1 | MDM系统需求, 存储token/模型信息/连接信息等 | 所有容器均需求Redis用于缓存, 且与供应商沟通确认, 模型信息会存储于Redis |
| ES Service | ES 7.10.X | 1 | MDM系统需求, 用于模糊查询等 | 与供应商沟通确认, 该ES主要作用为全文检索及模糊查询等功能需求(appquery) |
| EFS | N/A | 1 | 用于存储各个服务运行日志 | 容器不支持STDOUT输出所有日志, 且日志位置固定无法修改, 需使用EFS挂载到容器指定目录(/opt/logs及/home/mdm/logs), 对日志进行收集, 以便排查问题 |
实现情况
截止到2021-07-30, 当前已在7745账号宁夏区创建ECS测试集群, 并顺利完成基础框架改造, 后续计划将该系统使用CF进行部署
请求流程架构图
请求流程说明表
| 步骤 | 请求来源 | 请求目标 | 说明 | 备注 |
|---|---|---|---|---|
| 1 | 用户 | NLB-Portal | 用户请求发送至NLB | |
| 2 | NLB-Portal | ECS-Container-AppHome | NLB请求转发至ECS定义的服务AppHome | |
| 3 | ECS-Container-AppHome | NLB-Zuul | AppHome将流量请求转发至Zuul网关 | 该Zuul网关信息在容器定义时以环境变量形式指定 |
| 4 | NLB-Zuul | ECS-Container-Zuul | NLB请求转发至ECS定义的服务Zuul | |
| 5 | ECS-Container-Zuul | NLB-Eureka | Zuul网关询问Eureka注册服务该流量转发地址 | 该Zuul容器在启动时将Apollo地址以环境变量形式指定, 在Apollo中配置了Eureka地址, 所有服务都将注册到Eureka |
| 6 | NLB-Eureka | ECS-Container-Eureka | NLB请求转发至ECS定义的服务Eureka | |
| 7 | ECS-Container-Eureka | NLB-Eureka | 返回解析结果 | |
| 8 | NLB-Eureka | ECS-Container-Zuul | 返回解析结果给Zuul网关 | |
| 9 | ECS-Container-Zuul | NLB-App | 解析结果均为注册到NLB-App的容器 | 所有其他服务类容器都会注册到NLB-App这个ELB上 |
| 10 | NLB-App | ECS-Container-Core/ECS-Container-MDMUI | NLB转发请求至服务容器 |
黑盒版服务架构图
最终架构图
MDM-AWS部署架构图-黑盒版.graffleMDM-AWS部署架构图.graffle
MDM-AWS最终部署架构图.graffle
以当前验证环境单EC2实例粗略计算: 以r5.2xlarge为例, 验证环境EC2费用为 3.533/hr, 年费用约 30949.08, 如购买RI费用约为 10213.20, 测试环境采用m5.xlarge, 该实例的费用为 1.766/hr 年费用约 15470.16 如购买RI费用约为 5105.1528, 由于测试环境需求至少3台EC2, 因此费用预估增加↑50%, ELB/Redis/EFS 等按使用量计费↩︎