架构实践04-高扩展架构模式

零、文章目录

架构实践04-高扩展架构模式

1、可扩展架构的基本思想和模式

(1)软件系统的可扩展性
  • 软件系统的特性:软件系统与硬件和建筑系统不同,具有可扩展性。软件系统可以通过不断的更新和调整来增加新功能和特性,以适应新的需求和技术发展趋势。
  • 扩展的挑战:扩展软件系统时,如何以最小的代价进行扩展是一个重要问题。扩展时可能需要修改多个部分,导致改动范围大、风险高。
(2)可扩展性的基本思想
  • 核心思想:可扩展性架构设计的核心思想是"拆"。通过将大一统的系统拆分成多个小部分,可以减少扩展时的改动范围,降低风险。
  • 拆分的目的:拆分的目的是为了在扩展时只需修改部分系统,而不是整个系统,从而减少改动的复杂性和风险。
(3)常见的拆分思路
  • 面向流程拆分:
    • 定义:将整个业务流程拆分为几个阶段,每个阶段作为一个部分。
    • 优势:扩展时只需修改某一层或几层,不会影响整个系统。
    • 示例:学生信息管理系统中的展示层、业务层、数据层、存储层。
  • 面向服务拆分:
    • 定义:将系统提供的服务拆分,每个服务作为一个部分。
    • 优势:对某个服务扩展或增加新服务时,只需修改相关服务,不影响其他服务。
    • 示例:学生信息管理系统中的注册服务、登录服务、信息管理服务、安全设置服务。
  • 面向功能拆分:
    • 定义:将系统提供的功能拆分,每个功能作为一个部分。
    • 优势:对某个功能扩展或增加新功能时,只需修改相关功能,不影响其他功能。
    • 示例:学生信息管理系统中的数据层、存储层、注册服务中的多种注册方式。
(4)可扩展系统架构
  • 分层架构:面向流程拆分,固定内核,移动数据。
  • SOA架构:面向服务拆分,将系统拆分为多个独立的服务。
  • 微服务架构:面向服务拆分的进一步发展,每个服务是一个独立运行的子系统。
  • 微内核架构:面向功能拆分,核心系统提供基本功能,其他功能通过插件形式扩展。

2、传统可扩展架构模式:分层架构和SOA

(1)分层架构
  • 定义:分层架构是一种常见的架构模式,也称为 N 层架构,通常至少包含 2 层。
  • 常见类型:
    • C/S 架构:客户端/服务器架构,分为用户交互层和后台支撑层。
    • B/S 架构:浏览器/服务器架构,同样分为用户交互层和后台支撑层。
复制代码
- MVC 架构:模型/视图/控制器架构,适用于单个业务子系统,按职责划分层。
- MVP 构架:模型/视图/呈现器架构,类似于 MVC。
复制代码
- 逻辑分层架构:可以应用于单个业务子系统或整个业务系统,按职责划分层,层与层之间是自顶向下的依赖关系。
  • 核心原则:
    • 清晰的层边界:确保各层之间的差异和边界清晰,避免混淆。
    • 隔离关注点:每个层只处理本层的逻辑,支持系统在某层上快速扩展。
    • 稳定的依赖关系:层与层之间的依赖关系必须稳定,以支持快速扩展。
  • 优点:
    • 降低复杂度:通过分层将系统分解为更小、更易管理的部分。
    • 支持快速扩展:可以在某一层上进行扩展而不影响其他层。
  • 缺点:
    • 冗余:每层都必须参与处理,即使业务简单。
    • 性能损失:每次业务请求需要穿越所有层,可能导致性能下降。
(2)SOA(面向服务的架构)
  • 定义:SOA 是一种架构模式,旨在通过服务的形式将企业内部的 IT 系统整合在一起。
  • 背景:企业内部 IT 系统重复建设且效率低下,需要解决异构系统之间的集成问题。
  • 关键概念:
    • 服务:将业务功能封装为服务,提供开放的能力。
    • ESB(企业服务总线):将各个异构系统连接在一起,实现服务间的高效互联互通。
    • 松耦合:减少服务间的依赖和互相影响,提高系统的灵活性和可维护性。
  • 优点:
    • 资源复用:避免重复开发,提高效率。
    • 灵活集成:支持异构系统的高效集成。
  • 缺点:
    • 复杂性:引入了更多的复杂性,特别是 ESB 的实现和维护。
    • 性能瓶颈:ESB 可能成为系统的性能瓶颈。
  • 适用场景:
    • 传统企业:如制造业、金融业等,存在大量异构系统。
    • 互联网企业:较少采用,因为互联网企业通常较年轻,没有历史包袱,且对性能要求较高。
