1、企业微服务技术架构介绍目录01020304微服务介绍0到3000万用户微服务化过程微服务进阶阶段微服务与大数据结合微服务介绍01微服务介绍将原来耦合在一起的复杂业务拆分为单个服务,规避了原本复杂度无止境的积累, 每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于微服务具备独立的运行进程,所以每个微服务可以独立部署。当业务迭代时只需 要发布相关服务的迭代即可,降低了测试的工作量同时也降低了服务发布的风险。在微服务架构下,当某一组件发生故障时,故障会被隔离在单个服务中。比 如通过限流、熔断等方式降低错误导致的危害,保障核心业务正常运行。在微服务架构下,每个服务可以根据实际需求独
2、立进行扩展。降低降低 复杂度复杂度可独立可独立 部署部署容错容错可扩展可扩展0到3000万用户微服务化过程020到3000万用户微服务化过程warwarDBDBNginxrediswarwarDBNginxrediswarserviceserviceservicewarDBNginxrediswarserviceserviceserviceDBDB2015年年2018年年初始阶段的平台初始阶段的平台0到3000万用户微服务化过程warDB2015年底年底方法:方法:tomcat+MySQLspring+mybatis结合,构建业务系统系统之间的业务共享直接依赖DB问题:问题:发版的时候会暂停服
3、务,影响运营投放并发访问量大的时候出现大量超时DBwarNginxrediswar初始阶段的平台初始阶段的平台0到3000万用户微服务化过程方法:方法:引入Nginx做反向代理,解决发版暂停服务问题引入redis做session共享问题:问题:系统中存在大量重复代码,耦合严重任何的改动可能引发其他的bug,测试回归量增加系统质量降低,线上bug频发2016年“半半”微服务阶段微服务阶段0到3000万用户微服务化过程方法:方法:根据领域模型、业务等做服务拆分引入dubbo开始进入服务化拆分问题:问题:系统中任何一条性能差的SQL引发dubbo线程池满,导致平台雪崩DB高负荷运行,CPU经常到达
4、99%触发报警每个人的代码风格不一样,不利于维护,系统存在不稳定因素2017年年warDBNginxrediswarserviceserviceservice微服务阶段微服务阶段0到3000万用户微服务化过程方法:方法:代码自动化生成,风格统一每个服务单独对应一个DB,读写分离引入限流、熔断等技术保障服务稳定性问题:问题:分布式事物解决方案聚合日志查询2018年年warDBNginxrediswarserviceserviceserviceDBDB准备微服务工具准备微服务工具自动生成读写分离自动生成代码骨架自动生成Mybatis xml文件自动生成PO DTO对象自动生成pom依赖0到3000
5、万用户微服务化过程ManagerImplR ManagerImplW0到3000万用户微服务化过程代码结构以及依赖关系代码结构以及依赖关系Controllerback(war)basic( jar)IMangerMangerImplFacadeIServiceServi ceImplIMangerR IMangerWDAOR DAOWWR业务架构图(简化版)业务架构图(简化版)APPM站H5公众号PC前端应用前端应用统一接入网关用户中心产品中心订单中心财务中心支付中心业务聚合业务聚合用户服务产品服务订单服务支付路由目录服务基础服务基础服务评论服务短链服务消息服务短信路由促销服务排序服务MYSQ
6、LRedisHBaseHDFSES数据存储数据存储Hive公共平台配置中心监控中心安全中心日志中心调度中心Binlog 配置服务A/B行为数据搜索排行用户标签用户画像数据中心数据中心运营报表0到3000万用户微服务化过程系统访问流程系统访问流程0到3000万用户微服务化过程AppH5NginxAPI网关集群API业务集群业务聚合层业务聚合层LocalCacheLocalCacheserviceserviceserviceserviceservice服务集群业务聚合层LocalCache业务聚合层LocalCache业务集群RemoteCache集群主从DAL配置 中心全局调用链全局调用链千人千
7、面千人千面 个性化推荐个性化推荐0到3000万用户微服务化过程用户服务产品服务属性服务校验服务标签服务订单服务排序服务用户行为黑镜服务精准营销版本服务。服务服务化串行为并行,提升访问速化串行为并行,提升访问速度度0到3000万用户微服务化过程服务服务服务业务聚合层服务业务聚合层 ExecutorService服务(串行)(串行)(并行)(并行)服务业务聚合层服务(并行)(并行)eseses快、再快、更快快、再快、更快0到3000万用户微服务化过程用户服务用户服务产品服务产品服务属性服务属性服务校验服务校验服务标签服务标签服务.充分使用缓存充分使用缓存0到3000万用户微服务化过程RemoteC
8、ache服务RemoteCache业务聚合层DB业务聚合层LocalCache服务RemoteCacheDB网络网络服务解耦服务解耦0到3000万用户微服务化过程发放优惠券用户表积分初始化订阅binlog订阅配置平台 MQ优惠券服务财务初始化邀友奖励流量上报用户表积分服务账户服务MGM服务流量上报缓存缓存解耦解耦熔断熔断安全安全0到3000万用户微服务化过程熔断功能要求熔断功能要求熔熔断断时间窗口错误率人工干预主动告警0到3000万用户微服务化过程缓存技巧缓存技巧l使用自定义anntation(启动本地缓存TTL+远程缓存)lkey自动注册到配置中心 l支持手动修改TTL时间 l防止缓存击穿1
9、)使用布隆过滤器2) 启用缓存Slotsynchronized (lock) 替换为 synchronized (slotkey.hash%slot_size)0到3000万用户微服务化过程基于基于MQ的应用解耦的应用解耦0到3000万用户微服务化过程l应用层必须支持消息幂等l支 持 消 息 回 溯l支 持 消 息 重 放l基于关键字查询l消 息 的 消 费 的 机 器I 以及消息时间0到3000万用户微服务化过程安全机制安全机制zkconsumerprovide基于基于dubbo Filter机制扩展机制扩展自动接入配置中心支持限制IP访问支持限定某个方法访问权限非授权类连接具备自动告警机制
10、问题:问题:消费者可以通过注册中连接任意服务提供方消费者可以通过直连的方式连接服务提供方对服务方提供的服务做任何操作zkconsumerprovide授权授权微服务进阶阶段03dubbo MonitorService扩展扩展TpsElapsedConcurrent监控平台需求:需求:模拟一次支付成功模拟一次注册失败能模拟各种状态值模拟延时、异常测试人员方便模拟要求:要求:别让我额外编码我有代码洁癖,非业务的代码不要加我的代码谁动了,出问题后谁负责测试测试开发开发Mock平台平台ConsumerProviderFilterhttp request Mock 平台http response配置中心
11、日志检索平台日志检索平台KAFKA业务系统AFLUME业务系统BFLUME业务系统CFLUME日志平台日志平台告警平台告警平台实时计算平台规则引擎线上故障情况线上故障情况客服报线上问题 了,但是验证后却正常线上产生诡异的数据不清楚如何产生的老板操作发生异常,但是研发操作却正常。问题问题恢复任意时刻现场数据重复模拟指定场景,特定人的操作轨迹不能污染线上数据。期望期望日志回放系统日志回放系统KAFKA抽样规则集配置中心HBaseHBaseHBaseHBase日志回日志回 放系统放系统基础服基础服 务集群务集群泛化泛化注册中心注册中心微服务与大数据结合04大数据平台千人千面个人化智能推千人千面个人化
12、智能推荐荐排序模型排序模型用户画像历史申请数据人工智能搜索推荐个性化智能推荐浏览记录海量数据存成计算问题海量数据存成计算问题用户行为记录:用户行为记录:登陆点击申请需求:需求:每个月记录数10亿+支持增量/全量分析统计初始方案:初始方案:MySQLRedis问题:问题:redis成本太高MySQL涉及到分库分表冷热数据需要手动处理多维度统计分析比较困难解决方案:解决方案:引入HBase存成海量用户行为记录RowKey=定长(用户id反转)+日期优势:优势:自动解决冷热数据无需关注分库分表任何服务器故障,不丢失数据支持MR或者Spark做多维度计算大数据平台大数据平台大数据平台技术架构FlumeSOA MySQLKafkaMQbinlogSTORM增量同步Kafka存储计算HadoopHBase ESHive数据服务SOAAPIDWAD-HOCDistributed scheduling监控平台外 部 业 务 应 用Spark streamingWEBAPIDataxTHANKS ALL