2.4.1 数据库中间件设计篇
目录
1.1、数据库存储的数据量不是很大,但并发的读写操作超过数据库服务器的处理能力
1.2、应用的业务模块很多,总的数据量很大,并发读写操作均超过单个数据库服务器的处理能力
2.4.1.1 数据库中间件设计理论
1、为什么需要数据库中间件?
普通的应用程序---数据库访问
1.1、数据库存储的数据量不是很大,但并发的读写操作超过数据库服务器的处理能力
解决办法:加缓存、读写分离、增加数据库访问模块(数据库中间件)
1.2、应用的业务模块很多,总的数据量很大,并发读写操作均超过单个数据库服务器的处理能力
解决办法:缓存、分库、读写分离、数据库中间件
对数据库中间件的能力要求很高
1.3、如果单个表的数据量很大,超出单表的上限
eg:商品、订单......
解决办法:分区表、分表
由“数据库中间件”来做
2、高并发、海量数据的情况下
为了解决数据存储、访问性能问题我们需要数据库中间件
数据库中间件:让我们可以在应用程序中快速应用读写分离、分库分表
2.4.1.2 数据库中间件设计要点
1、数据库中间件设计要点
1、能解析SQL
2、支持读写分离
3、支持从(slave)库读的负载均衡
4、支持分库操作
5、支持分表操作
6、支持跨库关联查询
7、对事务处理的支持
8、主键ID生成
9、数据源管理
2、数据库的拆分
拆分方式:垂直拆分、水平拆分
2.1、垂直拆分
按业务模块垂直拆分
优点:
1、拆分后业务清晰,拆分规则明确
2、系统之间整合或扩展容易
3、数据维护简单
缺点:
1、部分业务表无法join,只能通过接口方式解决,提高了系统复杂度
2、受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高
3、事务处理复杂
2.2、水平拆分
对海量数据的表进行分表分库存储
优点:
1、如果拆分规则抽象得好的话,join操作基本可以数据库做
2、不存在单库大数据,高并发的性能瓶颈
3、应用端改造较少
4、提高了系统的稳定性跟负载能力
缺点:
1、拆分规则难以抽象
2、分片事务一致性难以解决
3、数据多次扩展难度跟维护量极大
4、跨库join性能较差
2.3、水平拆分---分片规则
水平对数据进行拆分最重要的是分片规则---拆分规则
可以如何来拆分?
1、范围:时间、数值
2、列表:按地域、按组织、分类
3、散列:hash(某个字段) % 分片数、一致性hash
4、复合多种方式
2.4、分库分表的技术难点
无论垂直拆分、水平拆分,都有共同的技术难点
1、引入分布式事务的问题
2、跨节点join的问题
3、跨节点合并排序分页问题
4、多数据源管理问题
3、数据库中间件的两种实现模式
3.1、客户端模式
在应用程序中集成数据库中间件模块,通过该模块来配置管理应用需要的一个(或者多个)数据源,
以及访问各个数据源,在模块内完成数据的整合。
3.2、服务端(代理)模式
通过中间代理层来统一管理所有的数据源,后端数据库集群对前端应用程序透明,同时易于数据库扩展。
独立的服务,能提供更强的处理能力。适用于大型复杂系统。
4、常用的数据库中间件