京东成都研究院胡峰 - 京东咚咚微服务架构从理论认识到实践落地

2020-02-27 344浏览

  • 1.京东咚咚 微服务架构 从理论认识到实践落地 京东·成都研究院 胡峰
  • 2.目录 • 微服务理论认识 • 单体应用:咚咚面向业务架构 • 微服务化:咚咚面向平台架构 • 微服务架构演进路上的一些疑问和思考
  • 3.微服务理论认识
  • 4.定义 小:• 微服务架构即是采用一组小服务来构建应用的方法。 独立进程:• 运行在独立的进程中,不同服务通过一些轻量级交互机制来通信。 自动化:• 服务围绕业务能力来构建,并依赖自动部署机制来独立部署。 — Microservices by Martin Fowler & James Lewis
  • 5.起源 • 小即是美 • 一个程序只做好一件事 • 尽可能早地创建原型 • 可移植性比效率更重要 微服务 就像把 UNIX 哲学应用到了分 布式系统
  • 6.起源 You should instead think of Microservices as a specific approach for SOA in the same way that XP or Scrum are specific approaches for Agile software development. – Building Microservices by Sam Newman
  • 7.特征 去中心 化 进化式 设计 按业务能力组织 服务 基础设施自 动化 组件 服务化 服务 即产品 智能终端 与 哑管道
  • 8.单体应用 咚咚面向业务架构
  • 9.2.0 成长期 全部业务逻辑实现部署在一个 Tomcat 中 3.0 爆发期 对业务进行分级部署隔离 客户端 PC / Android / iOS 浏览器 桌面 / M 端 第三方 微信 / 手Q TCP 接入服务 HTTP 接入服务 GW 接入服务 管控中心 0级 商城 业务服务 1级 商城 业务服务 2级 商城 业务服务 MongoDB MySQL Redis 商城 账号服务 商城 订单服务 商城 商品服务 商城 商家服务 数据处理
  • 10.问题 • 代码量膨胀到 40 万行+ • 越来越不敏捷了
  • 11.问题 • 新业务接入,扩展维护成本高 • 复制工程 • 根据业务差异定制开发 • 独立部署,每套部署含双机房主备和灰度环境,浪费资源
  • 12.微服务化 咚咚面向平台架构
  • 13.理论 服务拆分
  • 14.实践 服务拆分 京东主站 京东金融 京东微联 京东到家 京东众包 京东钱包 C端 接口服务 定制服务 插件服务 外部账号 外部证书 WEB 端 M端 SDK 端 PC 端 微信手Q端 账号服务 通用服务 调度服务 风控服务 登录服务 鉴权服务 通知服务 聊天服务 聊天记录 广播服务 搜索服务 升级服务 表情服务 反馈服务 文件服务 客服服务 会话服务 分配服务 转接服务 留言服务 入口服务 评价服务 组织架构 寻址服务 B端 商家 PC 端 商家移动端 状态服务 接入服务 基础服务 路由服务 定位服务 消息服务 数据收集 数据服务 数据处理 开普勒 众客服 运维服务 配置管理 数据管理 调度管理 运行管理 架构需求 • 服务和存储的灵活水 平伸缩 • 对接不同的业务方系 统只需定制少量服务 注册中心 缓存管理 运营服务 通知管理 升级管理 帮助中心 表情管理 风控管理 咚咚管家 数据开放 架构方式 • 微服务化 • 服务原子化、正交化 • 业务服务抽象通用化 预期成果 • 缩短业务接入时间 • 降低维护成本
  • 15.理论 服务协作 全栈团队 按业务能力组织服务 康威定律 Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations. – Melvin Conway
  • 16.实践 服务协作 • 契约式开发协作 • API • 能力 • 契约 • 版本 关联 Service Contract 实现 遵循
  • 17.理论 服务部署
  • 18.实践 服务部署 流量调度 IDC#1 定制服务 请求分配集群 通用 IM 服务 通用客服服务 运维服务 基础服务 备集群 数据服务 商家端 用户端 • 双机房一主一备一灰度集群 • 灰度集群上线新功能 • 流量灵活调度验证 定制服务 运维服务 通用 IM 服务 通用客服服务 基础服务 主集群 JMQ 运营服务 数据服务 定制服务 IDC#2 通用 IM 服务 通用 客服服务 运维 服务 基础服务 灰度集群 存储
  • 19.实践 服务部署 一主机多服务 • 50+ 微服务 • 2000+ Docker 容器 物理主机 一主机一服务 Docker
  • 20.APNS 实践 消息服务 服务编排 外部依赖 定制服务 通用服务 客服服务 • 服务交互异步化: 防雪崩效应 • 中心路由服务流控和降级 消息服务 广播消费 投递定位 定位服务 登出删除 查询状态 路由服务 设置状态 JMQ 状态广播 状态服务 TCP 接入 HTTP 接入 GW 接入 微信手Q
  • 21.实践 服务运维 数据管理 获取配置 分组 主从 管理指令 备份 归档 还原 查询 数据库 读写访问 定制服务 通用 IM 服务 通用客服服务 基础服务 获取配置 映射关系 缓存管理 读写访问 查询 JimDB 生产数据 JMQ 获取数据并生成报表 • 应用中心配置管理 • 缓存和数据库统一访问层 • 运行时管理监控 指标报表 获取中心配置 配置管理 注册/订阅 服务 埋点方法监控 注册中心 获取应用服务实例 运行管理 配置 监控 获取并映射为服务流量监控 机房 主机 集群 流量 应用 UMP
  • 22.实践 服务隔离 • 进程隔离:微服务独立进程天然隔离 • 线程隔离: 中心路由服务针对不同业务消息使用独立线程池 利用 AOP 技术切入 RPC 和 业务代码之间 既隔离了业务线程池,同时保证了业务代码的纯净 • 进程隔离 • 线程隔离 • 依赖隔离 调用方 异步回调 - HTTP 或 消息 服务进程 降级 异步化 超时控制 Armor 线程 池 线程 池 线程 池 依赖服务 服务进程 业务1 执行 业务2 执行 业务3 执行 Armor 切换 依赖服务 主依赖服务 备依赖服务 服务进程 调用监控 监控系统 - UMP
  • 23.实践 服务发现 消费者 5. 通知 1. 订阅 3. 返回 注册中心 #A 4. 通知 2. 查询 服务订阅 Redis 3. 发布 2. 写入 服务注册 注册中心 #B 1. 注册 提供者
  • 24.实践 服务监控 用户视角 业务监控 长周期趋势 多维度 服务监控 响应时间 流量 TPS 全链路 染色 基础监控 IDC 网络 主机 OS VM 系统视角
  • 25.微服务架构演进路上 的 一些疑问和思考
  • 26.不能只开车,还得修路
  • 27.开车人 - 业务研发 乘车人 - 业务需求方 修路人 - 基础研发
  • 28.微服务实施前提 • 1 ~ 2k 行,从爬行到奔跑 • 2k ~ 20k 行,开车 • 20k+,开飞机
  • 29.战略目标 原则 架构原则 设计与交付实践
  • 30.Q&A 微信公众号 瞬息之间
  • 31.Thanks