高并发系统保护策略

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

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

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

【计数器】:好比限制每秒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:若是请求的频率超过了限制域配置的值,请求处理会被延迟或被丢弃。分布式

相关文章
相关标签/搜索