从0到3000万用户微服务架构演变历程

微风

2019/03/24 发布于 技术 分类

文字内容
2. THANKS ALL
3. 0到3000万用户微服务之旅 2018年10月20日
4. 信用算力首席架构师 十余年互联网架构经验 精通Microservice Architecture ,大数据 拥有亿级用户平台架构经验 潘志伟 万级并发的API网关经验。 panzw@chinacreditforce.com
5. 企业简介 消费金融行业领先的信息技术服务提供商 信用算力:消费金融行业领先的信息技术服务提供商。公司成立于2015年, 总部位于上海,公司以技术为驱动,依托深厚的搜索引擎研发经验与机器学 习技术,为信贷机构提供精准获客、数据风控、信息系统建设、行业咨询服 务在内的一体化解决方案。
6. 核心技术数据 截至目前 注册用户 3500W+ 日均申请量 50W+ 核心记录 百亿 服务器 900+ 平台接口日调用量 6000W+ 数据量 10T+
7. 目录 01 微服务介绍 02 0到3000万用户微服务化过程 03 微服务进阶阶段 04 微服务与大数据结合
8. 01 微服务介绍
9. 微服务介绍 降低 复杂度 可独立 部署 容错 可扩展 将原来耦合在一起的复杂业务拆分为单个服务,规避了原本复杂度无止境的积累, 每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。 由于微服务具备独立的运行进程,所以每个微服务可以独立部署。当业务迭代时只需 要发布相关服务的迭代即可,降低了测试的工作量同时也降低了服务发布的风险。 在微服务架构下,当某一组件发生故障时,故障会被隔离在单个服务中。比 如通过限流、熔断等方式降低错误导致的危害,保障核心业务正常运行。 在微服务架构下,每个服务可以根据实际需求独立进行扩展。
10. 02 0到3000万用户微服务化过程
11. 0到3000万用户微服务化过程 Nginx Nginx war war redis DB DB war war service redis service DB 2015年 Nginx war service war service DB redis service DB 2018年 war service DB
12. 0到3000万用户微服务化过程 初始阶段的平台 war DB 2015年底 方法: • tomcat+MySQL • spring+mybatis结合,构建业务系统 • 系统之间的业务共享直接依赖DB 问题: • 发版的时候会暂停服务,影响运营投放 • 并发访问量大的时候出现大量超时
13. 0到3000万用户微服务化过程 初始阶段的平台 方法: Nginx war redis war • 引入Nginx做反向代理,解决发版暂停服务问题 • 引入redis做session共享 问题: DB 2016年 • 系统中存在大量重复代码,耦合严重 • 任何的改动可能引发其他的bug,测试回归量增加 • 系统质量降低,线上bug频发
14. 0到3000万用户微服务化过程 “半”微服务阶段 方法: Nginx war service redis service DB 2017年 • 根据领域模型、业务等做服务拆分 • 引入dubbo开始进入服务化拆分 war service 问题: • 系统中任何一条性能差的SQL引发dubbo线程池满,导致平台雪崩 • DB高负荷运行,CPU经常到达 99%触发报警 • 每个人的代码风格不一样,不利于维护,系统存在不稳定因素
15. 0到3000万用户微服务化过程 微服务阶段 方法: Nginx war service DB redis service DB 2018年 war service DB • 代码自动化生成,风格统一 • 每个服务单独对应一个DB,读写分离 • 引入限流、熔断等技术保障服务稳定性 问题: • 分布式事物解决方案 • 聚合日志查询
16. 0到3000万用户微服务化过程 准备微服务工具 自动生成PO DTO对象 自动生成代码骨架 自动生成pom依赖 自动生成读写分离 自动生成Mybatis xml文件
17. 0到3000万用户微服务化过程 代码结构以及依赖关系 back(war) basic( jar) Controller IService IManger Servi ceImpl MangerImpl IMangerR IMangerW Facade ManagerImplR ManagerImplW DAOR DAOW R W
18. 0到3000万用户微服务化过程 业务架构图(简化版) 前端应用 APP M站 H5 PC 公众号 公共平台 统一接入网关 配置中心 业务聚合 用户中心 产品中心 订单中心 财务中心 支付中心 … 监控中心 用户服务 产品服务 订单服务 支付路由 目录服务 评论服务 调度中心 基础服务 短链服务 消息服务 短信路由 促销服务 排序服务 … 安全中心 数据存储 MYSQL Redis HBase HDFS ES Hive 数据中心 A/B 行为数据 搜索排行 用户标签 用户画像 运营报表 日志中心 Binlog 配置服务
19. 0到3000万用户微服务化过程 系统访问流程 业务集群 App Nginx H5 服务集群 网关集群 业务聚合层 业务聚合层 service service API LocalCache LocalCache service service API … 业务集群 业务聚合层 业务聚合层 LocalCache LocalCache service RemoteCache集群 DAL 主 全局调用链 … 从 配置 中心
20. 0到3000万用户微服务化过程 千人千面 个性化推荐 用户服务 产品服务 属性服务 校验服务 标签服务 订单服务 排序服务 用户行为 黑镜服务 精准营销 版本服务 。。。
21. 0到3000万用户微服务化过程 化串行为并行,提升访问速度 (串行) (并行) (并行) 业务聚合层 业务聚合层 业务聚合层 es ExecutorService es es 服务 服务 服务 服务 服务 服务 服务 服务 服务
22. 0到3000万用户微服务化过程 快、再快、更快 用户服务 产品服务 校验服务 标签服务 属性服务 ...
23. 0到3000万用户微服务化过程 充分使用缓存 业务聚合层 网络 网络 服务 DB RemoteCache 业务聚合层 LocalCache RemoteCache 服务 RemoteCache DB
24. 0到3000万用户微服务化过程 服务解耦 用户表 发放优惠券 积分初始化 财务初始化 邀友奖励 流量上报 优惠券服务 积分服务 用户表 订阅binlog 订阅配置平台 MQ 账户服务 MGM服务 流量上报
25. 0到3000万用户微服务化过程 熔断 缓存 解耦 安全
26. 0到3000万用户微服务化过程 熔断功能要求 断 熔 错误率 时间窗口 人工干预 主动告警
27. 0到3000万用户微服务化过程 缓存技巧 l 使用自定义@anntation(启动本地缓存TTL+远程缓存) l key自动注册到配置中心 l 支持手动修改TTL时间 l 防止缓存击穿 1)使用布隆过滤器 2) 启用缓存Slot synchronized (lock) 替换为 synchronized (slot[key.hash%slot_size])
28. 0到3000万用户微服务化过程 基于MQ的应用解耦 l 应用层必须支持消息幂等 l 支持消息回溯 l 支持消息重放 l 基于关键字查询 l 消息的消费的机器IP以及消息时间
29. 0到3000万用户微服务化过程 安全机制 zk zk 授权 consumer provide 问题: consumer provide 基于dubbo Filter机制扩展 • 消费者可以通过注册中连接任意服务提供方 • 自动接入配置中心 • 消费者可以通过直连的方式连接服务提供方 • 支持限制IP访问 • 对服务方提供的服务做任何操作 • 支持限定某个方法访问权限 • 非授权类连接具备自动告警机制
30. 03 微服务进阶阶段
31. 监控平台 dubbo MonitorService扩展 • Tps • Elapsed • Concurrent • …
32. 测试 需求: 开发 要求: •模拟一次支付成功 •别让我额外编码 •模拟一次注册失败 •我有代码洁癖,非业务的代码不要加 •能模拟各种状态值 •我的代码谁动了,出问题后谁负责 •模拟延时、异常 •…… •测试人员方便模拟 •……
33. Mock平台 Provider Consumer 配置中心 http request Mock 平台 Filter http response
34. 日志检索平台 业务系统A FLUME KAFKA 实时计算平台 日志平台 规则引擎 告警平台 业务系统B FLUME 业务系统C FLUME
35. 线上故障情况 问题 期望 • 客服报线上问题 了,但是验证后却正常 • 恢复任意时刻现场数据 • 线上产生诡异的数据不清楚如何产生的 • 重复模拟指定场景,特定人的操作轨迹 • 老板操作发生异常,但是研发操作却正常 • 不能污染线上数据 • 。。。 • 。。。
36. 日志回放系统 KAFKA 抽样规则集 HBase HBase HBase HBase 日志回 放系统 泛化 配置中心 注册中心 基础服 务集群
37. 04 微服务与大数据结合
38. 大数据平台 千人千面个人化智能推荐 历史申请数据 人工智能 浏览记录 个性化智能推荐 搜索推荐 用户画像 排序模型
39. 大数据平台 海量数据存成计算问题 用户行为记录: 初始方案: 解决方案: • 登陆 • MySQL • 引入HBase存成海量用户行为记录 • 点击 • Redis • RowKey=定长(用户id反转)+日期 • 申请 • …… 问题: 需求: 优势: • redis成本太高 • 自动解决冷热数据 • 每个月记录数10亿+ • MySQL涉及到分库分表 • 无需关注分库分表 • 支持增量/全量分析统计 • 冷热数据需要手动处理 • 任何服务器故障,不丢失数据 • 多维度统计分析比较困难 • 支持MR或者Spark做多维度计算
40. 大数据平台 大数据平台技术架构 WEB Kafka Flume Kafka STORM API Spark streaming SOA MQ 存储计算 数据服务 Hadoop SOA HBase API ES MySQL 增量同步 binlog Hive DW AD-HOC Datax Distributed scheduling 监控平台 外 部 业 务 应 用
43. THANKS ALL