讲讲亿级PV的负载均衡架构!

戳蓝字“CSDN云计算”关注我们哦!


来源:孤独烟


引言

本来没想写这个题材的,为了某某童鞋能够更好的茁壮成长,临时写一篇负载均衡的。负载均衡,大家可能听过什么3层负载均衡、4层负载均衡、7层负载均衡什么的?那这是怎么分的呢,ok,是根据osi七层网络模型来分的,例如nginx是工作在应用层,应用层刚好是在第7层,因此nginx又可以称为7层负载均衡。


我本来想一层层慢慢讲,从最基础的网络协议开始讲起,想了想又觉得这种讲法不适合速成。因此我改变思路,直接讲负载均衡架构的演进,最后的成品就可以在面试中侃一侃,因为现在负载均衡基本都是这套架构!。

正文

DNS

开始呢,我们的应用只有一台web-server。那么你希望:
输入guduyan.com就能定位该server!

那很简单,只要在DNS里配上域名和你的server映射关系,就能访问到啦!
流程如下图所示

640?wx_fmt=png

好,现在呢,多了一台web-server,你就可以通过在DNS里加一条配置,以DNS轮询方式进行负载均衡。如下图所示

640?wx_fmt=png

Nginx+DNS

现在假设,我们多了一些需求啊。你的系统按照功能模块拆成两个系统:用户系统和订单系统。那么你希望
输入guduyan.com/user/的时候定位到用户系统。输入guduyan.com/order/的时候定位到订单系统。

那这时候,光靠DNS就不行了,就需要采用DNS+nginx进行负载均衡!如下图所示

640?wx_fmt=png

ps:nginx还可以做动静分离哦,大家应该懂的!

那如果系统的访问压力进一步加大,万一nginx挂了怎么办?如何给nginx引入热备?
这里就要用keepalived了,用两台nginx组成一个集群,分别部署上keepalived,设置成相同的虚IP,这样一个节点在崩溃的情况下,另一个节点能够自动接替其工作,如下图所示

640?wx_fmt=png

Lvs+Nginx+DNS

接下来随着系统规模的继续增大,你会慢慢的发现nginx也扛不住了!nginx工作在网络的第7层,所以它可以针对http应用本身来做分流策略,比如针对域名、目录结构等。
而Lvs工作在网络4层,抗负载能力强,性能高,能达到F5的60%,对内存和CPU资源消耗比较低,且稳定,可靠性高。它利用linux的内核进行转发,不产生流量。它能撑的并发量取决于机器的内存大小,一般来说撑个几十万并发问题不大!现在基本上都是nginx+Lvs的负载均衡架构!
ps:好好思考为什么会出现nginx+Lvs被同时使用,注意看我演变的过程,面试必问!注意了,如果是比较小的网站(日pv<1000万),用nginx就完全可以了。

那么,在这种情况下的架构图如下所示

640?wx_fmt=png

可能有个疑问,为什么nginx层不用keepalived做热备?
主要原因是:
在这种架构下,nginx不是单台,如果nginx挂了,Lvs会帮你转发到其他可用的nginx上!

最后,为了应对亿级的PV,一般会在DNS端配多个Lvs集群的地址。如下所示

640?wx_fmt=png


方案扩展到了这一步,Lvs层就没有必要再进行扩展新的节点了。这套架构已经能扛得住亿级的PV。当然,前提是你的应用没问题!另外如果资金充裕,Lvs可以替换为F5也是可行的。

总结

OK,这套架构已经能扛得住千万的PV。一般面对面试官的提问,诸如如何设计高并发架构啊,本文都可以作为参考回答之一。


推荐阅读

  • “迁移策略+新容器运行时”应对有状态应用的冷热迁移挑战

  • 35 岁程序员,年后第一天被辞退

  • 极客头条

  • 年薪百万的好苗头!不俗套的情人节,爱之丘比特走心了

  • 成长路线图:如何成为一名Python开发者?

  • 春晚鬼畜 B 站日排行最高,赵本山:我的时代还没有结束!

  • PDF翻译神器,再也不担心读不懂英文Paper了

  • 新闻联播也可以拿来做数据分析?


1.微信群:

添加小编微信:color_ld,备注“进群+姓名+公司职位”即可,加入【云计算学习交流群】,和志同道合的朋友们共同打卡学习!


2.征稿:

投稿邮箱:liudan@csdn.net;微信号:color_ld。请备注投稿+姓名+公司职位。

640?wx_fmt=png喜欢就点击“好看”吧!

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

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

相关文章

C语言 vprintf 函数和 printf 函数区别 - C语言零基础入门教程

目录 一.vprintf 函数和 printf 函数声明简介 1.printf 函数声明2.vprintf 函数声明 二.vprintf 函数和 printf 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.vprintf 函数和 printf 函数声明简介 1.printf 函数声明 int printf…

ip地址讲解啊

ip地址 ip地址&#xff1a;inetaddress 唯一定位一台网络上计算机 127.0.0.1&#xff1a;本机localhost C:\Users\admin>ping 127.0.0.1 正在 Ping 127.0.0.1 具有 32 字节的数据: 来自 127.0.0.1 的回复: 字节32 时间<1ms TTL128 来自 127.0.0.1 的回复: 字节32 时间&…

端口之讲解

端口表示计算机上的一个程序的进程 不同进程有不同的端口号&#xff0c;用来区分软件 被规定0~65535 TCP,UDP&#xff1a;65535*2 tcp:80,udp:80吗&#xff0c;单个协议下&#xff0c;端口号不能冲突 端口分类 公有端口0~1023 HTTP&#xff1a;80 HTTPS&#xff1a;443 …

