nginx高性能原因、负载均衡调度算法、select、poll、epoll的区别

Nginx为什么高性能?为什么选用 Nginx 作为反向代理服务器?

Nginx 主要提供反向代理、负载均衡、动静分离功能。

选用 Nginx 是因为它性能好:

  1. 基于epoll多路复用机制实现: 如果基于 select 实现(Apache服务器使用的是 select 模型),假设有一个服务器监听100个客户端连接是否有变化,如果变化了就唤醒自己,然后循环遍历这100个连接,找出发生变化的位置,执行 read 操作。这种模式的缺点是采用的是轮询的方式进行遍历,效率低,而且监听数量有上限,最多为1024个。而 epoll 模型,在监听的同时设置了回调函数,事件触发时,直接执行回调函数,而不需要去遍历这100个连接,并且没有了监听数量的限制,所以效率较高。

  2. 采用的 master-worker 进程模型: master 进程管理多个 worker 进程,负责分配事件,多个worker进程负责处理客户端连接。可以通过 reload 命令进行平滑的重启,重启时不会断开与客户端的连接。

  3. 使用协程机制实现了同步调用的开发: 协程是一种依附于线程的内存模型,比线程的切换开销小,因为它不像线程那样有CPU时间片的切换开销;不需要加锁,是一个串行执行的过程;nginx中,当协程遇到阻塞时,比如 socket 的 read 方法,它会通过 epoll 多路复用来切换协程,而不需要去关心 read 方法什么时候会返回,因为 read 完成时,epoll 会执行回调函数,epoll 将就绪的 fd(文件描述符)放在一个 readyList 中顺序的进行操作,实现了同步调用的开发。

Nginx 有哪几种负载均衡调度算法?

  1. 普通轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果某台服务器宕机,Nginx能自动剔除该服务器。
  2. 加权轮询:给不同的后端服务器设置了一个权重值,权重越大,分配到请求的几率就越大,权重值根据后端服务器的硬件情况来设置。(默认)
  3. ip_hash:每个请求按 ip 的 hash 结果进行分配,这样每个访客固定访问一个后端服务器,在一定程度上解决了集群部署环境下 Session 共享的问题。
  4. url_hash:按访问的 URL 的 hash 结果进行分配,使每个请求的 URL 定向到同一个后端服务器,在 Nginx 作为静态服务器的情况下可以提高缓存效率。
  5. fair:按后端服务器的响应时间来分配请求,响应时间短的服务器分配到请求的概率高。

IO多路复用(select、poll、epoll的区别)

fd_set 数组是存有 0 和 1 的位数组,fd 指文件描述符。常用的IO多路复用模型有三种:select、poll、epoll。

  • select:它维护了一个数组结构 fd_set,调用 select 函数时,会从用户空间拷贝 fd_set 到内核空间,并监听是否有事件触发,有就通过无差别轮询的方式遍历找到事件触发的位置,然后执行相关的读或写操作。轮询的时间复杂度为 O(n)。

    • 缺点:内核对被监控的 fd_set 集合做了大小限制,最大为 1024 ;每次调用 select,都需要把 fd_set 集合从用户态拷贝到内核态,都需要在内核遍历 传递进来的所有 fd_set ,效率很低。
  • poll:与 select 类似,区别是它采用的是 poll_fd 数据结构实现了一个可变长的数组,没有了最大文件描述符数量的限制。

  • epoll:epoll 与 select 的不同之处在于,epoll 监听事件是否触发时,还设置了回调函数,如果事件触发,就执行回调函数,并将准备就绪的 fd 放到 readyList 中,而不需要轮询遍历所有的 fd_set 。并且 epoll 没有最大文件描述符数量的限制。在高并发情况下 epoll 能支持更多的连接。

epoll 中有三个函数:

  • epoll_create;用于创建 保存epoll文件描述符的空间
  • epoll_ctl:用于添加和删除监视对象的文件描述符
  • epoll_wait:等待文件描述符发生变化

秒杀项目中的分布式部署

  • 将系统拆分到多台服务器上进行分布式部署:一台服务器做 Nginx 负载均衡,两台服务器部署应用程序,还有一台服务器作为数据库服务器。
  • 部署后通过 Jmeter 工具进行压测,设置的是 1000 个线程循环 20 次。分布式部署前:平均耗时500ms左右,TPS 在1500左右,Mysql 服务器的 CPU 占用率在 80% 左右。分布式部署后:平均耗时也是500ms左右,TPS 在1600左右,Mysql 服务器的 CPU 占用率在 10% 左右,明显降低了。提高了系统性能。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值