当前位置: 首页 > 实用文档 > 策划 > Java跨语言调用实现方案

Java跨语言调用实现方案

2016-06-06 16:24:29 编辑:zhangyanqing 来源:http://www.chinazhaokao.com 成考报名 浏览:

导读:  下面是中国招生考试网www chinazhaokao com 为大家整理的Java跨语言调用实现方案,供大家参考。 Java跨语言调用实现方案  背景:   ...

 下面是中国招生考试网www.chinazhaokao.com  为大家整理的Java跨语言调用实现方案,供大家参考。

 Java跨语言调用实现方案

  背景:

  在大型分布式 java 应用中,为了方便开发者,通常底层的 rpc 框架都会做一些调用的封装,让应用层开发人员在开发服务的时候只用编写简单的 pojo 对象就可以了,如流行的 spring remoting , jboss remoting 等等,都有这样的效果。

  随着业务的需要,可能上层应用希望采用非 java 技术,如 php , ruby on rails ,而由于 java gc 和内存模型的限制,可能有的底层服务又需要采用更高性能和更加灵活的技术,如果 c++ , python 等。

  这时候就会考虑跨语言的问题了,在如何不改动原有 pojo 实现的 rpc 框架,而让系统实现跨语言,这个难题摆在了中间件开发者的头上。

  问题 :

  现在我们不妨把上面说涉及的问题提取出来:

  1) 不能改变原有的 java rpc 服务的发布方式,仍然采用 pojo 。

  2) 上层非 java 应用可以调用到由 server 端 pojo 形式发布的服务。

  3) 底层非 java 应用,如 c++ , python 等可以发布格式和 pojo service 一样的服务

  4) 提供优雅的借口给应用开发者。

  业界考察:

  好在我们并不是第一个遇到这个问题的人,那我们来看看在我们业界的前辈们都给我们留下了哪些宝贵的财富(主要是互联网行业)。

  Google protocol buffers : Google 大神总是早人一步,在 google 架构的初期就意识到了跨语言的重要性,在构建 bigtable , GFS 的同一时期就是定制出了一套跨语言方案。那就是 google protocol buffers ,不过直到 08 年, google protocl buffers 才开源出来,正所谓国之利器不可以示人,我们所看到的, google protocl buffers 其实是阉割版,如没有 map 的支持 ( 根据一些资料表明, google 内部是有这个东西的) , python 的 native c 性能优化,不包括 rpc service ,虽然后面补了一个,但是可用性差强人意,不能多参,不能抛异常。不过在这方面我们确实不应该报太大的希望,因为 google 自己都说了 protocol buffers - a language-neutral, platform-neutral, extensible way of serializing structured data ,好吧,他只是一个序列化格式,而和 hessian , java 序列化有所不同的是, protocol buffers 可以用通过定义好数据结构的 proto ( IDL )文件产生目标语言代码,大大了减少了开发量,不过遗憾的是生成的代码有很强的侵入性,并不能产生我们需要的pojo java 对象。

  不过即使是这样,我们也从 google protocol buffers 身上学到了很多东西。

  编码的压缩,采用 Base 128 Varints 序列化数字,减少网络传输开销。

  非自描述数据, protocol buffers 将每个数据结构的描述信息嵌入到代码中,因此只需要传输数据过来,就可以反序列化出来该数据结构的实例了。

  Immutable object , protocol buffers 在生成的 java 代码中采用 builder&message 模式, message 是一个不能变的对象,即只有getter ,没有 setter ,而每一个 message 的生成由一个对应的 builder 来完成,从这点可以看出, google 已经用上了函数式编程。

  Rpc 异步话,虽然 protocol buffers 的 rpc 很简陋,但是一开始就只提供异步 callback 调用形式,可见 google 已经实现异步话,如果在互联网行业的人会知道,这点是相当不容易。

  Facebook thrift : 4 月 1 号,呵呵,没错, thrift 是 Facebook 于 07 年愚人节开源出来的,有点 google 的作风。 Thrift 是facebook 自己的一套跨语言实现。有人会问这个和 protocol buffers 有啥区别。 Ok ,先看看它的定义吧。

  Thrift is a software framework for scalable cross-language services development. It combines a software stack with a code generation engine to build services that work efficiently and seamlessly between C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, Smalltalk, and OCaml.

  说得很清楚是一个跨语言的服务开发框架。包括的功能有 code generation (代码生成, protocol buffers 也有), cross-language (跨语言, protocol buffers 也有), service development (好吧,这个 protocol buffers 也有)。晕倒,这样看起来,它和 google protocol buffers 完全是同一个领域的东西,而其有点重复发明轮子的味道。

  刚开始,我们也有这样一个疑惑,好吧,接着往下看, here we go 。其实除了这些共同性以外(都是解决跨语言问题嘛), thrift 还是和protocol buffers 有很大不同的。不同点如下:

  1) 提供一个完整的 service stack ,定义了一整套的 rpc 服务框架栈,这个 protocol buffers 是没有,这个绝对是 thrift 的利器,如果你想要开发一个服务, thrift 甚至有个栈层的实现,我靠,爽。

  2) Ok ,在 thrift 论文有这样一句话。 Thrift enforces a certain messaging structure when transporting data, but it is agnostic to the protocol encoding in use. 嗯哼,我懂了,它是不会管,你到底采用哪种序列化方式的,hessian ,xml 甚至是protocol buffers 。Oh ,my god 。

  3) 接下来不得不膜拜一下thrift 的service 接口的强大了,多参,异常,同步,异步调用的支持,这正是我们想要的, 瞬间给protocol buffers 比下去了。

  4) 多集合的支持 map , set 都有,让你爽歪歪。 Protocol buffers 颤抖吧。

  这时候我们亲爱的读者就会问了,那我们的问题不就解决了吗,就是 thrift 。我笑而不语 , 虽然 thrift 是如此的强大,但是它仍然不是我们想要的, thrift 生成的代码也是强侵入性的,这样 pojo 的对象是无法发布服务的。还有一个硬伤是虽然 thrift 的 stack 很强大,当时这和我们原有系统的 stack 肯定是不兼容的,如 jboss remoting , spring remoting ,它们都会加一些 header 信息,而 thrift 已有实现的传输中式没有header 信息的。值得一提的是现有的 thrift service 实现中,不是线程安全的,考虑到有些语言没有对线程很好的支持,尤其是 Facebook 最常用的 PHP 语言,所以现有的实现中没有线程安全 Client 的实现。这样就会造成 client 端 connection 不能复用的问题,相当于短连接了。( ps :其实短连接就真的比长连接性能差吗?这是个问题。)

  总结一下从 Facebook thrift 学到的东西:

  1) 同步,异步都支持,这个很强悍,一般的做法是对性能要求高的服务器端采用异步方式开发,对易用性有要求的客户端采用同步方式调用,是比较完美的。

  2) 从现有的非线程安全的实现看, Facebook 很有可能自己有一套更高效的线程安全的实现,估计考虑到和 thrift 关系不到,或者是核心技术,所以没有放出来,其实想自己做,也不是太难。

  3) Thrift 对很多脚本语言都进行了 native c 的性能优化,如 python 端,采用 native c 以后性能提高 20 倍。 Protocol buffers 一直在做这方面的优化,打算在 2.4 中加入,不过 protocol buffers 就像 jdk 7 一样难产,跟让人崩溃的是,前不久在论坛爆出做这块优化的哥们已经离开了 google ,不再负责了,好吧,我关心的是他去哪儿了,泪奔。

  Apache Hadoop avro : Avro is a data serialization system. Avro provides functionality similar to systems such as Thrift, Protocol Buffers, etc. 好吧它自己都承认了,我们就不去纠结了。

  简单介绍一下, avo 是 hadoop 项目下面用来传输数据的一个架构。也是一个跨语言解决方案。不过 avro 有自己的亮点。 1 , Dynamic typing, 2 , Untagged data , 3 , . No manually-assigned field Ids 。

  眼前一亮, Dynamic typing , oh , my god 。没错, avro 通过将 metadata 放在一个叫 schema 的对象里面,然后可以序列化对应的 pojo兑现。这个正是我想要的,至于其他的特性,的确没有咋仔细看 avro ,感觉上比 thrift ,和 protocol buffers 跟难学习,有熟悉的读者可以给我科普一下。

  解决方案:

  好了,到了这里,读者大概心里也有数了, protocol buffers , thrift , avro 都有我们想要的和我们不想要的。要解决我们的问题,我们只需要扬长避短就可以了。揉揉就是我们的东西了。方案如下:

  1) 采用 protocol buffers 的 message 序列化格式和代码生成。

  2) 采用 thrift 的 service 生成格式,以及实现兼容 jboss remoting 或者 spring remoting 的 thrift ( jboss remoting ) stack 。

  3) 原有的 pojo 对象采用 avro 的 schema 方式序列化和反序列化该对象。

  Ok 了,一切看起来是那样的完美。呵呵,不要被迷惑,还有很多 detail 的事情需要解决,时候不早,吃碗泡面,洗洗睡了,有时间,再把具体实现 detail 分享给大家。


