集群,分布式,SOA,微服务区别

本文详细解析了集群、分布式及微服务的概念与作用,阐述了从单机结构到集群,再到分布式和微服务的架构演进过程,强调了微服务在系统扩展性和独立性上的优势。

集群:同一个业务,部署在多个服务器上(不同的服务器运行同样的代码,干同一件事)

作用:通过负载均衡设备共同对外提供服务

分布式:一个业务分拆多个子业务,部署在不同的服务器上(不同的服务器,运行不同的代码,为了同一个目的)

作用:分布式解决网站高并发带来问题

集群和分布式并不冲突,可以有分布式集群

SOA:业务系统分解为多个组件,让每个组件都独立提供离散,自治,可复用的服务能力,通过服务的组合和编排来实现上层的业务流程 
作用:简化维护,降低整体风险,伸缩灵活

微服务:架构设计概念,各服务间隔离(分布式也是隔离),自治(分布式依赖整体组合)其它特性(单一职责,边界,异步通信,独立部署)是分布式概念的跟严格执行SOA到微服务架构的演进过程 
作用:各服务可独立应用,组合服务也可系统应用
 

                                                                                                     

单机结构

系统业务量很小的时候所有的代码都放在一个项目中就好了,

然后这个项目部署在一台服务器上就好了。

整个项目所有的服务都由这台服务器提供。这就是单机结构。

集群结构

单机处理到达瓶颈的时候,你就把单机复制几份,这样就构成了一个“集群”。

集群中每台服务器就叫做这个集群的一个“节点”,所有节点构成了一个集群。每个节点都提供相同的服务,那么这样系统的处理能力就相当于提升了好几倍(有几个节点就相当于提升了这么多倍)。

问题是用户的请求究竟由哪个节点来处理呢?

最好能够让此时此刻负载较小的节点来处理,这样使得每个节点的压力都比较平均。要实现这个功能,就需要在所有节点之前增加一个“调度者”的角色,用户的所有请求都先交给它,然后它根据当前所有节点的负载情况,决定将这个请求交给哪个节点处理。这个“调度者”有个牛逼了名字——负载均衡服务器

集群结构的好处就是系统扩展非常容易。如果随着你们系统业务的发展,当前的系统又支撑不住了,那么给这个集群再增加节点就行了。但是,当你的业务发展到一定程度的时候,你会发现一个问题——无论怎么增加节点,貌似整个集群性能的提升效果并不明显了这时候,你就需要使用微服务结构了。

 

分布式结构
分布式结构就是将一个完整的系统,按照业务功能,拆分成一个个独立的子系统,在分布式结构中,每个子系统就被称为“服务”。这些子系统能够独立运行在web容器中,它们之间通过RPC方式通信。

这样的好处有很多:

  1. 系统之间的耦合度大大降低,可以独立开发、独立部署、独立测试,系统与系统之间的边界非常明确,排错也变得相当容易,开发效率大大提升。
  2. 系统之间的耦合度降低,从而系统更易于扩展。我们可以针对性地扩展某些服务。假设这个商城要搞一次大促,下单量可能会大大提升,因此我们可以针对性地提升订单系统、产品系统的节点数量,而对于后台管理系统、数据分析系统而言,节点数量维持原有水平即可。
  3. 服务的复用性更高。比如,当我们将用户系统作为单独的服务后,该公司所有的产品都可以使用该系统作为用户系统,无需重复开发。




 

