zoukankan      html  css  js  c++  java
  • 大型分布式网站的架构提供的各个服务

    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方式发送到服务端。



  • 相关阅读:
    Jquery选择器 选择一个不存在的元素 为什么不会返回 false
    flask接收前台的form数据
    virtualenv
    easy_install与pip 区别
    Linux安装Python2.7
    能者多劳
    西游记的管理智慧:选择团队领导人的核心奥秘
    最高管理智慧:留个缺口给别人
    团队管理的1 4 7法则
    Spring的AOP面向切面编程
  • 原文地址:https://www.cnblogs.com/chenxiaochan/p/7253403.html
Copyright © 2011-2022 走看看