云漫圈 | 学Python还是Java, 8张漫画带你全面分析

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;Leoxin来源&#xff1a;菜鸟学PythonJava和Python两门语言都是目前非常热门的语言&#xff0c;可谓北乔峰南慕容&#xff0c;二者不分上下&#xff0c;棋逢对手。但是对于初学者来说&#xff0c;非常困惑&#xff0…

C语言 exit 函数 - C语言零基础入门教程

目录 一.exit 函数简介二.exit 函数使用三.exit 函数和 return 区别四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.exit 函数简介 #include <stdlib.h>/*描述&#xff1a;终止正在执行的进程*//*函数参数&#xff1a;status 等于 1 …

react之讲解

<!DOCTYPE html> <html> <head> <meat charset"UTF-8"> <title>hello_react</title> </head> <body> <!-- 准备好一个容器 --> <div id"test"></div> <!-- 核心库 --> <s…

史上最全SQL优化方案

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者&#xff1a;惨绿少年来源&#xff1a;Hollis在进行MySQL的优化之前&#xff0c;必须要了解的就是MySQL的查询过程&#xff0c;很多查询优化工作实际上就是遵循一些原则&#xff0c;让MySQL的优化器能够按照预想的合理方式运行而…

C语言 abort 函数 - C语言零基础入门教程

目录 一.abort 函数简介二.abort 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.abort 函数简介 C 语言库函数 abort 函数的作用是异常终止一个进程&#xff0c;意味着 abort 后面的代码将不再执行。 #include <stdlib.h>/…

react之虚拟DOM的两种创建方式

<!DOCTYPE html> <html> <head> <meat charset"UTF-8"> <title>1_使用jsx创建虚拟DOM</title> </head> <body> <!-- 准备好一个容器 --> <div id"test"></div> <!-- 核心库 -->…

C语言 assert 函数 - C语言零基础入门教程

目录 一.assert 函数简介二.assert 函数使用三.assert 函数用法总结与注意事项四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.assert 函数简介 对于断言&#xff0c;相信大家都不陌生&#xff0c;大多数编程语言也都有断言这一特性。简单地…

趣挨踢栏目精华汇总

出品 | CSDN云计算 有问有答&#xff0c;一问一答的形式&#xff0c;帮助大家快速解决更多专业难题。 出品 | CSDN云计算 趣挨踢&#xff0c;用最轻松活泼的形式&#xff0c;让你看尽生活百态。 趣挨踢 | 30 个让程序员崩溃的瞬间&#xff0c;笑死我了&#xff01; 趣挨踢 …

C语言 fopen 函数 - C语言零基础入门教程

目录 一.fopen 函数简介二.fopen 函数实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.fopen 函数简介 C 语言 fopen 函数表示以指定的模式&#xff0c;打开一个文件&#xff0c;函数声明如下&#xff1a; /* *描述&#xff1a;使用指定…

react之使用js创建虚拟DOM

<!DOCTYPE html> <html> <head> <meat charset"UTF-8"> <title>2_使用js创建虚拟DOM</title> </head> <body> <!-- 准备好一个容器 --> <div id"test"></div> <!-- 核心库 -->…

趣挨踢 | 只有挨踢人才能读懂的西游记

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 刘超本文转载自公众号&#xff1a;刘超的通俗云计算一、我佛造经传极乐话说我佛如来为度化天下苍生&#xff0c;有三藏真经&#xff0c;可劝人为善。就如图中所示&#xff0c;真经所藏之处&#xff0c;在于云端。佛祖所管辖之…

C语言 fclose 函数 - C语言零基础入门教程

目录 一.fclose 函数简介二.fclose 函数实战三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.fclose 函数简介 C 语言 fclose 函数用来关闭已经使用 fopen 打开成功的文件&#xff0c;函数声明如下&#xff1a; /* *描述&#xff1a;关闭文…

react虚拟和真实DOM

<!DOCTYPE html> <html> <head> <meat charset"UTF-8"> <title>1_使用jsx创建虚拟DOM</title> </head> <body> <!-- 准备好一个容器 --> <div id"test"></div> <div id"demo…

什么是5G,我们能从中得到什么?

戳蓝字“CSDN云计算”关注我们哦&#xff01;本文转载自公众号&#xff1a;SDNLAB今年&#xff0c;全球首个5G网络开通&#xff0c;向用户承诺了更快的数据传输速度和更低的延迟。此外&#xff0c;5G还为新的工业应用开辟了道路&#xff0c;成为实现“智能城市”的关键因素。5G…

C语言 fread 函数 - C语言零基础入门教程

目录 一.fread 函数简介二.fread 函数使用三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.fread 函数简介 C 语言 fread 函数用于读取文件中的数据到指定缓冲区中&#xff0c;fread 函数声明如下&#xff1a; /* *描述&#xff1a;关闭文件…

微服务、Kubernetes和无服务器之后,即将发生的……

戳蓝字“CSDN云计算”关注我们哦&#xff01;本文转载自公众号&#xff1a;K8S技术社区现在是2019年了&#xff0c;Docker容器已经是旧闻&#xff0c;至少&#xff0c;它已经变得如此主流&#xff0c;不再是尖端技术。当然&#xff0c;微服务架构、Kubernetes、无服务器功能、服…

C/C++ putchar函数 - C语言零基础入门教程

目录 一.前言二.putchar 函数简介三.putchar 函数使用四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.前言 C 语言中 putchar 函数和 getchar 函数类似&#xff0c;getchar 函数从控制台获取用户的输入字符&#xff0c;可以作为和用户交互&…