原创文章转载请注明出处:@协思, 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. npm 私有模块的管理使用

    你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...

  2. 浅谈WEB页面提速(前端向)

    记得面试现在这份工作的时候,一位领导语重心长地谈道——当今的世界是互联网的世界,IT企业之间的竞争是很激烈的,如果一个网页的加载和显示速度,相比别人的站点页面有那么0.1秒的提升,那也是很大的一个成就 ...

  3. ExtJS 4.2 组件介绍

    目录 1. 介绍 1.1 说明 1.2 组件分类 1.3 组件名称 1.4 组件结构 2. 组件的创建方式 2.1 Ext.create()创建 2.2 xtype创建 1. 介绍 1.1 说明 Ex ...

  4. [APUE]文件和目录(下)

    一.mkdir和rmdir函数 #include <sys/types.h> #include <sys/stat.h> int mkdir(const char *pathn ...

  5. Android 自定义 attr

    好纠结,弄了一个下午老是报错如是总结一下安卓自定视图和自定义属性. (一)自定义属性 在Values文件下建立一个attrs.xml文件,attr的format可以参考:http://www.cnbl ...

  6. Android权限管理之RxPermission解决Android 6.0 适配问题

    前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...

  7. CRL快速开发框架系列教程五(使用缓存)

    本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...

  8. PHP与API讲解(一)

    了解API: 在使用与创建自己的API之前我们需要先了解什么是API! API代表应用程序编程接口,而接口指的是一个特定的服务.一个应用程序或者其他程序的公共模块. 理解SOA(面向服务的架构):SO ...

  9. zookeeper源码分析之四服务端(单机)处理请求流程

    上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...

  10. 用神奇的currentColor制作简洁的颜色动画效果

    先上一个兼容性总结图:老版本ie可以直接用复杂方法了,套用某表情包的话:  2016年了,做前端你还考虑兼容IE6?你这简直是自暴自弃! 好了,知道了兼容性,我们可以放心的使用了. 在CSS3中扩展了 ...