scene-question-3
如果你的业务量突然提升100倍QPS你会怎么做?
典型回答
首先看下这个业务量的提升的原因和特点是什么?
那么就有很多种情况了:
- 业务有好转有起色了,或者刚好蹭到某个热点
- 被DDOS了
如果是被DDOS攻击了,也会导致流量提升,那么这种就通过防止DDOS攻击的手段来解决。
如果是蹭到了某个热点,那么久可以通过临时方案来解决,不需要考虑的太久,那么最简单的就是扩容,增加集群的服务器数量,提升机器的硬件资源配置,让整体的吞吐量提升。
那么,如果是长期方案,想让系统真的可以提升并发性,提升到可以抗100倍QPS,那么可以做的事情其实就是另外一个问题:如何设计一个高并发系统
如何设计一个能够支持高并发的系统?
- 分布式架构:将系统分解成多个模块,采用分布式架构来降低单点故障的风险,并提高系统的可伸缩性和性能。
- 集群部署:将一个服务通过集群进行部署,来提升系统整体的吞吐量及响应速度,并使用负载均衡技术将请求均衡分配给多个服务器,以提高系统的性能和可用性。
- 利用缓存:使用缓存、NoSQL等技术,以提高数据读写的性能和可靠性。
- 异步处理:采用异步处理机制,如使用消息队列、事件驱动等技术,以降低请求响应时间和提高系统吞吐量。
- 预加载:使用预加载技术来提前加载需要的资源,以减少用户等待时间。
- 代码优化和调优:对系统代码进行优化和调优,如采用异步IO、避免锁(减小锁的粒度)、减少循环和递归、避免长事务等,以提高系统性能。
- 数据库优化:合理的数据库设计和优化,包括合理的索引设计、分库分表、读写分离、缓存优化等,可以有效提高系统的并发度和响应速度。
- 分库分表:将一个大型的数据库拆分成多个小型的数据库(分库),然后将每个小型数据库中的表再进行拆分(分表),从而减轻单个数据库或表的读写压力,通过分库分表,可以将大量的读写操作分散到多个数据库或表中,从而提高系统的并发度和响应速度。
- 读写分离:读写分离是一种常用的数据库优化技术,它将读操作和写操作分配到不同的数据库实例上处理。通过读写分离,主库主要负责写操作,从库则负责读操作,从而提高了系统的并发度和可扩展性。同时,读写分离还可以提高系统的可用性和容错能力,因为即使主库出现故障,从库仍然可以提供读服务。
- 防止雪崩:通过限流、熔断、降级等技术,可以防止系统因为某个组件出现故障而导致整个系统崩溃的雪崩效应。
- 容错和监控:实现容错机制,如备份、容灾、负载降级等,以保障系统的可用性。同时,使用监控工具来实时检测系统的运行状况和性能瓶颈,及时做出调整和优化。
- 测试和评估:进行全面的性能测试和评估,包括压力测试、负载测试、安全测试等,以发现并解决系统的性能瓶颈和安全隐患。
综上所述,设计高并发系统需要从多个方面考虑,需要综合运用各种技术和工具,进行全面的测试和评估,以实现系统的高可用、高性能和高安全性。
什么是DDoS攻击?如何防止被攻击?
分布式拒绝服务(DDoS:Distributed Denial of Service)攻击,是指攻击者利用大量“肉鸡”对攻击目标发动大量的正式或非正式请求、耗尽目标主机资源或网络资源,从而使被攻击的主机不能为正常用户提供服务。
DoS:
DoS(拒绝服务,Denial of Service)就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。这是早期非常基本的网络攻击方式。
举个🌰,小王开了一家商店,店面不大,加上小王一共有三个服务员。由于他们这里物美价廉,工作人员的态度又比较友善,所以慢慢的生意越来越好。
但是,这家店所在的小镇上有一个恶霸,恶霸看到小王的店很赚钱,于是想要通过一些下作的手段谋取私利。于是他装扮成普通的顾客,在小王的店里有一搭无一搭的总和店员攀谈,问问这个多少钱,问问那个怎么卖,还时不时的给店员提供一些虚假信息,比如哪里缺货了之类的信息。使店员们都被他搞的团团转。
由于恶霸是装作普通顾客的,小王和店员们又不能彻底不理他,所以就要分出一些精力来服务他,但是由于店内的服务员有限。这样一来,很多其他的顾客就可能受到了冷落。
虽然恶霸的行为是恶意的,但是他在店内的是一个普通顾客,他的咨询价格之类的行为也都是合理的。但是由于他频繁询问,长时间霸占服务员的时间。这就导致店铺的其他用户体验有所下降。
对于网站来说,其实也是一样的,网站就像是小王的商店一样。对于一个网站来说,他是要搭建在服务器上面的,而由于硬件资源有限,所以服务能力也是有限的。如果有人频繁访问或者长时间占用资源,就会导致其他用户的体验有所下降。
这种,利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应的行为,就是DoS攻击。
在信息安全的三要素—保密性、完整性和可用性中,DoS针对的目标正是可用性。该攻击方式利用目标系统网络服务功能缺陷或者直接消耗其系统资源,使得该目标系统无法提供正常的服务。
DDoS:
如果只是一个恶霸的话,只要能够识别出来,然后阻止他进入店铺就行了。
随着恶霸被发现之后,他也想了一个办法,这次他不再自己一个人跑去店铺了,而是纠集了一群无赖,而这些无赖每天都换,店铺里面的服务员根本识别不出来到底谁是捣乱的。
无赖们扮作普通客户一直拥挤在商场,赖着不走,真正的购物者却无法进入;或者总是和营业员有一搭没一搭的东扯西扯,让工作人员不能正常服务客户;也可以为商铺的经营者提供虚假信息,商铺的上上下下忙成一团之后却发现都是一场空,最终跑了真正的大客户,损失惨重。一个无赖去胡闹,就是 DoS攻击,而一群无赖去胡闹,就是 DDoS攻击。
一般来说,DDoS攻击可以具体分成两种形式:带宽消耗型和资源消耗型。他们都是透过大量合法或伪造的请求占用大量网络以及器材资源,以达到瘫痪网络以及系统的目的。
DDoS的危害:
当服务器被DDoS攻击时,一般会出现一下现象:
被攻击主机上有大量等待的TCP连接;网络中充斥着大量的无用的数据包;受害主机无法正常和外界通讯;受害主机无法处理所有正常请求;严重时会造成系统死机。对于用户来说,在常见的现象就是网站无法访问。
DDoS的防范
为了对抗DDoS攻击,你需要对攻击时发生了什么有一个清楚的理解。简单来讲,DDoS攻击可以通过利用服务器上的漏洞,或者消耗服务器上的资源(如内存、硬盘等)来达到目的。
一般来说,可以用以下办法防范:
- 如果可以识别出攻击源,如机器IP等,可以在防火墙服务器上放置一份ACL(访问控制列表)来阻断这些来自这些IP的访问。
- 对于带宽消耗型攻击,最有效的办法就是增加带宽。
- 提高服务器的服务能力,增加负载均衡、多地部署等。
- 优化资源使用提高web server的负载能力。例如,使用apache可以安装apachebooster插件,该插件与varnish和nginx集成,可以应对突增的流量和内存占用。
- 使用高可扩展性的DNS设备来保护针对DNS的DDOS攻击。
- 启用路由器或防火墙的反IP欺骗功能。
- 付费,使用第三方的服务来保护你的网站。
- 监控网络和web的流量。时刻观察流量变化
- 保护好DNS避免DNS放大攻击
对于网络攻击,没有任何办法彻底阻止和避免,只能尽最大努力不断提高黑客攻击成本。