主页

分布式 — Paxos 算法

Paxos 用于达成共识性问题,即对多个节点产生的值,该算法能保证只选出唯一一个值。 假设要实现一个分布式集群,这个集群由节点 A、B、C 组成,提供只读 KV 存储服务。一个节点创建只读变量后就不能再进行修改了,所以所有节点必须要先对只读变量的值达成共识,然后所有节点再一起创建这个只读变量。 那么当有多个客户端访问该集群时,试图创建一个只读变量,客户端 1 试图创建值为 3 的 X,客...

阅读更多

分布式 — BASE 理论

BASE 是基本可用(Basically Available)、软状态(Soft State)和最终一致性(Eventually Consistent)三个短语的缩写。 BASE 理论是 CAP 理论中的 AP 的延伸,是对互联网大规模分布式系统的实践总结,强调可用性。几乎所有的互联网后台分布式系统都有 BASE 的支持,这个理论很重要,地位也很高。 即使无法做到强一致性,但每个应用都可...

阅读更多

分布式 — ACID 理论

ACID 理论是对事务特性的抽象和总结,方便我们实现事务。可以理解成,如果实现了操作的 ACID 特性,那么就实现了事务,在单机上实现 ACID 并不难,但是如何实现分布式的事务呢? 一、二阶段提交协议 两阶段提交(Two-phase Commit,2PC),通过引入协调者(Coordinator)来协调参与者的行为,并最终决定这些参与者是否要真正执行事务。 1. 运行过程 I. 准...

阅读更多

如何评判代码质量的好坏?

我们很难通过某几个词汇来全面地评价代码质量,因为某些词汇都是从不同维度来说的。这就好比,对于一个人的评价,我们需要综合各个方面来给出,比如性格、相貌、能力、财富等等。代码质量高低也是一个综合各种因素得到的结论。不能通过单一的维度去评价一段代码的好坏。比如,即使一段代码的可扩展性很好,但可读性很差,那我们也不能说这段代码质量高。 下面挑选了几个最常用、最重要的评价标准,希望在日常的开发中多注...

阅读更多

进程 & 线程 & 协程

进程 进程是资源分配的基本单位。 进程就是应用程序的启动实例。比如运行一个游戏、打开一个软件,就是开启了一个进程。 进程拥有代码和打开的文件资源、数据资源、独立的内存空间。 线程 线程是独立调度的基本单位。 线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。 QQ 和浏览器是两个进程,浏览器进程里面有很多线程,例如 HTTP 请求线程、事件响...

阅读更多

分布式 — 拜占庭将军问题

拜占庭问题是用来描述 分布式系统一致性问题 在论文中抽象出来的一个著名的例子。 拜占庭帝国派出多支军队去围攻一支敌军,每支军队有一个将军,但由于彼此距离较远,他们之间只能通过信使传递消息。敌方很强大,固而必须有超过半数的拜占庭军队一同参与进攻才可能击败敌人。在此期间,将军们彼此之间需要通过信使传递消息并协商一致后,在同一时间点发动进攻。 一、三将军的难题 首先,将问题简化成只有...

阅读更多

远程服务调用 — RPC

什么是 RPC? RPC 的全称是 Remote Procedure Call,即远程过程调用。RPC 帮助我们屏蔽网络编程细节,实现调用远程方法就跟调用本地(同一个项目中的方法)一样的体验,我们不需要因为这个方法是远程调用就需要编写很多与业务无关的代码。 RPC 的作用主要体现在两个方面: 屏蔽远程调用跟本地调用的区别,让我们感觉就是调用项目内的方法; 隐藏底层网络通信的复...

阅读更多

计算机网络 — 常见网络协议

为什么要学习网络协议? 只有通过网络协议,才能使一大片机器互相协作、共同完成一件事。 网络协议满足 语法、语义、顺序 三要素,以下面的 HTTP 协议为例: HTTP/1.1 200 OK Date: Tue, 27 Mar 2018 16:50:26 GMT Content-Type: text/html;charset=UTF-8 Content-Language: zh-CN &...

阅读更多