既然有HTTP為什么還要有RPC?

1、為什么有HTTP還要有RPC?
socket:客戶端 -> 服務(wù)端
TCP/UDP的封裝 -> socket
純裸TCP -> 字節(jié)粘包問題 -> 劃分TCP一大串字節(jié)的規(guī)則(頭身尾):協(xié)議誕生(HTTP/RPC)
HTTP:訪問網(wǎng)址
RPC:遠(yuǎn)程調(diào)用服務(wù)器(gRPC、thrift)

回到一開始的問題:這個(gè)問題是個(gè)認(rèn)知誤區(qū),事實(shí)上HTTP誕生的時(shí)間晚于RPC,所以應(yīng)該反過來問為什么有RPC還要有HTTP?
2、為什么有RPC還要有HTTP?
C(client)/S架構(gòu):RPC,公司內(nèi)部的服務(wù)器調(diào)用各成一套體系 -> 演化成現(xiàn)在公司項(xiàng)目的微服務(wù)調(diào)用方法
B(browser)/S架構(gòu):瀏覽器需要能夠絲滑訪問任何服務(wù)器,HTTP誕生于對統(tǒng)一標(biāo)準(zhǔn)的需要 -> HTTP可以做到內(nèi)外通吃
3、如果HTTP可以內(nèi)外通吃,為什么還要用RPC用作公司內(nèi)部的微服務(wù)調(diào)用呢?——對比HTTP1.1和RPC的優(yōu)劣
1)服務(wù)發(fā)現(xiàn):HTTP(DNS)、RPC(Redis等中間服務(wù))
2)底層連接形式:RPC會(huì)建立連接池,但目前很多語言的網(wǎng)絡(luò)庫中也會(huì)給HTTP加連接池
3)傳輸內(nèi)容:結(jié)構(gòu)體的序列化和反序列化 -> HTTP1.1注重html頁面展示,傳輸內(nèi)容以字符串為主(json);RPC私人定制,可以用更小的protobuf保存結(jié)構(gòu)體,傳輸字節(jié)數(shù)據(jù)
第三點(diǎn),RPC勝出,但目前HTTP2已經(jīng)在性能上大大改善,甚至RPC也會(huì)基于HTTP2
回到一開始的問題,為什么還要有RPC,原因是:之前的項(xiàng)目都太老啦,那個(gè)時(shí)候的HTTP還沒有進(jìn)化得這么完善呢,所以很多都用的RPC,遷移到HTTP當(dāng)然可以啦,但是程序員懶啊,又不是不能用!╭(╯^╰)╮