美文网首页
如何做好微服务?

如何做好微服务?

作者: WEIJAVA | 来源:发表于2019-04-17 15:18 被阅读0次

微服务

大部分人对微服务的了解源自 James Lewis 和 Martin Fowler 在 2014 年写的一篇文章,他们在其中给了微服务一个更清晰的定义,把它当做了一种新型的架构风格。

“在企业内部将服务有组织地进行拆分”这个理念则脱胎于 SOA(Service Oriented Architecture,面向服务的架构),只不过,SOA 诞生自那个大企业操盘技术的年代,自身太过于复杂,没有真正流行开来。而微服务由于自身更加轻量级,符合程序员的胃口,才得以拥有更大的发展空间。

谈到微服务,你会想起什么呢?很多人对微服务的理解,就是把一个巨大的后台系统拆分成一个一个的小服务,再往下想就是一堆堆的工具了。

所以,市面上很多介绍微服务的内容,基本上都是在讲工具的用法,或是一些具体技术的讨论,比如,用 Spring Boot 可可以快速搭建服务,用 Spring Cloud 建立分布式系统,用 Service Mesh 技术作为服务的基础设施,以及怎么在微服务架构下保证事务的一致性,等等。
确实,这些内容在你实现微服务时,都是有价值的。但必须先回答一个问题,我们为什么要做微服务?
对这个问题的标准回答是,相对于整体服务(Monolithic)而言,微服务足够小,代码更容易理解,测试更容易,部署也更简单。

这些道理都对,但这是做好了微服务的结果。怎么才能到达这个状态呢?这里面有一个关键因素,怎么划分微服务,也就是一个庞大的系统按照什么样的方式分解

领域驱动设计

领域驱动设计(Domain Driven Design,DDD)是 Eric Evans 提出的从系统分析到软件建模的一套方法论。它要解决什么问题呢?就是将业务概念和业务规则转换成软件系统中概念和规则,从而降低或隐藏业务复杂性,使系统具有更好的扩展性,以应对复杂多变的现实业务问题。

DDD 最为基础的就是通用语言(Ubiquitous Language),让业务人员和程序员说一样的语言,等于把思考的层次从代码细节中拉到了业务层面。越高层的抽象越稳定,越细节的东西越容易变化。

有了通用语言做基础,然后就要进入到 DDD 的实战环节了。DDD 分为战略设计(Strategic Design)和战术设计(Tactical Design)。

战略设计是高层设计,它帮我们将系统切分成不同的领域,并处理不同领域的关系。以“订单”和“用户”的为例,从业务上区分,把不同的概念放到不同的地方,这是从根本上解决问题,否则,无论你的代码写得再好,混乱也是不可避免的。而这种以业务的角度思考问题的方式就是 DDD战略设计带给我们的。

战术设计,通常是指在一个领域内,在技术层面上如何组织好不同的领域对象。举个例子,国内的程序员喜欢用 myBatis 做数数据访问,而非 JPA,常见的理由是 JPA 在有关联的情况下,性能太差。但真正的原因是没有设计好关联。如果能够理解 DDD 中的聚合根(Aggregate Root),我们就可以找到一个合适的访问入口,而非每个人随意读取任何数据。这就是战术设计上需要考虑的问题。

微服务真正的难点并非在于技术实现,而是业务划分,而这刚好是 DDD 战略设计中限界上下文(Bounded Context)的强项。以“订单”为例,交易的“订单”和物流的“订单”是不同的,它们都有着自己的上下文,而这个上下文就是限界上下文。

它限定了通用语言自由使用的边界,一旦出界,含义便无法保证。正是由于边界的存在,一个限界上下文刚好可以成为一个独立的部署单元,而这个部署单元就可以成为一个服务。

所以要做好微服务,第一步应该是识别限界上下文。每个限界上下文都应该是独立的,每个上下文之间就不应该存在大量相互调用,本身就是一个没有划分好边界而带来的伪命题,靠技术解决业务问题,事倍功半。

但想做微服务架构,首先是不要使用微服务。如果将一个整体服务贸然做成微服务,引入的复杂度会吞噬掉你以为的优势。如果你划分出了限界上下文,不妨先按照它划分模块。一次性把边界划清楚并不是一件很容易的事。大家在一个进程里,调整起来会容易很多。然后,让不同的限界上下文先各自独立演化。等着它演化到值得独立部署了,再来考虑微服务拆分的事情。到那时,你也学到各种关于微服务的技术,也就该派上用场了!

所以想做好微服务,先要学好领域驱动设计

——学自咕泡学院

相关文章

  • 微信订阅号要做好内容

    微信订阅号要做好内容 微信运营分为服务号,和订阅号,服务号做好服务就好了,例如某某医院的服务号,在线挂号,预约看病...

  • 江苏微网:生鲜水果行业如何利用互联网+微信提高业绩

    大家好,上周给大家分享了家政服务行业如何利用互联网+微信做好业绩,这次为大家带来的是生鲜水果行业如何利用互联网+微...

  • 如何做好服务

    关于服务想跟大家伙说的一些话: 目标下达,很多班主任忙碌起来,开始盘算哪个家长可以立马续,哪个家长比较棘手要开家长...

  • 如何做好服务

    客户服务工作的好坏代表着一个企业的文化修养和整体形象。像Linckia海星客这样为客户提供开放工位以及独立办公间的...

  • 如何做好服务

    服务的本质是“帮助服务对象更好地完成他们所做的事情”,也就是说,“服务对象”是服务工作的中心,一切要围绕“服务对象...

  • 如何做好微博,博客及论坛营销推广?

    微帮同城小程序信息服务平台, 如何做好微博、博客推广? 是现在互联网的最热门概念之一,代表互联网发展的趋势。互联网...

  • 服务篇

    1.如何让客户服务部门的员工解放思想,主动的做好服务? 信任是小米...

  • 微商培训课程、微商如何加好友?

    微信定位加好友软件、、如何做微信推广之微信大号营销推广、如何做好微信营销、如何利用微信做营销、微信营销教程 从泉立...

  • 如何做家政服务

    如何做家政 如何做家政服务?其实真的是说如何做好家政服务。 首先需要专业培训的员工,通过试用审核,达得到员工素质,...

  • 2019-06-03

    新手如何做好微商,精准引流有哪些方法! 要想做好微商,首先那就必须要学会引流。如果你连引流都不会做,那就很难做好微...

网友评论

      本文标题:如何做好微服务?

      本文链接:https://www.haomeiwen.com/subject/ytrnwqtx.html