上一篇提到微服务的兴起是RSocket
诞生的重要契机,相信有微服务开发经验的朋友,在微服务切分耦合与实际上的效能问题如何抉择伤透脑筋,服务间的沟通效率不彰是微服务一大痛点,HTTP协议本身是为了服务与客户端之间的沟通而诞生,这篇就来探讨RSocket
与其他协定的差别。
我们最熟悉的Http协定,OSI
第7层,最初是用来发布或接收Html页面的方法,定义客户端与服务端之间的request/response的标准。
建立连线需要成本,1.1提供Connection: keep-alive
来帮助持续连接,减少建立与关闭连线的时间延迟。且不需要等待上一次的结果就可以发送下一个请求。并定义了现在常见的GET
、POST
、PUT
...八种Http Medthod。
在效能方便进一步的加强,增加了服务器推送功能、压缩HEAD
增加传输速度、将多个请求合并在一个TCP
(Multiplexing
)而不是单独占用一条TCP connection
、改用二进位而非原本的文本格式......等等大幅的增加网页的载入速度。
听到RSocket
的时候我其实第一个想到就是websocket
,与Http相同是OSI第7层,有别於单向短连接的http协定,websocket
提供一个成本较低服务与客户端互动长连接的方式,相对於http当时可能需要透过Polling
轮询的方式才能办到,而且又效能低下。
建立於HTTP/2之上,为了适用於服务之间多语言的沟通,内文是透过Protobuf
一种有效率的二进位讯息格式来传输,相对於原本的HTTP提高了效率。相对於常用的RESTful
可以更充分的运用HTTP/2的优点。对於长连线与双向的沟通都有支援。
flow control
),Reactive Streams
request(n) Async Pull & Leasing
(注1)RSocket
有四种,更能应对不同的使用场景。WebSocket
只是一个框架,RSocket
更完整。gRPC
为OSI第7层,RSocket
是第5/6层。gRPC
有自己特定的payload
,RSocket
没有特别指定。gRPC
建立於HTTP/2之上只适用HTTP/2的情境,RSocket
可以是TCP、档案或是WebSockets。gRP
没有获得所有的浏览器支援,需要额外的程序码,RSocket
只需要接受WebSockets
连线就可以畅行各浏览器。Reactive Streams
request(n) Async Pull :就是基於我们之前介绍过的Reactive Streams
透过Subscription.request(n)
来建立订阅者与发布者之间的沟通,具体会由Reactor
、RxJava
或是Akka Streams
来实作,可以在应用层去控制资料传送的速率而不单单靠网路缓冲,适用於服务与服务或是服务与装置之间。Leasing
:适用於服务与服务之间,server端要评估自己能负荷的空间给client端达到控制速率的效果,也就是client端可以使用特定逻辑的负载平衡演算法(load-balancing algorithms)来选择最佳的server端,范例推荐阅读简书。其实提高效能还有一个显着的优点,就是可以降低硬体的成本,主管看到云端服务的帐单比较不会吐血。
>>: you only look once - YOLO (1)
我们今天要把环境给设定好,并且尝试将laravel专案启动,而在我写这篇文章之前,我已经有利用Hom...
在进入 Go 的重头戏 Concurrency 前,需要先来了解一下执行序(thread)是什麽,那...
运算子特性 1. 优先性(precedence):指的是一行程序列中如果才在2个以上的运算子,会依照...
此篇会介绍 Bootstrap 使用的 css reset 档案 _reboot.scss。 事前...
参赛动机 厘清JavaScript中自己一知半解的概念 透过写文章加强记忆,培养自己写文章的能力 ...