原创文章转载请注明出处:@协思, 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调用的更多相关文章

  1. RabbitMQ学习笔记5-简单的RPC调用

    利用空的queue名字("")让rabbitMQ生成一个唯一的队列名称,同时指定队列是:临时的(auto-delete).私有的(exclusive). 在发送的RPC调用消息里设 ...

  2. Hadoop学习记录(3)|HDFS API 操作|RPC调用

    HDFS的API操作 URL方式访问 package hdfs; import java.io.IOException; import java.io.InputStream; import java ...

  3. 使用RPC 调用NameNode中的方法

    用户在Client 端是很难对 NameNode中的信息进行直接访问的, 所以 ,在Hadoop系统中为 Client端 提供了一系列的方法调用,这些方法调用是通过RPC 方法来实现的, 根据RPC ...

  4. Unity3D RPC调用顺序问题

    使用Unity自带的Network实现多人协同任务时,因为使用RPC传递消息.RPC即远程过程调用,对于它的使用,第一反应的问题就是如果连续两次调用RPC,RPC的函数会顺序执行吗?还是只要RPC的消 ...

  5. 给Pomelo的聊天室添加time的RPC调用

    为了练手,给聊天应用增加一个rpc调用和一个time类型的服务器,在servers/time/remote/timeRemote.js中,添加如下代码: module.exports.getCurre ...

  6. [svc]简单理解什么是rpc调用?跟restapi有何区别?

    什么是rpc调用 restapi调用方式是对数据的crud. 常见的我们写flash写个api,或者借助django drf写个标准的resetapi,一个url可以借助httpget post pu ...

  7. RPC调用与GC垃圾回收

    RPC调用 多个服务协同完成一次业务时,由于业务约束(如红包不符合使用条件.账户余额不足等).系统故障(如网络或系统超时或中断.数据库约束不满足等),都可能造成服务处理过程在任何一步无法继续,使数据处 ...

  8. rpc调用过程

    在openstack中,各个组件之间的调用遵循RESTful风格,而组件内部各服务之间的相互调用采用rpc远程调用,比如nova-conductor和nova-compute rpc原理: 首先了解什 ...

  9. 浅谈RPC调用

    RPC英文全称remote procedure call 翻译成中文的意思就是远程过程调用.RPC的出现其实主要是为了解决分布式系统间的通信透明性的问题. 那什么是分布式系统的通信透明性问题?这个问题 ...

随机推荐

  1. Tomcat shutdown执行后无法退出进程问题排查及解决

    问题定位及排查 上周无意中调试程序在Linux上ps -ef|grep tomcat发现有许多tomcat的进程,当时因为没有影响系统运行就没当回事.而且我内心总觉得这可能是tomcat像nginx一 ...

  2. HTML渲染过程详解

    无意中看到寒冬关于前端的九个问题,细细想来我也只是对第一.二.九问有所了解,正好也趁着这个机会梳理一下自己的知识体系.由于本人对http协议以及dns对url的解析问题并不了解,所以这里之探讨url请 ...

  3. JS里面Data日期格式转换

    var format = function(time, format){     var t = new Date(time);     var tf = function(i){return (i  ...

  4. KV存储系统

    现在的KV存储系统都是分布式的,首先介绍Zookeeper——针对大型分布式系统的高可靠的协调系统. 开发分布式系统是件很困难的事情,其中的困难主要体现在分布式系统的“部分失败”.“部分失败”是指信息 ...

  5. 使用 JavaScript 和 canvas 做精确的像素碰撞检测

    原文地址:Pixel accurate collision detection with Javascript and Canvas 译者:nzbin 我正在开发一个需要再次使用碰撞检测的游戏.我通常 ...

  6. 【原创分享·微信支付】 C# MVC 微信支付教程系列之公众号支付

    微信支付教程系列之公众号支付         今天,我们接着讲微信支付的系列教程,前面,我们讲了这个微信红包和扫码支付.现在,我们讲讲这个公众号支付.公众号支付的应用环境常见的用户通过公众号,然后再通 ...

  7. 开源免费且稳定实用的.NET PDF打印组件itextSharp(.NET组件介绍之八)

    在这个.NET组件的介绍系列中,受到了很多园友的支持,一些园友(如:数据之巅. [秦时明月]等等这些大神 )也给我提出了对应的建议,我正在努力去改正,有不足之处还望大家多多包涵.在传播一些简单的知识的 ...

  8. 利用注册表在右键添加VS15的快捷方式打开文件夹

    1.简介 最近安装VS15 Preview 5,本版本可以打开"文件夹" 是否可以向Visual Studio Code一样在文件夹或文件右键菜单添加"Open with ...

  9. svn常用命令

    1.新建版本库 [root@localhost repos]# mkdir -p project [root@localhost repos]# svnadmin create project [ro ...

  10. DevExpress第三方控件使用实例之ASPxPopupControl弹出子窗体

    弹出页面控件:ASPxPopupControl, <dxpc:ASPxPopupControl ID="popubCtr" runat="server" ...