微服务体系结构是构建现代软件系统最流行的方法之一。微服务体系结构的核心是使用更小的内聚服务构建软件应用程序。您不需要构建一个大型的整体,而是构建小型的可独立部署的服务。因此,单个团队可以拥有端到端的功能。
什么是微服务体系结构?
微服务体系结构由许多(通常是数百个)小型自治服务组成。每项服务都是独立的。微服务是围绕业务能力构建的。微服务体系结构的一些重要特征包括:
- 微服务是围绕业务能力建模的。
- 微服务是可独立部署的。
- 微服务封装了它所拥有的数据。如果一个微服务需要从另一个微服务获取数据,那么它应该调用API。
- 微服务的规模应该很小。
Java微服务的事实标准是Spring Boot。
什么是Spring Boot?
SpringBoot是构建微服务最流行的框架之一。它带有智能默认值。创建微服务就像定义几个依赖项一样简单。对嵌入式web服务器的SpringBoot支持使编写RESTFul API变得非常容易。您可以通过一些配置集成其他框架。
构建微服务的秘诀
在本文中,我将讨论如何使用SpringBoot构建一个真实的微服务。首先,我将解释如何识别微服务边界。之后,我将解释如何使用API优先方法设计API。然后,我将解释如何在Kubernetes上编码和部署微服务。在这个过程中,我将涉及
- DDD - 领域驱动设计
- API设计
- API文档
- 将微服务容器化
- Kubernetes上的部署
围绕业务能力构建微服务
微服务体系结构的主要好处之一是开发人员的灵活性。它使产品团队能够更灵活地构建更小的功能增量。因此,以相互独立的方式设计微服务非常重要。围绕业务能力建模微服务就是这样一种设计技术。
围绕业务能力构建微服务的技术之一是使用域驱动设计(DDD)。Eric Evans在他的书《领域驱动设计》中推广了DDD。
DDD是对复杂业务领域进行建模并将其分解为可管理子域和有界上下文的框架。
让我们从DDD的角度来看电子商务领域。电子商务领域可以由以下子域和有界上下文组成。
DDD分为两个阶段:
- 战略设计 :在战略设计中,您将重点放在整个业务领域。您可以识别有界上下文、子域、通用语言以及不同有界上下文之间的上下文映射。
- 战术设计 :战术设计为您提供了一组设计模式来建模业务领域。在战术设计期间,您可以识别实体、服务、聚合根、存储库等。
DDD是一个迭代过程。这通常包括领域专家、开发人员和其他涉众。
在DDD中,识别微服务的过程可以如下所示:
“聚合根”可以是微服务的一个很好的候选者,因为它代表事务边界内的一个功能上内聚的单元。此外,域服务是无状态的,可以成为微服务的另一个很好的候选者。
DDD术语
- 领域:公司的整体业务领域。
- 子域:业务域的细粒度区域。所有子域加起来就是公司的业务域。
- 泛在语言:团队、开发人员、领域专家和其他参与者共享的语言。
- 有界上下文:域中业务上下文的逻辑边界。
- 实体:具有标识的域对象。例如,可以使用产品id识别产品。
- 价值对象:由其价值标识的对象(例如,货币)。
- 聚合:表示对象的hirearchy的根实体。通常,它表示事务边界。
- 服务:一个对象,它实现了一些不适合单个实体的逻辑。服务是无状态的。
- 存储库:从数据存储中检索或持久化域对象的对象。
- 工厂: