架构解密从分布式到微服务:古老又有生命力的 RPC

2024-02-06 00:58

本文主要是介绍架构解密从分布式到微服务:古老又有生命力的 RPC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

古老又有生命力的RPC

RPC (Remote Procedure Call,远程过程调用)是建立在Socket之上的一种多进程间的通信机制。不同于复杂的Socket通信方式,RPC的初心是设计一套远程通信的通用框架,这个框架能够自动处理通信协议、对象序列化、网络传输等复杂细节,并且希望开发者在使用这个框架以后,调用一个远程机器上的接口的代码与以本地方法调用的代码“看起来没什么区别”,从而大大减小分布式系统的开发难度,使得比较容易开发分布式系统。

为了便于理解Socket通信与RPC通信在编程方面的区别,我们举个简单的例子来解释:假设目前在B机器上有一个进程,可以简单地实现四则运算,比如我们输入 1+1让它计算并返回计算结果,那么用Socket开发时,客户端的伪代码大致如下:

client =new Socket (B);
client.write("plus(1,1)");
result=client.read();
client.close();

而服务端的伪代码大致如下:

socketServer server=new ServerSocket ();
server.listen ();
while(true)
{
cmd-server.read();
if(cmd .startwith("plus("))
{
··
client.write(result);
}
}

上述代码仅为大量简化后的伪代码,如果要达到生产质量的要求,则还需要考虑如下复杂问题。

  • 网络异常问题:在调用过程中如果发生网络异常,则调用失败,客户端需要明确知道发生了异常,然后有针对性地进行处理。
  • 复杂数据传输过程中的编码和解码问题:当输入参数或者输出参数很复杂时,参数编码及解码过程中的复杂性经常会让思维不够严密的程序员头脑“短路”。
  • 客户端的连接复用问题,如果每次调用都建立一个TCP连接,用完关闭,那么调用性会很低,因为将大量时间都用在TCP建立连接的过程中了,因此客户端需要一种连接保持及连接复用的机制,还涉及服务端与客户端连接心跳检测及超时机制等相关的复杂问题。
  • 服务端需要有多线程机制来应对客户端的并发请求,以提升性能。

所以你会发现,即使我们有了Socket,有了好的NIO框架,也基本上没有多少人能开发出一个基于Socket的高质量的远程通信模块,而随便一个分布式系统就

这篇关于架构解密从分布式到微服务:古老又有生命力的 RPC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/682714

相关文章

Python实现快速扫描目标主机的开放端口和服务

《Python实现快速扫描目标主机的开放端口和服务》这篇文章主要为大家详细介绍了如何使用Python编写一个功能强大的端口扫描器脚本,实现快速扫描目标主机的开放端口和服务,感兴趣的小伙伴可以了解下... 目录功能介绍场景应用1. 网络安全审计2. 系统管理维护3. 网络故障排查4. 合规性检查报错处理1.

Nginx概念、架构、配置与虚拟主机实战操作指南

《Nginx概念、架构、配置与虚拟主机实战操作指南》Nginx是一个高性能的HTTP服务器、反向代理服务器、负载均衡器和IMAP/POP3/SMTP代理服务器,它支持高并发连接,资源占用低,功能全面且... 目录Nginx 深度解析:概念、架构、配置与虚拟主机实战一、Nginx 的概念二、Nginx 的特点

nacos服务无法注册到nacos服务中心问题及解决

《nacos服务无法注册到nacos服务中心问题及解决》本文详细描述了在Linux服务器上使用Tomcat启动Java程序时,服务无法注册到Nacos的排查过程,通过一系列排查步骤,发现问题出在Tom... 目录简介依赖异常情况排查断点调试原因解决NacosRegisterOnWar结果总结简介1、程序在

JAVA SpringBoot集成Jasypt进行加密、解密的详细过程

《JAVASpringBoot集成Jasypt进行加密、解密的详细过程》文章详细介绍了如何在SpringBoot项目中集成Jasypt进行加密和解密,包括Jasypt简介、如何添加依赖、配置加密密钥... 目录Java (SpringBoot) 集成 Jasypt 进行加密、解密 - 详细教程一、Jasyp

使用MyBatis TypeHandler实现数据加密与解密的具体方案

《使用MyBatisTypeHandler实现数据加密与解密的具体方案》在我们日常的开发工作中,经常会遇到一些敏感数据需要存储,比如用户的手机号、身份证号、银行卡号等,为了保障数据安全,我们通常会对... 目录1. 核心概念:什么是 TypeHandler?2. 实战场景3. 代码实现步骤步骤 1:定义 E

CPython与PyPy解释器架构的性能测试结果对比

《CPython与PyPy解释器架构的性能测试结果对比》Python解释器的选择对应用程序性能有着决定性影响,CPython以其稳定性和丰富的生态系统著称;而PyPy作为基于JIT(即时编译)技术的替... 目录引言python解释器架构概述CPython架构解析PyPy架构解析架构对比可视化性能基准测试测

MySQL集群高可用架构的两种使用小结

《MySQL集群高可用架构的两种使用小结》本文介绍了MySQL的两种高可用解决方案:组复制(MGR)和MasterHighAvailability(MHA),文中通过示例代码介绍的非常详细,对大家的学... 目录一、mysql高可用之组复制(MGR)1.1 组复制核心特性与优势1.2 组复制架构原理1.3

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J