不知道什么是“微服务”

2024-05-16 20:36

1. 不知道什么是“微服务”

微服务说起来很简单,就是在架构上,把大的拆成小的。官方一点说法是区别于单体式架构。因为可以与容器和DevOps很好的结合,发挥快速部署优化的能力,响应业务变化,适于横向和纵向的扩展。可以百度搜EAii,有很多关于微服务、DevOps、容器的文章介绍。

这里从其中一篇摘了些内容。

“Mesh App and Service Architecture”作为Gartner2016 十大战略技术趋势中之一,里面大量提到微服务的概念。微服务(Microservices)这个概念不是新概念,很多公司已经在实践了,例如Google、Netflix、Facebook、Twiter、Alibaba。微服务架构模式(Microservices Architecture Pattern)的目的是将大型的、复杂的、长期运行的应用程序构建为一组相互配合的服务,每个服务都可以很容易得局部改良。

微服务从去年以来一直受到众多开发者的热捧,已经看到有许多项目尝试使用微服务架构,结果很鼓舞人心。然而,在微服务架构带来可独立部署、高扩展与伸缩、自由选择开发语言、高效利用资源、故障隔离等优点,同时也因为服务多带来分布式事务、服务之间通信、监控、部署等新的问题。

提到微服务架构时,我们常常会做的一件事情,就是会拿来与单体架构进行比较,单体架构存在如下缺点:代码维护难度大,臃肿的部署,局限的弹性与扩展能力,阻碍团队与技术革新等等;微服务架构存在如下优点:代码维护简化,可独立部署,高扩展与伸缩,自由选择开发语言等优点。那么单体架构真的如此不堪一击吗?答案显然不是这样,下面我们来看Martin Fowler在其一篇文章里面给出关系图:


上面的图来自 Martin Fowler 的文章,揭示了生产率和复杂度的一个关系。在复杂度较小时采用单体应用(Monolith)的生产率更高,复杂度到了一定规模时,单体应用的生产率开始急剧下降,这时对其进行微服务化的拆分才是合算的。所以说脱离业务场景,空谈架构绝对是耍流氓。异常牛逼的架构设计,如果无法在业务场景中落地实施,也只是空谈。因此架构需要服务于业务,针对不同的业务场景架构设计也会不同,架构设计不必追求高大上,简而美的架构,若能满足业务发展需求,便是好架构。此外,好的架构不完全是设计出来的,随着业务量、请求量的增长,好的架构是演化而来的。微服务架构之所以得到广泛认可,源于对于业务多变性的不可预测,微服务架构能够不断的自演化,进而快速适应业务变化。但相对于单体架构且经过严格定义的大规模开发项目,微服务架构要求大家面对由众多小型服务所构成的复杂生态系统。

鉴于此,如果长期业务规划不需要微服务架构或者团队不具备实施微服务一些基本的条件,不建议各位盲目迈向微服务这一新兴架构领域,或者从试点入手,逐步在团队中推行微服务架构。

不知道什么是“微服务”

