一、网站的高并发,大流量访问怎么解决?web
1)HTML页面静态化数据库
访问频率较高但内容变更较小,使用网站HTML静态化方案来优化访问速度。将社区内的帖子、文章进行实时的静态化,有更新的时候再从新静态化也是大量使用的策略。缓存
优点:安全
2)图片服务器和应用服务器相分离服务器
如今不少的网站上都会用到大量的图片,而图片是网页传输中占主要的数据量,也是影响网站性能的主要因素。所以不少网站都会将图片存储从网站中分离出来,另外架构一个或多个服务器来存储图片,将图片放到一个虚拟目录中,而网页上的图片都用一个URL地址来指向这些服务器上的图片的地址,这样的话网站的性能就明显提升了。架构
优点:并发
3)缓存负载均衡
尽可能使用缓存,包括用户缓存,信息缓存等,多花点内存来作缓存,能够大量减小与数据库的交互,提升性能。高并发
假如咱们能减小数据库频繁的访问,那对系统确定大大有利的。好比一个点子商务系统的商品搜索,若是某个关键字的商品常常被搜,那就能够考虑这部分商品列表存放到缓存(内存中去),这样不用每次访问数据库,性能大大增长。性能
4)镜像
镜像是冗余的一种类型,一个磁盘上的数据在另外一个磁盘上存在一个彻底相同的副本即为镜像。
5)负载均衡
在网站高并发访问的场景下,使用负载均衡技术(负载均衡服务器)为一个应用构建一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理,避免单一服务器因负载压力过大而响应缓慢,使用户请求具备更好的响应延迟特性。
6)并发控制
加锁,如乐观锁和悲观锁
7)消息队列
经过mq一个一个排队方式,跟12306同样。
二、订票系统,某车次只有一张火车票,假定有1w我的同时打开12306网站来订票,如何解决并发问题?(可扩展到任何高并发网站要考虑的并发读写问题)
不但要保证1w我的能同时看到有票(数据的可读性),还要保证最终只能有一我的买到票(数据的排他性)。
使用数据库层面的并发访问控制机制。采用乐观锁便可解决此问题。乐观锁意思是不锁定表的状况下,利用业务的控制来解决并发问题,这样既保证数据的并发可读性,又保证保存数据的排他性,保证性能的同时解决了并发带来的脏数据问题。hibernate中实现乐观锁。
银行两操做员同时操做同一帐户就是典型的例子。好比A,B操做员同时读取一余额为1000元的帐户,A操做员为该帐户增长100元,B操做员同时为该帐户减去50元,A先提交,B后提交。最后实际帐户余额为1000-50=950元,单本该为1000+100-50=1050。这就是单行的并发问题。如何解决?能够用锁。