原创 服务架构 分布式学习十四:etcd实现服务注册/发现 架构图注册/发现流程图代码代码地址:https://github.com/tioncico/etcd_service-registry-discovery 2022-04-15 浏览(1,320) 评论(0) 阅读全文
原创 编程语言 分布式学习十三:实现全局唯一id命名 全局唯一id在单体服务中,我们可以通过数据库的自增id去实现唯一id命名,但是在分布式服务中,分库分表之后,就无法直接使用自增id了,数据库只能保证当前表的id唯一,这个时候我们就需要通过其他方式去生成全局唯一id,例如UUIDUUIDuuid通俗来讲,就是针对于 每个机器/机器的线程/当前的时间戳/伪随机数 作为生成凭据,能保证每个机器下的每个线程都会生成不同的id生成的数据大概为一串无规律的数 2022-03-26 浏览(1,256) 评论(0) 阅读全文
原创 编程语言 分布式学习十二:zookeeper实现数据订阅/发布 数据订阅/发布在分布式集群中,假设数据库发生了改动,就得修改所有分布式服务的数据库配置我们可以通过zookeeper来实现数据库配置的订阅发布我们先初始化数据库配置项环境在zookeeper配置以下数据[zk: localhost:2181(CONNECTED) 51] get /config-server/app1/database{"Hos 2022-03-23 浏览(1,443) 评论(0) 阅读全文
原创 服务架构 分布式学习十一:搭建zookeeper集群 单机部署之前发过一个单机部署教程,集群部署类似,这次我们通过docker-compse进行编排部署http://www.php20.cn/article/sw/z/317 单机安装制作docker镜像由于centos8停止维护了,这次我们选择Ubuntu,新建dockerfile文件:FROM ubuntuARG ZK_VERSION=3.8.0WORKD 2022-03-12 浏览(1,399) 评论(0) 阅读全文
原创 服务架构 分布式学习十:ZAB协议 ZAB协议ZAB 协议是为分布式协调服务ZooKeeper专门设计的一种支持崩溃恢复的原子广播协议。ZAB协议的开发设计人员在协议设计之初并没有要求其具有很好的扩展性,最初只 是为雅虎公司内部那些高吞吐量、低延迟、健壮、简单的分布式系统场景设计的。在 ZooKeeper的官方文档中也指出, ZAB协议并不像Paxos算法那样,是一种通用的分布式一致性算法,它是一种特别为ZooKeeper设计的崩溃 2022-03-09 浏览(1,373) 评论(0) 阅读全文
原创 服务架构 分布式学习九:Raft算法 raft算法由于paxos算法难以理解,今天来理解下 "易于理解的一致性算法" raftraft本质是选举领导,领导进行管理日志,实现的一致性算法选举领导每个节点角色都会在以下几种切换:1:领导者2:候选者3:跟随者在服务初始化时,所有节点为跟随者,在没有领导者的情况时,每个跟随者都有权发起候选投票,投票半数赞成后成为领导者选举的详细过程服务初始化启动选举过程:1: 2022-03-03 浏览(1,442) 评论(0) 阅读全文
原创 服务架构 分布式学习七:一致性算法:Paxos算法 Paxos算法世界上只有一种一致性算法,就是 Paxos这个难懂,不写了,附带博客链接:https://www.cnblogs.com/linbingdong/p/6253479.html 2022-03-02 浏览(1,220) 评论(0) 阅读全文
原创 服务架构 分布式学习六:三阶段提交(3PC) 三阶段提交3PC,是Three-Phase Commit的缩写,即三阶段提交,是2PC的改进版,其将二阶段提 交协议的“提交事务请求”过程一分为二,形成了由CanCommit, PreCommit和do Commit 三个阶段组成的事务处理协议.阶段一:CanCommit1:事务询问:协调者向所有的参与者发送一个包含事务内容的canCommit请求,询问是否可以执行事务提交操作,并开始等待各参与者 2022-03-01 浏览(1,258) 评论(0) 阅读全文
原创 服务架构 分布式学习五:二阶段提交协议(2PC) 前言在分布式系统中,每个节点都知道自己在事务操作的结果是成功还是失败的,却无法直接获取其他分布式节点的事务结果因此,当一个事务操作需要跨节点时,为了保证事务的ACID特性,就需要引入"协调者(Coordinator)" 的组件来统一调度所有分布式节点的事务处理逻辑,这些被调度的节点称为"参与者(Participant)" 协调者负责调度参与者的行为 2022-02-28 浏览(1,005) 评论(0) 阅读全文
原创 服务架构 分布式学习四:ACID理论 ACIDACID,是指数据库管理系统(DBMS)在写入或更新资料的过程中,为保证事务(transaction)是正确可靠的,所必须具备的四个特性:原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。原子性一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某 2022-02-28 浏览(1,695) 评论(0) 阅读全文