高并发系统保护策略

缓存: 缓存比较好理解,在大型高并发系统中,如果没有缓存数据库将分分钟被爆,系统也会瞬间瘫痪。使用缓存不单单能够提升系统访问速度、提高并发访问量,也是保护数据库、保护系统的有效方式。大型网站一般主要是“读”,缓存的使用很容易被想到。在大型“写”系统中,缓存也常常扮演者非常重要的角色。比如累积一些数据批量写入,内存里面的缓存队列(生产消费),以及HBase写数据的机制等等也都是通过缓存提升系统的吞吐量或者实现系统的保护措施。甚至消息中间件,你也可以认为是一种分布式的数据缓存。

降级: 服务降级是当服务器压力剧增的情况下,根据当前业务情况及流量对一些服务和页面有策略的降级,以此释放服务器资源以保证核心任务的正常运行。降级往往会指定不同的级别,面临不同的异常等级执行不同的处理。根据服务方式:可以拒接服务,可以延迟服务,也有时候可以随机服务。根据服务范围:可以砍掉某个功能,也可以砍掉某些模块。总之服务降级需要根据不同的业务需求采用不同的降级策略。主要的目的就是服务虽然有损但是总比没有好。

限流: 常见的限流算法有:计数器、漏桶和令牌桶算法。 1、通过限制单位时间段内调用量来限流 2、通过限制系统的并发调用程度来限流 3、使用漏桶(Leaky Bucket)算法来进行限流 4、使用令牌桶(Token Bucket)算法来进行限流

【计数器】:比如限制每秒100个请求,则使用LinkedList来记录滑动窗口的10个格子,每隔100ms插入一个计数删除首个计数,如果最后一个和第一个相差大于1s,则开启限流。很明显窗口越多,滑动越平滑。 缺点:如果它在单位时间段的前几秒就被流量突刺消耗完了,将导致该时间段内剩余的时间内该服务“拒绝服务”,可以将这种现象称为“突刺消耗”,但庆幸的是,这种情况并不常见。

【漏桶】:实现流量整形(Traffic Shaping)和流量控制(Traffic Policing) 单机可以用队列实现,分布式环境用消息中间件和 Redis 实现。

【令牌桶】:根据放令牌的速率去控制输出的速率。

限流算法实现 Guava是一个Google开源项目,其中的RateLimiter提供了令牌桶算法实现:平滑突发限流(SmoothBursty)和平滑预热限流(SmoothWarmingUp)实现。 Nginx 模块: 连接数限流模块ngx_http_limit_conn_module:比如同一个 ip 的连接数进行限制。 漏桶算法实现的请求限流模块ngx_http_limit_req_module:如果请求的频率超过了限制域配置的值,请求处理会被延迟或被丢弃。

转载于:https://my.oschina.net/u/347414/blog/1577417

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值