基于 Spring Boot、Spring Cloud、Docker 的微服务系统架构实践

功能服务

PiggyMetrics被分解为三个核心微服务。这些服务都是围绕某些业务能力组织的可独立部署的应用程序。 
这里写图片描述

账户服务 
包含一般用户输入逻辑和验证:收入/费用项目,储蓄和帐户设置。

MethodPathDescriptionUser authenticatedAvailable from UI
GET/accounts/{account}获取指定的帐户数据  
GET/accounts/current获取当前帐户数据××
GET/accounts/demo获取模拟账户数据(预填收入/费用项目等) ×
PUT/accounts/current保存当前帐户数据××
POST/accounts/注册新帐号 ×

统计服务 
对主要统计参数执行计算,并为每个帐户的时间序列。数据点包含基准货币和时间段的值。此数据用于跟踪帐户生命周期中的现金流动动态(尚未在UI中实现的花式图表)。

MethodPathDescriptionUser authenticatedAvailable from UI
GET/statistics/{account}获取指定的帐户统计信息  
GET/statistics/current获取当前帐户统计信息××
GET/statistics/demo获取模拟帐户统计信息 ×
PUT/statistics/{account}创建或更新指定帐户的时间序列数据点  

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

MethodPathDescriptionUser authenticatedAvailable from UI
GET/notifications/settings/current获取当前的帐户通知设置××
PUT/notifications/settings/current保存当前帐户通知设置××


**小结:

  • 每个微服务都有自己的数据库,因此没有办法绕过API和直接访问数据库。
  • 在这个项目中,使用MongoDB作为每个服务的主数据库。它是支持多种编程语言持久性架构(包括最适合服务需求的数据库类型)。
  • Service-to-service的通信是相当简单的:各个微服务之间的通信只使用同步的REST API。在现实世界中通常的做法是使用交互风格的组合。例如,执行同步GET请求以检索数据,并通过消息代理使用异步方法进行创建/更新操作,以便分离服务和缓冲消息,这为我们带来了一致性。

基础服务设施

在分布式系统中有一些常见的架构,这可以帮助我们理解核心服务的工作原理。Spring Cloud提供了强大的工具来增强基于Spring Boot的应用程序,以此来实现这些架构。 
这里写图片描述

Config service 
Spring Cloud Config是用于分布式系统的水平可扩展的集中式配置服务。支持本地存储、Git和Subversion。

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

客户端使用 
只需构建具有spring-cloud-starter-config依赖的Spring Boot应用程序,自动配置将完成其余所有工作。

现在,不需要在应用程序中使用任何嵌入式属性。只需提供bootstrap.yml应用程序名称和配置服务url:

  1. spring:
  2. application:
  3. name:notification -service
  4. cloud:
  5. config:
  6. uri:http: // config:8888
  7. fail -fasttrue
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

使用Spring Cloud Config,可以动态地更新配置。 
例如,EmailService bean已注释@RefreshScope。这意味着,可以更改电子邮件文本和主题,而不需要重新部署启动通知服务。

首先,在Config服务器中更改所需的属性。然后,对Notification服务执行刷新请求:curl -H "Authorization: Bearer #token#" -XPOST http://127.0.0.1:8000/notifications/refresh

此外,也可以使用Repository webhooks自动执行此过程

**小结:

  • 动态更新有一些限制。@RefreshScope不与@Configuration类一起使用,并且不影响@Scheduled方法
  • fail-fast属性意味着Spring Boot如果它无法连接到Config 
    Service就将启动失败,这在批量启动时非常有用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值