闲话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的出现其实主要是为了解决分布式系统间的通信透明性的问题. 那什么是分布式系统的通信透明性问题?这个问题 ...
随机推荐
- npm 私有模块的管理使用
你可以使用 NPM 命令行工具来管理你在 NPM 仓库的私有模块代码,这使得在项目中使用公共模块变的更加方便. 开始前的工作 你需要一个 2.7.0 以上版本的 npm ,并且需要有一个可以登陆 np ...
- 浅谈WEB页面提速(前端向)
记得面试现在这份工作的时候,一位领导语重心长地谈道——当今的世界是互联网的世界,IT企业之间的竞争是很激烈的,如果一个网页的加载和显示速度,相比别人的站点页面有那么0.1秒的提升,那也是很大的一个成就 ...
- ExtJS 4.2 组件介绍
目录 1. 介绍 1.1 说明 1.2 组件分类 1.3 组件名称 1.4 组件结构 2. 组件的创建方式 2.1 Ext.create()创建 2.2 xtype创建 1. 介绍 1.1 说明 Ex ...
- [APUE]文件和目录(下)
一.mkdir和rmdir函数 #include <sys/types.h> #include <sys/stat.h> int mkdir(const char *pathn ...
- Android 自定义 attr
好纠结,弄了一个下午老是报错如是总结一下安卓自定视图和自定义属性. (一)自定义属性 在Values文件下建立一个attrs.xml文件,attr的format可以参考:http://www.cnbl ...
- Android权限管理之RxPermission解决Android 6.0 适配问题
前言: 上篇重点学习了Android 6.0的运行时权限,今天还是围绕着Android 6.0权限适配来总结学习,这里主要介绍一下我们公司解决Android 6.0权限适配的方案:RxJava+RxP ...
- CRL快速开发框架系列教程五(使用缓存)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- PHP与API讲解(一)
了解API: 在使用与创建自己的API之前我们需要先了解什么是API! API代表应用程序编程接口,而接口指的是一个特定的服务.一个应用程序或者其他程序的公共模块. 理解SOA(面向服务的架构):SO ...
- zookeeper源码分析之四服务端(单机)处理请求流程
上文: zookeeper源码分析之一服务端启动过程 中,我们介绍了zookeeper服务器的启动过程,其中单机是ZookeeperServer启动,集群使用QuorumPeer启动,那么这次我们分析 ...
- 用神奇的currentColor制作简洁的颜色动画效果
先上一个兼容性总结图:老版本ie可以直接用复杂方法了,套用某表情包的话: 2016年了,做前端你还考虑兼容IE6?你这简直是自暴自弃! 好了,知道了兼容性,我们可以放心的使用了. 在CSS3中扩展了 ...