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进行部署

请求流程架构图

MDM-AWS部署架构图

请求流程说明表

步骤 请求来源 请求目标 说明 备注
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部署架构图-黑盒版

最终架构图

MDM-AWS最终部署架构图

MDM-AWS部署架构图-黑盒版.graffle


MDM-AWS部署架构图.graffle


MDM-AWS最终部署架构图.graffle

  1. 以当前验证环境单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 等按使用量计费↩︎