高并发怎么来的?
1.访问日志渠道的流量的质量
2.渠道转化率,购买力
请求太多了,一台tomcat扛不住;
-
tomca为什么慢?
因为tomcat是应用层,是跑在jvm上的,每次网络io都要打到内核上,到了寄存器还得切换状态,还得到jvm虚拟的内存
-
怎么能变快?
客户端和服务端之间有一个数据包转发级别的(4层负载),不进行握手的负载均衡服务器;
后端服务器要求是镜像级别的;
企业最常见解决方案
:最前端LVS(4层)扛住流量,再用Nginx(7层)扛住握手,nginx分流到tomcat做计算;
什么是网络
7层 分层协议osi7层参考模型
分层解耦(软件工程学)
- 应用层
和人交互,独立在后台运行提供服务的软件 - 表示层
协议、语义、断路划分、字符串表示、加密 - 会话层
传输、控制、session会话保持 - 传输控制(tcp、udp)
建立连接 - 网络层
如何路由、如何通信、数据包怎么发 - 链路层(以太网)
点点之间数据包怎么发,什么协议,怎么写能发到你那里去 - 物理层
wifi、4g、光纤
4层
tcp/ip精简完
每一层都有协议,每一次都有表格
-
应用层(会话、表示)
作用:转化字符串
协议:http、ssh、smtp
http协议内核分为 用户态、内核态
tomcat发起请求,由jvm提交给内核到达传输控制层,在响应回来,中间有阻塞 -
传输控制(tcp、udp)
已经在内核了,建立socket接口具体是内核实现的
作用:创建握手包
和具体的应用无关,
协议:tcp(面向链接、可靠)、udp相反
面向链接:发一个确认一个
三次握手(建立链接,开辟线程资源),四次挥手
一次请求的最小粒度:三次握手>传输数据>四次挥手
每一条信息就是一个socket:tcp协议,内网口,外网口随机端口,进程状态(监听、运行),进程id号/应用程序 -
网络层ip地址
原理:下一跳机制,路由网络判定
如何路由、如何通信、数据包怎么发
目标地址和掩码进行与运算,网段匹配上就直连路由表的地址,匹配不上就匹配到0.0.0.0扔给网关下一跳 -
链路层mac地址(以太网)和珍珠一样一颗一颗挨着形成一个链
有了下一跳地址
arp协议:ip和网卡硬件地址映射(受限同一局域网),dns是全网
点点之间数据包怎么发,什么协议,怎么写能发到你那里去
- 物理层
下一跳机制
交换机:衔接同一网络的;
路由器:衔接不同网络的;有路由表可以做转发和判定;
计算机1想要请求计算机4,中间会经过交换机和路由器,因为195.168.3.x不在路由表,所以走0.0.0.0拿到网关ip,由网关跳出去
因为要跳出去,链路层会在网络层的包之上在封装一个包,其中包含:网关的ip和mac未知ffffff和计算机1的源ip和mac,把这个包广播给网络下所有设备,只有网关才能成功接收这个包。
因为计算机2的ip不是192.168.1.1,所以把蓝色包丢弃了,路由器的ip是195.168.1.1正好是目标地址接收响应网络包;
拆开包发现是arp协议,就需要把路由器mac地址发给计算机1,这个数据包的目标mac地址就不是ffff了而是计算机1的mac地址,
交换机有学习能力,可以记录port和mac,所以就知道1号口是192.168.1.4这台机子并且mac地址是1.4@mac,这是路由器响应回来的arp数据包可以匹配到交换机1号口,直接做了定点转发到计算机1,就不用广播了,
然后重新发起下一跳的数据包,目标地址是下一跳的目标192.168.3.4地址,因为刚才已经有过路由器信息了,所以直接定点转发就不广播了,
数据包发到路由器,路由器的路由表可以匹配到arp数据包的目标ip,
替换arp数据包的mac地址,但是ip层没有发生变化;
交换机根据目标ip地址找到计算机4,根据ip端口号找到是哪个进程,
虚拟网卡
创建一块虚拟网卡
用另外1台机子ping不通,因为路由表没有这个网段,下一跳出去也没有这个网段
在路由表中增加一个主机ip就可以匹配到
-host加主机就是4个255精确匹配
-net是加网络是3个255一个0,可以匹配到这个网络
NET网络模式(网络地址“转换/篡改”)
- 也叫S-NET源地址替换协议
一般用在路由器,路由器会开启NET;
路由器里边包含交换机;
-
计算机访问百度,发送数据包;
源地址:192.168.1.8:12121 > 目标地址:8.8.8.8:80
源地址:192.168.1.6:12121 > 目标地址:8.8.8.8:80
-
数据包下一跳,通过路由表跳到网关,数据包的源地址ip会被替换成路由器公网ip,数据包的端口号也需要替换;
-
路由器有一张(S-NAT)映射表,虚拟出来端口号映射到源地址的ip端口号,这样就解决了源地址和端口号冲突,避免修改后云端返回数据包(公网ip+端口)不知道应该回哪个私有ip;
-
请求由路由器发出后携带的源地址是路由器虚拟表中的源地址和目标地址
负载均衡技术(和路由器很像)
- CIP:客户端ip
- VIP:虚拟ip
- DIP:分发ip
- RIP:真实服务器ip
- 最终:CIP固定访问VIP,比如客户端永远访问baidu.com
CIP下一跳找到了VIP,然后由VIP负载决定给哪个RIP,但是数据包没有做处理RIP一看数据包的目标ip不是自己,于是会丢弃数据包;
解决方案1(基于3-4层):D-NET目标地址转换协议模式
-
使用场景:中小型规模项目
-
D-NET模式负载均衡服务器
- 瓶颈:
1. 带宽:(接收、响应数据包);
2. 消耗算力:来回都要处理(替换目标地址和源地址)
3. 下载量
4. server的网关要指向负载均衡服务器 - 通信:非对称的(上传、下载)
- 瓶颈:
在负载均衡服务器中,数据包通过VIP进来然后把数据包的目标地址替换成RIP并且把数据包分发出去,RIP就可以接收数据包;
最终server上是CIP和RIP建立了socket链接
;
- 数据包响应
server直接把数据包响应给client,数据包会被丢弃;
因为CIP是和VIP建立的链接并没有和RIP建立链接;
所以需要把数据包响应给负载均衡服务器,把RIP替换回VIP,这样client就可以接收了;
解决方案2(基于2层):DR直接路由模式
- 总结:
- 负载均衡服务器把数据包拼上server的mac地址就能把数据包发给server;
- server有VIP可以接收数据包;
- server有公网ip可以把数据包发给client
DR直接路由模式利用的是:MAC地址欺骗(给的是server的mac地址但实际是负载均衡服务器的ip地址)
环形通信
响应数据包不在经过负载均衡服务器
- 缺点
不能跨网络
只能是一跳的距离;负载均衡服务器和server要在同一局域网;
mac:节点到节点(下一跳);
ip:端到端;
如果跨网络:从负载均衡器到网关是一个mac地址,再从网关到server又是一个mac地址,换mac的时候看到ip地址是VIP因为server的VIP不对外暴露所以数据包无法到达server;
- 优点:
- 节省算力
- 数据包修改方式
网络消耗最低
速度极其快
- 服务器要求不高
- 不管服务端怎么变,客户端不会变,CIP永远访问VIP;
如果server能直接把数据包响应回client那速度就会更快,给server配置一个公网ip并且把数据包RIP替换成VIP;
- 如果想server端有VIP到CIP的映射关系,那么需要server有VIP这个ip地址,
没有VIP不会产生VIP到CIP这条记录
,有了VIP这个数据包就能封装成功,就可以成功发出去; - 但是每个server都会有VIP,这就ip冲突每个环境ip不可以冲突;
- 每个server都会有VIP,需要做手脚(隐藏VIP);
难点是:server配了VIP还不让别人知道;- 负载均衡服务器的VIP是
暴露出去
的;
配了ip就暴露出去了,在arp就能通告出去; - server的VIP是只有server自己知道,server的VIP对外是隐藏的,
不暴露出去
;
- 负载均衡服务器的VIP是
- 这样请求到了负载均衡服务器,不用走NET模式不用替换,不用修改数据包不拆包直接转发给server,这样速度变得更快了,主要是因为server本身有VIP可以收下数据包,收下了就产生了VIP和CIP的关系最终就要产生VIP到CIP 的关系;
- 因为有了VIP和CIP的socket映射关系,就可以封一个VIP给CIP返回的数据包;
- 这样数据包是从负载均衡服务器来的,从server回去的,形成一个环形;
- 但是负载均衡服务器把数据包直接给server不能被接收,因为server没有对外暴露VIP,数据包就无法到达;
- 然后就可以引用链路层,server的MAC地址;
在数据包的基础之上在套一层arp协议;在arp数据包目标地址写上server的mac地址;- 收到了CIP到VIP的数据包;
- 把MAC地址拼到数据包上发给server
==优点:==没有动3层网络层复杂的修改ip,动的链路层数据包发出去的一刹那封装了个服务器的MAC地址;
- 数据包往server上一扔,server就收到了个套着mac 的数据包;
从RIP网卡进来后MAC是server的MAC,VIP我有,数据包收下,server中建立了CIP和VIP的socket关系,处理完数据包返回CIP;
解决方案3():TUN隧道模式
- 应用场景:
- VPN
- 香港买台云主机建立个server端,大陆自己笔记本上装client端,笔记本上每个请求都转到香港云上,然后在由香港云发送到国外网站,就可以解决物理位置限制的问题;
- 公司内网VPN,自己电脑连接VPN然后请求都打到公司的一台外网机上,然后在由外网机转发数据包到内网机上,解决是安全限制的问题;
- VPN
负载均衡服务器
到server
:数据包到达负载均衡服务器
就把数据包传递到server
,就需要DIP可以到RIP的一个数据包(相当与一个隧道),用这个数据包背着client
请求来的数据包;- RIP触发了互联网的下一跳,跳到RIP数据包被收下。server只需要把外边这层包撕掉,就可以看到CIP到VIP的映射关系,就可以建立CIP到VIP的socket链接,数据包处理完server给CIP返回数据包;