企业神奇中间件-RPC No.96

在企业的业务发展到一定程度的时候,企业内部的系统总会进行这样或者那样的系统切分。那么这会导致一个什么问题呢?原来直接通过直接本地调用方式的功能,已经无法正常工作了,因为物理上或者逻辑上已经隔离了。切分应用分别部署一般来说有四种方式。

1、同一主机不同端口。

2、同一主机跨虚拟机或者跨 Docker 容器。

3、跨主机同一内网

4、跨主机跨网络。

这就使得不论是从逻辑还是从物理上隔离,都使得远程调用尤为重要。现在最常用的就四大类。

1、SpringCloud系列,以 RESTful API 为首的 HTTP 类交互。

2、消息队列系列。

3、WebSocket系列。

4、RPC系列,远程过程调用。

各自都有什么特点呢?

SpringCloud 系列,基本都是基于 HTTP 协议来进行传输的, RESTful 风格的开发方式,接口层面可以做到兼容所有开发语言,这对于开发语言非常多样化的项目来说还是比较合适的。

消息队列系列,可以做到系统间解耦,以及进行各种削峰等操作。缺点就是消息队列一般是无法实时响应的,需要自己实现一套系统交互机制。

WebSocket系列。一般来说会用于浏览器和服务端的交互中,全双工模式以及持久化链接的设计,可以方便地替代消息队列交互中的轮询机制。当然WebSocket 系列也可以作用于服务间,用来实现双向推送。

RPC系列。一般来说,RPC不像HTTP一直要三次握手,RPC框架一般都伴随着长连接。RPC并不是一个单点的技术,而是一类技术,目前比较有名的有 JMI、gRPC、Thrift、Dubbo、Motan(微博版Dubbo)、HSF、Hetty 、rpcx等等。

我们后面的专栏主题系列最主要就是针对 RPC 的设计及原理,以及各种 RPC 的入门,最后会给出各种 RPC 的比较以及建议,可以赏个一毛钱给大蕉表达你想看这个系列的意向吗?

RPC是长什么样子的?

RPC(Remote Procedure Call),远程过程调用,从最简单最抽象的模式来看,就是下面这个图这样。客户端调用某个方法,然后中间经过一系列的过程,调用到服务端的某个方法。服务端进行处理之后,做出相应,然后逐层原路返回到客户端。

是不是很简单,一般来说,开发者只需要关注蓝色( functions )部分,而至于红色部分( stub句柄 ) 和黄色部分(socket 网络)部分呢,框架层面会把它解决掉。蓝色部分,服务端开发者要做的事情就是定义某个接口,客户端开发者要做的事情就是调用某个接口,一切开发模式都跟本地调用无差别。

燃鹅,因为框架做得那么好了,所以出现了很多像我这样只会定义RPC和调用RPC的人工智能开发工程师(嗯,人工写代码是挺智能的,人工智能怎么能少了人工呢),希望能通过这个系列,解除你的疑惑,如果能有点帮助那就更好了。今天不讲太多 RPC 技术性细节性的东西,亲爱的朋友们,你们希望看到些什么内容留言告诉我吧。

敬请期待。。。

原文发布于微信公众号 - 一名叫大蕉的程序员(DaBananaTalk)

原文发表时间:2018-04-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏高性能服务器开发

微信、陌陌等著名IM软件设计架构详解

https://blog.csdn.net/justinjing0612/article/details/38322353

1183
来自专栏phodal

\b这样去设计 URL,可以提高网站的访问量

今天,很多网站的 URL 的设计都是“有问题”的。它们看起来一塌糊涂,仿佛是被人洗掉的脏数据一样,没有经过设计,没有经过思考。他们一点都不适合阅读,也不利于搜索...

1798
来自专栏CDA数据分析师

案例分析:基于消息的分布式架构

美国计算机科学家,LaTex的作者Leslie Lamport说:“分布式系统就是这样一个系统,系统中一个你甚至都不知道的计算机出了故障,却可能导致你自己的计算...

2308
来自专栏张善友的专栏

从APM角度上看:NoSQL和关系数据库并无不同

Michael Kopp拥有十年以上C++、Java/JEE的架构及开发经验,现Compuware技术策略师,专攻大规模产品部署的架构和性能。 以下为译文: 传...

2008
来自专栏JAVA高级架构

浅谈 MySQL 集群高可用架构

新年快乐 前言 高可用架构对于互联网服务基本是标配,无论是应用服务还是数据库服务都需要做到高可用。对于一个系统而言,可能包含很多模块,比如前端应用,缓存,数据库...

36115
来自专栏互联网杂技

什么是微服务

在介绍微服务时,首先得先理解什么是微服务,顾名思义,微服务得从两个方面去理解,什么是"微"、什么是"服务", 微 狭义来讲就是体积小、著名的"2 p...

951
来自专栏有趣的django

Flask构建微电影(一) 第一章、项目介绍第二章、环境搭建

1920
来自专栏不止思考

数据库的这些性能优化,你做了吗?

我们可能会采取各种方式去优化,比如之前文章提到的缓存方案,SQL优化等等,除了这些方式以外,这里再分享几个针对数据库优化的常规手段:「数据读写分离」与「数据库S...

912
来自专栏恰同学骚年

《大型网站技术架构》读书笔记四:瞬时响应之网站的高性能架构

此篇已收录至《大型网站技术架构》读书笔记系列目录贴,点击访问该目录可获取更多内容。

732
来自专栏大宽宽的碎碎念

你对Redis的使用靠谱吗?Redis的性能高,吗?Redis可以保证原子性,吗?用Redis可以实现事务,吗?用Redis可以当队列,吗?Redis适合用来做什么?

41310

扫码关注云+社区