微服务什么情况下用Http协议通信,什么时候要用Lrpc?

网络 网络管理
哪怕是微服务模块间交互用http协议,其实性能不慢,能应对大多数项目的需求,而且开发起来相当便利,所以很多小公司在做利润一般的项目时,优先考虑用基于http的组件。

先说如下的结论。

1 Spring cloud微服务,以及第二代微服务,spring cloud alibaba,可以用openfeign来调用,即走的是http或https协议,也可以通过dubbo,dubbo就是所谓的rpc,rpc叫远程方法调用,是一种实现方式,底层实现一般是得靠tcp或udp等通讯协议。

2 http协议由于会包含请求头之类的信息,所以效率相对tcp协议来说有些慢,但如果并发量不高,http所谓的低效可以忽略不计,而https协议由于多了基于SSL的安全验证动作,所以通讯效率比http还略低,但如果并发量不高的话,这也是可以接受的。

3 在微服务架构,也可以用resttemplate的方式来远程调用,或者是用restful的方式,但restful也是调用方式,底层实现是用http或https。

4 可以这样说,在大多数的场景,尤其是中小公司所开发的项目场景,用spring cloud+http协议,足以应对项目的并发请求。而且一旦并发量高的话,可以通过基于nacos的扩容和基于redis的缓存等手段来应对,如果再要进一步挖掘性能潜力,那么再用基于tcp的通讯协议,比如用dubbo或netty,但这对程序员就有要求,而用spring cloud+基于http的openfeign,基本上大多数初级开发也能用。

如下具体展开说明。

1 各微服务模块间交互,当下一般是基于http协议,或者是rpc(tcp),比如是dubbo,但两者的性能差别不大,再者比如要应对高并发,比如是支付场景,一般是启3个实例,用nacos管理,外面再用gateway等网关来做负载均衡。

这样的话,2个实例(热备,避免单点失效),应对个一秒几百并发量问题不大,事实上大多数项目,真达不到一秒100的并发量。换句话说,spring cloud alibaba+nacos+gateway+2个实例,哪怕用http协议,甚至再引入有ssl安全性验证的https,真能满足大多数项目的并发需求。

2 如果想要性能调优,比如要达到一秒2k甚至更高的并发量,最直接的方法就是用机器叠, 比如把一个实例部署多个机器上,一个机器应对一秒500的并发量,那么就部个4台机器。一般有高并发需求的项目或者公司都不怎么差钱,部署4个实例也是常事。

而且应对高并发,其实更在于数据库层面和业务交互层面,如果在项目里引入redis或者redis集群,或者分库组件,或者再引入kafka做业务异步处理,外带3,4个实例,哪怕用的是基于http协议的openfeign,应对个2,3k并发量没太大问题。

3 还有一点大家需要注意,spring cloud alibaba组件是开箱即用的,所以用基于http协议的openfeign实现组件间的调用,一般有半年项目经验的初级开发都能做到,或者再引入SSL,用https协议通讯,开发难度也不大。

4 微服务模块间通讯,除了http,其实也可以用tcp,tcp的效率是要高于http,本人之前在高并发项目里做过这方面的调优,同等条件,用tcp协议通讯,效率一般比https和http协议高出大概1/3。

但是如果用tcp交互,虽然不用在通讯过程中传输业务无关的http请求头和返回头信息,但开发交互过程中,得自己确保数据的完整性,比如用md5,得自己编写数据报文的协议,一般还需要用netty或其它组件的线程模型来处理高并发情况下的tcp请求,这些工作的难度就不是初级开发能做的。

所以,哪怕是微服务模块间交互用http协议,其实性能不慢,能应对大多数项目的需求,而且开发起来相当便利,所以很多小公司在做利润一般的项目时,优先考虑用基于http的组件。

当然如果对性能有更高要求的话,其实要在协议层做改进,比如用tcp,这已经是很后面的事情了,一定是在穷尽扩容,引入redis和kafka等组件的措施之后再用tcp等协议,但这对程序员的要求就比较高了。

如果有人面试时说,自己用http或rpc,其实问题都不大,但大多数人一般仅限于是使用api,比如dubbo或openfeign或resttemplate的api。再要进一步,可以说,用到http或rpc,但通过性能测试,发现要在项目里再引入redis等组件来确保业务所需的并发量。

再高级一些的话,可以是结合dubbo或netty底层,说rpc的细节,这还不算,更可以结合自身项目的调优场景说rpc的细节,比如实现tcp通讯的流程或者解决过的问题。

责任编辑:武晓燕 来源: 老胡聊Java
相关推荐

2020-09-24 09:43:59

Http协议options请求

2010-07-13 16:07:26

SQL Server行

2023-11-23 23:52:06

options请求浏览器

2013-07-29 14:50:43

API

2013-09-12 10:41:39

VDI部署

2015-06-01 06:39:18

JavaJava比C++

2020-11-18 09:26:52

@property装饰器代码

2022-08-29 10:35:42

微服务架构单体应用

2023-03-29 15:01:43

微服务开发

2022-09-27 15:06:07

微服务架构开发

2015-07-08 15:55:01

NSStringcopystrong

2015-06-29 14:23:13

JavaC++慢很多

2013-09-23 10:05:50

2023-05-18 08:38:13

Java锁机制

2014-11-03 09:52:25

DNSUDPTCP

2024-01-09 11:39:47

数字化转型数字优先企业

2009-03-05 10:55:00

企业无线Wi-Fi

2021-06-04 09:17:13

JavaScriptBoolean函数

2021-09-14 07:26:25

雪花算法ID

2012-04-25 09:24:40

Android
点赞
收藏

51CTO技术栈公众号