2. 什么是微服务?

  微服务架构是一种软件设计方法,它将应用程序分解为通过定义明确的 API 进行通信的小型独立服务。由于每个服务都可以由自治团队开发和维护,因此它是最具可扩展性的软件开发方法。 
    微服务设计与单体开发截然相反。单体是一个实现所有功能的大型代码库(“厨房水槽”)。一切都在一个地方,没有一个组件可以孤立地工作。这意味着应用程序必须作为一个整体进行测试。 
    从好的方面来说,单体应用很容易启动和运行。由于单体架构不同部分之间的关系是透明的,因此进行广泛的更改很容易。 
    然而,随着公司的发展和团队规模的扩大,单体开发变得更加困难。很快,系统就不能再装在一个头上了——移动部件太多了,所以事情变慢了。 
       微服务使公司能够保持团队规模小而敏捷。这个想法是将应用程序分解为可以由紧密结合的团队自主开发和部署的小型服务。 
    公司采用微服务的主要原因是   可扩展性   。服务可以独立开发和发布,无需在组织内安排大规模的协调工作。 
    拥有分布式系统的一个好处是能够避免单个故障点。您可以使用支持云的技术在不同的可用区部署微服务,确保您的用户永远不会遇到中断。 
    使用微服务,开发团队可以保持小而有凝聚力。小组越小,沟通开销越少,协作越好。 
    亚马逊通过他们的两个披萨团队将团队规模发挥到了极致。这意味着一个团队应该足够小,可以吃两个比萨饼。 
    对于单体应用,语言和技术堆栈选项几乎从一开始就设置好了。新开发人员必须适应过去做出的任何选择。 
    相比之下,每个微服务都可以使用最适合解决手头任务的技术堆栈。因此,团队可以为工作和他们的技能选择最佳工具。例如,您可以使用 Go 或 C 实现高性能服务,并使用 Erlang 或 Elixir 实现高容错微服务。 
    随着小团队迭代速度更快,开发和测试周期更短。而且,由于他们还可以随时部署更新,微服务的部署频率比单体应用要高得多。 
       有这么多好处,似乎为新项目选择微服务是一件轻而易举的事。但是微服务设计也带来了一些严峻的挑战: 
    你怎么知道你是否在做正确的微服务设计?如果您的团队可以在不与其他团队协调的情况下随时部署更新,并且如果其他团队可以类似地部署他们的更改而不影响您,那么恭喜您,您掌握了微服务的诀窍。 
    失去微服务提供的好处的最可靠方法是不遵守解耦规则。如果我们仔细观察,我们会发现微服务都是关于自治的。当这种自主权丧失时,团队必须在开发和部署期间进行协调。需要完美的集成测试来确保所有微服务协同工作。 
    即便如此,详尽的测试也无法捕捉到所有问题。当出现问题时,耦合服务是很难调试的。当问题被发现时,修复它并不总是像回滚更新那么容易。 
        紧密的服务依赖关系创建团队依赖关系。  
    这些都是分布式计算带来的问题。如果您曾经使用过云服务,您就会知道将服务或机器分布在多个地理位置与在同一站点上运行所有内容不同。分布式系统具有更高的延迟,可能存在同步问题,并且更难管理和调试。这种高度耦合的服务架构实际上是一个   分布式单体   架构,具有两全其美的优点,也没有微服务应该带来的任何好处。 
    如果您在不与其他团队协调或依赖其他微服务的特定版本来部署您的微服务的情况下无法进行部署,那么您只是在分发您的单体应用。 
    微服务并没有   取代   单体。两者都是有效的方法。事实上,当团队仍在 探索 他们正在构建的东西时,单体应用可能是最佳选择。 
    单体应用就像是项目的自然起点,因为它易于开发、快速迭代、快速部署、易于调试,并且更能容忍设计错误。在可扩展性成为问题之前,单体应用可以让您走得更远。 
    微服务是我们开发软件的最具可扩展性的方式。但它们不是免费的午餐。如果您不小心,它们会带来一些很容易发生冲突的风险。当团队正在成长并且您需要保持快速和敏捷时,它们非常有用。但是你需要对要解决的问题有一个很好的理解,否则你最终会得到一个分布式的单体。 

3. 微服务是是什么意思啊

微服务是是什么意思啊如下:希望可以帮助你
微服务涵盖了微信管家、微信应用解决方案、微信客服客户端、人工微信客服几部分。
微服务是对于微信公众平台帐号提供的辅助管理平台,强化了微信公众号的互动营销推广与客户关系维护功能。微服务平台开发了为商家定制的“个性化管理、营销推广、客户关系管理、会员卡管理”等几个重要的运营管理模块。

微服务是是什么意思啊

4. 微服务有什么作用?