(3)互联网企业很少采用 SOA 架构的原因
  • 没有历史包袱:互联网企业较年轻,没有大量异构系统的遗留问题。
  • 高性能要求:互联网企业对性能要求较高,ESB 可能成为性能瓶颈。
  • 快速迭代:互联网企业需要快速迭代,SOA 的复杂性和重负载不利于快速开发和部署。
  • 微服务架构:微服务架构作为一种更轻量、更灵活的替代方案,更适合互联网企业的特点。

3、深入理解微服务架构

(1)微服务与SOA的关系
  • 历史背景:
    • 2005年:Dr. Peter Rodgers 提出"Micro-Web-Services"概念。
    • 2011年:软件架构工作组使用"microservice"描述一种架构模式。
    • 2012年:James Lewis 在 QCon San Francisco 2012 发表关于微服务的演讲。
    • 2014年:James Lewis 和 Martin Fowler 合写关于微服务的文章。
  • 关系与区别:
    • SOA:面向服务的架构,通常包含 ESB(企业服务总线),服务粒度较粗,适合复杂、异构的企业级系统。
    • 微服务:更细粒度的服务,去掉了 ESB,使用轻量级协议(如 HTTP RESTful),强调快速交付和自动化,适合快速变化的互联网系统。
(2)微服务的特点
  • 服务粒度:微服务的服务粒度更细,例如"员工管理系统"可以拆分为"员工信息管理"、"员工考勤管理"等。
  • 服务通信:微服务推荐使用轻量级协议(如 RESTful、RPC),强调"聪明的终端,愚蠢的管道"。
  • 服务交付:微服务要求快速交付,需要自动化测试、持续集成、自动化部署等支持。
  • 应用场景:微服务适合快速变化的互联网系统,而 SOA 适合复杂、异构的企业级系统。
(3)微服务的陷阱
  • 服务划分过细:服务间关系复杂,系统整体复杂度上升。
  • 服务数量太多:团队效率急剧下降,开发、测试、部署成本增加。
  • 调用链太长:性能下降,问题定位困难。
  • 缺乏自动化支撑:无法快速交付,甚至不如大而全的系统效率高。
  • 缺乏服务治理:微服务数量增多后管理混乱,需要自动化服务管理系统。
(4)实践经验
  • 服务粒度:不要盲目追求"微",根据业务需求和服务复杂度合理划分。
  • 基础设施:自动化测试、部署、监控等基础设施是成功实施微服务的关键。
  • 组织结构:服务拆分应与组织结构匹配,遵循康威定律。
  • 逐步实施:不要一次性大规模拆分,逐步进行,逐步优化。

4、微服务架构最佳实践-方法

(1)服务粒度
  • 三个火枪手原则:每个微服务由3个人负责开发。这样既能保证系统的复杂度适中,又能形成稳定的备份,促进技术讨论和提升。
  • 团队规模:根据团队规模来划分微服务数量。例如,6个人可以划分为2个微服务,12个人可以划分为4个微服务。
  • 灵活性:服务拆分不是一成不变的,随着业务发展和团队规模扩大,可以适时调整微服务的数量和粒度。
(2)拆分方法
  • 基于业务逻辑拆分:将业务模块按职责范围拆分为独立的服务。注意避免因职责范围理解不同而导致的拆分争议。
  • 基于可扩展拆分:将成熟和改动不大的服务拆分为稳定服务,将经常变化和迭代的服务拆分为变动服务。
  • 基于可靠性拆分:将可靠性要求高的核心服务和可靠性要求低的非核心服务拆分开来,重点保证核心服务的高可用。
  • 基于性能拆分:将性能要求高或性能压力大的模块拆分出来,避免影响其他服务。
(3)基础设施
  • 服务发现、服务路由、服务容错:这是最基本的微服务基础设施。
  • 接口框架、API网关:提升开发和对接外部服务的效率。
  • 自动化部署、自动化测试、配置中心:提升测试和运维效率。
  • 服务监控、服务跟踪、服务安全:随着微服务节点数量增加,这些基础设施的重要性逐渐提升。
(4)实践建议
  • 逐步实施:不要一开始就追求完美的微服务架构,可以根据业务发展和团队规模逐步调整和优化。
  • 基础设施优先:确保"automated"相关的基础设施健全,避免微服务成为焦油坑。
  • 团队协作:鼓励团队成员之间的技术讨论和协作,形成良好的开发氛围。

5、微服务架构最佳实践-基础设施

(1)自动化测试
  • 重要性:微服务架构中,接口数量增加,版本更新频繁,人工测试效率低下,必须通过自动化测试提高效率。
  • 涵盖范围:代码级单元测试、系统级集成测试、系统间接口测试。
  • 最低要求:至少实现接口测试自动化。
(2)自动化部署
  • 背景:微服务部署节点多,频率高,人工处理效率低且易出错。
  • 功能:版本管理、资源管理、部署操作、回退操作。
