rpc 服务器不可用_RPC和微服务

RPC全称Remote Procedure Call,即远程过程调用。其本质上其实就是主机A通过某种网络协议向支持相同协议的主机B发送一个任务执行命令,并且在某些情况下,还能支持任务执行结果的返回。

几乎每一个RPC都有着自己的网络协议定义,如果要按照TCP/IP协议栈划分,这些RPC协议通HTTP/HTTPS协议一样属于应用层协议,不过相比较于HTTP/HTTPS协议来说,RPC协议在功能和性能之间更偏重与性能,即RPC框架是一种高性能的网络通信框架。

RPC通信单独来说只是一种高性能的网络通信技术,和http相比除了快和简单并没有任何更为出采的地方,更不可能取代http在网络通信中的地位。但是技术是要服务于架构的,只有在特定的场景下才能发挥其长处,在实际开发中,RPC框架多用于微服务架构中。

微服务是近些年才提出的概念,至于什么是微服务,在我查阅了许多资料之后也并没有找到让人豁然开朗的定义。要想了解什么是微服务,还是要看一下Java服务端开发的演变过程才能够有一个浅显的认识。

Java服务端开发在早期多指B/S架构下的JavaWeb应用程序开发。开发者遵循Servlet规范将开发好的JavaWeb程序打包成war包运行在支持http/https协议的Servlet容器中,比如tomcat,jetty等。而且当时互联网用户还比较少,JavaWeb应用程序还都比较简单,一般就是一台机器,如果挂了就人工重启。

随着时代的发展,互联网用户越来越多,网站的并发访问量也越来越大,一台机器已经无法满足我们的需求了,就产生了集群的概念。集群简单来说就是一群运行着相同程序的服务器,这群服务器对外提供的可能只是一个域名或者反向代理的机器地址,至于网站到底有多少服务器以及用户到底访问的是哪台服务器,用户是无感知的。

随着用户变得更多,集群愈发的庞大,我们每一次更新功能都需要将应用重新发布在所有服务器上,哪怕我们仅仅是改了一个数据库的地址。而且当应用越来越复杂时,代码体积也会越来越庞大,每一次重新运行都需要停机很长时间。对于一些用户量特别多且与金钱密切相关的系统中,这是我们不能接受的,其中最典型的就是电商。

为了改善上面的痛点,架构师根据业务自身的特性将整个系统拆分成一个个的小的系统,比如对于用户身份验证有专门的登录系统,购物车有专门的购物车系统,这些独立的功能各自有各自的实现,但应用最终组合起来依然满足业务的需求,而且解决了上述痛点,这各阶段应该叫做应用切分

应用切分虽然解决了应用臃肿的问题,但由于应用之间是互相独立的,所以有些本来相同的业务代码变得不可复用,比如在应用切分中,购物车系统和支付系统都需要订单系统的支持。但是由于代码不是共用的,在购物车系统和支付系统中都有着一套和订单系统进行交互的业务代码,比如http请求接口,数据转换等。

为了解决在 应用切分钟,系统间代码冗余度过高的问题,服务化架构出现了。在服务化架构中,系统依然被拆分为多个应用,但与此同时, 应用与应用之间相互冗余的部分也被抽取出来了,作为一个服务单独存在。比如上面讲到的购物车系统和支付系统中查询订单的业务代码,被提取出来作为一个订单查询服务而单独存在。

而服务化又带来了新的痛点。服务之间相互依赖,一个服务既可以作为Provider对外提供功能,又需要作为Consumer来依靠其他服务的实现,所以需要进行服务的治理。然而应用并不关心服务治理的细节,更不关心服务到底提供哪些功能。比如在APP上要实现一个下单成功的功能,总不能在APP客户端既要调用订单系统的服务去更新订单,又要调用购物车系统提供的服务去更新购物车吧。而是只需要一个API,调用成功就表示用户成功支付,订单已完成。而这一的一个个应用层之间使用的API,也可以被应用层看做一个个的服务,这就是微服务架构。其中用来对这些微服务中的API进行统一管理的模块通常被称为网关。

在微服务和服务化架构中,不同的服务之间想要互相通信就只能通过网络,而系统之所以被做成服务化,其中一条主要的原因就是因为访问量巨大,所以不同的功能模块之间的网络通信是一个极其频繁的事情。HTTP协议作为一个功能强大的网络通信协议,随之带来的问题是开销太大,用在微服务架构下过犹不及。因此,RPC通信协议产生了,协议简单随之而来的是性能优越。

早在Java1.2的时候,JDK就提供了RPC功能——RMI

RMI的使用起来也很简单,只需要定义一个服务的提供者,服务的调用者以及服务的具体实现:

