一、软件负载均衡概述硬件负载均衡性能优越 , 功能全面 , 但是价格昂贵 , 一般适合初期或者土豪级公司长期使用 。因此软件负载均衡在互联网领域大量使用 。常用的软件负载均衡软件有Nginx , Lvs , HaProxy等 。本文参考大量文档 , 部分为直接拷贝 , 参考出处见负载均衡详解(4) 。
二、Ngnix负载均衡Ngnix是一款轻量级的Web服务器/反向代理服务器 , 工作在七层Http协议的负载均衡系统 。具有高性能、高并发、低内存使用等特点 。是一个轻量级的Http和反向代理服务器 。Nginx使用epoll and kqueue作为开发模型 。能够支持高达 50,000 个并发连接数的响应 。
操作系统:Liunx , windows(linux、FreeBSD、Solaris、mac OS X、AIX以及Microsoft Windows)
开发语言:C
并发性能:官方支持每秒5万并发 , 实际国内一般到每秒2万并发 , 有优化到每秒10万并发的 。具体性能看应用场景 。
2.1.特点1.模块化设计:良好的扩展性 , 可以通过模块方式进行功能扩展 。
2.高可靠性:主控进程和worker是同步实现的 , 一个worker出现问题 , 会立刻启动另一个worker 。
3.内存消耗低:一万个长连接(keep-alive),仅消耗2.5MB内存 。
4.支持热部署:不用停止服务器 , 实现更新配置文件 , 更换日志文件、更新服务器程序版本 。
5.并发能力强:官方数据每秒支持5万并发;
6.功能丰富:优秀的反向代理功能和灵活的负载均衡策略
2.2.功能2.2.1基本功能
- 支持静态资源的web服务器 。
- http,smtp,pop3协议的反向代理服务器、缓存、负载均衡;
- 支持FASTCGI(fpm)
- 支持模块化 , 过滤器(让文本可以实现压缩 , 节约带宽),ssl及图像大小调整 。
- 内置的健康检查功能
- 基于名称和ip的虚拟主机
- 定制访问日志
- 支持平滑升级
- 支持KEEPALIVE
- 支持url rewrite
- 支持路径别名
- 支持基于IP和用户名的访问控制 。
- 支持传输速率限制 , 支持并发数限制 。
2.2.3性能
Nginx的高并发 , 官方测试支持5万并发连接 。实际生产环境能到2-3万并发连接数 。10000个非活跃的HTTP keep-alive 连接仅占用约2.5MB内存 。三万并发连接下 , 10个Nginx进程 , 消耗内存150M 。淘宝tengine团队测试结果是“24G内存机器上 , 处理并发请求可达200万” 。
2.3架构2.3.1Nginx的基本工作模式
文章插图
一个master进程 , 生成一个或者多个worker进程 。但是这里master是使用root身份启动的 , 因为nginx要工作在80端口 。而只有管理员才有权限启动小于低于1023的端口 。master主要是负责的作用只是启动worker , 加载配置文件 , 负责系统的平滑升级 。其它的工作是交给worker 。那么当worker被启动之后 , 也只是负责一些web最简单的工作 , 而其他的工作都是有worker中调用的模块来实现的 。
模块之间是以流水线的方式实现功能的 。流水线 , 指的是一个用户请求 , 由多个模块组合各自的功能依次实现完成的 。比如:第一个模块只负责分析请求首部 , 第二个模块只负责查找数据 , 第三个模块只负责压缩数据 , 依次完成各自工作 。来实现整个工作的完成 。
他们是如何实现热部署的呢?其实是这样的 , 我们前面说master不负责具体的工作 , 而是调用worker工作 , 他只是负责读取配置文件 , 因此当一个模块修改或者配置文件发生变化 , 是由master进行读取 , 因此此时不会影响到worker工作 。在master进行读取配置文件之后 , 不会立即的把修改的配置文件告知worker 。而是让被修改的worker继续使用老的配置文件工作 , 当worker工作完毕之后 , 直接当掉这个子进程 , 更换新的子进程 , 使用新的规则 。
2.3.2Nginx支持的sendfile机制
Sendfile机制 , 用户将请求发给内核 , 内核根据用户的请求调用相应用户进程 , 进程在处理时需要资源 。此时再把请求发给内核(进程没有直接IO的能力) , 由内核加载数据 。内核查找到数据之后 , 会把数据复制给用户进程 , 由用户进程对数据进行封装 , 之后交给内核 , 内核在进行tcp/ip首部的封装 , 最后再发给客户端 。这个功能用户进程只是发生了一个封装报文的过程 , 却要绕一大圈 。因此nginx引入了sendfile机制 , 使得内核在接受到数据之后 , 不再依靠用户进程给予封装 , 而是自己查找自己封装 , 减少了一个很长一段时间的浪费 , 这是一个提升性能的核心点 。
推荐阅读
- 百度信誉认证对网站优化有什么好处
- 家电批发网的5个网站你们知道吗 买家电的网站
- 根据的用户需求来制作营销型网站
- 日常的网站内容更新应该如何做
- 网站被劫持到其他网站如何解决
- 一文搞懂MySQL的Join,聊一聊秒杀架构设计
- 网站被搜索引擎降权的原因
- 搜索引擎为什么不收录网站内页
- JD架构师分享:微服务架构到底是什么东西
- 现在程序员最火的微服务架构与SpringCloud,你真的弄清楚了吗?