你知道微服务和其设计模式吗?
大家好。
在这篇文章中,我们将看到微服务架构,以及它与单体应用的区别。还将看到什么是微服务设计模式和不同的类型。
然后,我们将看到微服务架构的优势和劣势,以结束这篇文章。
让我们开始吧!
什么是微服务?
微服务是一种开发软件应用的架构风格,它作为单独的服务运行,通过以下方式相互通信:
- 使用API调用进行同步通信
- 通过发布和订阅/基于事件的机制进行异步通信–即使用消息队列
这些微服务具有以下特性
- 可独立部署
- 对负载有高度的可扩展性
- 可以使用多种编程语言进行开发–即多语种
- 松散的耦合
- 围绕业务领域进行组织
- 由小型和独立的团队维护
- 高度的可维护性和可测试性
- 通过自动化的CICD管道实现持续交付,加快上线时间
- 容灾备灾能力
使用微服务架构,我们可以实现大型复杂应用程序的快速开发和交付,即缩短上线时间。
单体与微服务
在传统的单机架构中,整个应用程序被紧紧地耦合在一个单一的代码库中,使其成为紧耦合的。
在这个单一的代码库中会有不同的层次,如表现形式、业务逻辑和数据库持久性,并连接到一个单一的数据库。
这个应用程序是作为一个单一的fat jar构建的,它包含了类文件和所有运行所需的依赖性。
虽然单机应用程序非常容易构建、测试和部署,但它也面临着各种挑战,如紧密耦合和可扩展性。
单个模块不能在负载时单独扩展,因此我们需要使用一种叫做垂直扩展的技术来再次扩展整个应用程序。
单机应用也是单点故障。
2009年,Netflix面临很多基础设施问题,因为它无法跟上其快速增长的视频流媒体服务的需求。
从那时起,Netflix决定将其基础设施从私有数据中心迁移到AWS云,并将其单体架构替换为微服务架构。
他们是早期从单体架构过渡到微服务架构的先驱者。
甚至开源了自己用于构建微服务的框架和工具,这就是著名的Netflix OSS Stack,后来改名为Spring Cloud Netflix。
微服务架构,即现代应用开发方法,由较小的运行服务组成,这些服务是基于领域开发的。
这些服务有自己的数据库或模式,并将只包含相关的领域数据。
如上图所示,微服务根据业务领域被隔离开来,如账户服务、库存服务、运输服务等,它们连接到各自的数据库。
这些服务也可以同步或异步地相互连接以获得任何需要的数据。
这些服务作为独立的小jar文件被部署在他们自己的机器上,并独立部署,这与单机应用不同。
部署可以在内部服务器、云服务器或docker容器中完成。
这种架构是可以独立扩展的,使用一种叫做 “水平扩展 “的技术,即只扩展具有较高负载的服务。
此外,这些服务是容错的,有弹性的,没有单点故障。
即使库存服务和运输服务出现故障,用户仍然可以使用账户服务检查他们的账户。
微服务设计模式
微服务架构有很多现成的不同设计模式,可用于不同的用例。
微服务是独立的、松散耦合的,并遵循分布式系统架构,每个服务只承担一个责任。
在这种类型的架构中会有很多挑战,包括通信故障、分布式事务回滚、配置外部化、集中式日志等。
这些设计上的挑战以解决它们的形式被称为微服务设计模式。
如下图所示,有很多微服务的设计模式。如果能接触到所有重要的模式,将对设计微服务架构有很大帮助。
微服务的设计模式一般可以分为以下几种类型
- 分解模式
- 集成模式
- 数据库设计模式
- 可观察性设计模式
- 跨领域设计模式
1. 分解模式
如果我们需要将一个单体应用分解成更小的微服务,那么分解模式就非常有用。这些模式提供了如何在逻辑上进行分解的建议。这些模式有不同的类型,重要的是要了解该领域。
a. 按业务能力分解
b. 按子域分解
c. 按 “绞杀者 “模式进行分解
2. 集成设计模式
集成设计模式用于处理不同微服务之间的通信,以及如何获得跨服务的响应并将其发送到客户端,同时保持高性能。
重要的集成模式有
a. API网关模式
b. 聚合器模式
c. 代理模式
d. 链式微服务模式
3. 数据库设计模式
数据库设计模式帮助我们为微服务架构设计数据库,如为每个微服务使用单一的共享数据库或单独的数据库,为读和写操作提供单独的数据库,跨微服务的分布式事务管理,等等。
以下这些数据库设计模式是非常重要的,因为数据库的设计可以决定应用程序的好坏
a. 每个服务的数据库模式
b. 每个服务的共享数据库模式
c. 命令和查询责任隔离(CQRS)模式
d. 事件来源
e. 传奇模式
4. 可观察性模式
可观察性模式对于设计微服务的适当监控和遥测非常关键,即集中式日志、分布式跟踪、性能指标、微服务实例的健康检查等等。
重要的模式有
a. 日志聚合模式
b. 性能度量
c. 分布式跟踪
d. 健康检查
5. 交叉关注设计模式
交叉关注模式用于处理微服务如何相互发现,如何将微服务配置外部化,如何使用断路器处理服务故障,以及如何部署微服务。
重要的模式有
a. 外部配置模式
b. 服务发现模式
c. 断路器模式
d. 蓝绿部署模式
微服务的优势
- 微服务遵循单一责任原则。
- 更好的合规性和数据安全性。
- 自成一体,可独立部署
- 动态扩展,与单片机相比,扩展成本更低
- 进入发布的时间更快
- 我们可以为每个微服务使用多种编程语言和框架
- 更有弹性的应用程序和改进的故障隔离。
- 广泛的设计模式的自制性
微服务的弊端
微服务架构有其自身的缺点,具体如下
- 增加了服务间通信的复杂性
- 通信失败的几率更高
- 分布式事务的回滚很复杂
- 更多的资源和开销
- 难以测试和调试
- 维护多个小型服务很复杂
- 复杂的部署
总结
在这篇文章中,我们看到了微服务架构以及它与单体应用的不同之处。
然后,我们看了什么是微服务设计模式和不同的类型。
还看到了微服务架构的优势和劣势。
希望这篇文章对你有用,感谢你的阅读!!