Java跨语言调用实现方案相关热词搜索:语言 方案

1、汉语言文学专业申请省先进班集体PPT(共5篇)2011级汉语言文学优秀班集体申请表甘肃农业大学2013 -2014 学年“先进班集体”申报表填表人: 审核人:2011级汉语言文学获奖情况:班级荣誉:2011年人文学院第五届“人文杯”辩论赛二等奖;2014年甘肃农业大学人文学院第一届“与汉语言文学专业申请省先进班集体PPT(2016-04-08)

2、生活方式的经典语言(共5篇)我最喜欢的经典语言地位。政从正来,智从知来,财从才来,位从为来!2 观念比能力重要,策划比实施重要,行动比承诺重要,选择比努力重要,感知比告知重要,创造比证明重要,尊重生命比别人看法重要!-3 方向比速度重要,智慧比吃苦重要,学习比学历重要,机遇比关系重要,要什么比做什么重要!4 智力比知识重要,素生活方式的经典语言(2016-04-12)

3、创意广告语言(共4篇)145条最有创意广告语2010145条最有创意广告语2010 09 01 145条最有创意广告语2010 09 01 条最有创意广告语新闻来源:互联网发布时间:2010-09-01IT 业 速度超人,色惊四座,HP designjet5000 HP,打印机 无限自由,轻松拥有 联想电脑 数字时代,动创意广告语言(2016-05-12)

