RPC微服务架构:RPC个人浅析(绝对干货)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: RPC微服务架构:RPC个人浅析(绝对干货)

什么是RPC?


RPC(Remote Procedure Call Protocol)远程过程调用:

我们有生产者服务器和消费者服务器,分别部署着不同的应用a、b。当我们想通过消费者服务器来调用生产者服务器的应用上提供的函数或方法时,由于这些应用不在同一个内存空间,不能够直接调用,这就需要通过借助网络来传输数据请求。就比如我们在自己的机器上写一个程序,别人是无法直接调用的,这个时候就需要通过远程服务调用,RPC应运而生了!

微服务架构是一种将单应用程序作为一套小型服务开发的方法。(因此我们可以知道,一般的小型企业是用不到微服务的)


百科官方解答


RPC是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

RPC采用客户机/服务器模式。请求程序就是一个客户机,而服务提供程序就是一个服务器。首先,客户机调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。


RPC解决了什么问题?


偏技术的问题:


1.通讯问题 : 客户端和服务器端通过TCP协议进行数据的传输。

2.寻址问题 : 服务器之间的应用如何调用,如何查找到对应应用所在的IP和端口。


优点:

1.解耦:把每个系统拆分开部署在不同的服务器上。

2.避免重复开发:避免对一个系统的重复开发,当有需要的时候可以直接调用

3.方便维护


RPC具体工作流程是怎么样的?(纯个人理解,待大佬指正)


RPC需要有三方:生产者、消费者和中央管理中心。 生产者即服务提供方,消费者即服务请求方,中央管理中心(下面简称中央)是充当一个中间人的身份,可以理解为我们的房屋中介。

当生产者想要使用微服务的时候, 需要先去中央注册身份,包括IP、端口号、包括哪些类或方法等信息都需要提供给中央做记录;同时,中央会根据自己的加密规则,生成一个密钥来唯一标志该生产者。

同理,当消费者想要使用微服务的时候, 也需要先去中央注册身份,包括IP、端口号、想要访问的方法等信息都需要提供给中央做记录;同时中央根据消费者提供的信息会给消费者提供一定的权限,并根据权限来判断该消费者可以去调用哪些生产者,也会对应生成密钥。

当消费者完成注册后,通过拿到的权限,来获取对应生产者的IP、端口号和密钥等信息,并将这些信息存放在本地缓存。

当消费者发送请求时,消费者会从本地缓存读取有效数据信息,如携带着对应生产者的密钥,通过HTTP、TCP等协议进行数据传输(这里传输用到了流操作、序列化和反序列化技术,暂时不做讲解,可出门右拐进入百度),生产者接收到请求后,进行反射代理, 首先来比对密钥是否正确,正确则进行真正的请求处理工作。

到这里,一个正常简易的RPC流程算是走完了。

但是就怕意外啊,RPC还有一些保障性的工作


心跳机制: 为防止生产者服务器突发心脏病宕机,或者某天心情不好闹小情绪导致发生异常而无法使用,我们强制规定生产者需要每隔几秒(可根据具体业务自行设计)向中央发送一次心跳,来证明生产者一切健康。如果说生产者一次没有发送心跳,中央可以原谅它的小调皮,但是如果连续三次都未发送心跳,中央就会主动标记该生产者有异常,同步到消费者缓存中进行信息的更新,并对该生产者服务器进行普通生病检查,同时触发报警机制来提醒正在改bug的程序猿来为其医治。

同步机制: 当生产者服务器有新增服务器、生产者服务器减少或更换服务器的情况,中央会将生产者的信息同步到消费者缓存。

反馈与检查机制: 由于心跳机制和同步机制没有即时性,那么很多时候,生产者服务器发生问题,往往是消费者先发现,当消费者连接生产者时,一次连接不成功,尝试重连,多次连接不成功后,会从本地缓存寻找其他可用生产者服务器信息进行数据的请求,同时会把连接失败的生产者服务器信息反馈上报给中央,说明该生产者服务器偷懒不工作;中央收到反馈后,立刻去检查该生产者服务器的异常原因并尝试触发报警机制。

