background image

如何实现

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-