维基上对微服务的定义为:一种软件开发技术- 面向服务的体系结构(SOA)架构样式的一种变体,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。
微服务的最重要的单一特征可能是,由于服务较小且可独立部署,因此不再需要繁琐的行动才能更改应用程序中的一行文字。
在微服务模型中,组件是独立部署的,并通过REST,事件流和消息代理的某种组合进行通信-因此,可以针对该服务优化每个单独服务的堆栈。技术一直在变化,由多个较小的服务组成的应用程序随着更理想的技术的发展而变得更容易且成本更低。
使用微服务,可以单独部署单个服务,但是也可以单独扩展它们。由此带来的好处是显而易见的:如果正确完成,微服务比单片应用程序所需的基础结构要少,因为微服务仅支持对需要它的组件进行精确缩放,而对于单片应用程序则不需要整个应用程序。
比如像HC服务网格是基于Istio及容器技术的微服务治理平台,以无侵入方式为多语言、不同部署形态的异构应用提供服务治理、服务监控和安全控制等微服务管理能力。能够将服务通信、观测与安全能力下沉到基础设施层,降低分布式应用开发复杂度,为应用运维减负,推动企业应用整体向服务治理平台迁移,提升IT系统的整体承载能力、高可用能力。

5. 微服务可以实现什么功能?

(1)服务的独立部署,每个服务都是独立的项目,可以独立部署,不依赖于其他服务,耦合性低。    
(2)服务的快速启动,拆分之后服务启动的速度要比拆分之前快很多,因为依赖的库少了,代码量也少了。    
(3)更加适合敏捷开发。敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行。服务拆分可以快速发布新版本,修改哪个服务只需要发布对应的服务即可,不用整体重新发布。    
(4)职责专一,由专门的团队负责专门的服务。业务发展迅速时,研发人员也会越来越多,每个团队可以负责对应的业务线,服务的拆分有利于团队之间的分工。    
(5)服务可以动态按需扩容,当某个服务的访问量较大时,我们只需要将这个服务扩容即可。    
(6)代码的复用,每个服务都提供REST API,所有的基础服务都必须抽出来,很多的底层实现都可以以接口方式提供。想要了解更多,我推荐你去看看时速云,他们是一家全栈云原生技术服务提供商,提供云原生应用及数据平台产品,其中涵盖容器云PaaS、DevOps、微服务治理、服务网格、API网关等。大家可以去体验一下。    
希望能给您提供帮助,可以给个大大的赞不。

微服务可以实现什么功能?

6. 微服务的优点是什么?

(1)服务的独立部署,每个服务都是独立的项目,可以独立部署,不依赖于其他服务,耦合性低。    
(2)服务的快速启动,拆分之后服务启动的速度要比拆分之前快很多,因为依赖的库少了,代码量也少了。    
(3)更加适合敏捷开发。敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行。服务拆分可以快速发布新版本,修改哪个服务只需要发布对应的服务即可,不用整体重新发布。    
(4)职责专一,由专门的团队负责专门的服务。业务发展迅速时,研发人员也会越来越多,每个团队可以负责对应的业务线,服务的拆分有利于团队之间的分工。    
(5)服务可以动态按需扩容,当某个服务的访问量较大时,我们只需要将这个服务扩容即可。    
(6)代码的复用,每个服务都提供REST API,所有的基础服务都必须抽出来,很多的底层实现都可以以接口方式提供。想要了解更多,我推荐你去看看时速云,他们是一家全栈云原生技术服务提供商,提供云原生应用及数据平台产品,其中涵盖容器云PaaS、DevOps、微服务治理、服务网格、API网关等。大家可以去体验一下。    
希望能给您提供帮助,可以给个大大的赞不。

