绝想首页

ICE和Thrift的比较

张洁10bs43 [随感] 2013-03-18 05:43:19 星期一 晴天 查看:3694 回复:2 发消息给作者
Thrift是Facebook自己开发的一个跨语言的网络通信框架,Facebook前端主要是PHP开发,后面很多服务则是C++或者Java开发的,比如他们的搜索服务就是C++的,为了能用不同语言来相互调用这些服务,所以他们开发了Thrift,来为不同语言提供一个一致的通信界面。
ICE就不多说了,它的全称就是Internet Communications Engine,我们现在就在大面积的使用它,下面主要比较下这两个框架的:

1。跨语言
两个框架都很好的做到了这一点,主流的开发语言C++,Java,Python,Ruby等等都能支持。

2。代码生成
两个框架都有自己的IDL,(Interface Define Lanaguage),在ICE里面叫slice文件,Thrift里面就叫Thrift文件,用来描述将要实现的服务接口,然后通过工具程序自动生成骨架代码,比如client和server端的stub代码.Thrift生成的代码都在一个文件里,ICE则细致的多,能很好的区分那部分是server端,那部分是client端用的。

3。网络传输的编码和解码
对象在传输过程时,发送端发送时需要将Object编码成字节流,接收端接收后则将这些字节流解码成对应的Object,从两个框架的实现来看,ICE的编码要比Thrift要紧凑和经济的多,Thrift在编码Object时,连同Object的Field的类型和编号(Thrift定义的每个Object的field都会分配一个编号)以及每个函数的参数类型和编号都给编码进去了,ICE则经济的多,只编码了Field的value。

4。框架本身
Thrift整个框架代码非常简洁,相比ICE来说,ICE要比Thrift完善和成熟的多。这个主要体现在服务的高可用性和可扩展性方面。
ICE提供的服务可以是分布式的,框架有完善,成熟的运行环境来运行服务,这些环境提供了很多很好的机制,来保证服务的可扩展和高可用性,比如
Register机制,通过Register,让client再连接服务时多了一层寻址的机制,如同DNS一样,可以方便的将某个服务切换到其他机器上,和DNS作IP轮询一样,ICE可以通过Register来给服务做负载均衡
也因为ICE提供的这些环境可以使的ICE编写的服务能方便的部署和发布。

Thrift除了基础类库外,没有像ICE那样有成熟的运行环境,每个thrift服务发布了都成了单点,当单台服务器的单个服务处理不来的时候,要自己在上层想办法来解决。

在服务端的实现方面,Thrift比较有意思,Thrift提供了不同Server代码,这些Server代码的主要差异体现在网络IO和并发的处理方式上。一共有四个Server:
TSimpleServer
单进程的Server,来一条消息,处理一条。
TThreadPoolServer
基于Java内建的线程池实现的并发的多线程Server.来一条消息,放到线程池里处理,池满则阻塞。
TNonblockingServer
非阻塞的Server
THsHaServer
基于Half-Sync/Half-Async(半同步/半异步)网络模式的Server
你可以根据自己服务的情况来选择使用那种模式的Server.如果你觉得这些模式都不好,你可以定制自己的Server.在这个方面Thrift提供了比较好的定制,这也是因为Thrift足够简单,才使得很多定制成为可能。
而ICE在Server只提供了connection per thread 和 threadpool两种,但threadpool的Server,ICE已经实现的非常好。

相对ICE来说,thrift是个更轻量级的框架。

很多事情,只要敢去做,才会发现原来做起来并没有想象中的难

过两天再把thrift的源码分析给写出来
顶一下(54 写日记 1222836 235477
上一篇:久违的感觉[原创]下一篇:好听
分享排行

 

 

留住已经逝去的峥嵘岁月 记住曾经绽现的万种风情 在记忆即将淡漠的时候 来把这些重新回味

Copyright (C) 2008-2014 www.juexiang.com, All Rights Reserved.

京ICP备2023001011号-3   京公网安备11010802011908号

客服QQ 1017160561 违法和不良信息举报电话 13148464312 邮箱 1017160561@qq.com