• 《大型分布式网站架构设计与实践》阅读笔记01


    面向服务的体系结构(SOA)

    基于TCP协议的RPC

    RPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务。

    单台服务器的处理能力受硬件成本的限制,不可能无限制地提升。RPC将原来的本地调用转变为调用远端的服务器上的方法,给系统的处理能力和吞吐量带来了近似于无限制提升的可能,这是系统发展到一定阶段必然性的变革,也是实现分布式计算的基础。

    随着业务的发展,服务调用者的规模发展到一定阶段,对服务提供方的压力也日益增加,因此,服务需要进行扩容。而随着服务提供者的增加与业务的发展,不同的服务之间还需要进行分组,以隔离不同的业务,避免相互影响,在这种情况下,服务的路由和负载均衡则成为必须要考虑的问题。

    对象的序列化

     无论是何种类型的数据,最终都需要转换成二进制流在网络上进行传输,那么在面向对象程序设计中,如何将一个定义好的对象传输到远端呢?数据的发送方需要将对象转换成为二进制流,才能在网络上进行传输,而数据的接收方则需要把二进制流再恢复为对象。
    将对象转换为二进制流的过程称为对象的序列化。
    将二进制流恢复为对象的过程称为对象的反序列化。
    对象的序列化与反序列化有多种成熟的解决方案,较为常用的有Google的Protocal Buffers、Java本身内置的序列化方式、Hessian,以及后面要介绍的JSON和XML等,它们各有各的使用场景和优/缺点。

    基于HTTP协议的RPC

    HTTP是Hypertext Transfer Protocol(超文本传输协议)的缩写。它是万维网协会(WorldWild Web Consortium)和 IETF(Internet Engineering Task Force)合作的成果,并逐步发展成为整个互联网信息交换的标准,当今普遍采用的版本是HTTP1.1。
    如图1-6所示,HTTP协议属于应用层协议,它构建在TCP和IP协议之上,处于TCP/IP体系架构中的顶端,这样一来,它便不需要处理下层协议间诸如丢包补发、握手及数据的分段和重新组装等烦琐的细节,从而使开发人员可以专注于上层应用的设计。
    协议是通信的规范,为了更好地理解HTTP协议,我们可以基于Java的SocketAPI接口,通过设计一个简单的应用层通信协议,来窥探协议实现的一些过程与细节。

    使用HTTP协议的优势

    随着互联网的深化发展,特别是移动互联网的兴起,应用程序对于跨平台的需求越来越突出,如果是基于TCP协议来实现RPC,不同平台的移动终端应用程序,像Andriod、HTML 5、iOS、Symbian等,需要重新开发不同的工具包来进行请求发送和响应解析,工作量大,难以快速响应和满足用户的需求。基于HTTP协议的RPC可以使用JSON或者XML格式的响应数据,而JSON和XML作为通用的格式标准,开源的解析工具已经相当成熟,在其上进行二次开发屏蔽了很多底层烦琐的细节,非常便捷和简单。
    随着请求规模的扩展,基于TCP协议RPC的实现,程序需要考虑多线程并发、锁、I/O等复杂的底层细节的实现,实现起来较为复杂。在大流量高并发压力下,任意一个细小的错误,都会被无限放大,最终导致程序宕机。而对于基于HTTP协议的实现来说,很多成熟的开源Web容器已经帮其处理好了这些事情,如Tomcat、Jboss、Apache等,开发人员可以将更多的精力集中在业务的实现上,而非处理底层细节。
    当然,基于HTTP协议的实现也有其处于劣势的一面。由于是上层协议,发送包含同等内容的信息,使用HTTP协议传输所占用的字节数肯定要比使用TCP协议传输所占用的字节数更多。因此,同等网络环境下,通过HTTP协议传输相同内容,效率会比基于TCP协议的数据传输要低,信息传输所占用的时间要更长。
    当然,通过优化代码实现和使用gzip数据压缩,能够缩小这一差距。通过权衡利弊,结合实际环境中其性能对于用户体验的影响来看,基于HTTP协议的RPC还是有很大优势的。

    HTTP是Hypertext Transfer Protocol(超文本传输协议)的缩写。它是万维网协会(WorldWild Web Consortium)和 IETF(Internet Engineering Task Force)合作的成果,并逐步发展成为整个互联网信息交换的标准,当今普遍采用的版本是HTTP1.1。
    如图1-6所示,HTTP协议属于应用层协议,它构建在TCP和IP协议之上,处于TCP/IP体系架构中的顶端,这样一来,它便不需要处理下层协议间诸如丢包补发、握手及数据的分段和重新组装等烦琐的细节,从而使开发人员可以专注于上层应用的设计。
    协议是通信的规范,为了更好地理解HTTP协议,我们可以基于Java的SocketAPI接口,通过设计一个简单的应用层通信协议,来窥探协议实现的一些过程与细节。

  • 相关阅读:
    比SRCNN效果好的传统超分辨率算法汇总
    CSS3 2D转换
    CSS3 文本效果
    CSS3 Gradients(渐变)
    CSS3 背景
    CSS3 圆角
    CSS3 边框
    CSS3 简介
    CSS 属性选择器
    CSS 媒体类型
  • 原文地址:https://www.cnblogs.com/ywqtro/p/14769279.html
Copyright © 2020-2023  润新知