05如何做微服务架构设计

本文探讨了微服务架构的设计方法,包括DDD、12因素应用和EDA,强调了遵循的原则如单一职责、自包含性和无状态服务,详细阐述了设计要点如服务通信、注册发现、负载均衡等,并给出了设计时需注意的事项和团队协作的重要性。
摘要由CSDN通过智能技术生成

一句话导读

        微服务架构设计方法有:领域驱动设计DDD(Domain-Driven-Design)、12因素应用(12-Factor App)、事件驱动架构EDA(Event-Driven Architecture)等等,但是他们都必须遵守微服务架构设计的一些共同特点,本文主要说明微服务架构设计的原则、要点、以及注意事项。

目录

一句话导读

一、先谈谈什么是软件架构

二、再谈谈架构风格

        1. 分层架构风格(Layered Architecture)

        2. 客户端-服务器架构风格(Client-Server Architecture)

        3. 分布式架构风格(Distributed Architecture)

        4. 事件驱动架构风格(Event-Driven Architecture)

        5. 微服务架构风格(Microservices Architecture)

        6. 六边形架构风格(Hexagonal Architecture)

        7. 说说微服务架构设计风格

三、微服务架构设计的原则

        1. 单一职责原则

        2. 自包含性原则

        3. 自治性原则

        4. API 设计原则

        5. AKF拆分原则

        6. 前后端分离原则

        7. 无状态服务原则

四、微服务架构设计的要点

        1. 服务间通信机制

        2. 服务注册与发现

        3. 负载均衡

        4. 容错与熔断

        5. 持续集成和部署

        6. 监控和日志记录

        7. 数据库选择

        8. 版本管理

五、微服务架构设计注意事项

        1. 避免过度细化

        2. 避免过度共享

        3. 强调容错和恢复

        4. 监控和追踪

        5. 安全性和权限

        6. 团队协作


一、先谈谈什么是软件架构

        对于一个程序员来说,他的终极目标,绝大部分可能就是架构师,公司里总会有那么几个神秘人物以架构师的title存在,要想成为架构师,首先得了解神秘是架构,那么到底什么是架构呢?维基百科、百度等都有很多回答,但是我同意《微服务架构模式》这本书的作者克里斯·理查森(Chris Richardson)的观点:计算机系统的软件架构是构建这个系统所需的一组结构,包括软件元素、它们之间的关系以及两者的属性。

        也就是说软件架构师要做的就是将系统拆分成不同的软件元素、设计出它们直接的关系、以及各个元素的属性。对应到我们工作中常见的技术组件、组件属性、组件之间如何调用等。这里我们提下软件架构设计的4+1视图模型,有兴趣的朋友可以自己搜索研究下。

二、再谈谈架构风格

        在软件架构设计中,不同的架构风格决定了系统的组织方式和结构。不同的架构风格适用于不同的场景和需求。以下列举了一些常见的架构风格:

        1. 分层架构风格(Layered Architecture)

        分层架构风格是一种常见的软件架构风格,它将系统划分为多个层次,每个层次负责处理特定的任务。通常包括表示层、业务逻辑层和数据访问层。这种风格的优点是结构清晰、易于维护和扩展,适用于大多数企业应用系统。

        2. 客户端-服务器架构风格(Client-Server Architecture)

        客户端-服务器架构风格是一种基于网络通信的软件架构风格。客户端和服务器之间通过请求-响应的方式进行通信。这种风格的优点是可扩展性和并发性较好,适用于网络通信场景。将系统分为客户端和服务器,客户端发送请求并接收响应,服务器处理请求并提供服务。

        3. 分布式架构风格(Distributed Architecture)

        分布式架构风格将系统划分为多个独立的子系统,每个子系统负责处理一部分业务逻辑。这些子系统之间通过网络通信进行协作。这种风格的优点是可伸缩性较好,适用于大规模、高并发场景。

        4. 事件驱动架构风格(Event-Driven Architecture)

        事件驱动架构风格是一种基于事件驱动的软件架构风格。在这种风格中,系统的执行动力来自于事件,事件驱动系统中的各个组件进行相应的处理。这种风格的优点是系统松耦合、易于扩展和维护,适用于大规模、高并发场景。

        5. 微服务架构风格(Microservices Architecture)

        微服务架构风格是一种将系统划分为多个微服务的软件架构风格。每个微服务负责处理一部分业务逻辑,并与其他微服务进行通信协作。这种风格的优点是灵活性和可伸缩性较好,适用于云端、容器化等新兴技术场景。

        6. 六边形架构风格(Hexagonal Architecture)

       六边形架构风格也称为端口和适配器架构,强调将应用程序核心(领域模型)与外部系统进行隔离,以支持业务需求的变化。

        7. 说说微服务架构设计风格

        上面我们也说了微服务架构风格,微服务架构设计风格强调的是将应用程序拆分成一组微小的、相互解耦的、自治的服务,他的目标就是为了提高系统的灵活性、可扩展性、高可用性等。

