互联网架构,如何进行容量设计?

一,需求缘起

互联网公司,这样的场景是否似曾相识:

 

场景一:pm要做一个很大的运营活动,技术老大杀过来,问了两个问题:

(1)机器能抗住么?

(2)如果扛不住,需要加多少台机器?

 

场景二:系统设计阶段,技术老大杀过来,又问了两个问题:

(1)数据库需要分库么?

(2)如果需要分库,需要分几个库?

 

技术上来说,这些都是系统容量预估的问题,容量设计是架构师必备的技能之一。常见的容量评估包括数据量、并发量、带宽、CPU/MEM/DISK等,今天分享的内容,就以【并发量】为例,看看如何回答好这两个问题。

 

二,容量评估的步骤与方法

【步骤一:评估总访问量】

如何知道总访问量?对于一个运营活动的访问量评估,或者一个系统上线后PV的评估,有什么好的方法?

答案是:询问业务方,询问运营同学,询问产品同学,看对运营活动或者产品上线后的预期是什么。

 

举例:58要做一个APP-push的运营活动,计划在30分钟内完成5000w用户的push推送,预计push消息点击率10%,求push落地页系统的总访问量?

回答:5000w*10% = 500w

 

【步骤二:评估平均访问量QPS】

如何知道平均访问量QPS?

答案是:有了总量,除以总时间即可,如果按照天评估,一天按照4w秒计算

 

举例1:push落地页系统30分钟的总访问量是500w,求平均访问量QPS

回答:500w/(30*60) = 2778,大概3000QPS

 

举例2:主站首页估计日均pv 8000w,求平均访问QPS

回答:一天按照4w秒算,8000w/4w=2000,大概2000QPS

 

提问:为什么一天按照4w秒计算?

回答:一天共24小时*60分钟*60秒=8w秒,一般假设所有请求都发生在白天,所以一般来说一天只按照4w秒评估

 

【步骤三:评估高峰QPS】

系统容量规划时,不能只考虑平均QPS,而是要抗住高峰的QPS,如何知道高峰QPS呢?

答案是:根据业务特性,通过业务访问曲线评估

 

举例:日均QPS为2000,业务访问趋势图如下图,求峰值QPS预估?


回答:从图中可以看出,峰值QPS大概是均值QPS的2.5倍,日均QPS为2000,于是评估出峰值QPS为5000。

 

说明:有一些业务例如“秒杀业务”比较难画出业务访问趋势图,这类业务的容量评估不在此列。

 

【步骤四:评估系统、单机极限QPS】

如何评估一个业务,一个服务单机能的极限QPS呢?

答案是:压力测试

 

在一个服务上线前,一般来说是需要进行压力测试的(很多创业型公司,业务迭代很快的系统可能没有这一步,那就悲剧了),以APP-push运营活动落地页为例(日均QPS2000,峰值QPS5000),这个系统的架构可能是这样的:


1)访问端是APP

2)运营活动H5落地页是一个web站点

3)H5落地页由缓存cache、数据库db中的数据拼装而成

 

通过压力测试发现,web层是瓶颈,tomcat压测单机只能抗住1200的QPS(一般来说,1%的流量到数据库,数据库500QPS还是能轻松抗住的,cache的话QPS能抗住,需要评估cache的带宽,假设不是瓶颈),我们就得到了web单机极限的QPS是1200。一般来说,线上系统是不会跑满到极限的,打个8折,单机线上允许跑到QPS1000

 

【步骤五:根据线上冗余度回答两个问题】

好了,上述步骤1-4已经得到了峰值QPS是5000,单机QPS是1000,假设线上部署了2台服务,就能自信自如的回答技术老大提出的问题了:

(1)机器能抗住么? -> 峰值5000,单机1000,线上2台,扛不住

(2)如果扛不住,需要加多少台机器? -> 需要额外3台,提前预留1台更好,给4台更稳

 

除了并发量的容量预估,数据量、带宽、CPU/MEM/DISK等评估亦可遵循类似的步骤。

 

三,总结

互联网架构设计如何进行容量评估:

【步骤一:评估总访问量】 -> 询问业务、产品、运营

【步骤二:评估平均访问量QPS】-> 除以时间,一天算4w秒

【步骤三:评估高峰QPS】 -> 根据业务曲线图来

【步骤四:评估系统、单机极限QPS】 -> 压测很重要

【步骤五:根据线上冗余度回答两个问题】 -> 估计冗余度与线上冗余度差值

关注微信公众号和今日头条,精彩文章持续更新中。。。。。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: MySQL是一种广泛使用的关系型数据库管理系统,在互联网大厂的面试中常常会涉及MySQL方面的问题。下面我将用300字中文回答一些与MySQL相关的互联网大厂面试题。 1. MySQL中的事务是什么?请简要描述。 事务是指一组数据库操作,要么全部成功执行,要么全部失败回滚。事务的特性是ACID,即原子性、一致性、隔离性和持久性。 2. 请解释MySQL中的主键和外键分别是什么? 主键是用于唯一标识表中每一行的列,主键的值必须唯一且不能为空。外键是一个表中的列,它与另一个表中的主键建立关系,用于保持数据的完整性和一致性。 3. 请描述MySQL中的索引是什么?有哪些类型? 索引是一种特殊的数据结构,用于加快数据的查找和排序速度。MySQL中常见的索引类型包括B树索引、哈希索引和全文索引。 4. 请解释MySQL中的连接类型:内连接、外连接和交叉连接。 内连接是指当两个表中的行在连接条件下匹配时,返回这些行的结果。外连接是指返回两个表中所有满足连接条件的行,如果某个表中的行在另一个表中没有匹配,则用空值填充。交叉连接是指返回两个表中的所有可能组合结果。 5. 请描述MySQL中的范式和反范式。 范式是一种关系型数据库设计原则,用于减少数据冗余并保持数据的一致性。反范式是为了提高查询性能而对数据库进行的优化,允许数据冗余。 以上是对MySQL互联网大厂面试题的简要回答,希望能对你有所帮助。如有需要,请继续提问。 ### 回答2: MySQL是一种常用的关系型数据库管理系统,被广泛应用于互联网行业的大型企业中。在互联网大厂的面试过程中,MySQL相关的问题通常涵盖数据库基础知识、性能优化、高可用架构等方面。 首先,面试官可能会询问数据库基础知识方面的问题。例如,MySQL的存储引擎有哪些?InnoDB和MyISAM的区别是什么?数据库的事务以及隔离级别是怎样的?这些问题考察面试者对MySQL的基本概念和原理的了解程度。 其次,面试官可能会提及性能优化相关的问题。如何优化慢查询?如何进行索引优化?如何避免死锁?如何进行数据库容量规划等问题。面试者需要能够根据具体场景来提出相应的解决方案,并能够解释其原理和优缺点。 另外,面试官可能会询问关于MySQL高可用架构的问题。例如,MySQL主从复制如何实现?如何避免数据不一致的情况?如何进行故障转移和负载均衡?面试者需要对MySQL高可用方案,如基于主从复制的热备、读写分离等有所了解,并能够解释其实现原理和应用场景。 此外,面试官还可能会结合实际的工作场景和项目经历,提出一些具体的问题。例如,如何设计一个高吞吐量的数据库架构?如何处理海量数据的存储和查询?如何保证数据的一致性和可靠性?等等。 在面试过程中,除了对MySQL的基础知识和相关技术有扎实的掌握之外,还需注重思考问题的背景和实际应用场景,并给出合理的解决方案。同时,具备良好的沟通能力和团队协作精神也是互联网大厂面试中所看中的重要素质。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值