7. 微服务中 "微" 到底是什么?

 抛去教条性质的解释,从巨石应用到微服务应用,耦合度是其中最大的变化。或是将多个模块中重复的部分进行拆分,或是纯粹为了拆分膨胀的单体应用,这些拆分出来的部分独立成一个服务单独部署与维护,便是微服务了。
    拆分后自然而然会催生出一些必要的需求: 
    从目前常见网站架构的宏观角度看,微服务处在中间的层次。红框圈出的部分都属于微服务的范畴。包括最基础的rpc框架、注册中心、配置中心,以及更广义角度的监控追踪、治理中心、调度中心等。 
                                            从微服务自身角度来看,则大致会包含以下这些模块: 
                                           是不是只要套上微服务框架就算是一个微服务了呢?虽然这样有了微服务的表,但却没有微服务的实质,即”微“。
     微服务化的前提是服务拆分到足够”微“,足够单一职责,当然拆分程度与服务边界都需要结合业务自行把握。  
   广义的服务拆分即包含了应用拆分,也包含了数据拆分。
   应用拆分后需要引入微服务框架来进行服务通信与服务治理,这也就是传统定义上的微服务。
   数据拆分后同样需要引入一系列手段来进行保障,由于不是与微服务强相关的话题,在此只做简单阐述:

微服务中 "微" 到底是什么?

8. 微服务是如何演变的,又为什么重要

微服务的概念产生是顺应这样的需求:为了开发出速度更快、更有弹性且用户体验更佳的应用。这个概念等同于具有可扩展性的自动化系统,在简单的商业化架构上运行软件。由于容器所提供的经济效率,在2016年微服务将是一大主题。

应用快速开发的需求影响到了全部公司,以及如何看待历来业务安排的方式。来自微服务的新实践代表着需要小型团队以对于公司来说陌生的方式——自上而下进行迭代。这意味着企业运作的方式将获得彻底的改变。

现在在针对应用架构与微服务的新思考方面,容器生态系统逐渐成为核心主题。根据Battery Ventures技术人员Adrian Cockcroft的说法:关于微服务有一些基本的原则需要思考。首先,如今构建软件的价格更为低廉,容器的出现降低了成本。Docker被所有人纳入蓝图——从软件供应商到终端用户,所有人都在尝试找出容器的用法,因为用它就能加快软件的交付节奏。不过这也代表着要安装的系统是应用级别的,也就是说在应用的开发、部署与管理方面出现了不同的需求。



Adrian Cockcroft在面向对象软件架构大会上关于微服务的演讲,以卡通形式呈现,作者是Remarker

举个例子,对于要处理服务与堆栈范围增长的公司来说,监控比以往更加重要。要想解决问题,必须对数据日志进行分析,而这些日志很可能横跨临时节点与多项服务。由于需要细化监控与加强工具,从业人员能更好地掌握这些构建模块对于应用所依赖的许多潜在微服务的影响。

那么起作用的是什么呢?从公司与API开始:基于微服务的产品团队与另一个基于终端的平台团队之间靠API连接,通过API调用以及企业基础架构持续作出相应的回应来生效。

微服务被定义为特定背景下松耦合、面向服务的架构,允许在无需理解其他部件运作原理的情况下进行更新。整个服务是跨公司构建的,但所有权却在同一个地方。微服务架构提供了更多系统间的点对点调用。消息形式必须灵活,所有部件在无论哪个版本中都能运作。这意味着在构建微服务架构时,我们需要一些工具来配置、探索、输送流量、观察与构建系统。

IBM杰出的工程师兼IBM云计算中心的CTO Andrew Hately作出了类比:15年前人们可能需要每周查看一下自己的银行余额,而互联网允许人们实时查看余额甚至做出进一步操作,也许随着智能手机的发展,很多事情都发生的改变。如今,人们可以即时访问自己的账户收支信息。这种速度与即时性代表着:在过去的5-10年内,企业提供服务的发展速度必须跟得上社交网络与搜索公司发展的速度。

公司必须处理员工、消费者、系统与所有可能组合之间的持续互动——就像Hately所说的完全互联与持续可用。这意味着企业流程需要重建,需要将所有东西连接起来。如果公司不进行这方面的尝试,也无法提供相应功能的话,很快就会面临收入减少甚至出局的局面。

Hately表示:“工具非常关键。” 有数百家网站不支持代码,收到反馈后,在下一组测试用例中消费者就能使用它了。这种严格的开发过程提供了一种企业工作方式,也为微服务发展提供了思考方式。DevOps中的ops也会执行这样的工作。如果你有一小段代码并为其定义指标的话,就能细分出哪些会成功,哪些会失败。