54fca273e1ebbc5f50d49bb022fc61a9.png

9d72ce4253277b9d857978816a620478.png

513c6a1fed6f1c49f22d3bd3a808ed23.png

005994608cf9a352b2d4b474f0543251.png
服务的调用者

2c5c437755e8372b9c6945d2a93b1b8b.png

整体结构很简单,服务提供者通过LocateRegistry注册实现了Remote接口的服务。服务的调用者通过Naming,根据服务的地址返回服务的实现类注册的实例,然后服务调用方就可以在本地使用这个实例实现功能了。运行结果如下:

a761542927458386205476330af083e9.png

Rmi底层也是通过TCP协议实现的,我们可以在系统监控中看到Provider监听了12345这个端口:

c219952477bdb48cceec2c529911eb40.png
监听

3a807ae21ffc64f3f71fc5add0aa3940.png
建立tcp连接

我们可以通过Wireshark抓包来看下Rmi协议交互的基本流程。因为Provider和Caller都在本地,由于底层优化,流量不会通过网卡,所以Wireshark是抓不到包的,可以装一个npcap工具就行了:

wireshark如何抓取本机包 - Avatarx - 博客园​www.cnblogs.com
958ec35f2b9e20d4dc65ceeaf4e547b2.png

之后在Wireshark中使用Npcap的网卡适配器就能抓到本地数据了

506c848bf6a64249ba6ce23d7372c6ab.png

64fe204d34d23c741740c207543052c1.png

可以看到最长的一个数据包长达328个字节,即使数据看起来应该经过了特殊处理,还是能够看到其返回的应该是服务实现类实例的一个代理:

6000d91ee42f6fddd7c98e573ac20494.png

不过由于RMI底层是通过BIO来实现的,必然无法应用在复杂场景下,所以一些基于NIO的RPC框架产生了,比较典型的有阿里巴巴的Dubbo、HSF,Spring的Spring Cloud等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506066.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

随机森林降维matlab代码,随机森林代码实现问题

% mtry number of predictors sampled for spliting at each node.% votes (classification only) a matrix with one row for each input data point and one% column for each class, giving the fraction or number of ?votes? from the random% forest.% o…

系统分析与控制_质量体系文件:测量系统分析控制程序

本公众号知识分享:体系管理、质量管理、书籍教程;国标行标、团标企标;课件教材、系统培训、资料下载、以及部分软件及教程等; 告诉我您的需求,小编随时恭候为您服务!下面让我们一起开启本章内容学习&#x…

python商城源码_自学Python才几天,就成功编写出俄罗斯方块游戏,附自学教程

人们常说,python不适合做游戏,但我偏爱玩游戏,做不了大的,做个小的也行啊。于是,我在自己毫无基础的条件下,用两天时间学python基础理论,再用已有的俄罗斯方块游戏源码和源文件,在我…

matlab 中曲线颜色,matlab曲线颜色样式设置

满意答案南渡江ndj2013.09.03采纳率:43% 等级:12已帮助:19801人你好 这是我总结的画图资料比如画一条蓝色的x号线plot(x,y,bg)画图:线形:-实线 -. 点划线 --长虚线 :短虚线符号 颜色 符号 线形b 蓝 . 点c 青 。 圈g 绿 标记k 黑 - 实线m …

图像去模糊代码 python_用Keras搭建GAN:图像去模糊中的应用(附代码)

雷锋网 (公众号:雷锋网) 按:本文为 雷锋字幕组 编译的技术博客,原标题GAN with Keras: Application to Image Deblurring,作者为Raphal Meudec。翻译 | 廖颖 陈俊雅 整理 | 凡江2014年 Ian Goodfellow 提出了 生成对抗网络(GAN)…

小程序动态class_会后剧透!百度智能小程序的最新动态都在这儿了!

月活突破5亿,入驻智能小程序数量42万。这是百度智能小程序在万象-百度2020移动生态大会上交出的最新成绩单。当天,百度方面还以“生态进化,共创共荣”为主题,召开了智能小程序分论坛。分论坛上,百度特别邀请了百度副总…

matlab qtdecomp,Opencv图像识别从零到精通(25)------区域分裂与合并

区域分割一般认为有漫水填充,区域分裂与合并,分水岭,这篇是中间的区域分裂和合并。区域分裂合并算法的基本思想是先确定一个分裂合并的准则,即区域特征一致性的测度,当图像中某个区域的特征不一致时就将该区域分裂成4个相等的子区域,当相邻的…

去调频体制下的 rd算法_【技术文章】一次调频工作原理及控制 学习1+1

