大型网站架构系列:负载均衡详解(3)

news/2024/5/20 3:09:23/文章来源:https://blog.csdn.net/weixin_34200628/article/details/90281678
原文:大型网站架构系列:负载均衡详解(3)

  1. 软件负载均衡概述
  2. Ngnix负载均衡
  3. Lvs负载均衡
  4. Haproxy负载均衡
  5. 本次分享总结

一、软件负载均衡概述

硬件负载均衡性能优越,功能全面,但是价格昂贵,一般适合初期或者土豪级公司长期使用。因此软件负载均衡在互联网领域大量使用。常用的软件负载均衡软件有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.2扩展功能

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机制,使得内核在接受到数据之 后,不再依靠用户进程给予封装,而是自己查找自己封装,减少了一个很长一段时间的浪费,这是一个提升性能的核心点。

 

以上内容摘自网友发布的文章,简单一句话是资源的处理,直接通过内核层进行数据传递,避免了数据传递到应用层,应用层再传递到内核层的开销。

目前高并发的处理,一般都采用sendfile模式。通过直接操作内核层数据,减少应用与内核层数据传递。

2.3.3Nginx通信模型(I/O复用机制)

开发模型:epoll和kqueue。

支持的事件机制:kqueue、epoll、rt signals、/dev/poll 、event ports、select以及poll。

支持的kqueue特性包括EV_CLEAR、EV_DISABLE、NOTE_LOWAT、EV_EOF,可用数据的数量,错误代码.

支持sendfile、sendfile64和sendfilev;文件AIO;DIRECTIO;支持Accept-filters和TCP_DEFER_ACCEP.

以上概念较多,大家自行百度或谷歌,知识领域是网络通信(BIO,NIO,AIO)和多线程方面的知识。

2.4均衡策略

nginx的负载均衡策略可以划分为两大类:内置策略和扩展策略。内置策略包含加权轮询和ip hash,在默认情况下这两种策略会编译进nginx内核,只需在nginx配置中指明参数即可。扩展策略有很多,如fair、通用hash、 consistent hash等,默认不编译进nginx内核。由于在nginx版本升级中负载均衡的代码没有本质性的变化,因此下面将以nginx1.0.15稳定版为例, 从源码角度分析各个策略。

2.4.1. 加权轮询(weighted round robin)

轮询的原理很简单,首先我们介绍一下轮询的基本流程。如下是处理一次请求的流程图:

 

图中有两点需要注意,第一,如果可以把加权轮询算法分为先深搜索和先广搜索,那么nginx采用的是先深搜索算法,即将首先将请求都分给高权重的机 器,直到该机器的权值降到了比其他机器低,才开始将请求分给下一个高权重的机器;第二,当所有后端机器都down掉时,nginx会立即将所有机器的标志 位清成初始状态,以避免造成所有的机器都处在timeout的状态,从而导致整个前端被夯住。

2.4.2. ip hash

ip hash是nginx内置的另一个负载均衡的策略,流程和轮询很类似,只是其中的算法和具体的策略有些变化,如下图所示:

 

2.4.3. fair

fair策略是扩展策略,默认不被编译进nginx内核。其原理是根据后端服务器的响应时间判断负载情况,从中选出负载最轻的机器进行分流。这种策略具有很强的自适应性,但是实际的网络环境往往不是那么简单,因此要慎用。

2.4.4 通用hash、一致性hash

这两种也是扩展策略,在具体的实现上有些差别,通用hash比较简单,可以以nginx内置的变量为key进行hash,一致性hash采用了nginx内置的一致性hash环,可以支持memcache。

2.5场景

Ngnix一般作为入口负载均衡或内部负载均衡,结合反向代理服务器使用。以下架构示例,仅供参考,具体使用根据场景而定。

2.5.1入口负载均衡架构

 

Ngnix服务器在用户访问的最前端。根据用户请求再转发到具体的应用服务器或二级负载均衡服务器(LVS)

2.5.2内部负载均衡架构

 

LVS作为入口负载均衡,将请求转发到二级Ngnix服务器,Ngnix再根据请求转发到具体的应用服务器。

2.5.3Ngnix高可用

 

