闲话RPC调用
原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com
自SOA架构理念提出以来,应用程序间如何以最低耦合度通信的问题便呈现在所有架构师面前。
互联网系统的复杂度让我们不得不大量使用分布式应用,早期通过数据库来交互通信,慢慢地大家发现数据库的耦合是最难解的,并且数据库是最难做负载均衡的,水平拆分,垂直拆分,读写分离让开发的复杂度在不断增加。最终大家发现我们可以把持久化要求不高,结构化程度不强的数据通过分布式缓存、消息队列、NoSQL等一系列手段降低对数据库的依赖,而数据库本身则朝SSD云化方向发展。
从行为方式划分通信为异步通信和同步通信,异步通信借助消息队列,可以很好的削峰填谷,发布订阅。同步通信即RPC调用,可以从两个方面来权衡:
传输层(载体):tcp, udp, http, https
编码方式(载荷):xml, soap, json, binary
成型的框架有:
Web Service, WCF, Restful, ICE, Akka, Thrift....
微软曾经力图让WCF成为标准,然而火爆一时的WCF由于其臃肿的身材最终没有获得业界的青睐,受其它平台语言的支持度不高,最后自家的Web API项目由于改动太大,转而由Asp.Net团队接手开发。
来看几个选型原则:
轻量:互联网去IOE的进程在加快,而背后的实质是软件硬件都在朝轻量化方向发展,互联网风云突变,产品灵活创新,轻量化生命力更强,事实证明,蚂蚁军团总能啃死大象的。
跨平台:社区协作是方向,在互联网行业,没有哪个平台哪个语言能一条龙的提供一揽子整体解决方案。扬长避短能让我们更高效,不用过于执着和信仰一种平台。我们公司就有Java和.NET两种语言,相互调用是难免的。
高效:效率就是载体和载荷两方面,xml老矣,tcp/http+json/binary能擦出爱的火花吗?
简单:开发简单,部署简单,没有过多依赖,干净整洁,看着开心,用着舒心。
能进入比较的有两个:
Restful:这是一种架构方式,基于http,不依赖于任何语言平台,.NET原生支持的即为Web API,还有每三方的组织也在作相关的贡献。最新版本的visual studio开始提供Linux下部署支持。主流厂商对外接口大量使用Rest方式,不受防火墙的影响,对开发人员友好。
Thrift:没有IIS的束缚,意味着更轻便,没有ASP.NET管道带来的开销,意味着更高效。其初始版本由Facebook开发,为分布式并发而生,支持跨语言服务开发,为后端服务间的多语言混合开发提供了高可靠,可扩展,以及高效的实现。
闲话RPC调用的更多相关文章
- RabbitMQ学习笔记5-简单的RPC调用
利用空的queue名字("")让rabbitMQ生成一个唯一的队列名称,同时指定队列是:临时的(auto-delete).私有的(exclusive). 在发送的RPC调用消息里设 ...
- Hadoop学习记录(3)|HDFS API 操作|RPC调用
HDFS的API操作 URL方式访问 package hdfs; import java.io.IOException; import java.io.InputStream; import java ...
- 使用RPC 调用NameNode中的方法
用户在Client 端是很难对 NameNode中的信息进行直接访问的, 所以 ,在Hadoop系统中为 Client端 提供了一系列的方法调用,这些方法调用是通过RPC 方法来实现的, 根据RPC ...
- Unity3D RPC调用顺序问题
使用Unity自带的Network实现多人协同任务时,因为使用RPC传递消息.RPC即远程过程调用,对于它的使用,第一反应的问题就是如果连续两次调用RPC,RPC的函数会顺序执行吗?还是只要RPC的消 ...
- 给Pomelo的聊天室添加time的RPC调用
为了练手,给聊天应用增加一个rpc调用和一个time类型的服务器,在servers/time/remote/timeRemote.js中,添加如下代码: module.exports.getCurre ...
- [svc]简单理解什么是rpc调用?跟restapi有何区别?
什么是rpc调用 restapi调用方式是对数据的crud. 常见的我们写flash写个api,或者借助django drf写个标准的resetapi,一个url可以借助httpget post pu ...
- RPC调用与GC垃圾回收
RPC调用 多个服务协同完成一次业务时,由于业务约束(如红包不符合使用条件.账户余额不足等).系统故障(如网络或系统超时或中断.数据库约束不满足等),都可能造成服务处理过程在任何一步无法继续,使数据处 ...
- rpc调用过程
在openstack中,各个组件之间的调用遵循RESTful风格,而组件内部各服务之间的相互调用采用rpc远程调用,比如nova-conductor和nova-compute rpc原理: 首先了解什 ...
- 浅谈RPC调用
RPC英文全称remote procedure call 翻译成中文的意思就是远程过程调用.RPC的出现其实主要是为了解决分布式系统间的通信透明性的问题. 那什么是分布式系统的通信透明性问题?这个问题 ...
随机推荐
- Tomcat shutdown执行后无法退出进程问题排查及解决
问题定位及排查 上周无意中调试程序在Linux上ps -ef|grep tomcat发现有许多tomcat的进程,当时因为没有影响系统运行就没当回事.而且我内心总觉得这可能是tomcat像nginx一 ...
- HTML渲染过程详解
无意中看到寒冬关于前端的九个问题,细细想来我也只是对第一.二.九问有所了解,正好也趁着这个机会梳理一下自己的知识体系.由于本人对http协议以及dns对url的解析问题并不了解,所以这里之探讨url请 ...
- JS里面Data日期格式转换
var format = function(time, format){ var t = new Date(time); var tf = function(i){return (i ...
- KV存储系统
现在的KV存储系统都是分布式的,首先介绍Zookeeper——针对大型分布式系统的高可靠的协调系统. 开发分布式系统是件很困难的事情,其中的困难主要体现在分布式系统的“部分失败”.“部分失败”是指信息 ...
- 使用 JavaScript 和 canvas 做精确的像素碰撞检测
原文地址:Pixel accurate collision detection with Javascript and Canvas 译者:nzbin 我正在开发一个需要再次使用碰撞检测的游戏.我通常 ...
- 【原创分享·微信支付】 C# MVC 微信支付教程系列之公众号支付
微信支付教程系列之公众号支付 今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通 ...
- 开源免费且稳定实用的.NET PDF打印组件itextSharp(.NET组件介绍之八)
在这个.NET组件的介绍系列中,受到了很多园友的支持,一些园友(如:数据之巅. [秦时明月]等等这些大神 )也给我提出了对应的建议,我正在努力去改正,有不足之处还望大家多多包涵.在传播一些简单的知识的 ...
- 利用注册表在右键添加VS15的快捷方式打开文件夹
1.简介 最近安装VS15 Preview 5,本版本可以打开"文件夹" 是否可以向Visual Studio Code一样在文件夹或文件右键菜单添加"Open with ...
- svn常用命令
1.新建版本库 [root@localhost repos]# mkdir -p project [root@localhost repos]# svnadmin create project [ro ...
- DevExpress第三方控件使用实例之ASPxPopupControl弹出子窗体
弹出页面控件:ASPxPopupControl, <dxpc:ASPxPopupControl ID="popubCtr" runat="server" ...