1.建立阶段:程序初始要解决的问题:有还是后没有的问题,所以在该阶段决策者关心更多的是解决业务逻辑,尽快上线的问题
2.效率优化阶段:当程序运行一段时间,在效率和并发上出现了一些问题,那么这是后就进入了程序优化的第一个阶段:程序效率优化,数据库优化,SQL调优等
3.并发优化阶段,这里分为两种情况
第一种,实时性要求非常高,在这种情况下就不能采用队列的方式来解决问题,可以采用缓存+数据库优化的方式,再不行的话就可以考虑增加硬件支持,如带宽,web的负载均衡,数据库的读写分开,以及读写数据库的负载均衡,当然为了保证缓存服务器的可用性,可以对缓存也采用读写分开的主从方式进行架构
第二种,对实时性要求不那么高的情况:这种情况可以采用队列的方式,变同步为异步处理的方式来解决问题
队列服务器为了保证可用性,也可以采用主从方式,且其中有一台服务器要进行永久化存储队列
在队列处理上也分为几种方式,首先是队列对顺序要求特别严格,如排队程序对于这样的队列处理,只好采用死循环的方式来按照顺序进行处理
对于排队要求不那么严格的情况可以采用多线程的方式进行处理,当然多线程也会对数据库造成一定的压力,但是多线程毕竟是可控的,我们可以根据系统资源的使用情况及时的调整线程到最优化状态
第三种,实时性要求不那么高,且对处理的数量有一定要求,如秒杀,因为秒杀的库存一般是有限的所以对秒杀一般可以采用队列限流的方式来进行处理
队列限流,即设定一个队列的最大长度的阈值,一单到达或超过这个阈值,那么程序就暂时不允许请求的消息进入队列,页面表现上可以采用引流的方式进行处理
第四种,第二种情况处理完毕后,依然不能满足用户的需求,那么在这种情况下除了在队列上采用更加高效的队列进行处理之外,我们就只能加大硬件方面的支持了
4.硬件优化阶段:
这个解决是在上面的优化达到极致之后采用的手段,硬件优化要根据软件处理中所存在的瓶颈进行针对性处理,需要考虑的方面如下:
首先是带宽,在带宽增加之前要首先把页面以及前端相关的优化进行到极致,如:html代码优化,css代码优化,js代码优化,http请求次数优化,长轮询优化等
其次是web服务器,在web服务器上首先考虑的就是在一个负载均衡服务器下准备几台web服务器,几台几台web服务器来共同应对高并发的压力,如果出现问题可以随时迁入更多的web服务器来应对高并发对web服务器的压力
再次是队列服务器,队列服务器为了解决单点的高可用问题,可以采用主从方式进行配置,如果一旦主服务器出现问题,随时可以有一台从服务器可以调整为主服务器来继续提供服务器,这样对于用户来说就是一个无感知的切换,且给了充裕的时间去处理出现问题的队列服务器
除了队列服务器,剩下的就是缓存服务器,缓存服务器的架构方式与队列服务器类似,主要是提高可用性即可
最后是数据库服务器,为了应对数据库服务器的压力,可以使用读写分开,且可以在读服务器的层面加入负载均衡的处理,来均分读数据对数据库服务器的压力,且主从可以在出现问题是自动切换,提高了数据库的可用性