大型网站及其演进架构之一
大型网站:网站是用来访问的,访问量大,数据量大,即海量数据+高并发的访问,就是大型网站。
以交易系统为例,简单介绍下网站的演进过程,比较简陋,权当扫盲。
交易系统包含三个部分:
- 用户
- 商品
- 交易
一、单机构建的交易网站
二、单机负载告警,应用和数据库分离
只是把一台变成两台,只需要在应用的配置中把数据库的地址从本机改到了另一台机器上,对开发、测试、部署没有影响
三、应用服务器负载告警,如何让应用服务器走向集群
应用服务器集群,需解决两个问题
- 用户访问服务器的选择问题:可使用DNS或者负载均衡
- Session同步问题:可使用Session复制、Session共享等方案
四、数据库读压力大,读写分离
一般业务都是读多写少,增加一个读库,只读不写
加入缓存后的服务器架构
问题:1.数据复制问题,数据库系统一般提供了数据复制的功能,不同数据库提供不同的支持,如MySQL提供Master-Slave主备复制
2.应用对数据源选择问题
五、弥补关系型数据库的不足,引入分布式存储系统
六、读写分离后,数据库又遇到瓶颈
通过读写分离和某些场景下使用分布式存储系统代替关系型数据库的方式,能够降低主库的压力,解决数据存储方面的压力。随着业务的发展,主库也会遇到瓶颈。目前为止,用户、商品、交易还在同一个数据库中,尽管增加了缓存、读写分离,但数据库的压力还在增加,就需要水平拆分和垂直拆分。
(1)专库专用,垂直拆分(根据不同业务拆分成不同的数据库)
(2)垂直拆分后的单机遇到瓶颈,数据水平拆分
水平拆分:同一个表的数据拆分到两个数据库中
问题:1.SQL路由
2.主键需要处理
七、数据库解决后,应用面对新的挑战
应用拆分:
(1)根据应用的不同功能来拆分应用
(2)走服务化的路
分为三层,web层处理不同业务功能,中间层为不同业务提供不同服务的中心,底层是数据层
要做到服务化,还需要一些基础组件的支撑。
总结
最后通过一张图看看演进之后,我们的网站的样子