prchann
prchann
算力不断提升,人们当然想充分利用起来。为了达到目标,工程师采用了**架构**这种工具;架构不断演化:无架构 -> 过程编程(结构化可复用) -> 对象编程(人类思想友好) -> 微服务。目的是控制住算力提升带来的软件复杂度。 云原生时代,算力接近无限。业务开发中依然需要处理很多非业务问题,导致开发较复杂。如果能将非业务能力沉淀为基础设施,业务开发就只需处理业务。如果是这样,工程师可能会两极分化,解决基础设施问题的高端架构师/专业人才,以及写业务代码的编码工人。
ACID 中,C 是目的,AID 是手段。 **C**onsistency (一致性)。 * **A**tomic (原子性):要么都成功,要么都失败;没有中间状态; * **I**solation (隔离性):多业务读/写时保证相互独立; * **D**urability (持久性):已提交的数据保证持久化,不会丢失。 场景: * **内部一致性**:当 1 个服务使用 1 个数据源时,使用 AID 可以做到 C。此时,所有读写操作都可被同一个数据源所感知,读写次序均有该数据源来控制; * **外部一致性**:当 1 个服务使用 多...
请教:为什么回滚时是**相对重负载**的操作呢? 回滚时,类似 Commit Record 的思路,在 Redo Log 后追加 Abord Record 不就可以了吗?
指分开部署的多份相同的数据源之间的数据一致性,即,多数据实例的一致性。 > 辅助理解:想象赛跑的场景,队长安排大家就位到各赛道的过程。 > > 2PC: 队长直接让队员一个个上赛道。如果中间有队员因故不能上场,则已就位的队员需回到场下(回滚)。 > > 2PC: 队长先问一下全部队员“有没有因故不能上场的?”,没有的话再让队员上赛道。 ### XA 1. 全局的事务管理器:可以理解为**主节点**; 1. 局部的资源管理器:可以理解为**从节点**。 ### 2PC 2PC (2 Phase Commit, 两段式提交) 的核心思路:让 Commit 操作尽可能短,从而降低失败概率。 假设/前提: 1. 假设网络在提交阶段的**短时间内**是可靠的;...
Paxos 和 Raft 的讲解过程中,主要专注于描述**写**(形成值的一致性)过程。 :question: 求补充过程前后的**读**请求的逻辑。谢谢。 Google 简单查了一下,没看到简答;看来是需要看论文或者 etcd 等源码实现了。 猜测: 1. 不同值的并发可以并行进行; 1. 相同值的并发需等待/排队(主节点 accept 完成进行中的同步);等待可能有超时机制。
Multi Paxos (Raft): 1. 选主:用 Paxos 两阶段完成;初始化耗时+; 1. 同步数据:统一由主节点发起,用 Paxos 的 accept 阶段完成;性能+; 1. 日志复制到各节点的过程,类似 2PC;只是 Raft 可以重新选主(解决单点问题),且只需要超过半数节点确认即可;“周志明:通过随机超时来实现无活锁的选主过程,通过主节点来发起写操作,通过心跳来检测存活性,通过Quorum机制来保证一致性”。
> @dongzhi0312 > 情况四,S5的提案不应该是 P4.5吗,求大佬解惑 算法只要求后来的 ID 比之前的大即可,不要求具体的数值。 比如,情况四,S1 的提案是 3.1,S5 的提案可以是 3.5 (3.5 > 3.1) 也可以是 4.5 (4.5 > 3.1) 或者是 5.5 (5.5 > 3.1)。 个人猜测,具体实现中,这个递增的 ID 可能用的是 timestamp...
强一致(不一致的情况不对外界暴露) Paxos: 1. 阶段 1. Prepare - 占坑 1. 已 accept 其他提案:返回已 accept 的值 2. 已 prepare *比当前ID大*的提案:沉默(不响应) 3. 否则:返回 (提案ID, null) 2. Accept - 拉屎 1. 已 accept *比当前ID大*的提案:沉默...
让数据高**可靠**的办法,就是分开存多份。 线上环境中,数据动态变化。如何在网络不可靠的条件下,保证分存的动态变化的数据的一致性和可用性? **方法一:状态转移** 它将**数据**拷贝多份(符合人类思维),但可用性低(因为拷贝过程中数据不可用)。而且,但节点增多时,可用性降低(反规模效应)。 **方法二:操作转移** 拷贝**操作**,节点执行相同的操作。 > 状态机复制:初始状态一样的状态机,如果执行的命令序列一样,则最终达到的状态也一样。 优点: * 节点接收和执行指令的时间可以不同:提高可用性; * 允许短时间不一致,只要不一致性不对外暴露即可:妥协一致性; * 多数服从少数(过半节点完成状态转换,则认为数据已持久化):可容忍网络分区,而且节点越多越有利。 难点:设计一种算法,能够让分布式系统内部暂时容忍存在不同的状态,但最终能够保证大多数节点的状态达成一致;同时,能够让分布式系统在外部看来始终表现出整体一致的结果 -- 协商共识。
状态转移,操作转移;妥协强一致(少数服从多数,*过半*节点完成操作转移即表示已持久化),换取高可用;要求对外部屏蔽短时间的不一致情况。