这样一个大体上的RPC思想算是出来了,文字不易理解,可参考下图:


20190924010534530.png


RPC中有哪些方面可以提升性能优化?


1.缓存: 缓存技术有很多种,进程缓存有jdk自带的ConcurrentHashMap缓存、功能比较丰富的Ehcache缓存等;分布式缓存有Redis和Tair等。依据我们业务需要来选择合适的缓存可以很好的提升性能。


2.数据传输流的操作: Netty作为高性能的NIO通信框架,在很多RPC框架中都有它的身影。我们也采用它当做通信服务器。

3.序列化和反序列化:

百科介绍:


序列化

(Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。


目前互联网公司广泛使用Protobuf、Thrift、Avro等成熟的序列化解决方案来搭建RPC框架,这些都是久经考验的解决方案。当然具体使用哪种序列化还是要结合我们的业务来开展的。

4.通讯协议: 不同的通讯协议的在不同的数据结构和不同数据量时的传输性能都有所不同,也要我们看实际情况来定。我有一个想法是设计一个仿Tomcat的通讯协议,或许可以在某方面提升性能,还没实现过。

目录
相关文章
|
8天前
|
弹性计算 Kubernetes Cloud Native
云原生架构下的微服务设计原则与实践####
本文深入探讨了在云原生环境中,微服务架构的设计原则、关键技术及实践案例。通过剖析传统单体架构面临的挑战,引出微服务作为解决方案的优势,并详细阐述了微服务设计的几大核心原则:单一职责、独立部署、弹性伸缩和服务自治。文章还介绍了容器化技术、Kubernetes等云原生工具如何助力微服务的高效实施,并通过一个实际项目案例,展示了从服务拆分到持续集成/持续部署(CI/CD)流程的完整实现路径,为读者提供了宝贵的实践经验和启发。 ####
|
1天前
|
消息中间件 供应链 架构师
微服务如何实现低耦合高内聚?架构师都在用的技巧!
本文介绍了微服务的拆分方法,重点讲解了“高内聚”和“低耦合”两个核心设计原则。高内聚强调每个微服务应专注于单一职责,减少代码修改范围,提高系统稳定性。低耦合则通过接口和消息队列实现服务间的解耦,确保各服务独立运作,提升系统的灵活性和可维护性。通过领域建模和事件通知机制,可以有效实现微服务的高效拆分和管理。
16 7
|
2天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
20 6
|
2天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
10 1
|
5天前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
7天前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
24 3
|
8天前
|
运维 NoSQL Java
后端架构演进:微服务架构的优缺点与实战案例分析
【10月更文挑战第28天】本文探讨了微服务架构与单体架构的优缺点,并通过实战案例分析了微服务架构在实际应用中的表现。微服务架构具有高内聚、低耦合、独立部署等优势,但也面临分布式系统的复杂性和较高的运维成本。通过某电商平台的实际案例,展示了微服务架构在提升系统性能和团队协作效率方面的显著效果,同时也指出了其带来的挑战。
43 4
|
7天前
|
存储 缓存 监控
探索微服务架构中的API网关模式
探索微服务架构中的API网关模式
22 2
|
7天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
36 1
|
14天前
|
监控 Cloud Native Java
云原生架构下微服务治理策略与实践####
【10月更文挑战第20天】 本文深入探讨了云原生环境下微服务架构的治理策略,通过分析当前技术趋势与挑战,提出了一系列高效、可扩展的微服务治理最佳实践方案。不同于传统摘要概述内容要点,本部分直接聚焦于治理核心——如何在动态多变的分布式系统中实现服务的自动发现、配置管理、流量控制及故障恢复,旨在为开发者提供一套系统性的方法论,助力企业在云端构建更加健壮、灵活的应用程序。 ####
61 10
下一篇
无影云桌面