分布式系统中,应用只部署一台服务器会存在单点故障,负载均衡同样有类似的问题。一般可采用主备或负载均衡设备集群的方式节约单点故障或高并发请求分流。

Ngnix高可用,至少包含两个Ngnix服务器,一台主服务器,一台备服务器,之间使用Keepalived做健康监控和故障检测。开放VIP端口,通过防火墙进行外部映射。

DNS解析公网的IP实际为VIP。

分享是快乐的,也是个人成长的过程。文章一般是自己的学习总结,工作经验,不足之处在所难免,请大家指正,共同进步。建立了一个以架构为中心的KK群466097527 ,欢迎大家加入。专注大型分布式网站架构,大数据,架构模式,设计模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_759960.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站安装打包 修改app.config[六]

在winform的安装工具中,少不免有一些配置文件要放到app.config去,于是修改也是成了一种需求! 无论是修改web.config还是app.config,普遍方式都有两种,用net自带封装的类,或是自定义xml操作。 可参考之前的一…

大型网站系统架构演化之路

一个成熟的大型网站(如淘宝、天猫、腾讯等)的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架…

推荐 | 非常不错的编程学习网站

阅读文本大概需要 3.5 分钟。这周末真的精彩,前有科技圈闹得沸腾的差评,各种吃瓜群众。后有 NBA 历史绝无仅有,东西双抢 7 大战。骑士勒布朗詹姆斯,逆天改命,全场 46 分。勇士克雷-汤普森,佛祖保佑&#xf…

分享一个爬取网站的小技巧

阅读文本大概需要 2 分钟。有时候,我们很想爬取一个网站的数据。如果 PC 端的网页的反爬机制太强,我们可以换个思路。现在很多网站为了满足手机浏览器能正常访问的需求,都会推出手机版的网页。PC 端抓取数据有难度,我们可以从手机…

js通过iframe访问跨域网站,获取不到内部标签?

1.页面iframe访问跨域网站baidu html <iframe id"iframe" src"http://www.baidu.com" frameborder"0"></iframe>javascript let iframe document.getElementById(iframe)2.打印访问内容 1.查看是否可以访问document console.log…

爬虫给力技巧:robots.txt 快速抓取网站

阅读文本大概需要 5 分钟。在我抓取网站遇到瓶颈&#xff0c;想剑走偏锋去解决时&#xff0c;常常会先去看下该网站的robots.txt文件&#xff0c;有时会给你打开另一扇抓取之门。写爬虫有很多苦恼的事情&#xff0c;比如&#xff1a;1.访问频次太高被限制&#xff1b;2.如何大量…

我顺藤摸瓜端了色情网站的老窝,并劝他从良

感谢凌云给我的启发大家好&#xff0c;我是九歌前几天无意发现了一个色情网站&#xff0c;本着除暴安良的心态&#xff0c;直接开始对这个网站开始了调查这个网站的域名是.cn结尾的 【.cn是国内域名,无法隐藏注册人的信息】我去站长之家里面对这个网站进行Whois查询按照惯例这种…

hexo搭建个人博客_GitHubPage和Hexo搭建个人博客网站

title: GithubPage和Hexo搭建个人博客网站 date: 2020-02-09 12:24:45 tags: - github - Hexo categories: GithubPage前言github支持githubPage静态界面来搭建我们的个人博客&#xff0c;自己配置。创建github仓库创建http://username.github.io仓库&#xff0c;同时setting中…

vs打开sln加载失败_你的网站打开速度慢,罪魁祸首居然是它?

相信许多人都不知道&#xff0c;在营销型网站建设当中&#xff0c;著名的黄金8秒原则&#xff0c;意思就是用户点击网站后&#xff0c;大部分都只会愿意等待大约8秒的时间。如果网站不能在这个时间内打开&#xff0c;那么用户就会离开&#xff0c;故而这个时间就成为黄金8秒。而…

CentOS7基础建站指南(笔记)

由于前段时间腾讯云打折&#xff0c;所以买了一台小服务器&#xff0c;想着以后写几个小网站&#xff0c;博客什么的&#xff0c;但是一开始就遇到了难题&#xff0c;大概就是Linux服务器的配置问题&#xff0c;比如如何假设服务器&#xff0c;配置非root用户&#xff0c;配置服…

