高并发与负载均衡

网络TCP-IP基础

OSI 七层参考模型:
7)应用层(nginx软件):http、smtp、ssh
6)表示层
5)会话层
4)传输层控制(lvs 内核):三次握手 >>  (传输数据) >> 四次分手
协议:tcp(面向连接、可靠)、udp,连接唯一性通过ip+端口号,保证每个连接互不干扰
Linux端口号查询:netstat -natp
3)网络层:找到下一跳
协议:ip,icmp
LInux路由查看:route -n
2)链路层:ARP,全F,两点通信,交换机学习
协议:以太网,Ethernet,MAC
Linux物理地址查看:arp -a
1)物理层

总结:
1)整个互联网建立在下一跳的模式下
—— IP是逻辑上的两个端点(客户端,服务端)
—— MAC是物理上连接的两个节点
2)端点间TCP传输过程中:确认机制,状态机制,不可分割
3)解析数据包需要成本
——交换机:两层,只关心MAC地址
——路由器:三层,只关心IP和路由表
——LVS服务器:四层,只关心PORT,状态
——nginx:七层,关心socket对应关系

 

负载均衡LVS(Linux Virtual Server)

Linux虚拟服务器,是一个虚拟的服务器集群系统。
ipvs:嵌入到linux的内核
ipvsadm:管理应用程序
类型:NAT地址转换;DR直接路由;TUN隧道

调度方法
四种静态方法:
rr轮询;wrr;dh;sh
动态调度方法:
lc最少连接;wlc:加权最少连接;sed最短期望延迟 等等

缺点:
LVS服务器挂掉就不能访问了,单点故障问题;
Real Server挂掉会造成一部分人可以访问一部分不可以访问

Keepalived

为LVS做服务的,用户空间的程序;是集群管理中保证集群高可用的服务软件。
1)需要心跳机制探测后端RS是否提供服务:探测down,需要从lvs中删除该RS;探测发送从down到up,需要从lvs中再次添加RS
2)LVS DR,需要主备(HA)
Keepalived原理:VRRP协议(虚拟路由冗余协议);IP漂移

Nginx

Nginx(engine x)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。第一个公开版本发布于2004.10.4。Nginx因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。官方测试nginx能够支撑5万并发链接,并且cpu、内存等资源消耗却非常低,运行非常稳定。

Nginx和apache(httpd)的比较
1)nginx相对于apache的优点:轻量级,同样起web服务,比apache占用更少的内存及资源。抗并发,nginx处理请求是异步非阻塞的,而apache则是阻塞型的,在高并发下nginx能保持低资源低消耗高性能。高度模块化的设计,编写模块相对简单。社区活跃,各种高性能模块出品迅速。
2)apache相对与nginx的优点:rewrite比nginx的rewrite强大。模块超多,少bug,nginx的bug相对较多。
3)Nginx配置简洁,Apache复杂
4)最核心区别在于apche是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接(万级别)可以对应一个进程。

Session一致性问题
session的常见实现形式是会话cookie(session cookie),即未设置过期时间的cookie,这个cookie的默认生命周期为浏览器会话期间,主要关闭浏览器窗口,cookie就消失了。实现机制是当用户发起一个请求的时候,服务器会检查该请求中是否包含sessionid,如果未包含,则系统会创造一个名为JSESSIONID的输出cookie返回给浏览器(只放入内存,并不存在硬盘中),并将其以HashTable的形式写道服务器的内存里面;当已经包含sessionid时,服务端会检查找到与该session相匹配的信息,如果存在则直接使用该sessionid,若不存在则重新生成新的session。需要注意session始终是由服务端创建的,并非浏览器自己生成。但是浏览器的cookie被禁止后session就需要用get方法的URL重写的机制或者使用POST方法提交隐藏表单的形式实现。

Session为什么要共享
首先我们应该明白,为什么要实现共享,如果你的网站是存放在一个机器上,那么是不存在这个问题的,因为会话数据就在这台机器,但是如果使用了负载均衡把请求分发到不同的机器呢?这个时候会话id在客户端是没有问题的,但是如果用户的两次请求到了两台不同的机器,而它的session数据可能存在其中一台机器,这个适合就会出现取不到session数据的情况,于是session的共享就成了一个问题。

Session一致性解决方案
1)session复制:tomcat本身带有复制session的功能
2)共享session:需要专门管理session的软件;memcached缓存服务,可以和tomcat整合,帮助tomcat共享管理session

注意Session共享必须所有服务器时间保持一致性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值