web相关

1、Nginx、haproxy、LVS三者的优缺点

nginx

  • 工作在网络7层上,可针对http应用做一些分流的策略(域名、目录结构),相比之下lvs并不具备这样的功能

  • Nginx对网络的稳定性依赖较小,安装配置简单,LVS对网络稳定性要求较高

  • 可以承担高负载压力且稳定,一般能支撑几万次并发量(受限于IO和配置),不过不如LVS(几十万)

  • 可以检测服务器内部的故障,如服务器处理网页返回的状态码、超时等,并会把返回错误的请求提交到另外一个节点。而LVS不支持重发请求。

  • web服务器、反向代理服务器;

  • 适应范围较小,仅能支持http、https、Email协议

LVS

  • 抗负载能力强,工作在网络4层,仅做分发之用,没有流量产生,对内存CPU消耗比较低

  • 配置性低

  • 工作稳定,因为本身抗负载能力强,自身有完整的双机热备方案如LVS(DR)+keepalived

  • 应用范围广,因为工作在4层,几乎可以对所有应用做负载均衡,包括http、数据库、在线聊天室

  • 不支持正则表达式处理,不能做静态分离

HAProxy

  • 可工作在4、7层(支持多网点)
  • 支持session的保持,cookie的引导;支持通过获取指定的URL来检测后端服务器的状态
  • 负载均衡,并发处理优于Nginx
  • 负载均衡策略多:轮询、最少连接、源地址哈希、目标地址哈希等
  • 不支持POP/SMTP协议
  • 不支持HTTP cache功能
  • 不支持热加载配置文件

2、Nginx

多进程结构,一个Master主进程和Worker工作进程
处理请求过程:(异步非堵塞型)

  • nginx启动是,master进程,加载配置文件
  • master进程,初始化监听的socket
  • master进程,fork出多个worker进程
  • worker进程,竞争新的链接,获取方通过三次握手,建立socket链接,并处理请求
    (nginx接收一个请求后,首先由listen和server_name指令匹配server模块,再匹配server模块里的location,location就是实际地址)

master进程

  • 监控worker进程的运行状态
  • 读取nginx配置文件并验证有效性和正确性
  • 建立、绑定和关闭socket连接
  • 不中断服务,实现平滑升级等
  • 开启日志文件,获取文件描述符

worker进程

  • 处理网络请求
  • I/O调用,获取响应数据
  • 缓存数据等

主要模块

  1. 核心模块core module,提供错误日志记录,配置文件解析、事件驱动机制、进程管理等核心功能
  2. 标准模块:HTTP(主要处理Flash多媒体传输、解析GeoIP请求、网络传输压缩、安全协议SSL支持)、Mail(邮件服务,POP3、IMAP、SMTP协议)、Stream(反向代理,包括TCP协议代理)
  3. 第三方模块:Json支持、Lua支持

事件驱动
epoll是nginx支持的最高性能的事件驱动库之一。创建一个待处理的事件列表,然后发给内核,返回时再去轮询检查这个表,以判断事件是否发生

负载均衡算法 upstream
轮询(自动剔除有问题服务器)、权重、iphash(固定IP访问服务器,适合有状态服务如session,down需要手动剔除)、最少连接、fair(根据响应时间)、urlhash

Nginx+keepalived

keepalived

keepalived的核心功能是健康检查、失败切换
健康检查是指通过tcp三次握手、http请求、ICMP请求、udp echo 请求等方式对负载均衡器后面实际的服务器进行保活。
失败切换主要是应用配置了主备模式的负载均衡器,利用VRRP维持主备负载均衡器的心跳,当主出现问题时,由备承载对应的业务,从而在最大限度上减少流量损失,并提供服务的稳定性。
VRRP协议主机间的通信都是基于静态路由配置或者默认网关,如果主机间的路由器故障,通信就会失效。VRRP是一种容错的主备模式协议,保证当主机的下一跳路由出现故障时,由另一台路由器代替工作,通过VRRP协议可以在网络发送故障时透明的进行切换而不影响主机间的通信。(三种状态:Initialize状态,Master状态,Backup状态)

只有作为主的服务器会一直发送VRRP广播包,告诉备它还活着,此时备不会抢占主,当主不可用时,即备监听不到主发送的广播包时,就会启动相关服务接管资源,保证业务的连续性.接管速度最快。主备之间用心跳线连接去探测心跳,专门拉一条线或者交换机。

LVS算法

I/O

I/O:从内核空间中的内存数据复制到用户空间中进程的内存当中。
一次完整的I/O是用户空间的进程数据与内核空间的内核数据的报文的完整交换,但是内核空间与用户空间是严格隔离的,数据交换过程中不能在用户空间的进程直接调用内核空间的内存数据。
而是需要把内核空间的内存数据copy到用户空间的进程内存中。

磁盘I/O是进程向内核发起系统调用,请求磁盘上的某个资源比如图片,内核通过相应的驱动将目标文件加载到内核的内存空间,加载完成之后吧数据从内核内存再复制给进程内存。
网络I/O 网络协议栈到用户空间进程的IO
网络I/O处理过程
客户端 --》TCP连接 --》内核空间 --》用户空间的web服务 --》内核空间 --》客户端

同步/异步:关注的是消息通信机制,即调用这再等待一件事情的处理结果时,被调用者是否提供完成状态的通知。
阻塞/非阻塞:关注调用者在等待结果返回之所处的状态。
mmap()系统调用使得进程之间用过映射同一个普通文件实现共享内存。
即普通文件从磁盘映射到进程地址空间,进程就可以向访问普通内存一样对文件进行访问。

浅拷贝只复制 指向某个对象的指针,而不复制对象本身,新旧对象共享同一块内存。
深拷贝

你可能感兴趣的:(web相关)