4、心动的语言(共5篇)让日本人心动的语言技巧让日本人心动的语言技巧摘要:本文是根据对日本人的了解和调查,总结了一些畅销的商品的广告词的写法,和一些能触动日本人心理的几个技巧,只要使用这些技巧去设计广告词就可以准确和瞬间抓住日本人的心理,最终达到广而告之和销售商品的目的。关键词:日本人 心理 集团主义 技巧 广告词现在很多心动的语言(2016-05-17)

5、很有意义的语言(共5篇)对人生很有意义的话对人生很有意义的话有眼界才有境界,有实力才有魅力,有思路才有出路,有作为才有地位。政从正来,智从知来,财从才来,位从为来!-观念比能力重要,策划比实施重要,行动比承诺重要,选择比努力重要,感知比告知重要,创造比证明重要,尊重生命比别人看法重要!-方向比速度重要,智慧比吃苦重要,学习很有意义的语言(2016-05-21)

6、上班鼓励语言(共5篇)赞 美 的 话 语赞 美 的 话 语“赞美与鼓励让白痴变天才,批评与抱怨让天才变白痴” 看到眼睛好大,好圆,可说:看到你的眼睛就想到了美丽的黑葡萄,好漂亮 看到牙齿好白又整齐,可说:你的牙齿好漂亮啊,真的可以去拍广告了。 个人:1 你很有内涵!你很快乐!2 你的形象给了你高贵的个性,你的语言给了你上班鼓励语言(2016-05-26)

7、化妆的语言(共5篇)给语言化妆的技巧(微课程设计案例)微课程设计简论化妆品广告语言的审美特色简论化妆品广告语言的审美特色[日期:2011-03-05] 来源:中国论文联盟 作者:周磊摘 要:优美的化妆品广告语言不仅是传递商品信息、宣传产品功能的重要载体和手段,而且其中所蕴含的情感美、语音美和形式美,都鲜明地体现出此种化妆的语言(2016-06-06)

