学同步通信准备

RPC、SOA与分布式:概念解析与优势

        1.RPC:远程过程调用,一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。 RPC 的出现就是为了让你调用远程方法像调用本地方法一样简单。

            先简单理解过程:

                消费方调用服务,client stub将服务内容变成能网络传输的格式,client stub发送到服务端。

                服务端解码,调用本地服务,返回结果到server stub,server stub在发送消息给消费方。

                消费方client stub解码,得到结果。

            来看详细过程

                服务消费方调用以本地调用方式调用服务;
                client stub接收到调用后负责将方法、参数等组装成能够进行网络传输的消息体;
                client stub找到服务地址,并将消息发送到服务端;
                server stub收到消息后进行解码;(第一次到服务方或者消费方都要解码)
                server stub根据解码结果调用本地的服务;
                本地服务执行并将结果返回给server stub;
                server stub将返回结果打包成消息并发送至消费方;
                client stub接收到消息,并进行解码;
                服务消费方得到最终结果。

                网上的图片:

           2.SOA 面向服务的架构,也就是把工程按照业务逻辑拆分成服务层、表现层两个工程。服务层中包含业务逻辑,只需要对外提供服务即可。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。
即SOA架构中有两个主要角色:服务提供者和服务使用者。
        3.分布式就是我们把整个系统拆分成不同的服务然后将这些服务放在不同的服务器上减轻单体服务的压力提高并发量和性能。比如电商系统可以简单地拆分成订单系统、商品系统、登录系统等等,拆分之后的每个服务可以部署在不同的机器上,如果某一个服务的访问量比较大的话也可以将这个服务同时部署在多台机器上。(可以将功能拆分,也可以将一个功能多部署几台服务器)
        4.分布式优点:
                分布式系统的代码根据业务被拆分。每个团队可以负责一个服务的开发,这样提升了开发效率。另外,代码根据业务拆分之后更加便于维护和扩展。
                另外,我觉得将系统拆分成分布式之后不光便于系统扩展和维护,更能提高整个系统的性能。
         5.负载均衡改善了跨多个计算资源工作负载分布。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间,并避免任何单个资源的过载。使用具有负载平衡而不是单个组件的多个组件可以通过冗余提高可靠性和可用性。负载平衡通常涉及专用软件或硬件。

