分布式详解4
集群、分布式、SOA、微服务的概念及区别
集群
不同服务器部署同一套应用服务对外提供访问,实现服务的负载均衡或者互备(热备,主从等),指向一种组件的多个实例,形成的逻辑上的整体。单个节点可以提供完整服务。集群是物理形态
问题
“节点对等”是理想集群的一个核心特征,而“Nginx分发”是实现这一特征的最常用技术手段之一。
集群是一种系统架构的目标和组织形式。
节点对等是实现该目标的一种优秀内部结构和设计原则,它使得集群易于扩展和高可用。
Nginx分发是实现该目标的一个关键外部工具和流量调度机制,它负责将用户请求合理地分配给内部那些对等的节点,是集群能力的“放大器”。
详细解释
1. “集群中的节点位置对等”与集群的关系
这个概念描述的是集群内部节点的一种理想关系。
- 什么是对等?
- 功能对等:每个节点都运行着完全相同的一份代码或服务(例如,都部署了你的Web应用)。
- 身份对等:从负载均衡器的角度看,这些节点没有本质区别,任何一个节点都可以处理任何一个请求。它们通常是无状态的。
- 可替代性:如果其中一个节点宕机,其他节点可以立刻接管它的工作,用户不会感知到任何区别(除了可能的短暂性能波动)。
- 为什么它对集群重要?
- 实现高可用:正是因为节点对等,当一个节点失败时,流量可以无缝地切换到其他健康节点,从而保证了整个集群服务的高可用性。
- 实现轻松扩展:当需要处理更多流量时,你只需要简单地增加新的对等节点,并注册到负载均衡器即可。这种水平扩展方式非常直接和高效。
- 简化管理:管理一堆相同的机器比管理一堆功能各异的机器要简单得多。
所以,“节点对等”是构建一个健壮、可扩展集群的基石。
2. “Nginx的分发”与集群的关系
这个概念描述的是如何访问和利用一个由对等节点组成的集群。
- Nginx的角色:Nginx在这里扮演的是负载均衡器 和反向代理 的角色。
- 统一入口:用户不直接访问后端的某个具体节点,而是访问Nginx的地址。Nginx成为了整个集群对外的唯一入口。
- 流量分发:Nginx接收所有请求,并根据预设的负载均衡算法(如轮询、最小连接数、IP哈希等),将请求“分发”到后端任何一个对等的节点上。
- 健康检查:Nginx可以定期检查后端节点的健康状态。如果某个节点宕机,Nginx会自动停止将流量分发给它,从而隐藏了后端故障。
- 它如何与“节点对等”协同工作?
- 前提:正是因为集群的节点是对等的,Nginx才能进行有效的、随机的分发。如果节点功能不同,Nginx就需要复杂的路由规则,而不是简单的负载均衡。
- 价值体现:Nginx的分发机制,使得“节点对等”这一架构设计的价值得以实现。它确保了每个对等节点都能被充分利用,共同分担负载。
比喻
把集群想象成一家银行:
- 集群:就是这家银行本身。
- 对等节点:就是银行里一排功能完全相同的业务窗口。每个窗口都能办理存款、取款、开户等所有业务。
- Nginx分发:就是银行的大堂经理。
- 客户(请求)进入银行,不直接去某个窗口排队,而是先找大堂经理。
- 大堂经理根据各个窗口的忙碌情况(负载均衡策略),指引客户去某个空闲的窗口(对等节点)办理业务。
- 如果某个窗口临时关闭(节点宕机),大堂经理就不会再引导客户去那里。
分布式
服务的不同模块部署在不同的服务器上,单个节点不能提供完整服务,需要多节点协调提供服务(也可以是相同组件部署在不同节点、但节点间通过交换信息协作提供服务),分布式强调的是工作方式
SOA
面向服务的架构,一种设计方法,其中包含多个服务,服务之间通过相互依赖最终提供一系列的功能。一个服务通常以独立的形式存在于操作系统进程中。各个服务之间通过网络调用。
- 中心化实现:ESB(企业服务总线),各服务通过ESB进行交互,解决异构系统之间的连通性,通过协议转换、消息解析、消息路由把服务提供者的数据传送到服务消费者。很重,有一定的逻辑,可以解决一些公用逻辑的问题。
- 去中心化实现:微服务
ESB
一、ESB 的核心定义
ESB,全称为 企业服务总线。它不是一款具体的软件,而是一种架构模式,是传统 SOA 的核心基础设施。
我们可以用一个生动的比喻来理解它:
ESB 就像是企业IT系统的“交通总枢纽”或“中央调度中心”。
想象一个繁忙的城市:
- 各个部门/建筑 = 各个独立的业务系统(如CRM、ERP、财务系统、库存系统…)。
- 不同的道路和交通工具 = 不同的通信协议和数据格式(如HTTP, FTP, JMS, 数据库表,XML, JSON, CSV…)。
- 交通总枢纽 = ESB。
在没有ESB之前,系统之间需要建立大量的“点对点”直连道路,形成一个复杂的蜘蛛网,难以管理。而ESB的引入,建立了一个中央枢纽,所有系统都只连接到这个枢纽上,由它来负责所有的消息路由、转换和调度。
二、ESB 的详细作用
ESB的作用主要体现在它如何简化和管理企业内复杂的系统集成。其主要作用可以归纳为以下几点:
1. 协议转换与集成
- 作用:解决“语言不通”的问题。
- 描述:企业内各个遗留系统可能使用完全不同的通信协议。例如,CRM系统使用HTTP/REST,一个老的库存系统可能只支持FTP文件传输,而另一个核心系统可能使用JMS消息队列。ESB能够理解所有这些协议,并在它们之间进行转换。服务消费者只需要用一种协议(如HTTP)向ESB发送请求,ESB会负责用目标系统能理解的协议(如FTP)将请求发送出去。
2. 消息格式转换
- 作用:解决“数据格式不一”的问题。
- 描述:不同的系统可能使用不同的数据格式,比如XML、JSON、CSV甚至自定义格式。ESB可以将一种数据格式自动转换成另一种。例如,一个系统输出XML,但另一个系统只接受JSON,ESB可以在中间完成这一转换工作,对两端系统透明。
3. 消息路由
- 作用:智能决策“消息该去哪里”。
- 描述:ESB可以根据消息内容、头信息或预定义规则,将消息路由到正确的目的地。
- 内容路由:例如,一笔订单消息,如果金额大于1万元,就路由到“大客户处理服务”;否则,路由到“普通订单处理服务”。
- 消息分发:将一个消息同时路由到多个感兴趣的订阅者系统(发布/订阅模式)。
4. 服务编排与聚合
- 作用:组合多个细粒度服务,形成一个粗粒度的业务流程。
- 描述:ESB可以将一个复杂的业务请求,分解为多个步骤,调用不同的后端服务,然后将各个服务的响应结果聚合起来,最终返回一个统一的响应给消费者。
- 例子:一个“创建客户订单”的请求,ESB可能会依次:1)调用客户服务验证客户信息;2)调用库存服务检查并锁定库存;3)调用财务服务计算价格;4)调用订单服务生成最终订单。
5. 统一的安全管理与监控
- 作用:提供集中式的管控能力。
- 描述:
- 安全管理:在ESB层面统一实施身份认证、授权、加密和审计,而不需要每个服务自己实现。
- 监控与管理:ESB作为一个集中的流量通道,可以非常方便地监控所有服务的运行状态、流量、响应时间和错误率,为运维提供统一的视图。
- 服务质量:可以实现限流、熔断等功能,防止某个服务被突发流量冲垮。
6. 解耦
- 作用:这是ESB带来的最核心的架构价值。
- 描述:服务消费者(客户端)不再需要知道服务提供者的具体网络位置、协议和接口细节。它只需要知道ESB的地址和一个统一的接口。当服务提供者发生变化(如IP地址变更、技术栈升级)时,只需在ESB上进行调整,而所有消费者完全不受影响。这极大地降低了系统间的耦合度。
三、ESB 的优缺点
优点:
- 集成能力强:是解决企业内异构系统集成的利器。
- 标准化与管控:促进了企业IT的标准化和集中治理。
- 复用性高:通过服务编排,可以最大化服务的复用价值。
缺点(这也是微服务架构兴起的原因):
- 单点故障风险:ESB本身可能成为系统的单一故障点。
- 性能瓶颈:所有流量都经过ESB,可能使其成为性能瓶颈。
- 架构复杂、笨重:ESB产品通常非常庞大、复杂,学习和维护成本高。
- 与团队结构不匹配:一个集中的ESB团队可能成为开发的瓶颈,不符合敏捷开发中“谁开发,谁负责”的自治原则。
总结
ESB 是 SOA 思想的中心化实现,它通过一个总线式的中间件,为企业提供了强大的集成、转换、路由和治理能力,非常适合整合企业内部大量异构的、遗留的系统。
然而,随着云计算和敏捷开发方法的普及,其中心化、笨重的缺点日益凸显,从而催生了去中心化、轻量级的微服务架构。在微服务架构中,ESB的很多功能被下放到每个服务本身或轻量级的API网关中。
微服务
在 SOA 上做的升华,微服务架构强调的一个重点是业务需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这些小应用之间通过服务完成交互和集成
服务单一职责
轻量级通信:去掉ESB总线,采用restapi通信
区别
| 维度 | 集群 | 分布式 | SOA | 微服务 |
|---|---|---|---|---|
| 核心概念 | 同一应用的多份拷贝,形成逻辑整体 | 不同模块协同工作的一种工作方式 | 一种设计方法,通过服务集成构建系统 | 一种架构风格,是SOA的升华与细化 |
| 部署与结构 | 部署完全相同的应用实例 | 将系统模块化,部署在不同节点 | 服务作为独立进程,通过ESB(中心化) 或直接交互集成 | 业务彻底组件化,每个服务可独立开发、部署、运行 |
| 职责与粒度 | 每个节点都能提供完整服务 | 单个节点不能提供完整服务,需协作 | 服务粒度相对较粗 | 服务单一职责,粒度非常细 |
| 通信与交互 | 通常通过负载均衡器间接通信 | 节点间通过网络直接通信协作 | 中心化实现:依赖ESB进行协议转换、消息路由 去中心化实现:向微服务演进 | 去中心化,使用轻量级协议(如HTTP/REST, gRPC) |
| 本质特点 | 物理形态,强调冗余和扩展 | 工作方式,强调拆分与协作 | 企业级集成,解决异构系统连通性 | 敏捷开发与交付,强调彻底的解耦和自治 |
分布式系统的设计目标
可扩展性:通过对服务、存储的扩展,来提高系统的处理能力,通过对多台服务器协同工作,来完成单台服务器无法处理的任务,尤其是高并发或者大数据量的任务。
高可用:单点不影响整体,单点故障指系统中某个组件一旦失效,会让整个系统无法工作
无状态:无状态的服务才能满足部分机器机不影响全部,可以随时进行扩展的需求。
就是不携带session,cookie之类的
可管理:便于运维,出问题能不能及时发现定位
高可靠:同样的请求返回同样的数据;更新能够持久化;数据不会丢失