CentOS8 配置apache 搭建静态网站 踩坑向

apache服务器安装与配置apache简介apache安装挂载光盘设备系统镜像创建yum仓库配置文件安装apache服务下载使用阿里云CentOS-8.repo软件仓库修改 CentOS-Base.repo文件安装成功启动httpd同时设置为开机自启效果图踩坑经验配置服务文件参数虚拟主机功能基于IP地址部署多个网站创…

通过阿里镜像网站制作iso文件安装CentOS6.9

基于网络安装 创建kickstart文件的方式&#xff1a;   1.复制模板/root/anaconda-ks.cfg&#xff0c;而后使用vim编辑配置   2.使用system-config-kickstart来生成&#xff0c;建议使用/root/anaconda-ks.cfg 模板生成 ksvalidator&#xff1a;检查kiskstart文件的配置是否…

256模板官网站点SEO优化分析记录

一直在做SEO网站优化工作&#xff0c;网站搭建好后也没没有做过官网优化的记录&#xff0c;今天有空余时间查询一下记录网站现在的状况。通过站长工具进行分析&#xff0c;织梦模板的关键字一致很稳定&#xff0c;也没有上升的趋势&#xff0c;看来是要进行分析做一下该站点的排…

Linux下Web服务器应用之网站安全-https

Linux下Web服务器应用之网站安全(https)解决方案 HTTPS&#xff08;全称&#xff1a;Hypertext Transfer Protocol over Secure Socket Layer&#xff09;&#xff0c;是以安全为目标的HTTP通道&#xff0c;简单讲是HTTP的安全版。即HTTP下加入SSL层&#xff0c;HTTPS的安全基础…

php mysql首页下载_MySQL(PHP网站后台数据库)

MySQL是一款非常受欢迎的开源SQL数据库管理系统&#xff0c;它由MySQL AB开发、发布和支持&#xff0c;MySQL 的执行性能非常高&#xff0c;运行速度非常快&#xff0c;并非常容易使用。是一个非常捧的数据库&#xff0c;PHP 和MYSQL完美组合。非常好用。安装方法下面的是MySQL…

织梦网站php源码安装,织梦整站源码安装教程

织梦CMS整站源码通用安装教程&#xff1a;第一步&#xff1a;域名和主机的准备&#xff1b;织梦cms程序是php语言编写&#xff0c;在程序安装之前我们购买的主机(服务器)需要支持php语言&#xff01;主机购买好之后域名解析主机的IP地址&#xff0c;主机绑定域名&#xff0c;等…

实战检测北大青鸟某地方学校网站

本文写的是一次曲折的拿北大青鸟某地方学校网站shell的过程。 之前也曾拿过一个北大青鸟某网站的文章&#xff0c;我再次萌生了我个北大青鸟的网站练练手的想法。其实以前我也尝试过检测了几个北大青鸟地方学校的网站&#xff0c;简单看了下没有注入漏洞没有弱口令就放弃了。看…

如何用php制作博客网页,博客网页制作的网站

博客网页制作的网站1.制作一个自己的印章.2.EOOOL是QQ头像、MSN头像、论坛头像、论坛签名、博客广告、通讯工具(邮件、MSN、QQ、书签)等的标签快速生成工具&#xff0c;一个方便、实用的图片制作网站&#xff01;不需要学会任何制图软件&#xff0c;就可以做出漂亮的&#xff0…

ASP.NET MVC 实现页落网资源分享网站+充值管理+后台管理(9)之系统登录

前面我们已经做好了一个文章管理功能模块&#xff0c;接下来&#xff0c;我们回头来做登录窗口&#xff0c;登录不仅涉及到登录验证还涉及到登录日志还有缓存时长等。 对于缓存的相关设置&#xff0c;我们已经写好封装在Bobo.Utilities.dll程序集中&#xff0c;我们只需要引用就…

给新生的软件网站工具推荐

给新生的软件网站工具推荐目录前言Windows基本使用学习打字练习网站KeybrWindows10基本操作所用Windows版本&#xff1a; Windows10教育版 1909一、键盘键位基本按键及快捷键键盘按键快捷键基本快捷键常用快捷键二、常用功能截图&#xff08;必会&#xff09;1. PrtSc键&#x…