何谓
大型网站?作者从海量的数据和非常高并发的
访问量的角度做了一个宽泛的定义,而数据量和访问量增长的过程也恰恰是一个网站从小到大的发展过程,大数据,高并发等所带来的技术挑战能击垮一个网站,但能成就一个网站。作者从数据库读写分离,服务器集群等多个角度分析了解决大数据、高并发问题的思路:
1.数据库与应用分离:把数据库与应用从一台机器分到两台机器。
技术要点分析:数据库与应用分开了,只需要把应用中JDBC连接数据库的配置从地址本机改到了另外一台机器地址即可,对开发、测试、部署都没有影响,技术难度很小。
2.服务器集群:引入负载均衡
设备。
技术要点分析:引入负载均衡的技术方案后会有不同服务器之间session共享的问题,这里有四种解决方案,一是Session Sticky 方式,即负载均衡器根据每次请求的会话标识来进行请求转发,让同样 Session 的请求每次都发送到同一个服务器端处理,这有利于针对 Session 进行服务器端本地的缓存。二是Session Replication方式,即让不同服务器之间进行session的
同步,这样可以共享相同的session。三是session数据集中存储,将session数据与具体的服务器解耦合,不同的服务器从同一个地方获取session数据。四是Cookie Based 方式,前三个方案都是基于服务器端的,而这个方案则是在浏览器端通过cookie来传递session数据的。这四种方案各有千秋,都有自身的不足之处,使用不同的场景,需灵活应用。
3.数据库读写分离:增加一个数据库作为读库。
技术要点分析:增加一个读库之后,会遇到数据复制和数据复制延迟的问题,可以采用Master(主库)+Slave(备库)的结构来进行数据的复制,在数据库层面目前还不能解决数据复制延迟的问题,需用其他方案解决。
4.缓存:对网站进行数据缓存和页面缓存。
技术要点分析:一般我们在缓存中放的是“热”数据而不是全部数据,那么填充方式就是通过应用完成的,即应用访问缓存,如果数据不存在,则从数据库读出数据后放入缓存。随着时间的推移,当缓存容量不够需要清除数据时,最近不被访问的数据就被清除了。数据缓存和页面缓存减少了与数据库的交互,有利于减轻数据库的压力。
5.引入
分布式数据库:
技术要点分析:分布式存储系统通过集群提供了一个高容量、高并发访问、数据冗余容灾的支持。通过分布式文件系统来解决小文件和大文件的存储问题,通过分布式 Key-Value 系统提供高性能的半结构化的支持,通过分布式数据库提供一个支持大数据、高并发的数据库系统。这就是分布式数据库相对
关系型数据库的优势。
6.数据垂直拆分:也就是说把数据库中不同的业务数据拆分到不同的数据库中。
技术要点分析:主要的技术难点是如何解决跨业务跨不同库的问题事务处理事务处理问题。
7.数据水平拆分:就是把同一个表的数据拆到两个数据库中。
技术要点分析:SQL路由、分页、
主键
8.拆分应用:根据业务特性把一个应用系统拆分成多个应用系统。
技术要点分析:拆分出来的多个应用系统之间如何进行交互是主要的技术难点,可通过消息中间件的方式来解决。