(1)分布式存储
数据存储主要用的是数据库,但是有些创场景下, 数据库并不是很合适,除了数据库之外,还有分布式存储系统,分布式存储系统在大型网站中有非常广泛的应用。
常见的分布式存储系统有分布式文件系统、分布式key-value系统和分布式数据库。分布式文件系统就是在分布式环境中由多个节点组成的功能与单机文件系统一样的文件系统,它是弱格式的,内容的格式需要使用者自己组织。而分布式key-value系统相对于分布式文件系统会更加格式化一些,分布式数据库则是最格式化的方式了。
(2)数据垂直拆分
垂直拆分是把数据库中的不同业务数据拆分到不同的数据库中,例如把交易、商品、用户的数据分开
影响:应用需要配置多个数据源,这就增加了所需的配置,不过带来的是每个数据库连接池的隔离,不同的业务数据从一个数据库中拆分到了多个数据库,那么要考虑如何处理原来单机中跨业务的事务。一种是使用分布式事务,性能不好,另一种是去掉事务或者不追求强事务的支持,那么原来在单库中使用的表关联的查询也就需要改变实现了。
(3)垂直拆分后单机遇到瓶颈,数据水平拆分
数据水平拆分就是把同一个表中的数据拆分到两个数据库中,产生水平拆分的原因是某个业务的数据表的数据量或者更新量达到了单个数据库的瓶颈,这时就可以把这个表拆分到两个或者多个数据库中,水平拆分与读写分离的区别,读写分离解决的是读写压力大的问题,对于数据量大或者更新量的情况并不起作用,数据水平拆分与数据垂直拆分区别是,垂直拆分是把不同的表拆分到不同的数据库中,水平拆分是把同一个表拆分到不同的数据库中。
水平拆给业务带来什么影响呢?
首先,访问用户信息的应用系统需要结局sql路由问题,因为现在用户信息在两个数据库中,需要在进行数据库操作时了解需要操作的数据在哪里。
此外,主键的处理也会变得不同。原来依赖单个数据库的一些机制需要变化,原来mysql表上的自增字段,现在不能简单的继续使用了,并且在不同的数据库中也不能直接使用一些数据库的限制来保证主键不重复了。
(4)数据库拆分后,应用拆分
随着应用的越来越多,需要把应用拆开。
(1)根据业务的特定把应用拆开。
(2)走服务化的路。从下图看出把应用分为了三层,处于最上端的是web系统,用于完成不同的业务功能,处于中间的是一些服务中心,不同服务中心提供不同的业务服务,处于下层的是业务的数据库。
与前面相比,业务功能之间的访问不仅是单机内部的方法调用了,还引入了远程的服务调用。其次,共享的代码不再试散落在不同应用中,这些实现被放在了各个服务中心,第三,数据库的连接也发生了变化,把与数据库的交互放到了服务中心,让前端的web更注重和浏览器的交互,不必过多关注业务逻辑的事情,