一郎科技|大牛带你实时解读微服务架构改造案例:天气预报系统的架构设计

天气预报系统的架构设计到目前为止 , 天气预报系统已经初具规模了 。 我们不但实现了天气数据的采集 , 还实现了数据的缓存、天气数据的API服务及天气预报UI界面等功能 。 天气预报系统就是一个大而全的单块架构系统 , 里面混杂了太多的功能 , 可以预见的是 , 如果越往后发展 , 则系统会变得越来越难以管理和维护 。 同时不同服务之间存在着依赖 , 对于测试也是一个挑战 。 对于这样的系统 , 为了更好地实现可维护性、可扩展性 , 需要进行微服务改造 。
本节所介绍的天气预报系统 , 正好是作为微服务架构改造的很好的案例 。
在micro-weather-report应用的基础上 , 我们将对其进行逐步的拆分 , 最终形成独立自治的微服务 。
一郎科技|大牛带你实时解读微服务架构改造案例:天气预报系统的架构设计天气预报系统的改造需求【一郎科技|大牛带你实时解读微服务架构改造案例:天气预报系统的架构设计】我们要对天气预报系统进行微服务的改造 。 在经过一场头脑风暴之后 , 迅速将我们的期望和需求记录下来 。

  • 微服务的拆分应该足够得小 , 每个微服务的业务是非常单一的 。
  • 微服务应能支持水平扩展 。
  • 如果有需要 , 应能够实现微服务间的相互调用 。
….
最后的省略号代表了这个需求是未完的 。 我们可以在改造系统的过程中不断去完善系统架构 , 这也符合软件开发的特征 。 但就目前而言 , 我们认为最重要的就是这些需求 。
天气预报系统的微服务拆分如果你熟悉DDD , 那么很容易就能够从系统的限界上下文中 , 提取出我们的微服务 。 图7-1展示了限界上下文与微服务之间的映射关系 。
一郎科技|大牛带你实时解读微服务架构改造案例:天气预报系统的架构设计整个系统可以分为天气数据采集微服务、天气数据API微服务、城市数据API微服务、天气预报微服务4个微服务 。 其中每个微服务又可以由不同的组件组成 , 其中:
  • 天气数据采集微服务包含数据采集组件、数据存储组件 。 数据采集组件是通用的用于采集天气数据的组件 。 数据存储组件是用于存储天气数据的组件;
  • 天气数据API微服务包含了天气数据查询组件 。 天气数据查询组件提供了天气数据查询的接口;
  • 城市数据API微服务包含了城市数据查询组件 。 城市数据查询组件提供了城市数据查询的接口;
  • 天气预报微服务包含了数据展示组件 。 数据展示组件用于将数据模型展示为用户能够理解的UI界面 。
微服务代码的拆分对于代码而言 , 每个微服务都是一个独立的工程(应用) 。 针对上述拆分的4个微服务 , 代码可以分为如下4个工程 。
  • .msa-weather-collection-server:天气数据采集微服务 。
  • msa-weather-data-server:天气数据API微服务 。
  • msa-weather-city-server:城市数据API微服务 。
  • msa-weather-report-server:天气预报微服务 。
系统的数据流向数据是驱动系统发展的核心 , 了解系统的数据流向非常重要 。
天气预报系统的数据 , 最初是来自第三方系统 。 这些第三方系统可以是国家气象局 , 也可以是其他专业天气数据服务网站 。 本书所采用的天气数据接口 , 都是来自互联网上免费测试用的接口 , 仅用于学习 。
为了避免对第三方的数据接口产生冲击 , 我们需要限制下调用的次数 。 另外 , 我们还采用了Redis缓存服务器对数据进行存储 , 这样一方面可以减少直接调用第三方接口的次数;另一方面 , 可以有效提升天气预报系统的并发访问量 。
图7-2展示了整个系统的数据流向 。 其中 , 为了提高系统的整体可用性 , 微服务可以水平扩展为多个实例 。


推荐阅读