架构实践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)兼容等特点。
相关推荐
李宥小哥2 小时前
架构实践01-基础概念
架构
吃滑椒的喵酱5 小时前
Apache Doris 开源最顶级基于MPP架构的高性能实时分析数据库
架构·开源·apache
东软吴彦祖7 小时前
实现基于分布式的LAMP架构+NFS实时同步到备份服务器
linux·运维·服务器·mysql·架构·wordpress
大明湖的狗凯.11 小时前
Servlet、omcat服务器架构与工作原理
服务器·servlet·架构
HsuYang15 小时前
Rollup源码学习(六)——重识Rollup构建生命周期
前端·javascript·架构
码农老起16 小时前
从阿里云EDM到美团云:典型微服务治理平台的实战经验分享
微服务·云原生·架构
颯沓如流星18 小时前
Java内存回收(GC)新贵的抉择,G1与ZGC!
java·jvm·架构
李宥小哥19 小时前
架构14-资源与调度
算法·贪心算法·架构
xuanloyer21 小时前
oracle网络架构
网络·oracle·架构