老板让你抗住千万级流量,你如何做架构系统设计?


 随着互联网的发展,各项软件的客户量日益增多,当客户量达到一定峰值时,当数以万计的流量来临时,程序的顺利运行以及即时响应则显得尤为重要,就像双11那天的淘宝一样。那么,如何设计架构才能够抗住这千万级的流量呢?

 首先,要在我们架构设计的时候建立一些原则.

1、实现高并发

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

2、实现高可用(集群、限流、降级)

集群

集群与分布式:分布式和集群都是需要有很多节点服务器通过网络协同工作完成整体的任务目标

集群的两个特点:
1、可扩展性:集群的性能不限制于单一的服务实体,新的服务实体可以动态的添加到集群,从而增强集群的性能。

2、高可用性:集群当其中一个节点发生故障时,这台节点上面所运行的应用程序将在另一台节点被自动接管,
消除单点故障对于增强数据可用性、可达性和可靠性是非常重要的。

集群的两大能力
1、负载均衡:负载均衡把任务比较均匀的分布到集群环境下的计算和网络资源,以提高数据吞吐量。

2、错误恢复:如果集群中的某一台服务器由于故障或者维护需要无法使用,资源和应用程序将转移到可用的集群
节点上。这种由于某个节点的资源不能工作,另一个可用节点中的资源能够透明的接管并继续完成任务的过程,
叫做错误恢复。

负载均衡和错误恢复要求各服务实体中有执行同一任务的资源存在,而且对于同一任务的各个资源来说,执行任务
所需的信息视图必须是相同的。

每个人都有不同的分工,一起协作干一件事,叫做分布式。

每个划桨人干的都是一样的活,叫做集群

限流

限流的目的

限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的请求进行限速来保护系统的可用性,一旦达到
限制速率就可以拒绝服务。就像手机预售一样,假如要卖出3万台,只需要接收3万用户的请求就可以,其他的用户
请求可以选择过滤,可以提示"当前服务器过忙,请稍后再试"的提示。
推荐大家看这篇文章:接口限流算法:漏桶算法&令牌桶算法。

限流方式:

1. 限制瞬时并发数 : 比如在入口层(nginx添加nginx_http_limit_conn_module)来限制同一个ip来源
的连接数,防止恶意攻击访问的情况。
2. 限制总并发数:通过配置数据库连接池、线程池大小来约束总并发数
3. 限制时间窗口内的平均速率:在接口层面,通过限制访问速率来控制接口的并发请求。
4. 其他方式:限制远程接口的调用速率、限制MQ的消费速率。

3、业务设计

幂等:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用,
就像数学里的数字1,多少次幂的结果都是1。举个最简单的例子,那就是支付,用户购买商品后支付,支付扣款
成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果
成功,用户查询余额发现多扣钱了,流水记录也变成了两条。

防重:防止同样的数据同时提交

除了在业务方向判断和按钮点击之后不能继续点击的限制以外,在服务器端也可以做到防重:

在服务器端生成一个唯一的随机标识号(Token<令牌>)同事在当前用户的Session域中保存这个令牌,然后将令
牌发送到客户端的form表单中,在form表单中使用隐藏域来存储这个Token,表单提交的时候联通这个Token一
起提交到服务器,然后在服务器端判断客户提交上来的Token与服务器端生成的Token是否一致,如果不一致,那
就重复提交了,此时服务器端就可以不处理重复提交的表单,如果相同则处理表单,处理完后清当前用户的
Session域中存储的标识号。高可用高并发架构参考:高可用高并发的 9 种技术架构。

在下列情况中,服务器程序将拒绝处理用户提交的表单请求: 

1)存储Session域中的Token与表单提交的Token不一致 
2)当前用户的Session中不存在Token 
3)用户提交的表单数据中没有Token。 

状态机

软件设计中的状态机概念,一般是指有限状态机(英语:finite-state machine,缩写:FSM)
又称有限状态自动机,简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。

该文档转至 :https://mp.weixin.qq.com/s/N3YEAryyTGLiY2hmfID-Wg

该文档转至 :https://blog.csdn.net/weixin_42183336/article/details/82081892


文章作者: nzgl
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 nzgl !
评论
  目录