从 0 开始学架构
李运华
网名“华仔”,前阿里资深技术专家(P9)
149501 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 66 讲
结束语 (1讲)
结课测试 (1讲)
从 0 开始学架构
15
15
1.0x
00:00/00:00
登录|注册

20 | 高性能负载均衡:分类及架构

单服务器无论如何优化,无论采用多好的硬件,总会有一个性能天花板,当单服务器的性能无法满足业务需求时,就需要设计高性能集群来提升系统整体的处理性能。
高性能集群的本质很简单,通过增加更多的服务器来提升系统整体的计算能力。由于计算本身存在一个特点:同样的输入数据和逻辑,无论在哪台服务器上执行,都应该得到相同的输出。因此高性能集群设计的复杂度主要体现在任务分配这部分,需要设计合理的任务分配策略,将计算任务分配到多台服务器上执行。
高性能集群的复杂性主要体现在需要增加一个任务分配器,以及为任务选择一个合适的任务分配算法对于任务分配器,现在更流行的通用叫法是“负载均衡器”。但这个名称有一定的误导性,会让人潜意识里认为任务分配的目的是要保持各个计算单元的负载达到均衡状态。而实际上任务分配并不只是考虑计算单元的负载均衡,不同的任务分配算法目标是不一样的,有的基于负载考虑,有的基于性能(吞吐量、响应时间)考虑,有的基于业务考虑。考虑到“负载均衡”已经成为了事实上的标准术语,这里我也用“负载均衡”来代替“任务分配”,但请你时刻记住,负载均衡不只是为了计算单元的负载达到均衡状态
今天我先来讲讲负载均衡的分类及架构,下一期会讲负载均衡的算法。

负载均衡分类

常见的负载均衡系统包括 3 种:DNS 负载均衡、硬件负载均衡和软件负载均衡。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《从 0 开始学架构》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(68)

  • 最新
  • 精选
  • 鹅米豆发
    日活千万的论坛,这个流量不低了。 1、首先,流量评估。 1000万DAU,换算成秒级,平均约等于116。 考虑每个用户操作次数,假定10,换算成平均QPS=1160。 考虑峰值是均值倍数,假定10,换算成峰值QPS=11600。 考虑静态资源、图片资源、服务拆分等,流量放大效应,假定10,QPS*10=116000。 2、其次,容量规划。 考虑高可用、异地多活,QPS*2=232000。 考虑未来半年增长,QPS*1.5=348000。 3、最后,方案设计。 三级导流。 第一级,DNS,确定机房,以目前量级,可以不考虑。 第二级,确定集群,扩展优先,则选Haproxy/LVS,稳定优先则选F5。 第三级,Nginx+KeepAlived,确定实例。

    作者回复: 思路不错👍👍

    25
    378
  • 无聊夫斯基
    我还是不是很理解TPS和QPS具体的区别

    作者回复: T=transaction,代表写请求 Q=query,代表读请求

    4
    87
  • 孙振超
    这篇文章最大的收获是分析问题的思路,从dau出发,结合业务的特点,计算出来总的qps和tps,而后再根据通常规律计算出qps和tps的峰值,加上一定的未来发展空间和高可用冗余,结合单机能够支撑的qps和tps量,就可以计算出来整个集群的规模,有了这些数据就可以制定出比较合理的负载均衡的策略,而不是无的放矢,凭空猜测。

    作者回复: 最常用的方式

    2
    54
  • ant
    日活跃用户1000万应该就是国家级应用了,面向全国活跃或者全球用户,比如最大的Xxx网站github。这个时候钱应该都不是问题了。我觉得可以考虑异地多机房部署。这样导流之后每个机房的日活就少很多。其实我在想如果在每个机房不加入负载硬件用多个ngnix集群来实现,每个ngnix上会有我们自定义的路由算法。ngnix也架设多层,逐层导流,比如我们一个机房设计承受200万,那么我们可以架设3层ngnix,第一层基于自己的路由算法导流到第2层ngnix。第2层又导流到第3层。为了避免ngnix单点,每一层ngnix部署多。这样导流下流每台服务器所承认的访问不会很多。不知道这样的设计能不能达到要求,老师点评下

    作者回复: 可以达到,但有点复杂,nginx做级联不太合适,因为顶层的nginx性能是瓶颈,多级导流一般用在处理能力有差异的系统上,例如一级用F5,二级用LVS,三级用nginx

    4
    32
  • 何国平
    nginx也支持4层反向代理了

    作者回复: 我宁愿用LVS,久经考验,性能强大😄

    2
    20
  • plflying
    1、首先分析论坛系统的需求:高可用、扩展性、常规安全性、高性能。以上需求优先级依次降低。 2、并发计算: 1)、首先计算每秒并发量:1000万/(10*60*60)=278qps. (此处每天按照10个小时计算) 2)、计算每秒最大并发量:278*5=1390. (此处的5为经验值,按照论坛的用户使用特点多集中晚上小部分时段,该值已尽量取大。同时网上也有按照时间和并发数的二八原则计算,本人按照第一种计算) 3、容量规划: 1、前端2台nginx负载均衡,利用keepalive保证高可用。同时可用做静态资源缓存服务器。 2、后端tomcat部署应用,按照单台tomcat支撑1200并发,需要2台。考虑冗余,此处配置3台。 3、考虑高性能应用可以集成缓存,也可以使用统一缓存。 4、数据库采用mysql,使用2台进行主从复制和读写分离。一方面满足读多写少的应用场景,另一方面在1台出现故障时,能保证高可用。 以上内容请老师指正!

    作者回复: 1000万是用户数量,不是访问次数,访问次数会多很多,其它分析都可以

    3
    18
  • 老北
    千万日活,论坛的时间相对比较集中,同时在线预计会达到一百万。 这时候会有一半的人在操作(查看帖子之类),每个用户操作可能会调用2-3个接口。那并发数大约就是50w*2.5=125w? 这时候nginx的5w并发就不行了。需要多个dns到不同主机,再进行nginx,lvs之类转发。 另外像tomcat一般支持2000左右连接数。这样就需要600多台tomcat? 总感觉哪里算的不对😂

    作者回复: 确实有点吓人,千万日活转换为百万同时在线这里有问题,一般把日活转换为pv,例如平均每个用户会访问100个页面,日访问量就是10亿,每秒就是大约1.2万的并发访问量,再按照峰值等于均值3倍来算,也就3.6万,远远没有125万那么夸张

    3
    17
  • 食指可爱多
    请问老师后面会有容量规划方面文章吗?日活用户1000w转换成日请求量(这一步我没啥经验),再计算平均qps,考虑请求的波峰波谷,波峰取qps均值的5倍。1000x10000x10*24*60*60x5~5700得到qps峰值5700。不考虑后端应用层和更下层数据库缓存这些,接入层一个nginx就可以搞定了?

    作者回复: 同样1000万日活用户,不同业务特点的QPS差异很大,例如抖音的访问量会明显高于支付业务,论坛业务明显高于工具类业务

    2
    15
  • 一叶
    dear 华哥:文中说的一般的linux服务器 nginx 5w/s ,lvs 80w/s,这个一般的linux服务器能再具体一点吗,比如你们通常用的多少核多少g内存呢?3Q

    作者回复: 与时俱进,现在基本都是32核48g内存了

    2
    8
  • 低调的大老刘
    华哥,看到很多DNS+Nginx做负载,但是这种方式没办法预防DDOS攻击,你的Ip都暴露了

    作者回复: 谁都没法防DDOS攻击呀,不暴露ip,正常用户也访问不了啊😄

    8
收起评论
显示
设置
留言
68
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部