微服务学习笔记2

90 阅读4分钟

服务标准

服务无状态

服务无状态(Service Statelessness)是指服务通过推迟或避免状态信息的管理,从而最小化资源消耗。服务无状态性有助于增强服务的可扩展性。

服务可重用

首先需要确保建立无关功能性的上下文(Context)结构,也就是说与服务封装在一起的上下文对任何使用场景都有足够的无关性,这样服务才能被认为具备可重用性。

服务可发现

服务可发现(Service Discoverability)是指服务具备能够用于传递的元数据构建能力,通过这些元数据可以有效地发现和解释服务。

服务自治

为了实现服务自治,服务契约应该表达定义明确的功能边界,这个边界不应该与其他服务的功能边界相重叠。

服务松耦合

主要目的在于为消费者提供较低的耦合度要求。

服务级别

可以从发生具体事故时服务对用户体验的影响、所造成的经济损失等角度对服务进行具体分级。

一种常见的分级方法是将系统服务分成三个不同的等级。

一级服务 一级服务具备完善的容错降级机制及对低级别服务的熔断措施、定期压测、配置高级别的监控告警流程等。 二级服务 二级服务多采用异步方式进行系统交互,容忍暂时数据不一致性。 三级系统 三级服务则可随时降级整个服务。

服务边界

在领域驱动设计中,有两个主要的设计维度,即设计的策略维度和设计的技术维度。其中设计的策略维度关注如何设计领域模型以及对领域模型的划分,其目的在于清楚界分不同的系统与业务关注点。策略维度的通用语言、子域、界限上下文等概念为识别服务边界提供了一整套方法论。另外,设计的技术维度也包含聚合、领域事件等组件,有助于组织服务内部以及服务与服务之间进行交互的方式。

通用语言

通用语言的思路是面向领域和业务,统一团队成员对领域知识的一致认识,促进后续代码模型中的命名等使用领域词汇而不是技术词汇。

子域

业界比较认可的分类方法认为,系统中的各个子域可以分成核心子域、支撑子域和通用子域三种类型,其中系统中的核心业务属于核心子域,专注于业务某一方面的子域称为支撑子域,可以用于整个业务系统且作为一种基础设施的功能可以归到通用子域。

聚合

一个子域中包含若干聚合(Aggregate)。聚合的核心思想在于将关联减至最少有助于简化对象之间的遍历,使用一个抽象来封装模型中的引用。聚合的组成有两部分,一部分被称为根(Root)实体,是聚合中的某一个特定实体;另一部分描述一个边界,定义聚合内部都有什么。

领域事件

领域事件(Domain Event)指的就是把领域中所发生的活动建模成一系列离散事件。领域事件也是一种领域对象,是领域模型的组成部分。领域事件生命周期包括产生、存储、分发和使用四个阶段,根据角色的不同,事件的产生处于事件发布阶段,而存储、分发和使用可以归为事件的处理阶段。领域事件包含唯一标识、产生时间、事件来源等元数据,也可以根据需要包含任何业务数据。同时,领域事件具有严格意义上的不变性,任何场合都不可能对事件本身做任何修改,因为事件代表的是一种瞬时状态。

服务边界划分的原则

服务关联度原则

该原则有几种表现形式,比如是否该服务变化时,其他服务也需要进行变化;或者说该服务中的数据是否通常在当前上下文中的范围内使用。 

业务能力职责单一原则

服务边界内的业务能力职责应单一,不是完成同一业务能力的服务不应该放在同一个上下文中。 

读写分离原则

对于数据读取类型的服务应该尽量放在单独的子域中,而且这种子域一般不应该是核心子域。

组织关系原则

组织中业务结构的划分也是一种参考,因为一个业务部门的存在往往有其独特的业务价值。所以,一个团队一个上下文策略有时候反而是一种有效的拆分策略。