8、语言文字工作制度(共5篇)语言文字工作制度高平市顺风公交公司语 言 文 字 工 作 制 度语言文字的规范化是个人文明素质的重要指标,是提高员工素质的一项重要工作,是建设公司文化的重要环节。为了行之有效地开展我公司语言文字工作,实现国家提出的新世纪“普通话初步普及”的目标,现根据《中华人民共和国国家通用语言文字法》和汽车站礼仪语言文字工作制度(2016-06-12)

9、有狗警示标语(共6篇)文明养犬标语提倡文明养犬 共建和谐社区文明养犬 从我做起出门遛犬请使用牵引带 犬只粪便及时清理饲养犬只不得干扰他人正常生活文明养犬 不养大型犬、烈性犬科学文明养犬 共筑和谐家园关爱您的健康 定期注射狂犬病疫苗无证养犬、一户养多犬属违规养犬行为常训练 不扰民 外出时时犬链系 保护狗狗为有狗警示标语(2016-07-16)

10、学校语言文字标语(共6篇)语言文字标语福田河小学语言文字规范化宣传语1 说普通话,迎四方宾客;用文明语,送一片真情普通话是人与人交流的桥梁,是雄鹰飞上蓝天的翅膀,是让小树茁壮成长的阳光,让我们学说普通话,让普通话伴我成长。2 普通话,文明人的通行证;规范字,中国人的身份证。3 普通话,句句入耳;规范字,行行入目。4 学校语言文字标语(2016-07-18)

11、大班幼儿中秋节活动案例(共6篇)大班中秋节活动方案月亮的节日——大班幼儿中秋节活动方案设计理念:中秋节是我国传统的节日之一,其赏月、吃月饼的活动凸显着人们家人欢聚一堂的和乐画面,憧憬着人们对未来生活美好的祝福和愿望。根据大班幼儿的年龄特点,从幼儿熟悉的生活入手,整合了聊中秋、赏中秋、品中秋、画中秋的活动形式,加深幼儿对传统节日的认大班幼儿中秋节活动案例(2016-07-21)

12、语言文字宣传(共6篇)语言文字规范化宣传活动实施方案2012语言文字规范化宣传活动实施方案为了进一步宣传贯彻《国家通用语言文字法》,落实国家对学校语言文字规范化要求,更好地发挥学校在促进全社会语言文字规范化工作中的基础作用,根据《关于开展语言文字达标创建活动的意见》要求,我校积极开展语言文字达标创建各项工作,为确保工作顺语言文字宣传(2016-07-21)

13、文字活动(共6篇)语言文字活动计划解放街小学“语言文字规范化” 宣传活动计划时间:2007年11月1日~11月31日。开展本次“语言文字规范化宣传月”活动的主题是:传播共同语言、共建和谐校园。要充分发挥此次活动宣传作用,并加大宣传力度,为构建和谐校园营造良好的语言环境。要求进一步深入宣传《中华人民共和国国家通用语言文文字活动(2016-08-03)

14、今年流行语言(共6篇)2015年最新十大网络流行语2015年最新十大网络流行语1、颜值 颜值,网络词汇。源自日语“脸”的汉字,颜值表示人物颜容英俊或靓丽的数值,用来评价人物容貌。如:颜值爆表。浅显地来说,颜值就是容貌值,漂亮程度,男女皆可形容。颜值高就是大美女大帅哥,屌丝男屌丝女的颜值也就不好意思拿出来说了,颜值低的1、今年流行语言(2016-08-04)

15、防洪警示语言(共6篇)防洪防汛安全知识学习防洪防汛安全教育培训资料一、预警预防1、防洪检查(1)防汛组织机构(即:防汛领导组织机构、防汛责任部门、抢险队伍等)是否健全、指挥调度是否顺畅。(2)防汛制度、措施、防汛应急预案是否制定。(3)有关建筑物(施工围堰、防洪墙等)是否满足度汛要求。(4)动力、通信、交通、供水、排水、防洪警示语言(2016-08-05)

最新推荐成考报名

更多
1、“Java跨语言调用实现方案”由中国招生考试网网友提供,版权所有,转载请注明出处。
2、欢迎参与中国招生考试网投稿,获积分奖励,兑换精美礼品。
3、"Java跨语言调用实现方案" 地址:http://www.chinazhaokao.com/wendang/cehua/453082.html,复制分享给你身边的朋友!
4、文章来源互联网,如有侵权,请及时联系我们,我们将在24小时内处理!