如何编写一个分布式数据库
发布网友
发布时间:2022-04-24 06:02
我来回答
共2个回答
热心网友
时间:2022-04-27 00:48
某种程度上看来,数据库作为整个系统的核心,这句话其实并不夸张,数据库的选型关系到上层业务代码实现的方方面面,现在比较流行的架构方案是上层业务逻辑微服务化,并且结合分布式缓存,这套框架已经基本能做到上层业务的弹性扩展,但是最底层的数据存储还是很难去中心化(除非整个技术栈中去除关系型数据库(RDBMS), 全部采用 NoSQL)。所以,经常是 RDBMS 成为整个系统的瓶颈。
在长期的斗争中,大家总结出了很多方式来扩展最底层的关系型数据库:
1. 主从,一主多从,双写,通过队列暂存请求... 这些方案其实并没有解决问题,写入仍然是单点,而且对于 DBA 的挑战比较大,今天我们暂时就不讨论了。
2. 通过中间件 Sharding,常见的开源方案有: Cobar, TDDL, Vitess, Kingshard, MyCat 等,这些方案的思路是拦截 SQL 的请求通过 sharding key 和一定规则,将请求转发/广播到不同的 MySQL 实例上,从而实现水平扩展的效果,这个方案基本解决了单点写入的问题,对于业务来说整体的吞吐也上来了,看上去不错,这个方案是大多数业务遇到性能瓶颈的解决方案,但是缺点也是有的:
1)大多中间件都没有解决动态扩容的问题,多采用了静态的路由策略,扩容一般还处于人工 x2 的状态,对 DBA 要求比较高。
2)从一定程度上来说都放弃了事务,这是由于一条语句有可能会涉及到多个数据库实例,实现分布式 事务是一个比较难的事情,我们后面会详细的介绍。
3)对业务不透明,需要指定 sharding key, 心智负担较大
热心网友
时间:2022-04-27 02:06
连consistency都要考虑就不能算轻量级了
真的叫轻量级 先满足能读能写吧 其它balance concurrency recovery replication都不考虑
读:谁管理meta data 谁存储exact data 如何利用meta data定位到slave 获取data后如何返回
写:写在哪个slave 如何更新meta
够简单吧 然而够你练了
涉及
架构设计 主从还是点到点
角色服务设计 主负责什么 从负责什么(主从模式的话)
数据存储模型(memory和disk的合理使用和管理
集群沟通和协调(coordination
机器间的数据传输(rpc
嫌少?加replication好了 如何不影响正常读写的情况下 asyn更新到各台机器