首先要阐述几个概念和问题:
系统层 | 用户层 | 进程层 |
---|---|---|
1,000,000 | 500,000 | 100,000 |
现在我们开始来讲解系统架构:
先上图:
一般公司前置是用LVS+Nginx来做前置架构。之所以采用LVS+nginx设计有几种考虑:
假如真实的业务逻辑处理,1个tomcat服务做核心逻辑处理TPS为1000(实际TPS需要做压测才能得到),那么1,000,000同时在线并发就需要超过1000台tomcat服务器(或者是node pod【K8s概念,因为现在云平台部署更加方便】,超过1000台是因为还要考虑到服务冗余),这里很多人会觉得1000台服务器很多,但是我们这里假设的场景我们这里是要支持1百万并发同时存在,也就是说需要支持的tps为1Million/s。
再来分析下nginx需要多少台,ngnix有2个配置属性配置很关键:worker的数量和work_connection,因为nginx是master-worker架构,master主要负责接收请求,转发请求到worker进程,实际上worker进程才是处理请求的实际进程。nginx官方说nginx能支撑6万多并发性能最好,那么这里我们设置nginx进程最大能打开60,000个fd,假如是4核的CPU(内存我们假设足够大32G,64G等等),我们设置worker数量为4,那么worker_connection数量为15,000。那么nginx对外能提供多少并发数呢?你以为是60,000?那么你答错了,因为nginx作为反向代理,一个用户的请求实际上占了2个fd,一个fd是用户请求,一个fd是连接后台服务的。所以一个nginx在我们这样配置参数下,可以支持30,000并发。那么百万并发前置需要多少nginx的集群,起码超过40台,有人可能会问,1百万/3万不是=33台吗,我最多给34台就够了呀,非也,我们还要考虑nginx集群容错性,所以我们肯定是需要超过33台nginx的。
那么我们lVS需要多少台机器呢?实际上二个lvs集群足够了,一个lvs集群=一主+一备+keepalived。之所以要二个集群,主要是怕一个集群挂了,对外用户访问就彻底断了。既然是二个集群,那么我们需要二个VIP。那用户到底访问哪个VIP呢?这个简单,我们不会主动给用户提供VIP地址,现在大多都是提供的域名,一个域名下面绑定多个VIP地址,这样用户访问的时候DNS就可以返回这二个集群的VIP地址,很多人就喜欢刨根问底,好像一个域名只能绑定一个IP呀,非也,你这样想是不是可以换个角度呢?我国有很多IPS服务商(什么是IPS,就是网络提供商,联通,电信,移动等),一个IPS服务商我们绑定一个IP,那么我们不就可以解析到三个IP:)实际上真实也差不多,大家这样理解就够了。知道一个域名是可以绑定多个IP的。那么话说回来,有人会觉得二个集群够用吗?实际上主要网络入口带宽足够,LVS服务器配置够好,完全没问题,现在服务器都是万兆网卡。LVS在这里面只做接收请求,就把用户的数据包转发给nginx,然后就干完活了,至于维持长链接的事情,和他没关系,它不需要响应用户的请求。这也是VIP的功能。在大型的互联网公司,一般都会做异地多活架构设计,如果有感兴趣的伙伴,下次我们也可以聊聊如何做异地多活,异地多活存在的问题点:)。
最后我们再来讨论下网关zuul,网关做的功能主要是有操作审计,权限认证控制,流量控制,多租户控制等等,它不做具体的业务逻辑。(现在网关有太多,比如istio用的sidecar就可以做,应用层,springcloud gateway等等,云平台和应用层都可以做网关)假如zuul压测并发吞吐量为1万,那么我们需要部署超过100台zuul服务器网关。
最后总结我们要支持百万并发(同时在线)的架构设计可以这样设计数据:
系统设置FD为1百万,用户层面50万,进程层面为10万
2个LVS集群(一主一备+keepalived)
40台nginx服务器
起码100台zuul网关服务器(一台zuul网关服务器tps为10,000)
起码1000台tomcat服务器(一台tomcat业务逻辑的tps为1,000)
很多人是不是被吓到了,或者说我们公司没有这么多服务器也能支持百万并发呀,非也,你们大部分场景不是1million/TPS,不是每一秒都承受了100万的并发请求的,这个大家要清晰> 的认识到哟。
要不然拿一个我们的业务场景来分析,我们GPS数据汇报量是一台设备10S发一次请求GPS信息,现在有1万台设备,所以我们需要一秒承接1万/TPS,然后中间9秒不处理任何GPS的数据?那么我们是不是可以这样设计,用kafka来接收所有的1万条数据/10秒发一次。假如我们一台服务器一秒可以处理1000条,那么我2台业务服务器一秒可以处理2000条数据,因为我们是10秒1万条GPS信息,那么我只要2台业务服务器处理5秒就可以处理完,还有5秒是可以空闲下来的。你说是吧:),所以多少台服务器是需要根据业务场景设计的,这也再次说明技术不能脱离业务。哈哈有什么问题可以在下面留言沟通~~~
All comments