三、微服务架构设计的原则

        1. 单一职责原则

        每个微服务应该关注一个特定的业务领域,拥有明确的职责,避免功能的混合和耦合。

        2. 自包含性原则

        每个微服务应该是自包含的,具有独立的数据库和数据存储,减少服务之间的直接依赖。

        3. 自治性原则

        每个微服务应该是自治的,能够独立开发、部署、扩展和维护,不会对其他服务造成影响。

        4. API 设计原则

        定义明确的API接口,确保微服务之间的通信方式一致性和易用性。考虑版本控制和演进。

        5. AKF拆分原则

        AKF扩展立方体(参考《The Art of Scalability》),这些原则由Martin Fowler和他的团队提出的应用扩展的三个维度。理论上按照这三个扩展模式,可以将一个单体系统,进行无限扩展。以AKF为缩写,代表了原则的三个重要维度:可用性(Availability)、扩展性(Scalability)和灵活性(Flexibility)。旨在帮助团队在设计和划分微服务时,考虑到系统的可扩展性、灵活性和性能

        6. 前后端分离原则

        前后端分离原则,简单来讲就是前端和后端的代码分离也就是技术上做分离,我们推荐的模式是最好直接采用物理分离的方式部署,进一步促使进行更彻底的分离。不要继续以前的服务端模板技术,比如JSP ,把Java JS HTML CSS 都堆到一个页面里,稍复杂的页面就无法维护。

        7. 无状态服务原则

        对于无状态服务,首先说一下什么是状态:如果一个数据需要被多个服务共享,才能完成一笔交易,那么这个数据被称为状态。进而依赖这个“状态”数据的服务被称为有状态服务,反之称为无状态服务。

四、微服务架构设计的要点

        1. 服务间通信机制

        选择适合的通信方式,如HTTP、RPC、消息队列等,确保微服务之间的通信畅通。冗余的硬件资源,确保实现故障切换机制。合适的重试机制,确保服务能够正常提供服务。

        2. 服务注册与发现

        使用服务注册与发现工具管理服务实例,实现动态发现和负载均衡。

        3. 负载均衡

        引入负载均衡机制,将请求均匀分布到不同的服务实例,提高性能和可用性。

        4. 容错与熔断

        使用容错和熔断机制,防止故障的蔓延,保护系统的稳定性。

        5. 持续集成和部署

        建立自动化的持续集成和持续部署流程,支持快速迭代和交付。

        6. 监控和日志记录

        建立监控和日志系统,对微服务进行监控和日志记录,帮助问题定位和性能优化。

        7. 数据库选择

        根据业务需求选择适当的数据库类型,避免数据库成为瓶颈。

        8. 版本管理

        管理微服务的版本,确保服务之间的兼容。每个服务应用有自己的版本,应建立合适的版本发布和回滚机制,确保服务的稳定性和可靠性

五、微服务架构设计注意事项

        1. 避免过度细化

        不要将微服务划分得过于细化,以免引入过多的管理和复杂性。

        2. 避免过度共享

        不要让微服务之间的数据共享过多,避免数据的耦合和一致性问题。

        3. 强调容错和恢复

        考虑故障和异常情况,引入容错机制和故障恢复策略,确保系统的稳定性。

        4. 监控和追踪

        建立监控和日志记录系统,对每个微服务进行监控和追踪,方便故障排查和性能优化。

        5. 安全性和权限

        引入身份验证和授权机制,保障微服务之间的通信和数据安全。

        6. 团队协作

        在设计和开发过程中,确保团队成员之间的紧密合作和沟通,协调微服务之间的协作和交互。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值