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

news/2024/5/19 16:50:41/文章来源:https://blog.csdn.net/weixin_30398227/article/details/98672979
大型网站架构系列:负载均衡详解(3)
原文:大型网站架构系列:负载均衡详解(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。

posted on 2019-04-03 13:31 NET未来之路 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/lonelyxmas/p/10648260.html

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

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

相关文章

基于Dockfile构建JAVA环境网站镜像

查看本地目录 [rootdocker tomcat]# ls apache-tomcat-8.5.16.tar.gz Dockerfile jdk-8u91-linux-x64.tar.gz server.xml [rootdocker tomcat]# vim Dockerfile FROM centos:7 MAINTAINER zhaochengcheng ADD jdk-8u91-linux-x64.tar.gz /usr/local ENV JAVA_HOME /usr/loca…

linux卸载服务器软件,linux卸载软件命令是什么_网站服务器运行维护,linux

win10系统提示需要提供管理员权限才能更改这些属性怎么办_网站服务器运行维护win10系统提示需要提供管理员权限才能更改这些属性的解决方法是:1、首先打开系统设置,进入【账户】选项;2、然后切换到【家庭和其他用户】,点击【更改账…

[目录] ASP.Net Core 搭建微服务网站

本项目采用ASP.Net Core微服务技术,搭建博客和Saas平台。 全文将围绕(1)设计模式 (2)敏捷开发 目的: 结构足够合理,代码足够优美,扩展性、可读性、易维护性做到最优。 以下目录…

网站建设流程-面向公司

1. 网站简明开发流程 简明开发流程是指假设网站开发的每个步骤都可以一次设计开发成功时的网站开发流程。   流程图如下: 2. 网站操作开发流程 网站操作开发流程是指假设网站开发的每个大的步骤都有可能产生未知问题时的网站开发流程。整个开发过程一般会有…

《大型网站技术架构》读书笔记二:大型网站架构模式

此篇已收录至《大型网站技术架构》读书笔记系列目录贴,点击访问该目录可获取更多内容。 一、分层 最常见的架构模式,将系统在横向维度上切分成几个部分,每个部分单一职责。网站一般分为三个层次:应用层、服务层和数据层&#xff0…

桌面风格的Web网站

天天记账网:http://www.365jizhang.com 超级牛牛无敌在线盯盘专家:http://www.googlook.net/stock/Stock.html

垂直网站的法宝——行业评测

垂直网站的法宝——行业评测 互联网垂直类网站在某个行业做久了对所从事的行业会很熟悉,继而从原来的纯粹提供资讯转变为更深入的行业信息,行业评测就是一个非常好的深入为网民服务的工具。 以下给大家举几个例子,给大家说说: 1、…

美国百年老报关门将转型新闻网站

两个月来,《西雅图邮讯报》员工最担心的事还是发生了。周一,美国出版巨头赫斯特集团宣布,该报将在17日发行最后一期报纸;然后转型为新闻网站。"今晚我们将最后一次出版报纸,"《西雅图邮讯报》总编兼发行人罗…

php 网站 seo,PHP网站怎么做SEO优化?

现在seo基本上已经是在广泛的应用了,php程序的企业网站也越来越多,其实我之前一直喜欢用asp的,但是发现很多国外的空间现在不支持asp,所以也就研究了一下php,网站建好,当然也想要有一个好的网站排名&#x…

推荐:学习人工智能(AI)的一些网站及教程资源

Python 深度学习库 Keras 发布官方中文文档https://keras.io/zh/这里有你需要了解的一切 今年1月,Keras作者、谷歌AI研究员Franois Chollet在推特上发出召唤:讲中文的Keras用户们,是否有人愿意帮忙一起搞个Keras文档的中文版? 一个…

2020十大最受欢迎的编程挑战网站【2020最新更新】

解决编码难题是提高学习编码技能的一种好方法。解决不同类型的挑战和难题可以帮助您成为更好的问题解决者,学习编程语言的复杂性,准备工作面试,学习新算法等等。 以下是一些受欢迎的编码挑战网站的列表,并简要说明了每个网站所提…

一个超火的网站“Omegle”

一个超火的网站“Omegle” 在美国有一个小网站突然暴红。这个网站叫「Omegle」(http://omegle.com/),页面非常简单,实际就两个页面。它的首页就有一个很大的按钮,上面写着“开始聊天”按下去以后,它立刻将你和目前在线上的某位陌生…

PyThon模块与项目热度网站

网站链接:点击这里

NVIDIA深度学习文档教程网站

网址链接:https://docs.nvidia.com/tlt/tlt-user-guide/text/overview.html

推荐一个深度学习数据集网站

推荐理由,国外被墙导致速度下载非常慢,使用迅雷PC端下载的方式可提升很高的速度:https://hyper.ai/datasets

HEXO搭建博客网站教程全集汇总

完整教程链接地址:https://github.com/KangChou/KangChou.github.io hexo官网 我的博客官网 我的博客主题参考 我最初开始搭建博客的详细教程

(转)大型网站架构演变和知识体系

出处:http://hi.baidu.com/qq_java_liu/blog/item/182d3b1f0a916a0c314e15cf.html 之前也有一些介绍大型网站架构演变的文章,例如LiveJournal的、ebay的,都是非常值得参考的,不过感觉他们讲的更多的是每次演变的结果,…

网站验证码,乱涂乱画版

取Session("ValidateCode")即可获得图像验证码并进行对比1ImportsSystem.Drawing2PartialClass WebService_VimageClass WebService_Vimage 3 Inherits System.Web.UI.Page 4 Dim letterMatrix() As String {"A", "C", "D", &q…

BlogEngine.Net架构与源代码分析系列part14:实现分析(下)——网站页面上值得参考的部分...

BlogEngine.Net的成功不仅在于它的架构设计,它的代码实现细节也都是很经典的,每个结构分割的很清晰很自然,希望大家多多品位一下。在这篇文章里我将给大家介绍一下BlogEngine.Net的Web实现上的几个亮点,包括Web.config&#xff0c…

非常好用的在线画树网站(树结构的自动生成工具,免去手动画树的烦恼)

最近编译原理学到语法分析树,需要频繁、大量地画树结构,一开始我使用了画图、PPT等工具,或是在纸上画好然后拍下来,但很是麻烦。 经同学推荐,找到了这样一个树的自动生成工具:Syntax Tree Generator。它的…