互联网应用扩容:应用拆分、数据库拆分、读写分离、主从同步

如何扩容

应用拆分的垂直拆分

将系统拆分为各种服务。使用带有服务注册、发现功能的SOA框架(面向服务的架构)来进行交互。一个功能的读写可以拆分成不同的服务。不同的服务由不同的团队维护。通过服务注册中心,服务消费者不需要进行配置更改,就可以发现新的服务提供者并使用它。

 

数据库拆分

分库,即垂直数据拆分,比如拆分为商家库、客户库、订单库。分库解决多个表之间的IO竞争、单机容量问题。

分表,即水平数据拆分。分表提高了单表查询速度。

先按照业务维度进行垂直拆分,不同的应用可以使用不同的数据库,再根据range或者hash进行水平拆分。

数据库拆分可以在应用层做,也可以在中间件层做,使用中间件做数据库拆分的好处是应用就像查单库单表一样去查询中间件层。

分库带来无法跨库join的问题,分表带来无法跨各部分表查询。可能原本的一次查询,变成了多次查询,使业务逻辑复杂化。为了减少分开分表打来的问题。可以按查询进行数据异构。比如按照查询维度异构,订单库可以异构出商家订单库、用户订单库。再比如通过商品基础库、商品属性库、商品图片库,聚合数据异构出商品库。

 

读写分离

写数据时写到主数据库/缓存,读数据时读取从数据库/缓存。为了提高读取性能可以挂多个从。因为主数据库/缓存向从数据库/缓存同步数据会有一定的延迟,所以需要强一致性的读操作,就直接读主数据库/缓存。

 

主从同步方式:

第一种是同步方式,双写,即同时写主从服务器,然后返回,这种方式的问题在于请求处理速度慢。

第二种是异步方式。可以订阅mysql的binlog日志模拟数据库的主从同步机制,从服务器对日志进行SQL重放,进行线下同步。主数据库/缓存也可以把变更发布到MQ队列,从服务器订阅变更,异步写。

其实上面说的两种方法。不仅可以同步主从数据库/缓存,还可以进行业务模块之间的同步,还可以用来实现数据库和缓存之间的同步,还可以用来同步原始数据和异构数据。

为了保证最终一致性,需要扫描主从数据库,发现不一致时,进行补偿。可以对数据进行扫描、也可以对日志进行扫描。可以进行增量扫描、也可以进行全量扫描。还可以写主服务器成功时发消息,写从服务器成功时也发消息,实时检测一致性,比如3秒内还没有一致,则进行补偿修复。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值