共计 7163 个字符,预计需要花费 18 分钟才能阅读完成。
随着微服务的迅速倒退,各大互联网企业也投入到微服务的应用种。微服务最大的特点是,跨过程、跨服务、跨语言之间的调用,使得咱们可能像调用本地类、函数一样。当微服务具备该特点,将咱们简单的业务拆分成不同的服务,服务之间在互相调用。这也是微服务为什么火的起因之一。
要应用好微服务,不仅仅是对业务的拆分能力要求高,同时对服务之间的通信也要求高,明天就来给大家总结几种罕用的通信协议,它们别离是什么、有什么优缺点以及各种协定之间的比照。
后面一篇文章对微服务的架构,做了一个简略的介绍,这一篇就来针对各种罕用的通信协定做一个汇总。一篇文章疾速了解微服务架构
什么是 tcp
TCP(传输控制协议)是一种面向连贯的、牢靠的、基于字节流的传输层协定。TCP 协定具备以下特点:
- 面向连贯:TCP 协定在数据传输之前须要建设连贯,数据传输实现后须要开释连贯,保障了数据传输的可靠性和完整性。
- 可靠性高:TCP 协定采纳确认机制、序列号和校验和等技术,能够保障数据传输的可靠性和完整性。
- 拥塞管制:TCP 协定采纳拥塞控制算法,能够防止网络拥塞和丢包等问题,保障了数据传输的稳定性和公平性。
- 全双工通信:TCP 协定反对全双工通信,即客户端和服务器端都能够同时发送和接收数据,实现了双向通信。
- 高效性:TCP 协定采纳滑动窗口机制和分段传输技术,能够进步数据传输的效率和性能。
- 反对多种利用协定:TCP 协定能够反对多种应用层协定,例如 HTTP、FTP、SMTP 等。
- 牢靠的谬误复原:TCP 协定能够对失落、反复、损坏和超时等谬误进行复原和解决,保障了数据传输的可靠性和完整性。
TCP 协定的数据传输过程如下:
- 客户端向服务器端发送 SYN(同步)申请,申请建设连贯。
- 服务器端收到 SYN 申请后,向客户端发送 SYN+ACK(同步和确认)应答,示意能够建设连贯。
- 客户端收到 SYN+ACK 应答后,向服务器端发送 ACK(确认)应答,示意连贯曾经建设胜利。
- 数据传输实现后,客户端和服务器端别离发送 FIN(完结)申请,申请开释连贯。
- 收到 FIN 申请后,另一方发送 ACK 应答,示意曾经收到了完结申请。
- 单方都收到了对方的 ACK 应答后,即实现了连贯的开释。
TCP 协定具备面向连贯、可靠性高、拥塞管制、全双工通信、高效性、反对多种利用协定等特点,是一种十分重要的传输层协定。
tcp 的优缺点
tcp 的长处
TCP(Transmission Control Protocol)是一种面向连贯的、牢靠的、基于字节流的传输层协定,具备以下长处:
- 可靠性高:TCP 采纳确认机制、序列号和校验和等技术,能够保障数据传输的可靠性和完整性。
- 拥塞管制:TCP 采纳拥塞控制算法,能够防止网络拥塞和丢包等问题,保障了数据传输的稳定性和公平性。
- 全双工通信:TCP 反对全双工通信,即客户端和服务器端都能够同时发送和接收数据,实现了双向通信。
- 高效性:TCP 采纳滑动窗口机制和分段传输技术,能够进步数据传输的效率和性能。
- 反对多种利用协定:TCP 能够反对多种应用层协定,例如 HTTP、FTP、SMTP 等。
- 牢靠的谬误复原:TCP 能够对失落、反复、损坏和超时等谬误进行复原和解决,保障了数据传输的可靠性和完整性。
- 牢靠的程序传输:TCP 能够保证数据依照发送的程序进行传输,防止了数据乱序的问题。
- 实用于长连贯:TCP 实用于长连贯,能够缩小建设和开释连贯的开销,进步了网络传输的效率和性能。
TCP 具备可靠性高、拥塞管制、全双工通信、高效性、反对多种利用协定等长处,是一种十分重要的传输层协定。
tcp 的毛病
TCP(Transmission Control Protocol)尽管具备很多长处,但仍存在以下毛病:
- 较为简单:TCP 协定的实现较为简单,须要思考到各种网络环境和异常情况,对于开发人员而言学习老本较高。
- 传输效率绝对较低:TCP 采纳确认机制、序列号等技术,保障了数据传输的可靠性和完整性,但也使得数据传输效率绝对较低。
- 不适用于短连贯:TCP 实用于长连贯,对于短连贯的反对不够敌对,会减少建设和开释连贯的开销。
- 不适用于实时性要求高的场景:因为 TCP 采纳确认机制和重传机制,无奈保证数据的实时性,不适用于实时性要求较高的场景。
- 不适用于高负载场景:当网络负载较大时,TCP 采纳拥塞控制算法可能会导致传输速度降落,影响了数据传输的效率和性能。
- 无奈反对播送和多播:TCP 协定无奈反对播送和多播,只能进行点对点的数据传输。
TCP 尽管具备很多长处,但仍存在一些毛病,例如传输效率绝对较低、不适用于短连贯等。在抉择协定时,须要依据具体的需要和场景进行综合思考。
什么是 rcp
RPC 是近程过程调用(Remote Procedure Call)的缩写。它是一种计算机通信协议,使得程序能够申请另一个过程或者计算机上的服务,就像调用本地的函数一样,从而实现分布式系统之间的交互和通信。RPC 能够大大简化分布式系统的开发,进步零碎的可维护性和可扩展性。
rpc 的优缺点
rpc 的长处
RPC 具备以下劣势:
- 形象屏蔽:RPC 框架能够屏蔽底层的网络通信细节,使得近程调用就像本地调用一样简略。
- 可扩展性:RPC 框架能够反对多种协定和编码方式,能够适应不同场景的需要,同时也能够不便地增加新的性能和服务。
- 可靠性:RPC 框架通常会提供各种机制来保障通信的可靠性,如超时重试、错误处理等。
- 高效性:RPC 框架通常应用二进制协定和高效的序列化形式,能够大大减少网络传输的数据量,进步零碎的性能。
- 语言无关性:RPC 框架能够反对多种编程语言,使得不同语言的程序能够不便地进行交互和通信。
rpc 的毛病
RPC 也有以下毛病:
- 依赖网络:RPC 须要通过网络进行通信,因而对网络的稳定性和提早要求比拟高。
- 难以调试:因为 RPC 是跨过程或者跨计算机的调用,因而调试起来比拟艰难,须要应用一些非凡的工具和技术。
- 数据格式限度:RPC 框架通常会限度数据的格局和大小,如果须要传输大量的数据或者简单的数据结构,可能会导致性能问题。
- 安全性问题:RPC 通常不会提供加密和认证等平安机制,须要在应用层进行解决,否则容易受到攻打。
- 可靠性问题:RPC 框架尽管提供了一些机制来保障通信的可靠性,但依然可能呈现通信失败、失落音讯等状况,须要应用程序本人解决。
什么是 grpc
gRPC 是 Google 开源的一种高性能、通用的近程过程调用(RPC)框架,基于 Protocol Buffers 序列化协定进行数据传输。与其余 RPC 框架相比,gRPC 具备以下劣势:
- 高性能:gRPC 采纳基于 HTTP/ 2 的二进制传输协定,能够实现双向流、头部压缩和多路复用等个性,进步了网络传输的效率和性能。
- 多语言反对:gRPC 反对多种编程语言,包含 C ++、Java、Python、Go、Ruby 等,能够不便地构建跨语言的分布式系统。
- 主动生成代码:gRPC 能够依据服务定义文件主动生成客户端和服务器端的代码,大大简化了开发过程。
- 可扩展性:gRPC 反对多种负载平衡算法和服务发现机制,能够适应不同场景的需要。
- 安全性:gRPC 反对 TLS 加密和认证等平安机制,保障通信的安全性。
- 易于应用和保护:gRPC 提供了丰盛的文档和工具链,使得开发和保护分布式系统变得更加容易。
grpc 的优缺点
grpc 的长处
gRPC 是一种高性能、通用的近程过程调用(RPC)框架,具备以下长处:
- 高性能:gRPC 采纳基于 HTTP/ 2 的二进制传输协定,能够实现双向流、头部压缩和多路复用等个性,进步了网络传输的效率和性能。
- 多语言反对:gRPC 反对多种编程语言,包含 C ++、Java、Python、Go、Ruby 等,能够不便地构建跨语言的分布式系统。
- 主动生成代码:gRPC 能够依据服务定义文件主动生成客户端和服务器端的代码,大大简化了开发过程。
- 可扩展性:gRPC 反对多种负载平衡算法和服务发现机制,能够适应不同场景的需要。
- 安全性:gRPC 反对 TLS 加密和认证等平安机制,保障通信的安全性。
- 易于应用和保护:gRPC 提供了丰盛的文档和工具链,使得开发和保护分布式系统变得更加容易。
- 反对多种序列化协定:gRPC 反对多种序列化协定,包含 Google 开发的 Protocol Buffers 序列化协定和 JSON 等,能够依据理论需要抉择最适宜的序列化形式。
- 反对流式数据传输:gRPC 反对双向流、客户端流和服务器端流等多种流式数据传输方式,能够满足不同的业务需要。
gRPC 具备高性能、多语言反对、主动生成代码、可扩展性、安全性、易于应用和保护等长处,是一种非常适合构建分布式系统的 RPC 框架。
grpc 的毛病
尽管 gRPC 是一种十分优良的 RPC 框架,但仍存在以下毛病:
- 学习曲线较平缓:相比于传统的 RESTful API,gRPC 须要应用 IDL 文件来定义服务和音讯类型,并且须要生成客户端和服务器端的代码,须要把握这些新的概念和技术。
- 不反对 RESTful API:gRPC 不反对基于 HTTP 的 RESTful API,无奈与现有的 RESTful API 进行兼容和集成。
- 不反对浏览器端:gRPC 目前不反对 Web 浏览器端,因为浏览器不反对 HTTP/ 2 协定。
- 依赖 Protocol Buffers:gRPC 默认应用 Google 开发的 Protocol Buffers 序列化协定,如果须要应用其余的序列化协定,则须要自行实现。
- 难以调试:因为 gRPC 采纳二进制协定,数据的传输和解析都是以二进制模式进行的,对于调试和排错带来了肯定的艰难。
- 安全性依赖于 TLS:尽管 gRPC 反对 TLS 加密和认证等平安机制,但这些机制都依赖于 TLS 协定,如果 TLS 协定自身存在破绽或被攻打,则会影响 gRPC 的安全性。
gRPC 尽管具备很多长处,但仍存在一些毛病,例如学习曲线较平缓、不反对 RESTful API 等。在抉择 RPC 框架时,须要依据具体的需要和场景进行综合思考。
什么是 http
HTTP 协定是一种基于申请 - 响应模式的应用层协定,用于在 Web 浏览器和 Web 服务器之间传递数据。它是一种无状态的协定,每个申请和响应都是独立的,没有任何关联性。
HTTP 通常应用 TCP 作为传输层协定,应用端口号 80 进行通信。HTTP 协定定义了客户端和服务器之间替换的音讯格局和规定,包含申请办法、申请头部、申请注释、响应状态码、响应头部和响应注释等。
HTTP 申请由三局部组成:申请行、申请头部和申请注释。其中,申请行包含申请办法、URL 和 HTTP 版本号;申请头部包含申请的附加信息,如 Cookie、User-Agent 等;申请注释包含申请的数据内容,如表单数据、JSON 数据等。
HTTP 响应由三局部组成:状态行、响应头部和响应注释。其中,状态行包含 HTTP 版本号、状态码和状态形容;响应头部包含响应的附加信息,如 Content-Type、Content-Length 等;响应注释包含响应的数据内容,如 HTML 页面、图片等。
HTTP 协定具备以下特点:
- 简略易用:HTTP 协定的音讯格局简单明了,易于了解和应用。
- 无状态:HTTP 协定是一种无状态协定,每个申请和响应都是独立的,没有任何关联性。
- 可扩展性:HTTP 协定反对多种申请办法和响应状态码,并且能够应用扩大头部来传递附加信息。
- 易于缓存:HTTP 协定反对缓存机制,能够缩小网络传输的数据量,进步零碎的性能。
- 安全性较低:HTTP 协定通常不提供加密和认证等平安机制,容易受到中间人攻打和窃听。
http 的优缺点
http 的长处
HTTP(超文本传输协定)是一种应用层协定,常被用于 Web 浏览器和 Web 服务器之间的通信。HTTP 具备以下长处:
- 简略易用:HTTP 采纳文本协定和申请 - 响应模型,音讯格局简略、易于了解和应用。
- 易于扩大:HTTP 反对插件和扩大机制,能够依据需要增加新的性能和个性。
- 可靠性高:HTTP 采纳 TCP 协定进行数据传输,保障了数据的可靠性和完整性。
- 良好的兼容性:HTTP 是互联网上最罕用的协定之一,简直所有的浏览器和服务器都反对 HTTP 协定,具备良好的兼容性。
- 反对缓存机制:HTTP 反对缓存机制,能够进步网络传输的效率和性能。
- 安全性高:HTTP 反对 SSL/TLS 加密和认证等平安机制,保障了数据的安全性和隐衷性。
- 反对多种媒体类型:HTTP 反对多种媒体类型,例如 HTML、XML、JSON 等,能够满足不同的业务需要。
综上所述,HTTP 具备简略易用、易于扩大、可靠性高、良好的兼容性、反对缓存机制、安全性高、反对多种媒体类型等长处。这些个性使得 HTTP 成为了 Web 利用程序开发中不可或缺的协定之一。
http 的毛病
HTTP(超文本传输协定)尽管具备很多长处,但仍存在以下毛病:
- 传输效率较低:HTTP 采纳明文传输,音讯格局较为简短,数据传输效率绝对较低。
- 安全性较低:HTTP 采纳明文传输,数据在传输过程中容易被窃听和篡改,安全性较低。
- 不反对双向通信:HTTP 采纳申请 - 响应模式,不反对服务器被动向客户端发送音讯,无奈实现双向通信。
- 不反对流式数据传输:HTTP 采纳短连贯形式,每次申请都须要建设一次 TCP 连贯,无奈实现流式数据传输。
- 无状态协定:HTTP 是一种无状态协定,服务器不能保留客户端的状态信息,每次申请都须要从新验证身份和权限等信息。
- 不反对服务发现:HTTP 没有内置的服务发现机制,须要通过第三方工具或平台来实现服务发现。
- RESTful API 限度:RESTful API 是基于 HTTP 协定的一种 API 设计格调,但因为 HTTP 协定自身的限度,RESTful API 无奈齐全满足所有场景的需要。
协定比照
rpc、grpc 和 http 比照
RPC、gRPC、TCP 和 HTTP 是常见的网络通信协定,它们之间具备以下相同点和不同点,以及各自的优劣势。
- 相同点:
(1)都是应用层协定,用于在不同的过程或计算机之间进行数据传输和通信。
(2)都反对客户端和服务器端的通信模式,能够实现分布式系统的构建。
(3)都须要应用特定的音讯格局和规定来进行数据的传输和解析。
- 不同点:
(1)RPC 和 gRPC 是近程过程调用框架,次要用于在不同的过程或计算机之间进行函数调用和数据交换。而 TCP 和 HTTP 是根底协定,次要用于数据传输和通信。
(2)RPC 和 gRPC 通常采纳二进制协定和高效的序列化形式,能够大大减少网络传输的数据量,进步零碎的性能。而 TCP 和 HTTP 通常采纳文本协定和基于 ASCII 码的编码方式,数据传输效率较低。
(3)RPC 和 gRPC 通常须要应用专门的 IDL 文件来定义服务和音讯类型,并且须要生成客户端和服务器端的代码。而 TCP 和 HTTP 没有这个限度,能够间接应用套接字进行通信。
(4)RPC 和 gRPC 通常须要应用底层的网络库进行封装和实现,例如 Netty、Thrift 等。而 TCP 和 HTTP 通常曾经被操作系统封装好,能够间接应用。
- 优劣势:
(1)RPC 的劣势在于性能高、可扩展性强、反对多种编程语言、易于保护和开发等。毛病在于安全性较低、调试艰难等。
(2)gRPC 的劣势在于性能高、反对多种编程语言、主动生成代码等。毛病在于学习曲线较平缓、不反对 RESTful API 等。
(3)TCP 的劣势在于牢靠传输、反对流式数据传输、应用宽泛等。毛病在于传输效率较低、须要手动解决分包和粘包等问题。
(4)HTTP 的劣势在于简略易用、良好的兼容性、反对缓存机制等。毛病在于传输效率较低、不反对双向流式数据传输、安全性较低等。
综上所述,这几种协定各有优劣势,应依据具体的需要来抉择适合的协定。例如,如果须要高性能、反对多种语言、易于保护和开发,能够抉择 RPC 或 gRPC;如果须要牢靠传输、反对流式数据传输,能够抉择 TCP;如果须要简略易用、良好的兼容性、反对缓存机制,能够抉择 HTTP。
grpc 和 rpc 的比照
gRPC 和传统的 RPC 框架之间有以下区别:
- 通信协议不同:gRPC 基于 HTTP/ 2 协定进行数据传输,而传统的 RPC 框架通常应用 TCP 或 UDP 等传输层协定。
- 序列化形式不同:gRPC 应用 Protocol Buffers 作为默认的序列化协定,而传统的 RPC 框架则应用 JSON、XML 等格局。
- 反对多种语言:gRPC 反对多种编程语言,包含 C ++、Java、Python、Go、Ruby 等,而传统的 RPC 框架通常只反对少数几种语言。
- 高性能:因为采纳了 HTTP/ 2 协定和 Protocol Buffers 序列化协定,gRPC 具备更高的性能和效率。
- 主动生成代码:gRPC 能够依据服务定义文件主动生成客户端和服务器端的代码,大大简化了开发过程。
- 安全性:gRPC 提供了 TLS 加密和认证等平安机制,保障通信的安全性。
http 与 tcp 的比照
TCP(Transmission Control Protocol)协定和 HTTP(Hypertext Transfer Protocol)协定都是互联网中的重要协定,但两者之间存在以下区别:
- 地位不同:TCP 协定位于传输层,负责数据的传输;而 HTTP 协定位于应用层,负责客户端和服务器之间的通信。
- 目标不同:TCP 协定的次要目标是保障数据传输的可靠性和完整性;而 HTTP 协定的次要目标是实现 Web 浏览器和 Web 服务器之间的通信。
- 连贯形式不同:TCP 协定采纳面向连贯的形式进行数据传输,须要先建设连贯而后再进行数据传输;而 HTTP 协定采纳无状态的形式进行数据传输,每次申请和响应都是独立的,没有长期的连贯。
- 数据格式不同:TCP 协定只负责数据的传输,对数据的内容和格局没有限度;而 HTTP 协定规定了数据的格局和内容,例如申请头、响应头、音讯体等。
- 端口号不同:TCP 协定应用端口号来标识不同的过程或应用程序;而 HTTP 协定默认应用 80 端口号进行数据传输。
- 利用场景不同:TCP 协定实用于各种数据传输场景,例如文件传输、邮件传输等;而 HTTP 协定实用于 Web 浏览器和 Web 服务器之间的通信,次要用于实现 Web 页面的拜访和数据交互。