(3)配置中心
  • 背景:微服务节点多,人工修改配置效率低且易出错。
  • 功能:配置版本管理、增删改查配置、节点管理、配置同步、配置推送。
(4)接口框架
  • 背景:统一接口协议和数据格式,避免微服务间适配复杂。
  • 功能:提供多种语言的解析包,确保接口协议和数据格式一致。
(5)API 网关
  • 背景:外部系统调用微服务复杂,需要统一入口。
  • 功能:接入鉴权、权限控制、传输加密、请求路由、流量控制。
(6)服务发现
  • 背景:微服务节点多且动态变化,手工配置不可行。
  • 实现方式:自理式和代理式。
  • 核心功能:服务注册表,记录服务节点的配置和状态。
(7)服务路由
  • 背景:从可用微服务节点中选择具体节点发起请求。
  • 实现方式:与服务发现紧密结合,常见路由算法有随机路由、轮询路由、最小压力路由等。
(8)服务容错
  • 背景:微服务节点多,故障概率增加,需要自动应对故障。
  • 功能:请求重试、流控、服务隔离。
(9)服务监控
  • 背景:微服务节点多,监控对象多,人工处理不现实。
  • 功能:实时监控、故障定位、预警。
(10)服务跟踪
  • 背景:服务监控难以实现请求链路的完整跟踪。
  • 功能:记录请求的完整路径和详细信息。
  • 技术:基于 Google 的 Dapper 论文。
(11)服务安全
  • 背景:微服务数据分散,需要保护业务和数据安全。
  • 功能:接入安全、数据安全、传输安全。
  • 实现方式:集成到配置中心,提供通用的安全策略库。

6、微内核架构

(1)基本架构
  • 核心系统(Core System):负责通用功能,如模块加载、模块间通信等。
  • 插件模块(Plug-in Modules):实现具体的业务逻辑,如"手机号注册"功能。
(2)设计关键点
  • 插件管理
    • 插件注册表:记录每个插件的信息,包括名称、位置、加载时机等。
    • 实现方法:配置文件、代码、数据库等。
  • 插件连接
    • 连接规范:核心系统制定插件和核心系统的连接规范。
    • 常见机制:OSGi、消息模式、依赖注入(如Spring)、分布式协议(如RPC、HTTP)。
  • 插件通信
    • 通信机制:通过核心系统提供的通信机制实现插件间的通信。
    • 类比:计算机通过主板上的总线实现各组件间的通信。
(3)OSGi 架构简析
  • 模块层(Module Layer):实现插件管理功能,插件称为Bundle,每个Bundle是一个Java的JAR文件,包含MANIFEST.MF元数据文件。
  • 生命周期层(Lifecycle Layer):实现插件连接功能,定义了Bundle的生命周期操作(安装、更新、启动、停止、卸载)。
  • 服务层(Service Layer):实现插件通信功能,提供服务注册功能,插件通过服务注册中心进行通信。
(4)规则引擎架构简析
  • 插件管理:业务功能分解为多个规则,保存在规则库中,业务人员通过配置规则实现业务流程。
  • 插件连接:规则引擎规定了规则开发的语言,业务人员基于规则语言编写规则文件。
  • 插件通信:规则之间通过数据流和事件流进行通信,由引擎负责传递数据和事件。
(5)规则引擎的优点
  • 可扩展:业务逻辑实现与业务系统分离,支持不改动业务系统的情况下扩展新功能。
  • 易理解:规则通过自然语言描述,业务人员易于理解和操作。
  • 高效率:提供可视化的规则定制、审批、查询及管理,方便业务人员快速配置新的业务。
(6)常见的规则引擎
  • JBoss Drools:开源的规则引擎,基于Rete算法,具有活跃的社区支持、快速的执行速度、与Java Rule Engine API(JSR-94)兼容等特点。
相关推荐
程序猿阿伟26 分钟前
《支付回调状态异常的溯源与架构级修复》
后端·架构
SmalBox1 小时前
【渲染流水线】[逐片元阶段]-[深度写入]以UnityURP为例
架构
猿java1 小时前
Elasticsearch有哪几种分页方式?该如何选择?
后端·elasticsearch·架构
数据智能老司机4 小时前
探索Java 全新的线程模型——结构化并发
java·性能优化·架构
数据智能老司机4 小时前
探索Java 全新的线程模型——作用域值
java·性能优化·架构
数据智能老司机4 小时前
探索Java 全新的线程模型——并发模式
java·性能优化·架构
数据智能老司机4 小时前
探索Java 全新的线程模型——虚拟线程
java·性能优化·架构
小马哥编程4 小时前
【软考架构】云计算相关概念
架构·云计算·软件工程·安全架构
架构精进之路5 小时前
多智能体系统不是银弹
后端·架构·aigc
mit6.8245 小时前
[身份验证脚手架] 应用布局如何构建
架构·php·后端框架