大型网站及架构的演进过程

大型网站及架构的演进过程_第1张图片

读书笔记《大型网站系统与java中间件实践》。
一般来讲,我们所说的系统主要分为两个功能,一个是计算,一种个存储。系统的演进也是围绕着这两个功能进行。

存储

最简单的存储,最常用的存储系统就是数据库了,主要是关系型数据库。

读写分离

针对数据库的操作,主要是读操作和写操作,可能对于很多系统来说读的比重比写的比重占的更多。在数据库读操作到达一定的压力后,就需要将读和写进行分离,即在一个单独的数据库上进行写操作(读和写在同个事务的时候,读还是要跟写在同个数据库上),另外一个或多个数据库进行读操作。读写分离就会涉及到数据库数据的复制,可能会存在一定的延迟。

搜索引擎

有时候针对读的数据并不一定要放在关系型数据库中,可以将主库的数据同步到一些搜索引擎上,比如solr,es等,可以提高查询效率以及灵活性。

缓存

读操作也可以是读缓存,速度可能会更快一些,这里要考虑缓存的命中率问题,以及缓存的更新策略。

分表分库

在业务和数据量比较大的时候,只是读写分离可能也不能满足要求了,尤其在写操作量比较大的时候,这个时候要考虑数据库的拆分。

垂直拆分

垂直拆分的意思主要是业务拆分,比如用户相关的数据和订单相关的数据拆分到不同的数据库中,缓解在一个数据库中的压力。

水平拆分

水平拆分是针对同一个表进行拆分,同一个表的数据拆分到不同的数据库中,需要考虑唯一键的生成规则,比如MySQL主键自增就不适用了。

计算

计算主要是在应用服务器上的计算,最开始可能只是在一台电脑上部署一个服务。

集群

当只有一个服务的时候随着业务的增长可能很快就不能满足要求了,这时候一般的做法是增加应用的服务,在多台服务器上部署同样的代码,通过负载均衡(可以是硬件也可以是软件)将客户的请求分发到不同的服务上去。这时候要考虑会话的问题,有几种解决方式。

  1. 针对同一个会话的请求都分发到同一个服务器上去,需要对负载均衡做处理。
  2. 每个服务都去拷贝一份用户的会话,增加了服务器的存储压力。
  3. 针对会话集中存储。
  4. 使用cookie存储会话。受限于cookie的大小限制,另外就是不安全。

业务拆分

不同的业务拆分成不同的服务,比如用户相关的业务单独一个服务,订单相关的业务单独一个服务。

你可能感兴趣的:(大型网站及架构的演进过程)