千万级流量架构设计实现方案

实现千万级流量架构设计实现原则算法

1 实现高并发数据库

  • 服务拆分:将整个项目拆分红多个子项目或者模块,分而治之,将项目进行水平扩展
  • 服务化:解决服务调用复杂以后的服务注册和发现问题
  • 消息队列: 解耦,异步处理
  • 缓存:各类缓存带来的高并发

2 实现高可用缓存

  • 集群
  • 限流
  • 降级

3 业务设计服务器

  • 幂等:用户对于同一个操做发起的一次请求或者屡次请求的最终请求结果是一致的,不会由于点击了屡次而产生不一致的结果
  • 防重:防止一样的数据同时提交,服务端防重实现思路:在服务器端生成一个唯一的随机标识(Token),同时在当前用户的Session中保存这个标识,而后将这个标识发送到客户端的form表单中,在表单中用隐藏域存储这个标识,当表单提交的时候,这个标识和表单一块儿提交到服务端,而后在服务端判断用户提交上来的标识和服务器生成的标识是否同样,若是不同就表明是重复提交,此时服务器就能够不用处理重复提交上来的请求,若是同样,则证实不是重复提交,服务器能够对提交的请求作相关的处理,请求处理完成后清除当前用户session中存储的标识

在下列状况下,服务器将拒绝用户提交的请求:网络

  1. 存储session中的token域表单提交的token不一致
  2. 存储用户的session中不存在token
  3. 用户提交的表单数据中不存在token
  •  状态机:软件设计中的状态机,通常指有限状态机,是表示有限个状态以及这些状态之间的转移和动做等

4  限流session

 限流的目的是经过对并发访问/请求进行限速或者一个时间窗口内的请求进行限速来保护系统的可用性,一旦达到限制速率就能够拒绝服务。就像手机预售同样,假如要卖出3万台,只须要接收3万用户的请求就能够,其余的用户请求能够选择过滤,能够提示"当前服务器过忙,请稍后再试"的提示。架构

限流的方式并发

  1. 限制瞬时并发数: 在入口层限制同一个IP 来源的链接请求,防止恶意攻击
  2. 限制并发总数:经过配置数据库链接池,线程池的大小来约束总的并发数
  3. 限制时间窗口内的平均速度:在接口层面,经过限制访问速率来控制接口的并发请求
  4. 其余方式:限制远程接口的调用速率,限制MQ的消费速率

经常使用的限流算法异步

  1. 滑动窗户协议:一种常见的流量控制技术,用来改善吞吐量

滑动窗口是一种流量控制技术,在早期的网络通讯中,通讯双方不会考虑网络拥挤状况直接发送数据,因为你们不知道网络的拥挤状况,同时发送数据致使中间节点阻塞丢包,谁也发送不了数据,因此就有了滑动窗口机制来解决这类问题,发送方和接收方都维护一个数据帧的序列,这个序列就成为窗口ide

滑动窗口协议,是基于TCP协议的一种应用,用于网络数据传输时的流量控制,避免阻塞发生。该协议容许发送方在中止并等待确认前发送多个数据分组,因为发送方没必要每发一个分组就停下来等待确认,所以该协议能够加速数据的传输,提升网络吞吐量

发送窗口:发送端容许连续发送的帧的序号表,发送端能够不等待应答而连续发送数据(能够经过设置窗口的尺寸来控制)

接收窗口:接收方容许接收的帧的序列表,凡是落在接收窗口内的帧,接收方都必须处理,落在窗口以外的帧将被丢弃,接收方每次容许接收的帧数称为接收窗口的尺寸

      2 漏桶:漏桶算法能强行限制数据的传输速率

漏桶算法的原理很简单,请求先进入到漏桶中,漏桶以必定的速度出水,当水请求过大会直接溢出,能够看出漏桶算法能强行限制数据的传输速率,进入端无须考虑出水端的速率,就像mq消息队列那样,provider只须要将消息传入队列中,而不须要关系consumer是否接收到了消息。对于溢出的水就是被过滤的数据,能够直接丢弃,也能够经过某种方式暂时保存,例如加入队列,像线程池里面对溢出数据的4种处理机制同样

     3 令牌桶:属于控制速率类型的限流算法

对于不少应用场景来讲,除了可以要求限制数据的平均传输速率外,还要求容许某种程度的突发传输,这个时候漏桶算法就不合适了,令牌桶算法更为合适,令牌桶的算法原理是系统会以一个恒定的速度往桶里面放入令牌,若是请求须要被处理,则须要从桶里面获取一个令牌,当桶里面没有令牌可获取的时候,则拒绝服务

    4 计数器:最简单的一种,经过控制时间段内的请求次数

相关文章
相关标签/搜索