想要设计自己的微服务?看这篇文章就对了

本文通过使用Spring Boot,Spring Cloud和Docker构建的概念验证应用程序的示例,为了解常见的微服务架构模式提供了一个起点。

该代码在Github上可用,并且可以在Docker Hub上获得图像。只需一个命令即可启动整个系统。

作为这个系统的基础,我选择了一个旧项目,其后端曾经是一个整体。该应用程序提供了一种处理个人财务,组织收入和支出,管理储蓄,分析统计数据和创建简单预测的方法。

功能服务

整体应用程序被分解为三个核心微服务。所有这些都是可独立部署的应用程序,围绕某些业务功能组织。

img

帐户服务

包含一般用户输入逻辑和验证:收入/费用项目,节省和帐户设置。

METHOD PATH DESCRIPTION USER AUTHENTICATED AVAILABLE FROM UI
GET   /accounts/{account}   Get specified account data      
GET   /accounts/current   Get current account data   ×   ×  
GET   /accounts/demo   Get demo account data (pre-filled incomes/expenses items, etc)     ×  
PUT   /accounts/current   Save current account data   ×   ×  
POST   /accounts/   Register new account      
统计服务

对主要统计参数执行计算并捕获每个帐户的时间序列。数据点包含标准化为基本货币和时间段的值。此数据可用于跟踪帐户生命周期中的现金流动态。

METHOD PATH DESCRIPTION USER AUTHENTICATED AVAILABLE FROM UI
GET   /statistics/{account}   Get specified account statistics      
GET   /statistics/current   Get current account statistics   ×   ×  
GET   /statistics/demo   Get demo account statistics     ×  
PUT   /statistics/{account}   Create or update time series datapoint for specified account      
通知服务

存储用户的联系信息和通知设置(如提醒和备份频率)。计划工作人员从其他服务收集所需信息,并向订阅客户发送电子邮件。

METHOD PATH DESCRIPTION USER AUTHENTICATED AVAILABLE FROM UI
GET   /notifications/settings/current   Get current account notification settings   ×   ×  
PUT   /notifications/settings/current   Save current account notification settings   ×   ×  
注意

每个微服务都有自己的数据库,因此无法绕过API并直接访问持久性数据。

对于这个项目,我使用MongoDB作为每个服务的主数据库。拥有多语言持久性体系结构(以便选择最适合服务要求的数据库类型)也是有意义的。

服务到服务通信非常简单:微服务仅使用同步REST API进行通信。现实世界系统中的常见做法是使用交互方式的组合。例如,执行同步GET请求以检索数据并通过Message broker使用异步方法进行创建/更新操作,以便解耦服务和缓冲消息。这带给我们 。

基建服务

分布式系统中有许多常见模式,可以帮助我们使所描述的核心服务工作。Spring cloud 提供了强大的工具,可以增强Spring Boot应用程序的行为以实现这些模式。我简要介绍一下:

img

配置服务

Spring Cloud Config 是分布式系统的水平可扩展集中配置服务。它使用可插入的存储库层,目前支持本地存储,Git和Subversion。

在这个项目中,我使用 native profile,它只是从本地类路径加载配置文件。你可以在Config服务资源中查看 share 目录 。现在,当Notification-service请求它的配置时,使用shared/notification-service.yml 和 配置服务响应 shared/application.yml (在所有客户端应用程序之间共享)。

客户端使用

只需构建具有spring-cloud-starter-config 依赖性的Spring Boot应用程序 ,自动配置将完成剩下的工作。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgyyg.html