架构师训练营 - 学习笔记 - 第六周
思考与感悟
学习还是要有组织
学习还是要有组织,大家一起学习,有思想交流,有反馈,这样效率才高(从幼儿园到大学,一直以来我们有老师、同学、班级 😋)。比起一个人看书、看专栏,加入一个组织,大家一起学习,效果要更好。
就像极客大学的口号一样:让优秀的人一起学习。
机会都是靠自己争取的
不要指望机会会打包好了送到你的面前,机会都是靠自己争取来的(当然,当机会来的时候,你要做好准备)。
有技术含量的工作短期内通常不会给公司带来价值,如何说服老板去做没有业务价值的事情,然后在这个过程中让你得到技术提升?
如果你在团队里一直听别人的安排,那别人会把最没有技术含量,最重复性的,最没前途的活交给你,因为能让人成长的、有技术含量的工作总是有限的。
机会都是自己争取来的(天时地利人和),这个世界运行原理就是这样的。
站在更高的角度去学习与思考
光会用别人的框架是不够的,如果想变得卓越,那就要站在设计者的角度去思考如何设计,这样你的思维水平就和设计者的保持一致,甚至超越。
很多时候我们只是会用别人的框架就沾沾自喜了,但其实自己只是”会用“而已,并没有去思考作者背后的设计哲学,这是智慧老师对架构师训练营同学提出的更高要求——难怪他是首席架构师。
不要害怕被质疑
被质疑说明有人关注你,说明别人已经认可你的江湖地位了。最怕没人关注,没人理。
迎难而上
要迎难而上,做架构师肯定会被人怼,被人喷,不要害怕,要做好心理准备。
分布式数据库与 NoSQL - 2020/7/9 - 星期四
一致性哈希算法
用途:用来解决分布式缓存集群中,当集群扩容时,数据访问不一致的算法(传统余数哈希会导致缓存雪崩)。
实现:建立 0 - 2的32次方-1的环,将服务器与 Key 的值存入哈希环,沿着环,顺时针查找离它最近的虚拟节点的服务器。
分布式数据库
主 -> 从 复制:增加了读数据处理能力、系统可用性。
主 -> 主 复制:提高写操作高可用,并不能提高写操作的并发处理能力。
每个数据库都存一样的数据,所以数据存储能力也没有提升。
数据分片
一张表切分成多片,存储在不同数据库上。存在不同的 schema 上,但是表结构都相同。
硬编码
应用程序判断 ID 奇偶或者取模,写入不同的数据库。
映射表
需要查找2次数据库,第一次映射表,第二次数据库。
分布式数据库中间件
MyCat
扩容
一开始规划好数据库存储容量
分布式数据库中间件架构
Cobar 系统组件模型(余数哈希)
前端通讯
SQL 解析
SQL 路由
SQL 执行代理
结果合并
后端通讯
MySQL
加机器怎么做?如何迁移数据?因为新数据库是没有数据库的。
数据库主 -> 从 复制
只要同步的速度比写入的速度快,过一段时间后,两边数据就同步了。
然后再去修改路由表
删除原来的 schema
业务分库
不同的业务分到不同的数据库中,数据库写操作并发能力增加了一倍。
综合部署方案
问题
数据迁移的时候,当应用还在访问数据库,怎么做到数据一致性的,不需要停机迁移?
答:主从复制还没结束的时候是不会切换的,只有当数据迁移完毕后才会切换。但是问题应用程序在写主库,从库在做数据同步,这个过程有可能永远都同步不完,所及基本上”追上的时候“,就能把主库切换到从库了。但是有可能在切换的一瞬间(譬如几秒),数据会不一致, 所以 DBA 需要注意这个情况。
NoSQL 数据库
CAP 原理 - 3 者无法同时满足
Consistency - 一致性
每次读取的数据应该是最近写入的数据或者返回一个错误(Every read receives the most recent write or an error),而不是过期数据。也就是说,数据是一致的。
Availability - 可用性
数据当一次读写操作请求的时候,一定要有一个返回,不能失去响应或者超时,或者返回错误。
Partition Tolerance - 分区耐受性
当网络分区失效的时候,整个系统还能正常运行。
CAP 原理启示:架构设计中很多东西互相冲突,无法同时满足。
最终一致性
最终一直写冲突
根据时间戳
GPS 时钟同步
客户端冲突解决
购物车
投票解决冲突(Cassandra)
写三个节点返回两个,就认为成功了。
Cassandra 分布式解决方案
HBase 架构
通过 Zookeeper 选举主 HMaster
一个 HRegionServer 只有写入 一个 Key
HBase 存储结构 - Log Structed Merged Tree(LSM 树)
ACID(酸) vs BASE(碱)
ACID
原子性(Atomicity)
隔离性(Isolation)
持久性(Durability)
一致性(Consistency)
BASE
基本可用(Basically Available)系统在出现不可预知故障时,允许损失部分可用性,如影响时间上的损失或者功能上的损失。
Soft State (弱状态)软状态,指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。
Eventually Consistent(最终一致性)
ZooKeeper 与 Doris - 2020/7/11 - 星期六
Doris - 海量 KV Engine
ZooKeeper
分布式系统脑裂
在一个分布式系统中,不同的服务器获得了互相冲突的数据信息或者执行指令,导致整个集群陷入混乱,数据损坏,本文称作分布式系统脑裂。
评论 (1 条评论)