<think>嗯,用户问的是“异步通信与同步”,我需要理解这个问题。他们可能是在问同步通信和异步通信的区别,或者是想了解两者之间的联系。首,我得确认用户的需求是什么。 同步通信和异步通信是计算机科中的常见概念,尤其是在网络编程、操作系统、多线程等方面。用户可能是在习这些概念时遇到了疑问,或者在实际开发中遇到了相关的问题,需要明确两者的区别和应用场景。 接下来,我需要回忆同步和异步通信的基本定义。同步通信通常指发送方和接收方在通信过程中需要相互等待,比如在函数调用中,调用方会阻塞直到操作完成。而异步通信则是发送方发出请求后继续执行其他任务,不等待接收方的响应,接收方处理完请求后可能会通过回调、事件等方式通知发送方。 然后,我需要比较它们的区别,包括阻塞与非阻塞、资源利用、复杂度、适用场景等。还要考虑它们的联系,比如异步通信有时是为了提高效率而设计的,可能基于同步机制实现。 用户可能还想知道在哪些情况下选择同步,哪些情况下选择异步。例如,同步通信适用于需要实时响应、数据一致性要求高的场景,如在线支付系统。异步通信适用于高并发、需要高吞吐量的场景,如消息队列、日志处理等。 另外,可能需要提到同步和异步在不同层面上的表现,比如在函数调用、网络请求、操作系统调用(如IO操作)中的具体应用。比如,同步IO会阻塞进程直到数据准备好,而异步IO允许进程在数据准备期间执行其他任务。 还要考虑用户可能的误区,比如混淆同步/异步与阻塞/非阻塞的概念。虽然相关,但它们是不同的维度。同步/异步关注的是请求的发起和完成方式,而阻塞/非阻塞关注的是等待时的状态。 需要举一些例子来帮助理解。比如同步通信的例子:打电话时双方必须同时在线,等待对方接听。异步通信的例子:发邮件,发送后可以做其他事情,对方阅读后回复。 另外,可能还需要提到技术实现,比如回调函数、事件循环、Future/Promise、消息队列等机制如何支持异步通信。同时,同步通信可能更简单,但容易导致资源浪费,而异步更复杂,但能提高效率。 用户可能没有明确说明他们的背景,比如是开发者、生,还是其他角色。因此,回答需要兼顾理论和实际应用,提供清晰的对比和示例,确保不同层次的用户都能理解。 最后,要确保回答结构清晰,分点列出区别、联系、示例和适用场景,并按照用户的要求生成相关问题。同时,遵循用户提供的格式,避免使用Markdown,保持口语化,但在这里需要转换为正式的回答。</think>### 同步通信与异步通信的区别与联系 #### **1. 核心区别** | **特性** | **同步通信** | **异步通信** | |-----------------------|----------------------------------------|----------------------------------------| | **等待机制** | 发送方必须等待接收方响应完成再继续执行。 | 发送方无需等待接收方响应,直接继续执行后续任务。 | | **时序要求** | 严格依赖实时响应(如电话通话)。 | 允许延迟响应(如电子邮件)。 | | **资源占用** | 可能阻塞线程/进程,资源利用率较低。 | 非阻塞,资源利用率高(如通过回调或事件驱动)。 | | **复杂度** | 实现简单,逻辑直观。 | 实现复杂(需处理回调、状态维护等)。 | | **数据一致性** | 强一致性,结果即时可见。 | 最终一致性,结果可能延迟生效。 | | **典型场景** | 需实时反馈的场景(如在线支付验证)。 | 高并发、批量处理场景(如消息队列、日志采集)。 | --- #### **2. 联系** - **目标一致**:均用于实现不同组件/系统间的数据交换。 - **可相互转化**:异步通信可通过封装实现同步语义(如 `Future.get()` 阻塞等待结果),同步通信也可通过多线程模拟异步行为。 - **底层依赖**:异步通信通常基于同步机制(如底层网络协议仍需同步传输数据包)。 --- #### **3. 关键技术对比** | **技术点** | **同步通信** | **异步通信** | |-----------------------|----------------------------------------|----------------------------------------| | **调用方式** | 直接函数调用、阻塞式IO。 | 回调函数、事件监听、消息队列、协程。 | | **错误处理** | 错误直接抛出或返回码。 | 需通过回调或异常捕获机制传递错误。 | | **性能瓶颈** | 高延迟场景易导致资源浪费(如等待IO)。 | 高吞吐量场景更高效,但需管理复杂状态。 | | **调试难度** | 易调试(线性执行流)。 | 难调试(非线性、多线程/事件驱动)。 | --- #### **4. 典型示例** - **同步通信**: ```python # 同步HTTP请求 import requests response = requests.get("https://example.com") # 阻塞直到响应返回 print(response.text) ``` - **异步通信**: ```python # 异步HTTP请求(使用asyncio) import asyncio import aiohttp async def fetch(): async with aiohttp.ClientSession() as session: async with session.get("https://example.com") as response: return await response.text() asyncio.run(fetch()) # 主线程可继续执行其他任务 ``` --- #### **5. 适用场景** | **场景** | **推荐模式** | **说明** | |---------------------------|------------------|--------------------------------------------------------------------------| | 实时性要求高(如游戏同步) | 同步通信 | 依赖即时响应,容忍低并发。 | | 高吞吐量场景(如订单处理) | 异步通信 | 允许延迟响应,需处理大量并发任务。 | | 资源受限环境(如嵌入式系统)| 同步通信 | 简化逻辑,避免异步状态管理开销。 | | 分布式系统(如微服务通信) | 异步通信 | 通过消息队列解耦服务,提升系统容错性。 | | 数据一致性要求严格 | 同步通信 | 如数据库事务提交需即时确认结果。 | --- #### **6. 注意事项** - **同步陷阱**: - 阻塞操作可能导致线程/进程“卡死”(如网络超时未设置超时机制)。 - 在GUI应用中使用同步通信需避免主线程阻塞(如使用后台线程)。 - **异步挑战**: - 回调地狱(Callback Hell)问题(可通过协程或Promise链解决)。 - 状态一致性维护困难(如分布式异步任务需引入事务日志)。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值