(3)异步非阻塞方式 。
与NIO不同,当进行读写操作时,AIO只需直接调用API的read或write方法 。这两种方法均为异步的,对读操作而言,当有流可读取时,操作系统会将可读的流传入read方法的缓冲区,并通知应用程序;对写操作而言,当操作系统将write方法传递的流写入完毕时,操作系统主动通知应用程序 。可以理解为,read/write方法都是异步的,完成后会主动调用回调函数 。
客户端只需要发起一个 I/O 操作后立即返回,等 I/O 操作真正完成以后,客户端会得到 I/O 操作完成的通知 。此时客户端只需要对数据进行处理就可以了,而不需要进行实际的 I/O 读写操作,因为真正的 I/O 读取或者写入操作已经由内核完成了 。这种方式的优势是客户端无须等待,不存在阻塞等待问题 。
3.如何进行序列化和反序列化客户端和服务器端交互时将参数或结果转化为字节流在网络中传输,那么将数据转化为字节流或者将字节流转换成能读取的固定格式时,就需要进行序列化(数据编码)和反序列化(数据解码),序列化和反序列化的速度也会影响远程调用的效率 。
常用的序列化方式分为两类:文本类(如XML、json等)、二进制类(如Hessian、Thrift等) 。而具体采用哪种序列化方式,主要取决于3个方面的因素 。
(1)支持数据结构种类的丰富度 。数据结构种类支持得越多越好,这样对使用者来说在编程时更加友好,有些序列化框架如Hessian 2.0还支持复杂的数据结构(比如Map、List等) 。
(2)跨语言支持 。序列化方式是否支持跨语言也是一个很重要的因素,否则使用的场景就比较局限,比如JAVA序列化只支持Java语言,所以不能用于跨语言的服务调用 。
(3)性能 。主要看两点,一是序列化后的压缩比,二是序列化的速度 。以常用的 protobuf序列化和json序列化协议为例来对比分析,protobuf序列化的压缩比和速度都要比 json 序列化高很多,所以对性能和存储空间要求比较高的系统选用protobuf序列化更合适;而 json 序列化虽然性能要差一些,但可读性更好,更适合对外部提供服务 。
4.如何进行网络传输(选择何种网络协议)多数RPC框架会选择TCP作为传输协议,也有部分会选择HTTP(如gRPC使用HTTP/2) 。不同的协议各有利弊,TCP更加高效,而HTTP在实际应用中更加灵活 。
RESTfulREST全称是Representational State Transfer,中文意思是表述性状态转移 。它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一 。他在论文中提到:“我写作这篇文章的目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构 。REST指的是一组架构约束条件和原则 。”如果一个架构符合REST的约束条件和原则,我们就称它为REST风格的(RESTful)架构 。
REST提供了一系列架构约束,当作为整体使用时,它强调组件交互的可扩展性、接口的通用性、组件的独立部署,以及那些能减少交互延迟的中间件 。它强化了安全性,也能封装遗留系统 。
——Roy Fielding
REST中一个关键概念是“资源”,它把一切程序能够访问到的业务对象或者处理过程统一定义为资源 。REST使用HTTP动词来操作这些资源,并采用特定的语义规范,使用URL引用这些资源 。例如,GET请求返回资源的表示形式,该资源通常采用XML或者json的格式表示,但也可以使用其他格式(如二进制) 。POST请求创建新资源,PUT更新资源,DELETE删除资源 。
RESTful是一种网络应用程序API的设计风格和开发方式,基于HTTP,可以使用XML格式定义或json格式定义 。最常用的数据格式是json 。由于json能直接被JavaScript读取,因此以json格式编写的REST风格的API具有简单、易读、易用的特点,如图6-14所示 。相比于RPC协议,HTTP更规范、更标准、更通用,无论哪种语言都支持HTTP 。如果你想对外开放API,开放平台外部的编程语言多种多样,你无法拒绝对每种语言的支持,现在开源中间件,基本最先支持的几个协议都包含HTTP RESTful 。
文章插图
▲图6-14 REST风格的服务提供方
前后端分离架构、微服务架构都有一个共同的愿景:使不同的团队之间实现松耦合,各自能独立地开发和部署 。这背后需要依靠一套设计良好的API,它必须更加轻量、可靠、跨平台,因此RESTful API脱颖而出 。系统应用提供RESTful API有什么好处呢?由于API就是把Web App的功能全部封装,因此通过API操作数据可以把前端和后端的代码隔离,使得后端代码易于测试,前端代码编写更简单 。REST风格协议的特点如下 。
推荐阅读
- SCRM的私域运营管理之路
- 用什么算法可以快速检索数据?Bitmap了解一下
- 计算机病毒传染的一般过程是怎样的
- 计算机网络的 89 个核心概念
- 为什么诸葛亮娶个丑媳妇儿?诸葛亮的妻子是四大丑女之一吗
- 三国李严儿子为什么帮诸葛亮?李严和诸葛亮有矛盾吗
- 计算机中为什么要用补码运算?
- 脸上长痘痘喝什么茶排毒,脸上长痘痘喝什么茶比较好
- 为什么喝菊花茶性功能下降,喝什么菊花茶好
- 能让IT程序员告别996的低代码,究竟是风口还是革命?