《2019年从领域驱动到Kubernetes的微服务实践.pdf》由会员分享,可在线阅读,更多相关《2019年从领域驱动到Kubernetes的微服务实践.pdf(54页珍藏版)》请在三个皮匠报告上搜索。
1、从领域驱动到Kubernetes的微服务实践云原生的设计理念云原生(Cloud Native)是一种应用架构。包含超越12要素,DevOps,持续交付,微服务,敏捷基础设施等几大主题。采用基于云原生的技术和管理方法,可以享受“云”的高效和持续的服务能力。云原生应用DevOps微服务MicroServices持续集成交付Continuous Delivery超越12要素The Twelve-Factor App敏捷基础设施Agile I云原生微服务架构支撑数字化转型迭代更快:各模块独立开发、部署质量更高:去雪崩效应,秒级恢复应对爆发:架构到资源全弹性伸缩免单体架构微服务架构组件高度耦合,开发部署
2、效率低单体结构,可靠性差单体部署,弹性缺失物理机缺乏弹性传统云计算仅关注资源弹性容器云资源和架构全弹性伸缩什么是微服务架构微服务架构(Micro Services Architecture,MSA)提倡将庞大规模应用分割成一系列细粒度的服务,每个服务专注于单一业务功能,可独立运行,服务之间采用轻量级通信机制相互沟通、配合来实现完整的应用。相比于一体化架构和SOA架构,MSA在部署效率、伸缩弹性和容错性等方面具备优势,满足当前互联网与云计算趋势下企业IT系统对敏捷性的不懈追求。微服务架构康威定律各模块独立部署敏捷开发技术异构性强传统单体应用架构服务化拆分后的架构领域驱动设计可扩展性微服务架构当前
3、应用情况微服务生态群微服务架构在大型互联网公司中已有成熟的规模化应用。美国Netflix、Amazon、Wikipedia、Twitter等;日本Line、Cookpad等;以及国内一线互联网公司已将自身IT架构基于微服务完成重构;而在下游企业用户端,制造业和金融业有望率先实现规模化落地。业内尖端企业微服务实践微服务全景图HailoAmazonNetflixK微服务架构如何实现领域驱动设计DDD概念图 摘取自 DDDChina企业基于微服务架构搭建IT系统,可以主要分为业务系统设计和微服务平台搭建两个部分。企业根据自身业务框架进行梳理,有效切分现有的单体架构并进行领域驱动设计(DomainDr
4、ivenDesign,DDD),这一过程体现明显个性化,企业往往通过外部引入咨询专家+内部IT团队配合的方式完成;另一方面,需要基于容器云技术搭建微服务平台以实现多组件管理,主要包括开发框架、以及周边配套工具链等全套体系的构建。微服务架构实现途径服务端架构演变 Spring MVC 垂直烟囱服务化初期 Dubbo 服务数量20+服务化中期 Spring Cloud+Dubbo(存量)服务数量300+微服务化服务网格化Spring BootHystrixGuavaSleuth+zipkinKafkaELKSpring MVCNginx+LuaMQSpring BootDubboZookeeper
5、DDDSpring BootHystrixIstioEnvoyJaegerELK云音乐微服务历程 单体应用阶段云音乐早期的架构的发展,经历的几个阶段遇到的问题开发难:结构复杂,频繁失忆测试难:全量回归迭代效率低缺乏服务治理手段优化思路大中台,小前台架构思想提高横向扩展能力实现灵活服务熔断、降级策略服务化初期 烟囱阶段遇到的问题开发难:结构复杂,频繁失忆测试难:全量回归迭代效率低缺乏服务治理手段优化思路大中台,小前台架构思想提高横向扩展能力实现灵活服务熔断、降级策略云音乐早期的架构的发展,经历的几个阶段微服务试水初期服务拆分问题需要DevOps平台提供敏捷迭代能力参考DDD、The Twelve
6、-Factor方法论根据业务实际情况逐步设计服务间通信问题服务的通信方式Http、Rpc服务注册和发现,路由、负载均衡等都是需要解决的问题基础设施问题服务器资源分配困难,服务器机型碎片化一台服务器上多个进程互相影响、排障困难,QoS 难以保障服务拆分与领域驱动设计什么是领域模型 模型是一种表达形式,它是我们头脑中某种想法的表达,表述过程即可看作是建模的过程。领域模型是将业务逻辑组织为由状态和行为的类构成的对象模型。软件模型建筑模型高达模型领域驱动设计DDD统一语言分析领域战略设计定义限界上下文战术设计定义实体、聚合、服务等编码形成微服务UI层应用层领域层基础设施层统一语言领域模型问题域限界上下
7、文 分层结构 领域服务 领域事件 值对象 实体 资源库 工场 聚合战略设计战术设计简单CRUDCQRSDDD与微服务微服务:Domain-driven Design 领域驱动设计:分布式服务组成的系统 按照业务而不是技术来划分组织 自动化运维 服务快速演化迭代 通过建立领域模型来解决领域中的核心问题 通过领域模型驱动代码的实现 技术架构设计或数据存储等是在领域模型的外围 DDD vs SSI(spring+hibernate):充血模型/失血模型 建立模型用例测试驱动开发用户故事 六边形结构 整洁架构思想 CQRS模式 事件朔源 事件风暴 设计、工程、运营等的平衡 渐进演化拆分原则:DDD案例
8、1-仓储系统的复合打包场景复合打包的模型视图在仓储系统中,质检环节有这样的场景 库工对打包完成的包裹称重并测量体积 包裹的体积或重量超过标准值的包裹质检失败 系统可以查询测量失败的记录 称重完成的包裹状态变为称重完成DDD案例1-仓储系统的复合打包场景优化后的复合打包的模型视图云原生的十二要素超越12要素Beyond the Twelve-Factor A微服务转型中期业务的可靠性问题服务雪崩,非核心的服务挂了,调用链路上的其他核心服务都会受到影响一个服务慢,会导致整个调用链路出现大量超时,无法快速恢复数据一致性问题分布式事务支持方式复杂度高,且和业务绑定严重每个事务场景都需要重写一遍事务提交
9、补偿的逻辑,效率很低微服务技术栈不统一Spring Cloud、Dubbo、私有RPC,微服务框架选型不一,技术无法积累,上手成本高API 版本管理混乱,无法统一管理服务化中期遇到的问题服务注册服务发现服务调用接口粒度链路追踪1.Dubbo 与 Spring Cloud如何共存服务化中期遇到的问题2.ZK注册中心成为瓶颈 注册模型臃肿 网络开销大 资源利用率低dubbo:/server_ip:20880/org.apache.dubbo.samples.api.GreetingService?anyhost=true&application=dubboannotationprovider&de
10、fault.timeout=1000&dubbo=2.0.2&generic=false&interface=org.apache.dubbo.samples.api.GreetingService&methods=sayHello&pid=27780&side=provider×tamp=14consumer:/server_ip/org.apache.dubbo.samples.api.GreetingService?application=dubboannotationconsumer&category=consumers&check=false&defa
11、ult.timeout=3000&dubbo=2.0.2&interface=org.apache.dubbo.samples.api.GreetingService&methods=sayHello&pid=27807&side=consumer×tamp=优化重构注册中心注册中心 提供服务实例注册发现,健康检查等优化思路服务注册与服务发现解耦抽象服务注册发现模型CP模型转为AP模型元数据改造元数据中心 管理服务元信息,配置信息,路由信息等服务熔断保护 熔断限流通过熔断限流机制,当一个服务挂了,被影响的服务能够及时熔断,使用 Fallback 数据保证流程在非关键服务不可用的情况下
12、,仍然可以进行。线程池保护通过线程池和消息队列机制实现异步化,允许服务快速失败,当一个服务因为过慢而阻塞,被影响服务可以在超时后快速失败,不会影响整个调用链路。服务治理遇到的问题3.Hystrix 熔断策略动态配置难如何动态下发实时生效?微服务的关键能力限流降级容错黑白名单负载均衡参数分流拓扑依赖动态配置认证鉴权扩展插件服务注册发现环境感知熔断NSF 微服务框架 1.0微服务框架注册发现限流熔断降级容错路由负载均衡参数分流拓扑依赖动态配置服务监控服务告警认证鉴权知识库微服务框架与开源技术栈统一解决了哪些问题?将服务治理逻辑抽离、以无侵入方式实现、支持 Spring Cloud、Dubbo 等开
13、源技术栈 业务代码,框架代码解耦开发和运维;避免重复造轮子;完善方法级别治理粒度;服务治理策略实时生效;NSF 微服务框架实现SpringAOP自定义注解+字节码增强 引入微服务框架的能力用一句话概括!问题解决 服务治理策略实时生效SpringAOP自定义注解+字节码增强 引入微服务框架的能力控制面数据面服务治理的实际场景应用架构示意前端展现在某个微服务实例出错时,能够错误容忍,迅速重试服务容错在某个接口调用超时时,能够快速失败,不阻塞链路及其他服务服务熔断保护后端核心微服务性能。限制异常调用服务限流apiVersion:extensions/v1beta1kind:Deploymentmet
14、adata:labels:nce-app:nsf-stock-viewername:nsf-stock-viewernamespace:nsfspec:template:metadata:labels:nce-app:nsf-stock-viewercontainers:-name:tomcatenv:-name:NCE_PORTvalue:8790-name:NCE_JAVA_OPTSvalue:-javaagent:/home/nsf-agent/nsf-agent.jar=stock-viewerimage: 如何优雅集成?It just works!微服务化改造1.0的成本工程内部依赖
15、组件多整合内部平台组件哨兵监控链路性能追踪健康检查认证鉴权动态配置微服务化后遇到的问题大规模服务实例如何实时查看治理情况?https:/ 2.0持续扩展,降低微服务成本微服务框架NSF注册发现限流熔断降级容错服务路由负载均衡参数分流拓扑依赖动态配置服务监控服务告警认证鉴权知识库自动测试性能监控链路追踪JVM监控TCC事务消息自动补偿流量染色流量穿梭环境感知微服务应用整体架构多环境支持后端服务发现认证鉴权服务治理 熔断、降级流量控制多数据面接入服务注册服务发现租户隔离性大幅减少重复框架代码统一组件版本配置多语言支持分布式事务 数据一致性问题在分布式系统下保证业务操作的一致性是不可或缺的的,特别是
16、在电商,金融等行业对数据一致性的要求更为苛刻,因此需要引入分布式事务框架。根据业务场景(支付、派单等)选择事务模式幂等重试异常补偿两阶段提交TCCFMT事务托管(低侵入,一行注解搞定分布式事务)事务轨迹 事务状态监控 事务轨迹 事务运维能力(回查、重试)下单-扣优惠券-去库存下单-发短信、发邮件微服务大规模上线后服务认证,流量控制需要网关来解决认证、流量控制等问题系统可观察性指标监控无法覆盖到微服务调用链,无法定位故障服务,故障排查效率低服务调用信息碎片化严重,无法有效聚合业务id 无法与服务调用相关联自动化测试,线上压测,故障演练问题测试环境数量大增,环境管理、部署更新困难接口数量多,回归测
17、试占用大量人力线上压测无法引流故障演练手段不一,硬编码随处可见测试需求源源不断测试资源永远不够搭建越来越繁琐环境配置问题,新bug互相Block测试环境的灾难微服务架构下问题不断放大敢怒不敢言,敏捷只是个传说,联调时间永远不够问题.部署方式的改变单体应用独立起一个应用的几个服务就是一套完整环境。简单省心。20+服务统一修改应用的版本号,手工进行差异化配置。修改MQ的destination和数据库表配一个nginx反向代理。有点麻烦,但还能接受。200+服务全量部署工作量大,同时非常浪费机器资源。每个测试迭代新增部署有修改的服务+上下关联服务,然后各种集成配置一顿改。工序繁多,累心且极易出错。问
18、题2.测试环境“复位”测试环境有莫名干扰问题:测试环境无人管理运行着一个过时的分支内容CICD容器资源不足优雅的解决思路自动部署环境(开发自调环境,peer联调环境)生命周期控制(创建、销毁、冻结)同环境优先调用Step1.自动部署测试环境JenkinsAnsibleKubernetesHelmMavenGit代码拉取代码编译镜像构建部署分支部署平台Step2.流量染色X-B3-TraceId=3b68393d31a43489X-B3-SpanId=bbca2e4bf2db4bfaX-B3-ParentSpanId=1669bfa13d21fedfX-B3-Sampled=1X-NSF-Acc
19、essKey:e9e850c35447442da693c5648071cX-NSF-Date:2018-08-30T08:14:03ZX-NSF-Dryrun:falseX-NSF-Signaturemethod:HMAC-SHA256X-NSF-TraceOriginENV=edu-netease-15445215携带环境来源信息利用分布式追踪原理携带环境来源信息Step3.多环境流量穿梭 降低测试成本 灵活控制 分支环境独立Service Mesh 能为微服务带来什么?p流量染色p流量穿梭p故障注入p区域调度p异构支持在L4 实现治理流控与请求消息穿梭把框架与进行业务解耦,并下沉到基础设施
20、中,与Spring Cloud各有优劣引入Service Mesh架构统一控制面对接多数据面支撑微服务的全流程平台轻舟企业级分布式服务底座NCE(容器平台)Pod&Deployment网络 Calico,OVS存储 Ceph滚动更新弹性伸缩日志中心基础设施监控开发集群测试集群API网关(流量接入层)路由路由插件分流流量镜像维护开关API监控认证鉴权治理文档报表NSF(微服务框架)服务目录注册发现限流熔断降级容错路由负载均衡参数分流拓扑依赖配置中心服务监控服务告警认证鉴权统计概览知识库APM(应用性能监控)运行时拓扑性能监控服务筛选调用链调用栈JVM监控数据库监控性能告警自定义数据服务告警监控大屏账户审计CICD(开发流程管理)代码检出代码编译镜像构建集成测试自动部署流水线管理GoAPI(测试平台)单接口用例场景用例执行集定时执行接口Mock覆盖率历史管理批量导入接口监控GTXS(分布式事务)TCC事务补偿事务消息事务协调统一接入低侵入数据库事务中间件事务多框架支持轻舟企业级分布式服务底座的实现基于开源,强于开源。组件松耦合可插拔式设计理念