高并发项目处理方案
高并发一般会发生在1、负载均衡(服务)处 2、数据库高并发 link
服务的高并发
应对高并发,解决方案大多从服务器级别和应用程序级别【硬件和软件】两个方向进行,如增大服务器的CPU,增加内存,或者直接购买高性能服务器。但随着业务的不断增加,服务器性能也达到瓶颈。第二个方向就是从应用程序级别也就是软件设计编码方向,如HTML静态化、图片服务器分离、分布式缓存,减少客户端访问时并发请求的数据。
隔离是指将系统或资源分割开,系统隔离是为了在系统发生故障时能限定传播范围和影响范围,即发生故障后不会出现滚雪球效应(造成雪崩),从而保证只有出问题的服务不可用,其他服务还是可用的;而资源隔离有脏数据隔离、通过隔离后减少资源竞争提升性能等。
在开发高并发系统时,缓存、降级、限流可以有效的保护系统。缓存可以提升系统访问和增大系统处理能力;降级是当服务出问题或者影响到核心流程的性能是,暂时屏蔽掉部分服务,待高峰过去或者问题解决后再打开服务;限流是通过对并发访问/请求进行限速或者一个时间窗口内的请求进行限速来保护系统,一旦达到限速率则可以拒绝服务(定向到错误页面或者告知资源没有了等其他友情提示)、排队或等待(比如秒杀、评论、下单)、降级。
在整个项目里,需要注重每个环境设置超时与重试机制。
数据库高并发
数据库高并发同样可通过负载均衡得以缓解。
复制,备份,读写分离,分库分表分区。
使用MySQL自带的Master + Slave的方式实现主从复制,解决数据的一致性问题。
我们的网站演进到现在,交易、商品、用户的数据都还在同一个数据库中。尽管采取了增加缓存和读写分离的方式,但随着数据库的压力继续增加,数据库数据量的瓶颈越来越突出,此时,我们可以有数据垂直拆分和水平拆分两种选择。
垂直拆分的意思是把数据库中不同的业务数据拆分到不同的数据库中,结合现在的例子,就是把交易、商品、用户的数据分开。缺点是需要维护多个数据库的状态一致性和数据同步。
数据水平拆分就是把同一个表中的数据拆分到两个甚至多个数据库中。产生数据水平拆分的原因是某个业务的数据量或者更新量到达了单个数据库的瓶颈,这时就可以把这个表拆分到两个或更多个数据库中。