mysql演化历程
来源:互联网 发布:c 语言英文怎么说 编辑:程序博客网 时间:2024/06/05 08:21
1、单节点数据库
2、一主一从数据库
(1)Master/slave复制原理以及方式
a、Master所有的数据更新会记录到日志binlog中,Master A把binlog日志传给slaveB
b、B先把A的binlog日志放到称为relaylog中继日志的地方
c、最后B通过relaylog日志中的内容对自己的binlog进行更新,复制数据
这种机制可以保证A和B的数据一致,但是同步或许会有延时,
3、一主多从架构
4、双主多从架构
5、数据库进行切分,会面临路由问题,互联网常见数据路由有三种:
(1)按照数据范围路由,比如有两个分片,一个是0-10亿,一个是1亿-2亿,这样来路由。这个优点是非常简单,并且扩展性好,假如两个分片不够了,增加一个2亿-3亿的分片即可,这个方式缺点:虽然数据的分布是均衡的,每一个库的数据量差不多,但请求的负载会不均衡,例如有一些业务场景,新注册的用户活跃度更高,大范围的分片请求负载会更高。
(2)按照hash路由,如果有两个分片,数据模2寻库即可。这个优点是路由方式简单,数据分布也是均衡的,请求负载也是均衡的,缺点是如果两个分片数据量过大,要变成三片,数据迁移比价麻烦,即扩展性会受限。
(3)路由服务,前面两个数据路由方法均有一个缺点,业务线需要耦合路由规则,如果路由规则发生变化,业务线是需要配合升级的,路由服务可以实现业务线与路由规则的解耦,业务线每次访问数据库之前先调用路由服务,来知道数据究竟存放在哪个分库上。
分组与复制,这是解决扩展读性能,保证读高可用的问题。
根据经验,大部分互联网的业务都是读多写少,淘宝、京东查询商品,搜索商品的请求可能占了99%,只有下单的支付的时候有写请求。一般来说,读性会成为瓶颈,那么如何快速解决这个问题呢?
我们通常使用读写分离,扩充读库的方式来提升系统的性能,同时多个读库也保证了读的可用性,一台读库挂了,另一台读库可以持续的提供服务。
上图是“读”高可用的常见玩法,那么怎么保证读库的高可用呢?解决可用这个问题的思路是冗余。
解决站点的可用性问题冗余多个站点,解决服务的可用性问题冗余多个服务,解决数据的可用性问题冗余多份数据。如果用一个读库,保证不了读高可用,就复制读库,一个读库挂了另一个仍然可以提供服务,这么用复制的方式来保证读的可用性。
数据冗余会引发一个副作用,就是一致性的问题。
主从不一致怎么解决呢?读写会有时延,有可能读到从库上的旧数据,常见方法就是引入中间件,业务层不直接访问数据库,而是通过中间件访问数据库,这个中间件会记录哪一些key上发生了写请求,在数据主从同步时间窗口之内,如果key上又出了读请求,就将这个请求也路由到主库上去(因为此时从库可能还没有同步完成,是旧数据),使用这个方法保证数据的一致性。
中间件很理想,但大部分公司并没有采用,因为数据库中间件技术门槛比较高。
- mysql演化历程
- Golang的演化历程
- 系统架构演化历程
- 大型网站演化历程
- Golang的演化历程
- 系统架构演化历程
- 系统架构演化历程
- 系统架构演化历程
- 系统架构演化历程
- spring演化历程
- 淘宝的界面演化历程
- 大型网站架构演化历程
- 大型网站架构演化历程
- 大型网站架构演化历程
- 大型网站架构演化历程
- 大型网站架构演化历程
- 大型网站架构演化历程
- 大型网站架构演化历程
- 这是网上搜到的,认为还可以的对集合的总结,更多请往原网址查看
- 中国地理数据
- Linux中的tar命令,压缩和解压缩
- 趣味算法之求余 a^b%m;
- 【备忘】获取设备及系统信息
- mysql演化历程
- android开发--- jni返回结构体
- C++类的4个默认成员函数
- 使用maven插件反向映射generatorConfig.xml生成代码
- 浮动( 上机2)
- 获取当前日期
- 详解统计信号处理之 克拉美罗界
- 使用Amazon AWS搭建GPU版tensorflow深度学习环境
- 【ssoj1027】树形图计数