大型分布式网站的架构提供的各个服务

1)RPC远程调用

RPC的全称是RemoteProcess Call,即远程过程调用,它应用广泛,实现方式也很多,拥有包括RMI,webservice等等诸多成熟的方案,在业界得到了广泛的使用.


RPC的实现包括客户端和服务端,即服务的调用方以及服务的提供方,服务调用方发送RPC请求到服务提供方,服务提供方根据调用方提供的参数执行请求方法,将执行结果返回给调用方,一次RPC调用完成.

2)通信协议---协议栈

协议是通信的规范,根据TCP/IP协议模型,HTTP协议属于应用层协议,它构建在TCPIP协议之上,处于TCP/IP体系架构中的最顶层,这样一来,它便不需要处理下层协议间诸如丢包补发,握手以及数据的分段和重新组装等繁琐的细节,从而使开发人员可以专注于上层应用的设计.


3)RPC通信协议的选择---TCP协议

基于TCP协议实现的RPC,由于处于协议栈的下层,能够更灵活的对协议字段进行定制,减少网络传输字段数,降低网络开销,提高性能,达到更大的吞吐量和并发数,但是需要更多的关注的底层复杂细节,实现的代价更高,较难实现跨平台的调用.

而随着请求规模的扩展,基于TCP协议RPC的实现,程序需要考虑多线程并发,,IO等复杂的底层细节的实现,实现起来较为复杂.在大流量高并发压力下,任意一个细小的错误,都会被无限放大,最终导致宕机.

4)RPC通信协议的选择---HTTP协议

基于HTTP协议的RPC,可以使用JSON或者XML格式的响应数据,JSONXML作为通用的格式标准,开源的解析工具已经相当成熟,在其上进行二次开发屏蔽了很多底层繁琐的细节,非常便捷和简单.

对于基于HTTP协议的实现来说,很多成熟的开源WEB容器已经帮其处理好这些事情,tomcat,Jboss,Apache,开发人员可以将更多的精力集中在业务的实现上,而非底层细节的处理.

缺点:

由于是上层协议,发送包含同等内容的信息,使用HTTP协议传输所占用的字节数肯定要比TCP协议传输所占用的字节数更多.因此,同等网络环境下,通过HTTP协议传输相同内容,效率会比基于TCP协议的数据传输要低,信息传输所占用的时间要更长.

通过代码优化实现以及使用gzip数据压缩,能够缩小这一差距.所以从实际环境中的性能和用户体验来看,基于HTTP协议的RPC还是有很大的优势的.

5)对象序列化方式的选择

对象序列化:

将对象转换为能够在网络上传输的二进制流的过程

对象的反序列化:

将二进制流恢复为对象的过程


6)序列化方式的选择

GoogleProtocol Buffers真正开源出来的时间并不长,但是其性能优异,支持跨平台,但使用其编码代码侵入性较强,需要编写proto文件,无法直接使用java等面向对象编程语言的对象.

Hessian,相对应Protocol Buffers效率稍低,但是对各种编程语言有良好的支持,性能稳定,java本身内置的序列化方式的效率要高很多

java内置的序列化方式.不需要引入第三方包.使用简单.

 

7)远程调用的实现---基于TCP的远程调用


8)远程调用的实现----基于HTTP的远程调用




9)两种URL风格---RPC

RPC风格的URL比较好理解,直接在HTTP请求的参数中标明需要远程调用的

服务接口名称,服务需要的参数,如下所示:

http://hostname/provider.do?service=com.http.sayhello&format=json&timest

amp=2013-07-07-13-22-09&arg1=arg1&arg2=arg2

 

hostname表示服务提供方的主机名,service表示远程调用的服务接口名称,

format表示返回参数的格式,timestamp表示客户端请求的时间戳,arg1和

arg2表示服务所需要的参数。

10)两种URL风格---Restful

POST http://hostname/people创建name为zhangsan的people记录

GET http://hostname/people/zhangsan返回name为zhangsan的people记录

PUT http://hostname/people/zhangsan提交name为zhangsan的people记录更新

DELETEhttp://hostname/people/zhangsan删除name为zhangsan的people记录

RESTful风格其中的一个思想是,通过HTTP请求对应的POST、GET、PUT、

DELETE方法,来完成对应的CRUD(增删改查[Create,retrieve(读取),update,delete]) 操作

11)两种URL风格---Restful结合RPC

POSTarg1=hello arg2=123

URL http://hostname/provider/sayhelloservice/2013-07-07-13-22-09.json

URL中hostname表示的是服务提供方的主机名,provider表示访问的是服务

提供方,sayhelloservice是对应的服务接口名称,.json表示的是需要服务端

返回的数据格式,2013-07-07-13-22-09表示的是客户端访问的时间戳,

arg1和arg2参数采用POST方式发送到服务端。



posted @ 2017-04-30 21:19  陈晓婵  阅读(182)  评论(0编辑  收藏  举报