1、基本概念一次调频:PrimaryFrequencyControl。在电网实际运行中,当电量消耗与电量供给不匹配时,即可引起电网频率出现变化较小、变动周期较短的微小分量,这种频率扰动主要靠汽轮发电机组本身的调节系统直接自动调整汽轮机调门完…

tinyxml 读取文本节点_在Windows下使用TinyXML-2读取UTF-8编码包含中文字符的XML文件...

TinyXML-2 是一个用 C 开发的小巧、高效的 XML 解析工具,它在 GitHub 网站上的链接为:https://github.com/leethomason/tinyxml2 。它的结构非常精简,仅由 tinyxml2.h 和 tinyxml2.cpp 两个文件组成。TinyXML-2 能够处理 UTF-8 编码方式的 XM…

矩阵特征值的用matlab,[急求]谁可以用matlab帮我运行求矩阵特征值的命令???...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼v Columns 1 through 60.0529 0.0228 - 0.0573i 0.0228 0.0573i 0.0222 0.0630i 0.0222 - 0.0630i -0.0630 0.0105i0.2249 -0.0870 0.2003i -0.0870 - 0.2003i 0.1077 0.2366i 0.1077 - 0.2366i 0.1861 0.0350i0.0977 -0.082…

蓝牙版本avrcp怎么选_500元内无线蓝牙耳机测评年轻人的第一款廉价蓝牙耳机怎么选?...

这是马克君的第 90 篇对比测评-建议佩戴耳机体验-?- 10款TWS耳机测评 -TWSTrue Wireless Stereo⇩真无线立体声自AirPods问世以来,真无线耳机的概念开始爆火?。虽然AirPods“真香”,但售价也是真滴贵,所以有没有便宜又好用的真无线蓝牙耳机…

kb4023057安装失败_微软重发Win10 KB4023057 补丁,推动Win10更新

8月29日早间消息:微软已经重新发布了Win10补丁KB4023057,其主要帮助用户升级到 Win10 2004或更新版本。微软表示,重新发布的补丁对 Windows Update 本身的可靠性进行了改进。此外,它还可以通过压缩用户目录中的文件来释放计算机上…

数据库查询语句慢如何优化_常见Mysql的慢查询优化方式

1 概念 MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。 具体环境中,运行时间超过long_query_time值的SQL语句,则会被记录到慢查询日志中。 long_query_time的默…

pytorch中深度拷贝_pytorch:对比clone、detach以及copy_等张量复制操作

pytorch提供了clone、detach、copy_和new_tensor等多种张量的复制操作,尤其前两者在深度学习的网络架构中经常被使用,本文旨在对比这些操作的差别。1. clone返回一个和源张量同shape、dtype和device的张量,与源张量不共享数据内存&#xff0c…

php显示doc文件乱码,如何解决php doc 乱码问题

PHP下载DOC乱码最近做的一个系统,需要下载doc文件以前的代码下载完成后,打开总是乱码...google咯很久也没有解决办法后面总算搞定必须在Header之前进行清除,即 ob_end_clean()$file_size filesize($logName);ob_end_clean();header("Content-type:application/octet-stre…

c++ 多重背包状态转移方程_Python|动态规划关于0-1背包问题

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理以下文章来源于腾讯云,作者:算法与编程之美前言对学算法的同学来说,动态规划是其必学且较为重要的问题之一;…

golang string转int8_golang 中string和int类型相互转换

Notepad++ 默认快捷键Notepad绝对是windows下进行程序编辑的神器之一,要更快速的使用以媲美VIM,必须灵活掌握它的快捷键,下面对notepad默认的快捷键做个整理(其中有颜色的为常用招数): 1 ...DB2执行脚本经常会遇到数据库脚本放在.sql文件中,那么怎么去执…

java 第二天,Java复习第二天

1.idea里jar包和war的区别JAR(JAVA Archive 是类的归档文件),JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。简单来说,jar包就像一个插件而且是打包已经写好的类…

qlistview 自定义控件_是否可以在QListView中添加自定义窗口小部件?

I have a large log data (100, 1000, 100000, ... records) and I want to visualize it in the following manner:Which widget (e.g. QListView, QListWidget) should I use and how, in order to stay away from performance and memory problems?解决方案Is it possible …

php 零宽断言,正则表达式之零宽断言实例详解

这篇文章主要介绍了正则表达式之零宽断言,简单介绍了零宽断言的概念、分类及php实现技巧与相关注意事项,需要的朋友可以参考下本文实例讲述了正则表达式之零宽断言。分享给大家供大家参考,具体如下:前言之前我曾写了一篇关于正则表达式的文章(http://www…