读书笔记:微服务设计-建模

1.什么样的服务是好服务

1.高内聚

说到高内聚,还是得提一下单一职责原则(Single Responsibility Principle)。在软件编程中,谁也不希望因为修改了一个功能导致其他的功能发生故障,而避免出现这一问题的方法便是遵循单一职责原则。
那如何来做到服务的高内聚呢?首先要确定问题域的边界,其次将相同边界的相关行为放在一个地方。

2.低耦合

使用微服务最重要的一点是:能够独立修改及部署单个服务而不需要修改系统的其他部分。

2.限界上下文

限界上下文(bounded context)这个概念来自于Eric Evans的《领域驱动设计》一书,Eric认为:一个给定的领域包含多个限界上下文,每个限界上下文中的东西分成2个部分,一部分不需要与外界通信,另一部分则需要。每个上下文都有明确的接口,该接口决定了它会暴露哪些模型给其他的上下文。当然本文作者更喜欢这个定义:一个由显示边界限定的特定职责。如果你想要从一个限界上下文中获取信息,或者向其发起请求,需要使用模型和它的显示边界进行通信。

应该共享特定的模型,而不应该共享内部表示,这样就可以避免潜在的紧耦合风险。

一般来讲,微服务应该清晰地和限界上下文相对应。

3.业务功能

在思考组织内的限界上下文时,不应该从共享数据的角度来考虑,应该从这些上下文能够提供的功能来考虑。首先要问自己:这个上下文是做什么用的,然后再考虑它需要什么样的数据。

建模服务时,应该将这些功能作为关键操作提供给其协作者。

4.逐步划分上下文

先识别粗粒度上下文,然后当发现合适的缝隙后,再进一步划分出那些嵌套的上下文。

对于嵌套上下文,一种方式是嵌套上下文不直接对外可见,另外一种方式是限界上下文被提升到顶层上下文的层次。这两种方式都具有其合理性,具体还要看组织机构的划分。比如服务A、服务B、服务C分别由不同团队维护,那么可能大家倾向于成为顶层上下文;如果由一个团队维护,那么嵌套架构会更合理。另外,从测试的角度,嵌套式上下文更便于测试,毕竟它对外暴露的服务更少。

另外一本书推荐:Vaughn Vernon的《实现领域驱动设计》,这本书貌似卖得更好。

图片说明:稻城-亚丁

稻城—亚丁因其独特而原始的自然环境、美丽风景被誉为“最后的香格里拉”,景点分为稻城和亚丁两部分,有雪山、冰川、峡谷、森林、草甸、湖泊等景观。除了珍珠海、牛奶海等冰川湖泊,稻城最令人向往的是驰名藏区的雪域神峰——稻城神峰,它由仙乃日、央迈勇、夏诺多吉三座神山组成,均位于亚丁自然保护区。人们把仙乃日比作大佛、把央迈勇比作少女,将夏诺多吉当作少年,三座神山就像三尊圣灵,这里也就成了藏民心中朝圣的圣地。

稻城-亚丁

稻城-亚丁

稻城-亚丁