IBM通过为消费者及内部团队构建反馈通道与成功标准,在敏捷、DevOps、精益生产与其他迭代进程中结合最佳实践,创建了名为IBM Bluemix Garage Method方法的企业方法论。IBM Bluemix Garage Method方法将企业解决方案的可靠性及可测试性与最新开放社区在规模质量上的最佳实践结合起来,持续创新、创建持续交付渠道并在云平台上进行部署。这种方法很有价值,向所有人开放资源能够提高个人、团队与全公司的DevOps技能,以及管理与监控能力。

软件相关的契约

                        第一代的容器管理平台支持这些速度更快的开发进程。Docker的产品高级VP Scott Johnston表示,在Docker Compose中,微服务促进了工具发展,YAML文件扮演了描述不同组件的清单(manifest)。Compose让开发人员得以用抽象的方式描述多容器应用,它可以描述web容器、数据库容器、负载均衡及其间的逻辑关系,无需连网或部署存储。

Engine Yard的Matt Butcher表示:微服务是软件相关的契约。有些人会辩称微服务是正确执行的面向服务架构(SOA)。开发者想要的是有用、功能丰富且结构优雅的架构。微服务使得软件开发回归Unix的根源——将一件事完成得很好。用Unix可以任意输出命令。微服务不止在如何优秀地完成工作方面,同时在如何与环境互动方面也表现出契约性。如果运行良好,它所做的工作就像是优秀的Unix shell脚本。

举个例子,Kubernetes清单文件格式扮演着契约的角色,这个清单提供了所需的来源细节、存储卷定义、存储需求等,扮演了强大的DevOps类契约。它让开发者和运营者了解想要的内容。开发者与运营者之间的关系不再如同之前那样——开发者被迫只管自己的一摊工作。

一张清单可能会包括应用元数据,加上具体版本的描述性参数,其中可能还有多个清单。也许是一个实例、一个pod清单、一个复制控制器(replication controller)或者一个服务定义,还有组成文件的已知来源位置。任意标签可能由图表中所包括的组件来定义。

Butcher表示:“应用开发者在这方面的体验够深刻了。一旦出现典型问题,就会说丢过墙去,各管各的,反正有DevOps来负责生产环境中的运行事宜,开发者只负责开发,总有一个切换过程,往往会成为各扫门前雪的后果。”

如果开发者构建容器,会存在一定的水平保证(由抽象层决定):这些容器的运行方式在生产阶段与开发阶段是一样的。这已经缓解了让懂得容器这个基本工具的DevOps专业人员感到头疼的大多问题。容器化已经提供了这种保障,不过像Helm(Engine Yard所提供的新服务)之类的产品有助于进一步规范化这种关系,具体表现为团队间的契约形式——团队成员不能再推卸责任,各扫门前雪了,而要全程参与。

从虚拟机与Monolith,到容器,再到微服务

根据Joyent的CTO Bryan Cantrill的说法:容器为原生云架构提供了基础,与传统的虚拟化形式相比,象征着一种新的应用架构形式。在使用较大的机器来进行计算时,基于硬件的虚拟化或者传统虚拟机流行过一段时间。虚拟机为运营团队提供了管理大型整体应用的方式,就像Cantrill说的“过于臃肿”,而硬件定义了企业架构。虚拟机建议在底层之上,承担了运营系统的负载。但是容器创建了一个全新而更敏捷的抽象。就是Cantrill的那句话:“应用继续减肥速成修炼。”

如今,唯一的麻烦在于如何将虚拟机和monolith换成容器和微服务。各家公司还在想方设法执行这种转变,因为两种方式对应用架构、基础设施还有公司自身整体的思路都是迥异的。

Cantrill表示:Joyent的开源Triton服务,其目的就是为了简化与加速公司向容器与微服务的转变。它允许开发者简化架构,只提供容器,不提供虚拟机。由于无需配置网络等操作,用户可以通过阅读微服务手册,在短时间内完成部署。

