高并发系统的分析与设计

目录

                           高并发系统的分析与设计

1、有效请求与无效请求

2、系统设计

3、数据库设计

4、动静分离设计

5、锁和高并发

           6、缓存的使用

 

有效请求与无效请求:

无效请求很多种类,比如通过脚本刷新网站首页,使网站频繁访问数据库和其他资源,造成性功的持续下降,还有一些为了得到抢购商品,使用刷票软件连续请求的行为。分析哪些是有效请求和无效请求的场景,已应对不法请求,

首先一个账号连续请求,甚至在1秒内请求上百上千次,应对其方法较多。

对于有组织的请求,比如肉鸡多人账号来访问

解决方案:a:加入验证码。(但是也会被图片识别作弊软件攻破)

                  b:使用短信服务,把验证码发到短信

                  c:限制用户在单位时间的访问次数以压制其请求量

                  d:对于多人账号请求,采用僵尸账号排除法,是指对那些平时没有任何交易的账号,根据这些账号排除一些请求

 

系统设计

         高并发系统往往需要分布式的系统分摊请求的压力,即负载均衡。系统也可以按照业务来划分,比如当前的购买分为产品维护、交易维护、资金维护、报表统计和用户维护模块,按照功能模块进行区分,使得他们相互隔离,互不干扰,降低数据的复杂性,按业务划分也可称为水平划分。由于各个模块有联系,还要通过RPC远程过程调用协议来处理之间的信息,目前比较流行的开源:Dubbo、Thrift、Hessian等

有了水平划分,也会有垂直拆分系统,所谓的垂直拆分系统是将一个很大的请求量,不按照子系统划分,而是将它们按照互不相干的几个同样的系统分摊下去,比如一台服务器的最大负荷为每秒1W请求,而测得的系统高峰期为每秒2W个请求,按照垂直拆分到4台同样的服务器,部署同样的代码,那么4台服务器平均5千个请求。即垂直拆分

对于大型网站有更细的划分,将水平与垂直相结合,如下

 

数据库设计

               对于数据库设计而言,可以使用分库分表技术,从而提高性能,提高系统响应能力。阿里的开源中间件(mycat)能够很好的实现分库分表处理的很好。

               还需要考虑优化SQL,适当的建立索引,提高数据库性能,在更新数据的时候,一定要记住是表锁还是行级锁(innodb支持),行级锁是建立在索引之上的,,所以,如果更新的条件是索引,则是行级锁,反之是表锁。

动静分离技术

               目前是互联网的主流技术,对于互联网而言大部分的数据都是静态数据,只有少数使用动态数据,动态数据的数据包很小,不会造成网络瓶颈,而静态的则不一样,静态数据包含图片、CSS、JS、视频等互联网的应用。

               对于有条件的企业k可以考虑使用CDN(Content Delivery NetWork ,即内容分发网络)技术,它允许企业将自己的静态数据缓存到最近的网络CDN节点上。先访问CDN的静态数据,如果有则直接返回,无,则回源。

锁和高并发

         无论有效请求还是无效请求、水平划分还是垂直划分、数据库的分库分表、动静分离技术等应用,都无法避免动态数据,而在高并发的场景下,又会产生数据一致性问题,加锁,则会影响系统的性能,不加锁则难以保证数据一致性的问题,这就是高并发与锁的矛盾,关于数据一致性的方案,悲观锁、乐观锁(通过版本号CAS原理)、redis+lua(利用其单线程,原子性原理)

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值