微服务架构设计模式详解(5种主流模式)
微服务架构
微服务,一种革命性的架构模式,主张将大型应用分解为若干小服务,通过轻量级通信机制互联。每个服务专注特定业务,具备独立部署能力,轻松融入生产环境,为系统带来高效、灵活的构建与部署体验。
如下图所示:
为什么需要微服务架构
公司初期,业务相对简单,正是验证商业模式的关键时刻。此时,单体服务因其高效性,在业务复杂度低、系统简单的情况下,成为提升生产力的优选方案。
如下图所示:
随着公司的发展,业务复杂性慢慢提高,以及访问量越来越大,会出现如下情况:
- 编译时间过长、回归测试周期过长;
- 开发效率降低,因为,所有业务都混在一起;
- 团队扩展了,需要分工明确了,按照业务来发展,大家都高效;
聚合设计模式
为了尽量减少服务之间的通信,我们可以使用服务聚合模式。
基本上服务聚合设计模式,是接收来自客户端、或 API 网关的请求。
然后分配给内部多个后端微服务,再将结果合并,并在一个响应结构中发给请求发起人。
如下图左侧所示:
这种模式,可以帮助简化客户端与微服务之间的通信,并提供更好的性能和用户体验。
代理设计模式
如下图左侧所示:
比如:
Service Mesh是一种轻量级的微服务代理框架,用于管理微服务之间的通信。
异步消息传递设计模式
如果通信只是在少数几个微服务之间进行,那么同步通信就很好。
REST虽流行但同步易阻塞,微服务架构中,消息队列因其异步性,常作为REST请求/响应的替代选择,提升系统性能。
如下图所示:
在微服务架构中,若需实现多服务间无依赖、松耦合的交互,推荐采用基于异步消息的通信方式,确保服务间的高效协同。
链式设计模式
微服务间存在多级依赖,如Sale微服务即依赖于Product和Order微服务,实现高效服务交互与协作。
所有服务都使用同步消息传递,在整个链式调用完成之前,客户端会一直阻塞。
因此,服务调用链不宜过长,以免客户端长时间等待。
如下图所示:
数据共享设计模式
我们已经说过,在微服务里,为每个服务分配一套单独的数据库是理想方案。
在后面的阶段里,我们可以转到每个服务一套数据库的模式,直到我们完全做到了这一点。
但在重构现有的单体应用时,SQL数据库反规范化可能会导致数据重复和不一致。
因此,在单体应用到微服务架构的过渡阶段,可以使用这种设计模式。
如下图所示:
在这种情况下,部分微服务可能会共享缓存、和数据库存储。
-对此,您有什么看法见解?-
-欢迎在评论区留言探讨和分享。-