微服务理解与实践.docx
《微服务理解与实践.docx》由会员分享,可在线阅读,更多相关《微服务理解与实践.docx(40页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、微服务理解与实践微效劳理解与理论微效劳架构的概念如今对于大众应该都不生疏无论使用ApacheDubbo、还是SpringCloud都可以去尝试微效劳把复杂而庞大的业务系统拆分成一些更小粒度且独立部署的Rest效劳。但是这个经过详细应该怎么做现有的条件下到底要不要做微效劳效劳拆分成什么粒度才是适宜的遗留的老系统需要怎样考虑重构改造有哪些坑需要我们注意系统怎么在分布式效劳下实现数据的一致性以及效劳的高可用可伸缩拆分的经过中系统数量增多测试、部署、运维、监控又应该怎样处理本文将从这些问题的深度分析出发阐述微效劳架构落地的一些设计原那么以及利弊取舍结合微效劳架构经过的很多最正确理论经历祈望给读者带来一
2、定的启发以及考虑防止在实际应用经过中走弯路可以多快好省的落地实现微效劳架构。内容涉及微效劳架构的开展经过简介微效劳架构的特点与常见特性微效劳架构的常见技术与简单例如微效劳架构存在的一些问题怎样合理拆分微效劳遗留系统应该怎样改造怎么考虑拆分后的数据一致性系统以及效劳的高可用可伸缩怎样实现拆分经过的测试以及部署怎样处理拆分后的运维以及监控怎样处理第一局部微效劳深度解析微效劳架构的开展经过简介效劳架构开展的五个关键时间节点“微效劳架构那么是由FredGeorge在2021年度的一次技术大会上所提出在大会的演讲中他讲解了怎样分拆效劳和怎样利用MQ来进展效劳间的解耦这就是最早的微效劳架构雏形。而后由Ma
3、rtinFowler发扬光大并且在2021年度发表了一篇著名的微效劳文章这篇文章深化全面的讲解了什么是微效劳架构。随后微效劳架构逐渐成为一种非常流行的架构形式一大批的技术框架以及文章涌现出来越来越多的公司借鉴以及使用微效劳架构相关的技术。2016年度4月Lightbend公司的创始人兼CTO、Akka的JonasBonr发布了一本小册子?响应式微效劳架构?讨论了基于响应式原理的微效劳架构和怎样将其用于构建可扩展可应对故障的隔离效劳并与其他效劳结合以形成一个严密的整体。十分值得一提的是在微效劳架构开展的经过中还有两位技术大牛的影响不可无视ChrisRichardson?POJOSINACTION
4、?与?微效劳架构的设计形式?的也是著名开源工程cloudfoundry以及eventuate的创始人他做了大量的微效劳架构相关的方法以及理论的探究这里有其大量的演讲材料以及视频。SamNewmanMartinFowler以及JamesLewis的Thoughtworks前同事?BuildingMicroservices?以及?MonolithToMicroservices?这两本的前一本中文版叫?微效劳设计?同时也是2021年度著名的推特论战?单体应用vs微效劳应用?的主角之一另外两人分别是Netflix的AdrianCockcroft以及Etsy的JohnAllspaw详细参见。微效劳架构的
5、开展趋势软件架构的开展趋势简单的讲可以分为这几个阶段详细介绍可以参见我的上一个文章?软件架构开展历程共享?或?高可用可伸缩微效劳架构基于Dubbo、SpringCloud以及ServiceMesh?一书单体架构最简单的架构风格所有的代码在一起部署到单个进程例如打包成一个war或jar就是通常讲的“大泥球。垂直架构随着业务的开展系统变得复杂通过构造化考虑大众发现对于大规模协同开发有效的控制系统规模以及交互难度需要将效劳进展垂直方向拓展。微效劳架构MSA微效劳架构风格将系统设计为一组低耦合的微效劳每个效劳独立的部署运行效劳间一般采用REST等方式通信同时采用自动化的测试运维等技术降低效劳拆分后的复
6、杂度。我们可以从Google的趋势图看到从2021年度起微效劳架构架构的热度就直线上升成为最热门的技术之一。从国内的情况来看一方面另一方面一直到如今每年度的QCon大会都会有微效劳架构版本跟大众共享最新的微效劳架构知识以及理论经历。什么是微效劳架构讲了这么多那么到底什么是微效劳以及微效劳架构呢详细包含如下特征组件以效劳形式来提供微效劳也是面向效劳的提倡用可以独立部署的效劳来作为组装业务才能的组件而不是类库的形式。这样需要明确定义组件间的接口以及通信协议。微效劳架构的一个目的是通过合理的边界划分以及演化机制来减少变更带来的影响。围绕业务功能进展组织根据康威定律“设计系统的组织其产生的设计等同于组
7、织之内、组织之间的沟通构造。微效劳更倾向于围绕业务功能对效劳构造进展划分、拆解。这样的效劳是针对业务领域有着关完好实现的软件它包含使用接口、持久存储、和对象的交互。因此团队应该是跨职能的包含完好的开发技术用户体验、数据库、和工程管理。产品moothing:antialiased;box-sizing:border-box;outline:0px;强化终端及弱化通道微效劳的应用致力松耦合以及高内聚所以更倾向于REST而不是复杂的协议如WS或BPEL或集中式框架或采用轻量级消息总线如RabbitMQ或者ZeroMQ等来发布消息。分散治理这是跟传统的集中式管理很大区别的地方。微效劳把单体式框架中的组
8、件拆分成不同的效劳在构建它们时将会有更多的选择。分散治理也意味着责任的下放每个团队对自己的业务效劳负责假如你维护一个7x24小时的不连续效劳那么你就必须24小时随时OnCall哪怕晚上3点起来处理问题就是AWS的形式。分散数据管理当单体式的应用使用单一逻辑数据库对数据持久化时企业通常选择在应用的范围内使用一个数据库。微效劳让每个效劳管理自己的数据库无论是一样数据库的不同实例或是不同的数据库系统。这一点我们后面会详细讲明。根底设施自动化云计算十分是AWS、Azure、Aliyun等的开展减少了构建、发布、运维微效劳的复杂性。微效劳的团队更加依赖于根底设施的自动化。其实不管是运维测试也是一样。容错
9、性设计任务效劳都可能因为供给商或底层硬件或者网络的不可靠而故障。微效劳应为每个应用的效劳及数据中心提供日常故障检测以及恢复采集各项系统状态指标以及业务指标、日志信息进展监控并提供预警报警才能。面向失败的设计后面也会再讨论。改良设计组件的关键特性是可替代性以及可晋级性由于设计会不断更改微效劳所提供的效劳应该可以交换或报废而不是要长久的开展的每种设计也一样都有自己的阶段使命以及生命周期。这样假如客户需要兼容性版本控制是一种好的手段。ChrisRichardson那么简化了这种讲法认为微效劳是一种架构风格通过一组效劳的方式构造系统同时需要知足如下条件高可维护性以及测试性松耦合性可独立部署围绕业务才能
10、进展组织一个小团队对其完全负责微效劳架构可以快速、频繁以及可靠地发布大型的复杂应用系统也可以使得组织可以进化出自己的技术栈。PeterLawyer讲微效劳很多地方十分像是MikeGancarz总结的Unix哲学小即是美Smallisbeautiful让程序只做好一件事Makeeachprogramdoonethingwell尽可能早地建立原型Buildaprototypeassoonaspossible可移植性比效率更重要Chooseportabilityoverefficiency尽可能地榨取软件的全部价值Usesoftwareleveragetoyouradvantage.微效劳架构就是U
11、nix哲学在分布式系统里的应用。微效劳架构的哲学本质上等于Unix哲学里的“让程序只做好一件事效劳都很小细粒度地执行单个功能。组织文化应拥抱自动化部署以及测试。这减轻了管理以及运维的负担。文化以及设计原那么应拥抱失败以及错误类似于抗脆弱系统。每个效劳都是弹性的回弹性的可组合的最小化的以及完好的弹性以及回弹性参见响应式微效劳。从这里我们可以得出一个结论一个微效劳架构的系统需要知足一系列的条件以及原那么而不仅仅是讲使用了某个微效劳的技术框架就是微效劳架构。微效劳这个词目前也过于流行以致于有些泛滥了。很多技术组件或框架例如可以用来暴露效劳可以用来自动化部署可以用来管理配置等等它们都可以用来作为微效劳
12、架构设计时的某个组成局部。但是单独用一个并不代表我们实现了微效劳设计而只能讲明我们借鉴了一些微效劳的思想。另一方面我们在做微效劳的时候也不用把市面上所有的微效劳组件都拿来用。就像是我们写个业务系统不会用到JDK的所有API画一幅画之前我们买了一盒24支的水彩笔实际上我们可能做一幅作品最终只用到了5-6个颜色的水彩笔。微效劳架构的特点、优势以及常见技术微效劳的四个特点以及六个才能如今让我们分析一下上一节里的各个技术大牛们阐述的技术观点从设计开发、系统部署、测试运维以及效劳治理四个主要方面来考虑微效劳架构的特点那么这四个方面就可以总结为下列图微效劳架构首先是一个分布式的架构其次我们要暴露以及提供业
13、务效劳才能然后我们需要考虑围绕这些业务才能的各种非功能性的才能。这些分散在各处的效劳本身需要被管理起来并且对效劳的调用方透明这样就有了效劳的注册发现的功能需求。同样地每个效劳可能部署了多台机器多个实例所以我们需要有路由以及寻址的才能做负载平衡提升系统的扩展才能。有了这么多对外提供的不同效劳接口我们一样需要有一种机制对他们进展统一的接入控制并把一些非业务的策略做到这个接入层比方权限相关的这就是效劳网关。同时我们发现随着业务的开展以及一些特定的运营活动比方秒杀大促流量会出现十倍以上的激增这时候我们就需要考虑系统容量效劳间的强弱依赖关系做效劳降级、熔断系统过载保护等措施。以上这些由于微效劳带来的复杂
14、性导致了应用配置、业务配置都被散落到各处所以分布式配置中心的需求也出现了。最后系统分散部署以后所有的调用都跨了进程我们还需要有能在线上做链路跟踪性能监控的一套技术来协助我们时刻解析系统内部的状态以及指标让我们可以随时对系统进展分析以及干预。这六种才能总结如下列图微效劳的优势这个图x轴是系统复杂度y轴是开发的消费力我们可以看到在系统复杂度很低的时候单体的消费力要高一点这是因为拆分微效劳管理这些效劳的本钱增加了当复杂度开场增加单体的消费力快速的降低而微效劳那么不太受影响这是因为复杂度大了单体牵一发而动全身各种耦合以及互相影响过多随着复杂度越来越高微效劳的低耦合开场减低了消费力的衰变而单体架构的消费
15、力那么会降到一个非常低的程度也就是讲微效劳应用在复杂度低的情况下t:none;-webkit-font-smoothing:antialiased;box-sizing:border-box;margin:0px0px1.1em;outline:0px;搞清楚了微效劳架构与单体架构的消费力的区别以后我们再来看看微效劳有哪些优势我总结了一下有以下几点效劳简单因为微小所以简单从一个大泥球变成了很多个小而美的颗粒每个小颗粒职责单一边界明确可以通过简单组装完成大的功能自然就比之前的大泥球好处理得多。灵敏扩展单体的情况下只能通过增加机器再部署多套单体系统做成集群前面加负载平衡来扩展微效劳以后我们会发现用
16、户效劳压力不大不用扩展订单效劳压力大的时候多部署两台就可以了这样我们就把扩展的方式从全部惯用户效劳的业务就可以上手工作了。独立演进变成微效劳以后各个独立系统的内部设计以及实现细节都被隔分开互相之间不受影响只要效劳间的接口不变大众就可以各自独立的开展自己的系统完成晋级、重构、功能增强等等。混合开发各效劳独立开发的另外一个好处就是各个独立系统可以使用自己的技术栈以及研发形式包括开发语言以及工具、数据库存储以及中间件等技术这样有助于试验以及引入更先进以及创新的技术从一些个边缘效劳开场尝试技术、工具、中间件、研发形式孵化成熟以后可以大范围推广实现技术以及研发才能的持续更新换代让研发组织保持长期的优势以
17、及活力充分获得技术开展的红利。持续交付微效劳比单体系统简单明确这样就便于我们利用自动化测试以及自动化部署来加速功能的迭代配合CI/CD等根底设施实现业务功能的持续交付保障研发可以紧跟业务开展变化的节奏。常见的微效劳技术框架详细怎么做微效劳呢我们先看看大众最常简单见到的微效劳的图在互联网出行业务中用户通过API网关访问系统的乘客、司机、出行三个REST效劳这三个效劳再通过REST访问计费、支付以及通知三个效劳。看起来很简单也好理解但是实际的业务系统里设计以及实现一般会是这样效劳框架我们可以选择用SpringCloud或ApacheDubbo包括新兴的SpringCloudAlibaba还有华为奉
18、献的ApacheServiceComb蚂蚁金服的SOFAStackOracle的HelidonRedhat的Quarkus基于Scala语言以及Akka的Lagom基于Grails语言的Micronaut基于Python语言的Nameko基于Golang语言的go-micro支持多语言混编的响应式微效劳框架Vert.X腾讯开源的Tars百度开源的ApacheBRPC孵化中微博的简化版Dubbo框架Motan等等。配置中心ApolloNacosdisconfSpringCloudConfig或Etcd、ZK、Redis自己封装效劳注册发现EurekaConsul或Etcd、ZK、Redis自己封
19、装效劳网关Zuul/Zuul2SpringCloudGatewaynginx系列的OpenResty以及Kong基于Golang的fagongziGateway等容错限流HystrixSentinelResilience4j或直接用Kong自带的插件消息处理Kafka、RabbitMQ、RocketMQ和Pulsar可以使用SpingMessaging或SpringCloudStream来简化处理SpingCloud与ApacheDubbo、SpringCloudAlibaba可以看到很多组件都是由Netflix奉献的。而ApacheDubbo定位是一款高性能、轻量级的开源JavaRPC框架它
20、提供了三大核心才能面向接口的远程方法调用智能容错以及负载平衡和效劳自动注册以及发现。所以我们可以看到Dubbo提供的才能只是SpringCloud的一局部子集。同时Dubbo工程重新维护以后捐献给了Apache工程的导师就是SpringCloud的核心人员。自这时候起Dubbo工程就开场在合适SpringCloud体系结果就是Alibaba也基于自己的一系列开源组件以及技术实现了SpringCloudAlibaba并顺利从SpringCloud孵化器毕业。详见SpringCloudAlibaba致力于提供微效劳开发的一站式解决方案。此工程包含开发分布式应用微效劳的必需组件方便开发者通过Spri
21、ngCloud编程模型轻松使用这些组件来开发分布式应用效劳。主要功能以及开源技术栈效劳限流降级Sentinel默认支持WebServlet、WebFlux,OpenFeign、RestTemplate、SpringCloudGateway,Zuul,Dubbo以及RocketMQ限流降级功能的接入可以在运行时通过控制台实时修改限流降级规那么还支持查看限流降级Metrics监控。效劳注册与发现Nacos适配SpringCloud效劳注册与发现标准默认集成了Ribbon的支持。分布式配置管理Nacos支持分布式系统中的外部化配置配置更改时自动刷新。消息驱动才能ApacheRocketMQ基于Spr
22、ingCloudStream为微效劳应用构建消息驱动才能。分布式事务Seata使用GlobalTransactional注解高效并且对业务零侵入地解决分布式事务问题。可以看到根本上功能都比拟完备了。第二局部微效劳最正确理论?管理的常识?一书里讲管理的核心是不断的解决推进工作经过中出现的各种问题。同样地我认为架构的核心那么是不断的解决系统设计实现与演化经过中的各种问题。FredBrooks在?人月神话?里讲“没有银弹如今仍然成立微效劳也并不是只有优点没有副作用把系统拆分了了很多局部每一个局部简单了但是整体的关系变复杂了。前面介绍了那么多微效劳的特点以及优势和相关技术我们再来分析一下微效劳存在的问
23、题进而讨论什么场景合适使用微效劳什么场景不合适和最正确的理论方式。微效劳架构首先是一个分布式系统架构。分布式系统的开展来历已久但是近年度来产生了理论以及实现的大爆发。究其原因分布式系统的开展得益于廉价pc硬件使得堆机器成为可能而单机的本钱/容量是非线性的所以分布式的核心是线性的程度扩展整个集群的功能和带来的协调机制管理复杂度数据以及状态一致性容错以及故障恢复容量与弹性伸缩这些通用性的根底才能建立。简单的翻译一下单个机器堆资源晋级CPU内存加大一倍想要增加一倍的处理才能且本钱不超过一倍不仅很难、而且不现实了。这样我们就需要考虑怎么通过进一步对于系统里不同功能的局部拆解开单独扩展这些能程度扩展的局
24、部进而在控制本钱的前提下提升整个系统的处理才能。另外我们如今都知道设计系统假如对可靠性可用性有非常高的要求那么需要先假设上下游都是不可靠的依赖的根底设施以及网络也是不可靠的这样就考虑分布式后的分片、复制、故障转移、灾难恢复等分布式系统下我们可以对系统的不同性质的节点、不同可靠性可用性要求的组件做针对性的单独处理。很多系统看起来是分布式的其实是一个大单机。很多系统看起来是微效劳的其实是一个大单体。就像人月神话里讲的往已经延期的工程加人手可能会导致更延期。问题不是出如今应不应该加人或应不应该使用分布式上。而是施行的人没搞清楚关键。比方系统拆成分布式或者微效劳然后某个关键地方仍然卡住了业务流程可能整
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微服 理解 实践
限制150内