中青易游 张辉清 - 从业务架构到微服务

  • 496 浏览

翦梓云

2017/12/18 发布于 技术 分类

微服务是怎么来的,它与业务模型有怎样的映射关系,是依据什么从服务演变为微服务的?具体技术要怎样实现? 本次分享以公司真实案例为背景,从业务架构开始,包括商业逻辑、商业主体、主营业务和业务流程,然后到领域模型、状态变迁和关键行为,继而确定服务的边界、职责和交互。由于业务发展阶段、企业规模和技术复杂度的提升和变化,逐步需要从大服务拆分为中、小、微服务,微服务是“长”出来的。最后是微服务的具体落地,包括微服务框架、治理、统一应用架构、API网关以及关键技术点。

文字内容
1. 从业务架构到微服务 张辉清 中青易游 CTO
2. 微服务的调用应该放哪一层? A. 表现层 B. 业务逻辑层 C. 数据层 D. 公共层
3. 微服务从哪里来? A. 业务架构 B. 领域模型 C. 接口设计 D. 程序方法
4. 微服务与业务架构有什么关系? 答: 企业总体架构:企业服务=》业务架构=》领域模型=》面向服务架构=》微服务架构 单个项目架构:功能需求=》用例图=》用例活动图=》领域模型=》代码实现
5. 议题 • 微服务与企业总体架构 • 微服务与单个项目架构 • 微服务技术实现
6. 微服务与企业总体架构
7. 企业总体架构 l 业务架构 l 架构现状 • 功能架构 • 应用架构 • 数据设计 • 物理架构 • 接口架构 • 领域模型 l 架构规划 l 顶层架构规划 l 功能规划 l… l 架构实施
8. 业务架构 • 主营业务 • 商务主体:供、采、平台 • 商务模式:4‰ • 组织架构:人数、组织 • 商务运作模式:顶层业务运转 • 关键业务流程: 预订流程、订单流程、供应流程、结算流程、账号流程 • 附档业务资料
9. 组织结构 国内事业部 223 国内渠道部 国内机票交 国内供管部 16 易部142 57 拓展组 出票组 63 华东组 商务组 退票组 37 华南组 航动组 20 海贸组 3 BEM组 17 华北组 华西组 外联 投诉组 8 航旅组 BC组 研发中心 CTO 国内研发 运维部 国际研发 … 政策组 DBA 订单组 技术支持 结算组 运维组 预订组 IT组 OEM组 • 微服务设计与康威定律 • 组织架构=》系统架构 • 业务架构=》组织架构
10. 功能架构 • 功能 • 角色 • 权限 • 问题:先有功能、先有角色?
11. 应用架构 国内 Booking Order Product Connector 国际 Booking Order Product Connector 新业务 xx xx Platform Payment Insurance User CRM Passport Portal CMS FX 缓存 Job MQ Log Metrics • 产品线=》子系统=》应用 • 应用编号:102010 • 应用名称: Flight.Booking.xxx 微服务在哪儿? Dashboard
12. 分层架构 • 领域架构 • 三层架构:IPO 微服务的调用应该放哪一层? Presentation Layer(MVC) BookingMVC ViewModel BookingWS DTO Application Layer AppService.BookingMVC AppService.BookingWS Domain Layer DomainService Interface DomainService DomainModel Repository Interface DataService DataModel Repository Layer Repository WS Agent ProductDB SOA/API Infrastructure Layer Memcached/Log/MetricsRedis/MQ
13. 数据设计 • 100多个库,1万多张表 • 可大可小的设计 • 企业数据=》数据设计 =》数据库设计 • 一库一服务是趋势,不 是当前最佳实践 微服务设计哪儿?
14. 数据库规划
15. 数据变迁 • 状态图是数据与行为的互动 • 关键数据变迁与核心业务流程 • 变迁的过程与微服务 微服务在哪儿?
16. 领域模型 供应商 采购商 平台商 产品 预订 订单处理 采购 查航 班预 订 +查询 航班() +选择 政策( ) +录入 乘客信 息( ) +生成PNR() +提交 订单( ) P NR 导入 创单 +PNR导入() +选择 政策() +提交 订单() 财务结算 账户管理 基础设施 航班 引擎 +查询 航班库 存() +查询 政策() +查询 价格() +查询 贴点() 政策 +正常 政策() +特殊 政策() +保底 政策() +虚拟 政策() +联程 政策() 乘客 信息 +录入 乘客信 息() +使用 常旅客 信息( ) +保存 常旅客 信息() 黑屏 代理 +生成PNR() +PNR查询() 订单 +保存 订单信 息( ) • 业务流程与领域模型 • 业务活动与程序方法 微服务在哪儿?
17. 物理架构 用户 DMZ 国内、国际机票平台 intranet 数据库集群 公司职员 内部管理系统 服务 作用小应用 • IDC机房 • 网站物理架构 • 数据库物理架构 • 集群架构 • 域名架构 微服务部署在哪儿?
18. 顶层架构—平面图 功能 运营商 产品管理 订单服务 用户管理 结算管理 系统管理 分析报表 供应商 产品发布 订单处理 营销 系统管理 接口直连 生产 风控 操作 供应 查询 预订 数据 支付 产品 订单 用户/雇员 服务 资金 第三方支付/ 银行 基础数据 结算 用户关系 监控 维护 采购商 产品预订 采购渠道 网站门户 功能=》用户界面 操作=》服务 数据=》数据存储 订单处理 接口分销 常旅客 APP 微服务在哪儿? 系统管理 H5 开发商 计算 存储 网络 安全 监控和管理 中间件
19. 顶层架构—剖面图 Onl i ne 预订服务 MQ Net wor k Ap p licat io n s(应用) Of f l i ne Mobi l e Open Api BEM Services(服务层) 订单处理服务 产品供应服务 财务结算服务 Fram ework(基础框架) Cache Loggi ng Job 公共服务 ( 平台) Met r i cs Ser ver DC(数据中心) Dat abase Secur i t y Oper at i ons 服务的归类 下层为上层服务 以客户为中心 微服务在哪儿?
20. 微服务与单个项目架构
21. xxx项目设计说明书 • 功能需求 • 用例图、用例活动图 • 领域图 • 接口设计 • 分层设计 • 数据库设计 • 物理设计
22. 功能需求
23. 用例视图 平台 Mobi l e OpenApi 国内机票查询引擎 查询航班数据 清理缓存 系统管理者
24. 用例活动图 平台 查询请求 并行计算: 获取政策 2s 获取运价 1s 查询航班库存数据 3s 查询总耗时 3s 查询引擎 查询接口 验证参数 验证用户身份信息 参数合法性 黑屏接口 获取政策 获取贴点 最高返点限制 用户扣点 区域划分 获取政策供应信息 获取价格 获取航班数据 从ETERM或 第三方接口获取数据 没有缓存数据 有缓存数据 获取缓存规则 缓存航班数据 舱位库存数据 返回航班数据 显示返回数据 合并计算数据 1. 优化算法,提高计算效率 2. 1s内完成计算 3. 缓存一分种,后期可根据用户、频率来配置缓存策略 构建返回数据
25. 领域图 平台 Mobi l e OpenApi 航班 +获取航班数据( ) +获取缓存策略( ) 国内机票查询引擎 +查询航班数据( ) +航班详情数据( ) 合并计算 +合并计算( ) +多线程获取数据源( ) 政策 +获取政策( ) +最高返点限制( ) +用户扣点( ) +区域划分( ) +获取供应信息( ) 贴点 +获取贴点数( ) 价格 +获取价格( )
26. 微服务接口设计 • 交互、连接、契约 • 实施目标 • Request/Response模式 • IPO关注输入输出
27. 分层设计 PresentationLayer FlightSearchEngineWS BusinessFacade BusinssLayer DBEntity EntityLayer Business Entity DataAccess DataLayer EtermAgent CommonLayer Utils xx FlightPric xx2 e xxRate
28. 代码实现
29. 演化 平台 Mobi l e OpenApi 国内机票查询引擎 查询航班数据 清理缓存 平台 查询 请求 并行计算: 获取政策 2s 获取运价 1s 查询航班库存数据 3s 查询总耗时 3s 查询引擎 查询 接口 验证 参数 验证用户身份信息 参数合法性 黑屏接口 系统管理者 获取 政策 获取 贴点 最高 返点 限制 用户 扣点 区域 划分 获取 政策 供应信 息 获取 价格 获取 航班 数据 从ETERM或 第三方接口获取数据 没有 缓存 数据 有缓 存数 据 获取 缓存 规则 缓存 航班 数据 舱位 库存 数据 平台 返回 航班 数据 Mobi l e OpenApi 合并 计算 数据 1.优化算法,提高计算效率 2.1s内完成计算 3.缓存一分种,后期可根据用户、频率来配置缓存策略 构建 返回 数据 航班 +获取航班数据( ) +获取缓存策略( ) 国内机票查询引擎 +查询航班数据( ) +航班详情数据( ) 合并计算 +合并计算( ) +多线程获取数据源( ) 政策 +获取政策( ) +最高返点限制( ) +用户扣点( ) +区域划分( ) +获取供应信息( ) 贴点 +获取贴点数( ) 价格 +获取价格( ) 显示 返回 数据 功能需求=》用例图=》活动图=》领域模型=》代码实现
30. 探讨几点
31. 微服务从哪里来? • 业务架构:业务流程、业务活动 • 领域模型 • 数据变迁图 • 接口架构 • 程序方法
32. 微服务与业务发展阶段 业务: 初创期 发展期 成熟期 稳定期 技术: 单块应用 垂直架构 服务化 微服务
33. 微服务怎么拆分? • 拆分原则:业务发展阶段,企业规模,技术复杂度 • 变化规律:微服务不停长大,不停拆小 – 人:控制复杂度,大服务=》微服务,从大到小 – 事:复杂度累加,微服务=》大服务,从小到大
34. 微服务技术实现
35. 微服务与RPC • 微服务=Client/Server+HTTP+数据+JSON • 通讯=通讯双方+线路+报文+编码 • RPC=Client/Server+通道+数据+编码 • 沟通=沟通双方+邮件/电话+信息+中/英 • 快递=买卖双方+路+货+打包 微服务优点: • 轻量级、粒度小、简单、兼容 • RESTful:URI+HTTP Method • Error Code:HTTP Code • 多语言支持 、数据类型 • 人与机器都可读 • 流览器Javascript
36. 微服务框架 • 框架需求: – 调试 – 测试 – 文档 – JSON元数据 – 多协议:JSON/XML/Protobuf – 更多:性能/框架轻/易学易用/容易改造 • 开源改造: – ServiceStack/OWIN/Spring Cloud
37. 微服务框架实现 • 服务端架构 • 客户端架构
38. 代码案例 • 业务逻辑代码的开放 • 路由配置 • 开通Protobuf & Swagger
39. 运行结果 • 多协议 • 文档 • 元数据 • 调试工具
40. 调试工具Swagger • Swagger: – JSON元数据 – 可调试 – 文档 • 传统调试: – UT – 调用者
41. 测试工具SoapUI ü 测试工具/测试调 用/测试桩/断言 ü 用例管理/测试数 据外置/测试报告 ü 一键测试/负载测 试/性能测试
42. 微服务测试与DevOps 获取SoapUI用例 获取代码 版本库 提提 交交 代用 码例 CI系统 代码编译 SoapUI测试 +HTML Report 发布 测试 发布 生产 环境 环境 开发 测试 自动化测试
43. 微服务治理 • 接口注册与应用 • 接口编号ApiId • OpenApiName • 开放选项
44. 微服务网关 PartnerAPI WebAPI 为什么要网关? MobileAPI 1. 网络隔离 2. 用户权限 3. 非功能性需求/复用 4. 方便测试 DMZ 5. 统一管理 Intranet 网关ApiGateway 数据库集群 内部服务
45. 网关核心功能 • Route:OpenApiName=>内部服务 • Auth:IP黑名单/角色客户/网关授权 • Timeout:网关=>内部服务 • Fusing: – 异常阈值=>断开链路=>冷却时间=>链路闭合 – 保险丝,无谓消耗 • Limit:调用频率 > 阈值=>断开链路 • Metrics&Log:实时监控和集中式日志
46. 网关架构 PartnerAPI WebAPI MobileAPI 网关管理 ApiGateway网关 (router/timeout/limit/fusing/log/metrics) 统一操作 服务 RabbitMQ 数据库 内部服务1 内部服务2 Metrics CentralLog Zookeeper Redis
47. 网关配置 • 网关策略:Timeout/Limit/Fusing • 绑定API:一对多 • 设置客户例外
48. 微服务与更多 • 微服务与HttpJob • 微服务与集中式日志 • 微服务与容器 • 微服务与监控
49. 答 • 微服务的调用放到哪一层? • 微服务从哪里来? • 微服务架构在哪个业务阶段最佳? • 微服务与业务架构的关系? 单个项目架构:功能需求=》用例图=》活动图=》领域模型=》代码实现 企业总体架构:企业服务=》业务架构=》领域模型=》面向服务架构=》微服务架构
50. THANK YOU