分布式系统微服务架构是两个密切相关但**本质不同的概念**。它们常常一起出现,容易混淆,下面我将从定义、目标、特点等方面详尽解释它们的区别,并辅以代码示例说明。 --- ### 一、基本定义 #### ✅ 分布式系统(Distributed System) 是一个广义的系统架构概念: 指由多个独立的计算机节点组成,这些节点通过网络通信协作完成共同任务,对外表现为一个统一的整体。 > **核心思想**:将计算、存储等资源分布到多个物理或虚拟机器上,提升性能、可用性可扩展性。 #### ✅ 微服务架构(Microservices Architecture) 是一种软件设计风格(架构模式),属于服务导向架构(SOA)的一种演进形式。 它将一个大型单体应用拆分为多个**小型、独立部署的服务**,每个服务运行在自己的进程中,通过轻量级通信机制(如 HTTP/REST 或 gRPC)交互。 > **核心思想**:高内聚、低耦合、独立开发、独立部署。 --- ### 二、主要区别对比表 | 维度 | 分布式系统 | 微服务 | |------|-----------|--------| | **范畴** | 系统部署与运行方式(底层基础设施层面) | 软件架构设计方式(上层应用结构) | | **目的** | 提升系统的性能、容错性、可伸缩性 | 提升开发效率、维护性、灵活性 | | **是否一定是微服务?** | 否(可以是数据库集群、文件系统等) | 是(通常构建于分布式环境之上) | | **通信方式** | RPC、消息队列、共享内存等 | REST、gRPC、消息中间件等 | | **典型例子** | Hadoop 集群、ZooKeeper、Redis Cluster | 订单服务、用户服务、支付服务拆分 | > 🔑 关键理解:**微服务通常是“构建在”分布式系统之上的**。即:微服务需要依赖分布式技术来实现跨进程通信、服务发现、负载均衡等。 --- ### 三、代码示例:微服务 + 分布式通信 以下是一个使用 Python 的 `FastAPI` 实现两个简单微服务并通过 HTTP 进行分布式调用的例子。 #### 1. 用户服务(user_service.py) ```python from fastapi import FastAPI import uvicorn app = FastAPI() @app.get("/user/{user_id}") def get_user(user_id: int): return {"user_id": user_id, "name": "Alice", "role": "admin"} if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8000) ``` #### 2. 订单服务(order_service.py)——调用用户服务(分布式远程调用) ```python from fastapi import FastAPI import httpx import asyncio app = FastAPI() ORDER_TO_USER_MAP = { 101: 1, 102: 2 } @app.get("/order/{order_id}") async def get_order(order_id: int): user_id = ORDER_TO_USER_MAP.get(order_id) if not user_id: return {"error": "Order not found"} # 发起对用户服务的远程调用(体现分布式通信) async with httpx.AsyncClient() as client: try: response = await client.get(f"http://localhost:8000/user/{user_id}") user_data = response.json() except Exception as e: user_data = {"error": str(e)} return { "order_id": order_id, "status": "shipped", "user_info": user_data } if __name__ == "__main__": uvicorn.run(app, host="0.0.0.0", port=8001) ``` #### 📌 解释: - 这两个服务分别运行在不同端口(8000 8001),模拟不同的服务器节点。 - `order_service` 主动发起对 `user_service` 的 HTTP 请求,这就是典型的**跨服务远程调用(Remote Procedure Call, RPC)**。 - 即使这两个服务都在本地运行,但从架构上看已经是“分布式”的了。 - 如果部署到多台机器或容器中(如 Docker + Kubernetes),就真正成为**分布式微服务架构**。 --- ### 四、总结类比 你可以这样理解两者的关系: > 💡 **微服务是“怎么设计程序”** > 💡 **分布式是“怎么运行程序”** 就像: > “微服务”像是把一家大公司拆成了多个小部门; > “分布式”则是让这些小部门分布在不同城市的办公楼里办公,并通过电话/邮件沟通协作。 --- ### 五、常见误区澄清 | 误解 | 正解 | |------|------| | 微服务就是分布式 | 错!微服务**通常运行在**分布式环境中,但也可以本地运行(比如开发阶段) | | 所有分布式系统都是微服务 | 错!数据库集群、CDN、分布式缓存都不是微服务 | | 微服务一定更高效 | 不一定!带来了复杂性:网络延迟、数据一致性、运维难度上升 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值