• 鹅米豆发
    2018-06-12
    日活千万的论坛,这个流量不低了。

    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,确定实例。
    展开

    作者回复: 思路不错👍👍

     2
     156
  • 无聊夫斯基
    2018-08-27
    我还是不是很理解TPS和QPS具体的区别

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

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



    展开

    作者回复: 最常用的方式

    
     17
  • plflying
    2018-06-12
    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万是用户数量,不是访问次数,访问次数会多很多,其它分析都可以

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

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

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

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

    
     7
  • 何国平
    2018-06-14
    nginx也支持4层反向代理了

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

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

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

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

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

    
     3
  • 交叉路口
    2018-06-18
    论坛这种业务的接口响应应该比较短,预计平均100ms ,超时限制500ms 。日活千万,预计峰值QPS 4000/s,按照超时500ms ,并发估算2000。采取dns+nginx 足够,具体实例根据 staging 压测来评估。dns 一是为了地理位置负载均衡,还有为了扩展性(客户端通过域名访问,后端需要拓展机器对客户端透明)。Nginx :应用负载均衡,打到某个服务实例,利用其故障转移(可检测实例状态进行剔除)、并发限制等特性来保证服务稳定性,同时还可以利用它做其他事情(access log 做日志行为分析)。希望华哥指出不足😃

    作者回复: 基本OK

    
     3
  • xinsz08
    2018-06-13
    并发测试如何来做,怎么知道自己设计的数据库,或者架构能支撑多少并发

    作者回复: 基于业务场景进行性能压测,了解大概量级即可,不需要很精确

    
     3
  • 星火燎原
    2018-06-12
    不差钱的话可以考虑文中DNS +F5+ ngnix ,一般这种日活还是考虑DNS+LVS+Nginx

    作者回复: 论坛不怎么赚钱啊😂

    
     3
  • 公号-云原生程序员
    2018-06-12
    通过容量规划,并考虑到高性能、高可用的要求,Web最前端可采用HAProxy+Keepalived双机(实现故障转移,保证高可用)作为负载均衡器;
    后端的数据库架构采用MySQL一主多从,读写分离的方式,可采用LVS+Keepalived的方式实现读数据库的负载均衡与故障转移。
    
     2
  • 肖一林
    2018-06-12
    峰值大概就是5000/s~20000/s,要看论坛活跃度。所以一个ng就够了。dns负载均衡也不一定就要支持异地多活吧,同一个机房多台主机也是可以的,所以最多dns+ng就可以很完美。需要异地多活的项目应该非常少。

    作者回复: 这种方式也可以,dns做同机房多入口负载均衡

    
     2
  • 三水
    2018-06-12
    老师,流行的SLB还有HAProxy,我们用LVS做DNS的LB,Nginx和HAProxy做HTTP的LB。

    作者回复: HAProxy也很成熟,可以用

    
     2
  • 黄金的太阳
    2018-06-12
    假设论坛的用户平均分布在全国各地(东,西,南,北四个区域),1000万的日活跃用户平均分散到每个区域后可近似估计并发量在2.5万~5万用户,可以采用两级嵌套的负载均衡架构
    1.利用DNS达到四个地域的负载均衡
    2.利用Nginx的方式达到本区域内的负载均衡
    此方案未考虑西部地区用户少,东部地区用户多的情况,在并发量尚可接受的范围内,可以考虑将单台Nginx集群化以增强并发负载支持能力

    不知道理解的对不对
    展开

    作者回复: 基本正确,中国一般分南北区域接入,西部用户确实少很多

    
     2
  • 飞翔
    2019-07-08
    微服务的服务发现是不是也算一类负载均衡?

    作者回复: 服务发现用了负载均衡

    
     1
  • lyshrine
    2018-10-18
    老师画的这些有服务器的图,是哪那个软件画的?还是libreoffice?

    作者回复: 是的,LibreOffice Draw

    
     1
  • 小橙橙
    2018-07-27
    老师,有个问题一直不是很清楚,如果用nginx轮询做负载均衡,下游某个服务挂掉了,那就会导致某些请求无法响应,这样的问题要如何解决呢?

    作者回复: 查询nginx官方文档,里面有介绍health check

    
     1
  • Ezekiel
    2018-07-19
    还是要具体看业务,这个论坛是关于什么内容的论坛,是否有区域量级不同的情况,如果存在则考虑下DNS均衡,论坛应该都不怎么赚钱的,硬件均衡可以不考虑,请求量较大,LVS做集群均衡,Nginx做机器均衡感觉就可以了。论坛个人觉得做好读写分离和缓存设计才是重点。
    
     1
我们在线,来聊聊吧