实现千万级流量架构设计实现原则算法
1 实现高并发数据库
2 实现高可用缓存
3 业务设计服务器
在下列状况下,服务器将拒绝用户提交的请求:网络
4 限流session
限流的目的是经过对并发访问/请求进行限速或者一个时间窗口内的请求进行限速来保护系统的可用性,一旦达到限制速率就能够拒绝服务。就像手机预售同样,假如要卖出3万台,只须要接收3万用户的请求就能够,其余的用户请求能够选择过滤,能够提示"当前服务器过忙,请稍后再试"的提示。架构
限流的方式并发
经常使用的限流算法异步
滑动窗口是一种流量控制技术,在早期的网络通讯中,通讯双方不会考虑网络拥挤状况直接发送数据,因为你们不知道网络的拥挤状况,同时发送数据致使中间节点阻塞丢包,谁也发送不了数据,因此就有了滑动窗口机制来解决这类问题,发送方和接收方都维护一个数据帧的序列,这个序列就成为窗口ide
滑动窗口协议,是基于TCP协议的一种应用,用于网络数据传输时的流量控制,避免阻塞发生。该协议容许发送方在中止并等待确认前发送多个数据分组,因为发送方没必要每发一个分组就停下来等待确认,所以该协议能够加速数据的传输,提升网络吞吐量
发送窗口:发送端容许连续发送的帧的序号表,发送端能够不等待应答而连续发送数据(能够经过设置窗口的尺寸来控制)
接收窗口:接收方容许接收的帧的序列表,凡是落在接收窗口内的帧,接收方都必须处理,落在窗口以外的帧将被丢弃,接收方每次容许接收的帧数称为接收窗口的尺寸
2 漏桶:漏桶算法能强行限制数据的传输速率
漏桶算法的原理很简单,请求先进入到漏桶中,漏桶以必定的速度出水,当水请求过大会直接溢出,能够看出漏桶算法能强行限制数据的传输速率,进入端无须考虑出水端的速率,就像mq消息队列那样,provider只须要将消息传入队列中,而不须要关系consumer是否接收到了消息。对于溢出的水就是被过滤的数据,能够直接丢弃,也能够经过某种方式暂时保存,例如加入队列,像线程池里面对溢出数据的4种处理机制同样
3 令牌桶:属于控制速率类型的限流算法
对于不少应用场景来讲,除了可以要求限制数据的平均传输速率外,还要求容许某种程度的突发传输,这个时候漏桶算法就不合适了,令牌桶算法更为合适,令牌桶的算法原理是系统会以一个恒定的速度往桶里面放入令牌,若是请求须要被处理,则须要从桶里面获取一个令牌,当桶里面没有令牌可获取的时候,则拒绝服务
4 计数器:最简单的一种,经过控制时间段内的请求次数