本篇概述了常见分布式存储,包括文件系统,KV系统,数据库的最主要特性。Dynamo分布式理论涉及较多。不过这个文章就是看过不少个以后总结的小点。node
chunck服务器:按照每一个chunck受权刚给CS租约
成为主chuck(多副本都成功才行),chunck内部修改
客户端 库文件形式,从master获取路由,直接访问chunck服务器,缓存元数据
master 元信息,全部控制(chubby主备),文件到chunck仍是在主
文件追加:流水线;分离数据流和控制流
。S1,S2,S3,1,2同机房,控制流1=》2=》3而不是1=》3=》2mysql
master单点瓶颈?
每一个chuck 64M(通常都是大文件,K~M,id为64b),3份,压缩后chunk元数据小于64B。1PB:1PB3/64M64=3G。
chunck分配,迁移,负载均衡都要限速。分配:磁盘利用率低+最近频次防止压垮+多机架分配
——————sql
写少读多,每次修改在master无压力
小文件问题。读目录超级快,inode,实际内容=》逻辑图片共享一个物理文件
,抛弃目录树,直接blockid+offset定位。
去重:单独键值系统MD5客户端返回带着blockiid去nameserver查机器
。再带着offset去机器定位
——————数据库
haystack目录(照片id到物理卷轴路由)=》haystack物理卷轴100G,只追加(单机元数据内存中,每一个占用20字节:8T/80K*20=2g)
目录量太大,memcache+mysql sharing集群
——————
CDN
L1chache->l2chache->服务器自己cache->tfs。LVS+NGINX=》
——————————
上述基本都是单层路由。若不够能够两层缓存
——————————————————————————————服务器
数据分布和负载均衡:自治gossip,种子节点
若机器被断定临时失效,选一台机器新数据分到这儿,恢复后将数据回传。若永久失效,则进行数据同步,利用merkle树(每一段一个merkle树,只须要同步从根到叶子节点不一样的,叶子节点为文件内容的hash值,非叶子节点为其子节点组合的hash值)
NWR机制:N为副本数量,W为写至少几份,R为读至少几份。R读出来有多份状况,冲突用向量时钟由客户端解决或者覆盖,异步读取覆盖
——————————————————————————————架构
proxy:解析dql,路由,读写分离,排序,分组
zk:维护db路由,选主
常驻进程:实时监控等
扩容:成倍扩
——————————并发
数据:每行的每个列(或列簇)构成一个cell
架构:在GFS上添加一层分部署索引层+chubby分布式锁
客户端:从chubby获取元数据,与子表直连(缓存和prefetch
。过时须要取六次,正常三次)
master:分配子表给子表服务器,指挥合并/分裂/监控/负载均衡/故障恢复(只有主在chubby的互斥锁失效才能切换)
子表:
chubby:保整只有一个master,配合master发现子表,存储访问控制信息(两地三数据中心五副本)
元数据也存表中,二级:子表128M,元信息1K。量级:(128M128m/1k)128m/1k=2048PB。引导信息(根表位置)=》根表=》元数据(子表位置,sstable及操做日志文件编号,日志回放点)
复制一致(全局惟一id去重)与容错(按期检查锁有木有问题之类的)。单机存储:sst(想为啥分多层就是写入更快,合并怕影响,写少的话一层,都的话多层)
————————————oracle
在bigtable上支持sql
客户端:映射操做,事务,并发控制,基于paxos的复制,请求发送给复制服务器
复制服务器:接收客户端请求转发到所在机房的biftable实例(用于解决跨机房链接数过多问题)协调者:存储是否处于最新状态,用于实现快速读
事务:redolog写完就能够算成功,若写失败读以前要回放。夸实体组用两阶段+分布式队列
写事务流程:同一实体组乐观锁串行化(同一实体组同时更新少,同一个uid之类的)负载均衡
协调者单点(从chubby获取锁,失效忽略协调者)
单副本,协调者较复杂,SSD不支持,只有实体组内部ACID
————————————
spanner
数据模型。主表包含附表。好比
部署:协调者(主备,paxos),参与者(主备,paxos)
同步:每一个子表上运行一个paxos状态机
,主副本默认寿命10s全局事务id
:oracle数据库生成,谷歌时钟器,会返回偏差-4~4e,时间每一个都加4e便可
事务读写:夸paxos组两阶段提交
:prepare:客户端发往多个paxos,协调者主发起prepaare协议,参与者主须要锁住数据。commit:协调者主发起commit,参与者主执行提交并解除锁定数据,当前时间戳做为提交版本