`
liujiekasini0312
  • 浏览: 147586 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

《微服务》九大特性重读笔记

 
阅读更多

服务组件化

组件,是一个可以独立更换和升级的单元。就像PC中的CPU、内存、显卡、硬盘一样,独立且可以更换升级而不影响其他单元。

在“微服务”架构中,需要我们对服务进行组件化分解。服务,是一种进程外的组件,它通过http等通信协议进行协作,而不是传统组件以嵌入的方式协同工作。服务都独立开发、部署,可以有效的避免一个服务的修改引起整个系统的重新部署。

打一个不恰当的比喻,如果我们的PC组件以服务的方式构建,我们只维护主板和一些必要外设之后,计算能力通过一组外部服务实现,我们只需要告诉PC我们从哪个地址来获得计算能力,通过服务定义的计算接口来实现我们使用过程中的计算需求,从而实现CPU组件的服务化。这样我们原本复杂的PC服务得到了更轻量化的实现,我们甚至只需要更换服务地址就能升级我们PC的计算能力。

按业务组织团队

当我们开始决定如何划分“微服务”时,通常也意味着我们要开始对团队进行重新规划与组织。按以往的方式,我们往往会以技术的层面去划分多个不同的团队,比如:DBA团队、运维团队、后端团队、前端团队、设计师团队等等。若我们继续按这种方式组织团队来实施“微服务”架构开发时,当有一个有问题需要更改,可能是一个非常简单的变动,比如:对人物描述增加一个字段,这就需要从数据存储开始考虑一直到设计和前端,虽然大家的修改都非常小,但这会引起跨团队的时间和预算审批。

在实施“微服务”架构时,需要采用不同的团队分割方法。由于每一个微服务都是针对特定业务的宽栈或是全栈实现,既要负责数据的持久化存储,又要负责用户的接口定义等各种跨专业领域的职能。因此,面对大型项目时候,对于微服务团队拆分更加建议按业务线的方式进行拆分,一方面可以有效减少服务内部修改所产生的内耗;另一方面,团队边界可以变得更为清晰。

做“产品”的态度

实施“微服务”架构的团队中,每个小团队都应该以做产品的方式,对其产品的整个生命周期负责。而不是以项目的模式,以完成开发与交付并将成果交接给维护者为最终目标。

开发团队通过了解服务在具体生产环境中的情况,可以增加他们对具体业务的理解,比如:很多时候一些业务中发生的特殊或异常情况,很可能产品经理都并不知晓,但细心的开发者很容易通过生产环境发现这些特殊的潜在问题或需求。

所以,我们需要用做“产品”的态度来对待每一个“微服务”,持续关注服务的运作情况,并不断地分析帮助用户来提升业务功能。

智能端点与哑管道

在单体应用中,组件间直接通过函数调用的方式进行交互协作。而在“微服务”架构中,服务由于不在一个进程中,组件间的通信模式发生了改变,若仅仅将原本在进程内的方法调用改成RPC方式的调用,会导致微服务之间产生繁琐的通信,使得系统表现更为糟糕,所以,我们需要更粗粒度的通信协议。

在“微服务”架构中,通常会使用这两个服务调用方式:

  • 第一种,使用HTTP协议的RESTful API或轻量级的消息发送协议,来实现信息传递与服务调用的触发。
  • 第二种,通过在轻量级消息总线上传递消息,类似RabbitMQ等一些提供可靠异步交换的结构。

在极度强调性能的情况下,有些团队会使用二进制的消息发送协议,例如:protobuf。即使是这样,这些系统仍然会呈现出“智能端点和哑管道”的特点,为了在易读性与高效性之间取得平衡。当然大多数Web应用或企业系统并不需要作出在这两者间做出选择,能够获得易读性就已经是一个极大的胜利了。 ——Martin Fowler

去中心化治理

当我们采用集中化的架构治理方案时,通常在技术平台上都会做同一的标准,但是每一种技术平台都有其短板,这会导致在碰到短板时,不得不花费大力气去解决,并且可能还是因为其底层原因解决的不是很好。

在实施“微服务”架构时,通过采用轻量级的契约定义接口,使得我们对于服务本身的具体技术平台不再那么敏感,这样我们整个“微服务”架构的系统中的组件就能针对其不同的业务特点选择不同的技术平台,终于不会出现杀鸡用牛刀或是杀牛用指甲钳的尴尬处境了。

不是每一个问题都是钉子,不是每一个解决方案都是锤子

去中心化管理数据

我们在实施“微服务”架构时,都希望可以让每一个服务来管理其自有的数据库,这就是数据管理的去中心化。

在去中心化过程中,我们除了将原数据库中的存储内容拆分到新的同平台的其他数据库实例中之外(如:把原本存储在MySQL中的表拆分后,存储多几个不同的MySQL实例中),也可以针对一些具有特殊结构或业务特性的数据存储到一些其他技术的数据库实例中(如:把日志信息存储到MongoDB中、把用户登录信息存储到Redis中)。

虽然,数据管理的去中心化可以让数据管理更加细致化,通过采用更合适的技术来让数据存储和性能达到最优。但是,由于数据存储于不同的数据库实例中后,数据一致性也成为“微服务”架构中急需解决的问题之一。分布式事务的实现,本身难度就非常大,所以在“微服务”架构中,我们更强调在各服务之间进行“无事务”的调用,而对于数据一致性,只要求数据在最后的处理状态是一致的效果;若在过程中发现错误,通过补偿机制来进行处理,使得错误数据能够达到最终的一致性。

基础设施自动化

近年来云计算服务与容器化技术的不断成熟,运维基础设施的工作变得越来越不那么难了。但是,当我们实施“微服务”架构时,数据库、应用程序的个头虽然都变小了,但是因为拆分的原因,数量成倍的增长。这使得运维人员需要关注的内容也成倍的增长,并且操作性任务也会成倍的增长,这些问题若没有得到妥善的解决,必将成为运维人员的噩梦。

所以,在“微服务”架构中,请务必从一开始就构建起“持续交付”平台来支撑整个实施过程,该平台需要两大内容,不可或缺:

  • 自动化测试:每次部署前的强心剂,尽可能的获得对正在运行软件的信心。
  • 自动化部署:解放繁琐枯燥的重复操作以及对多环境的配置管理。

容错设计

在单体应用中,一般不存在单个组件故障而其他还在运行的情况,通常是一挂全挂。而在“微服务”架构中,由于服务都运行在独立的进程中,所以是存在部分服务出现故障,而其他服务都正常运行的情况,比如:当正常运作的服务B调用到故障服务A时,因故障服务A没有返回,线程挂起开始等待,直到超时才能释放,而此时若触发服务B调用服务A的请求来自服务C,而服务C频繁调用服务B时,由于其依赖服务A,大量线程被挂起等待,最后导致服务A也不能正常服务,这时就会出现故障的蔓延。

所以,在“微服务”架构中,快速的检测出故障源并尽可能的自动恢复服务是必须要被设计和考虑的。通常,我们都希望在每个服务中实现监控和日志记录的组件,比如:服务状态、断路器状态、吞吐量、网络延迟等关键数据的仪表盘等。

演进式设计

通过上面的几点特征,我们已经能够体会到,要实施一个完美的“微服务”架构,需要考虑的设计与成本并不小,对于没有足够经验的团队来说,甚至要比单体应用发付出更多的代价。

所以,很多情况下,架构师们都会以演进的方式进行系统的构建,在初期系统以单体系统的方式来设计和实施,一方面系统体量初期并不会很大,构建和维护成本都不高。另一方面,初期的核心业务在后期通常也不会发生巨大的改变。随着系统的发展或者业务的需要,架构师们会将一些经常变动或是有一定时间效应的内容进行“微服务”处理,并逐渐地将原来在单体系统中多变的模块逐步拆分出来,而稳定不太变化的就形成了一个核心“微服务”存在于整个架构之中。

分享到:
评论

相关推荐

    重读闭音节PPT课件.pptx

    重读闭音节是英语发音规则中的一个重要概念,主要涉及元音字母在特定音节中的发音方式。在学习英语发音时,理解并掌握这一规则对于准确读出单词至关重要。 首先,我们回顾一下重读开音节。重读开音节指的是在一个...

    英语语音重读的规则PPT课件.pptx

    英语语音重读是英语口语表达中的一个重要组成部分,它关乎到信息的传递清晰度以及语调的自然流畅。在英语句子中,重读的规律主要遵循以下几个原则: 首先,实词通常需要重读。实词包括名词、动词、形容词、副词、...

    英语发音规则(重读音节和非重读音节).pdf

    英语发音规则(重读音节和非重读音节).pdf

    音节划分元音字母在重读非重读中的发音.ppt

    在英语发音中,音节划分和元音字母在重读及非重读音节中的发音是关键要素。音节是英语单词发音的基本单位,它由一个或多个字母组成,其中至少包含一个元音。理解这一概念有助于准确地读出单词,并且在口语中表达清晰...

    英语口语笔记

    - 技巧:快速读非重读部分,慢速读重读音节。 - 练习句:“Better”、“Thirty”等。 - **T is held or sometimes softened at the end of a word**: - 在某些情况下,T位于词尾时,虽然不发音但需要保持相应的...

    英语音节划分重读规则读音规则.doc

    英语发音中的音节划分和重读规则是学习者掌握地道口语的关键部分。下面将详细解释这些规则,并通过实例帮助理解。 一、单词重读 1. 双音节词的重读规则: a) 大多数双音节词的第一个音节重读,如 "letter"、...

    重读南京百科知识竞赛题及答案.doc

    重读南京百科知识竞赛题及答案.doc

    元音字母在重读和非重读音节中的读音.doc

    本文主要探讨了元音字母在重读和非重读音节中的读音规则,这对于学习英语发音和词汇记忆至关重要。 首先,我们来看元音字母在重读音节中的读音: 1. 开音节:在开音节中,元音字母通常会发其"字母名称"的音。例如...

    音节划分元音字母在重读非重读中发音.ppt

    音节划分元音字母在重读非重读中发音.ppt

    教师资格证初中英语语音试讲稿-重读.pdf

    在教师资格证初中英语语音试讲中,重点是教授如何理解和使用正确的语音技巧,特别是重读和语调。试讲稿中的内容展示了一个日常生活场景,爷爷找不到他的眼镜,请求孙女李兰帮忙,但因为听力问题,他们之间发生了一些...

    音节划分与音节重读.doc

    【音节划分与音节重读】是英语学习中的重要概念,主要涉及到单词发音的准确性。音节划分是将单词分解成若干个发音单位,每个单位由一个或多个字母组成,至少包含一个元音字母。以下是对音节划分规则的详细解释: 1....

    英语音节划分-重读规则-读音规则.doc

    在英语学习中,音节划分、重读规则和读音规则是至关重要的基础部分,它们直接影响到单词的发音和语句的理解。以下是对这些规则的详细解释: 首先,我们来看单词的重读规则: 1. 双音节词: a) 通常第一个音节重读...

    重读开音节PPT课件.pptx

    4. **重读音节**:在一个单词中,重读音节是发音时强调的音节,通常声音较大,音调较高。在重读音节的左上角通常会用撇号(')标记。 5. **元音字母在重读开音节中的发音规则**: - `(辅音字母+)元音字母+辅音字母+e...

    消费行业四大行业消费趋势电·重读消费者.pdf

    由于提供的文件内容为乱码,并且文件标题为"消费行业四大行业消费趋势电·重读消费者.pdf",但无法从乱码内容中提取实际信息,我将基于文件的标题和描述来猜测内容,并生成相关知识点。 【标题】"消费行业四大行业...

    重读旧书:基于内疚的快感?.pdf

    这些书籍的出现,似乎在暗示重读不仅仅是个人习惯,它还是一种文化现象,一种阅读的新趋势。 重读旧书,对于许多人来说,不仅仅是因为怀旧或者时间有限。它是一种深度阅读的方式,让人们有机会更深入地理解文本,...

    英语发音规则(重读、轻读、略读、浊音).doc

    英语发音规则(重读、轻读、略读、浊音) 英语发音规则是英语学习的重要组成部分,对于英语学习者来说,掌握正确的发音规则是非常必要的。本文将详细讲解英语发音规则,包括重读、轻读、略读和浊音等内容。 一、...

    英语重读闭音节规则.doc

    英语中的重读闭音节规则是英语学习中的一个重要部分,主要涉及到动词的变化形式,特别是现在分词、过去式和过去分词的构成。在英语中,闭音节是指一个元音字母后面跟着一个或多个辅音字母,并且这个音节在单词中是...

    重读冰心,感受母爱作文.doc

    在我遇到挫折和失败时,是母亲给予我鼓励,是她那坚定的眼神告诉我:“孩子,再大的困难也阻挡不了你前进的步伐。”母亲的这份信任和支持,成为我不断奋斗的源泉。 在感恩节和母亲节来临之际,我想对全天下的母亲说...

    20210307-德邦证券-德邦家电行业:重读与解构《第四消费时代》第三消费时代.pdf

    20210307-德邦证券-德邦家电行业:重读与解构《第四消费时代》第三消费时代.pdf

    英语音节重读规则.pdf

    "英语音节重读规则" 英语音节重读规则是英语语言中一个非常重要的概念,它对英语词汇的读音和理解产生了深远的影响。英语音节重读规则的主要内容是关于英语词汇中重读音节和非重读音节的分布规律。 英语音节重读...

Global site tag (gtag.js) - Google Analytics