Cantrill表示,Joyent公司是Docker Compose的粉丝,因为Compose可以用来与单独的Docker Engine通讯。Docker的远程端点由Triton部署,从而虚拟化了整个数据中心。使用这些工具,很容易快速让一个完整有弹性的运营服务运转起来。正如Cantrill所言:“这是大势所趋。”

VMware的CTO Kit Colbert从如何沿着容器之旅前进的角度来观察市场。VMware着重运营领域。现在它开发了一种方式,来满足新的开发人员及其需求,不过是作为基础架构提供商存在。

对于VMware来说,这家公司将自己视为基础设施提供商,而不是以应用为中心、面向架构的公司。Colbert只看到了对Cloud Foundry感兴趣的消费者,不过也有人想要DIY的方法。VMware正在设法通过vSphere集成容器(VIC)与Photon平台对应用技术提供支持。

为了让消费者适应使用容器,vSphere集成容器(VIC)让容器化工作负载称为vSphere的重中之重。VIC适合在开发进程中运行,将容器化最有价值的一个方面应用在容器中:灵活并具有动态的资源界限。通过虚拟化,VMware将普通硬件转化为简单、可取代的财产。同样,通过在虚拟机中应用Docker端点,vSphere集成容器创建了完全动态边界的虚拟容器主机。结果就是对传统与基于微服务应用同样支持的基础架构,允许IT与开发者的访问。

相比之下,VMware的Photon平台是专为原生云应用设计的。Photon平台由最小的管理程序与控制面板组成,专为微服务提供速度与规模的服务。Photon平台在设计时还考虑到了开发者通过API使用时的易用性,让这个平台成为一个提供应用程序与快速部署的自助服务平台。

从VMware的角度来说,运营团队也在推进部署速度。现在更着重于数字化体验或者软件如何提供更多功能方面。很类似我们如何看待在智能手机上使用的应用。供应商可能以声音很大的扬声器而闻名,不过服务的应用是否能提供功能?

Colbert询问:“我能依赖它吗?” 公司必须找出构建应用,为寻找高质量应用的消费者提供服务的方式。想要继续进步,就必须找到这一点。很多拥有外置式、虚拟化基础架构的消费者希望:随着应用开发进程的加快,解决公司面临的挑战。

在微服务时代的开发

软件开发是迭代式的,需要持续的反馈循环才能奏效。这也是类似IBM Bluemix Garage Method所提供的工具所提供的功能。不过大多公司是根据模型来执行的,这与开发者工作的方式不同。开发者不会按照销售、市场推广、财务等部门人员的方式来工作,开发者不是按照计划或方案来执行工作的。软件开发的过程有更多的迭代,并非瀑布式自上而下的。

Pivotal的首席技术Michael Coté表示:“我不知道怎么说,不过真实世界与软件世界是完全不同的。”Coté辩称:找出软件开发的方式似乎非常矛盾,不过事实上确实阻止了人们想要根据一份文档来了解一个巨大机器的所有部件的工作方式。通过遵守软件开发的原则,各家公司找到了自己的办法,而不是严格遵守固定的计划。

Coté认为,没有执行微服务的固定道路。用微服务可以在运行中和架构上获得灵活性。微服务根据简单的原则构建出真正复杂的东西。原则越简单,所能创造的东西就越复杂。

不过,如果把复杂性转移到其他地方会发生什么?Pivotal这个平台管理着复杂程度。去掉选择,让消费者无需考虑网络、运营系统等问题。它允许消费者将复杂性放在应用堆栈的顶层,在为终端用户提供服务时能够更好的区分服务。Hately表示:“在科技行业,我们看到了另一个文艺复兴时期。”

同样地,IBM Bluemix Garage Method也希望简化复杂性,以便让开发者的工作更有效率,能够更好地享受自己的工作。所有这些努力都为企业提供了巨大的机会,无论在技术还是文化层面。