详解 DNS 与 CoreDNS 的实现原理

域名系统(Domain Name System)是整个互联网的电话簿,它能够将可被人理解的域名翻译成可被机器理解 IP 地址,使得互联网的使用者不再需要直接接触很难阅读和理解的 IP 地址。我们在这篇文章中的第一部分会介绍 DNS 的工作原理以及一些常见的 DNS 问题,而第二部分我们会介绍 DNS 服务 CoreDNS 的架构和实现原理。 »

高可用分布式存储 etcd 的实现原理

etcd 是一个定可信赖的分布式键值存储服务,它能够为整个分布式集群存储一些关键数据,协助分布式集群的正常运转。这篇文章将会介绍 etcd 的实现原理,其中包括 Raft 协议、存储两大模块,在最后我们也会简单介绍 etcd 一些具体应用场景,例如:服务发现、发布订阅、分布式锁以及分布式协调等功能。 »

详解分布式协调服务 ZooKeeper

我们在这篇文章中简单介绍了 Google 的分布式锁服务 Chubby 以及同样能够提供分布式锁服务功能的 Zookeeper。作为分布式协调服务,Zookeeper 的应用场景非常广泛,不仅能够用于服务配置的下发、命名服务、协调分布式事务以及分布式锁,还能够用来实现微服务治理中的服务注册以及发现等功能,这些其实都源于 Zookeeper 能够提供高可用的分布式协调服务,能够为客户端提供分布式一致性的支持。 »

分布式系统与消息的投递

消息是一个非常有趣的概念,它是由来源发出一个离散的通信单元,被发送给一个或者一群接受者,无论是单体服务还是分布式系统中都有消息的概念,只是这两种系统中传输消息的通道方法或者通道不同;单体服务中的消息往往可以通过 IO、进程间通信、方法调用的方式进行通信,而分布式系统中的远程调用就需要通过网络,使用 UDP 或者 TCP 等协议进行传输。我们一般都会认为,消息的投递语义有三种,分别是最多一次(At-Most Once)、最少一次(At-Least Once)以及正好一次(Exactly Once),文章分别会介绍这三种消息投递语义究竟是如何工作的。 »

分布式事务的实现原理

事务是数据库系统中非常有趣也非常重要的概念,它是数据库管理系统执行过程中的一个逻辑单元,它能够保证一个事务中的所有操作要么全部执行,要么全不执行;在 SOA 与微服务架构大行其道的今天,在分布式的多个服务中保证业务的一致性就需要我们实现分布式事务。从广义上来看,分布式事务其实也是事务,只是由于业务上的定义以及微服务架构设计的问题,所以需要在多个服务之间保证业务的事务性,也就是 ACID 四个特性;从单机的数据库事务变成分布式事务时,原有单机中相对可靠的方法调用以及进程间通信方式已经没有办法使用,同时由于网络通信经常是不稳定的,所以服务之间信息的传递会出现障碍。 »

GraphQL 在微服务架构中的实践

在过去的将近半年的时间里,作者一直在使用 GraphQL 这门相对新兴的技术开发 Web 服务,在使用的过程中,尤其是在微服务架构中实践时确实还会遇到很多问题。这篇文章中,首先会简单介绍 GraphQL 是什么,它能够解决的问题;在这之后,我们会重点分析 GraphQL 在微服务架构中的使用以及在实践过程中遇到的棘手问题,在最后作者将给出心中合理的 GraphQL 微服务架构的设计,希望能为同样在微服务架构中使用 GraphQL 的工程师提供一定的帮助,至于给出的建议是否能够满足读者在特定业务场景下的需求就需要读者自行判断了。 »

去中心化支付系统 Stellar

在这一篇文章中,我们将介绍去中心化的支付系统 Stellar,它被设计与实现的目的就是在区块链和传统中心化的金融机构之间构建一个桥梁;其目的并不是创建一套完整的金融模型,而是将区块链技术与现有的金融生态系统相结合,在支付和银行系统之间提供协调的功能。我们可以使用 Stellar 网络构建移动端的手机钱包、在线的银行系统以及支付服务,整个网络其实由两个组件构成,一个是用于与 Stellar 网络交互的 API 服务 Horizon;另一个是网络的骨干,也就是 Stellar Core。 »

物联网与『高效的』IOTA

这一次我们介绍的区块链项目就是 IOTA,它的团队将 IOTA 定义为『次时代的无许可』分布式账本,我们先来看一下它解决了什么问题,再来讨论它的价值。IOTA 使用了基于有向无环图(DAG) 设计的 Tangle,有别于传统的区块链项目,在 IOTA 或者说 Tangle 中,没有区块和链的概念,同时也没有矿工和用户之间的转账并且交易也不收取手续费。Tangle 本质上就是一个有向无环图,所有由节点发出的交易最后都会成为图的一部分,也就是用于存储交易的分布式账本。所有的交易在发送时,都需要确认两笔之前的交易,交易的确认是通过『边』来表示的。 »

分布式文件系统 IPFS 与 FileCoin

在这篇文章中,我想聊一聊最近比较热门的 IPFS(InterPlanetary File System),一个点对点的分布式文件系统。作为一个分布式的文件系统,IPFS 提供了一个支持部署和写入的平台,同时能够支持大文件的分发和版本管理;为了达到上述的目的,IPFS 协议被分成七个子协议:身份、网络、路由、数据交换、对象、文件和命名系统,我们将在文章中分别介绍这七个子协议的功能。 »

浅入浅出智能合约 - 调用(三)

当我们谈到 Ethereum 的智能合约时,很难不涉及 Solidity 的 ABI,这里的 ABI 就是一种与 Ethereum 生态系统中合约交互的标准方法。我们可以使用 ABI 从区块链外部调用合约(DApp)的提供的服务,也可以在合约中调用其他合约的函数。在这篇文章中,我们将简单介绍 Ethereum 智能合约中的应用程序二进制接口(ABI)以及如何使用 ABI 调用其他智能合约中的函数,同时包含函数选择器以及参数编码等话题。 »

浅入浅出智能合约 - 部署(二)

在这篇文章中我们将要介绍智能合约在编写之后是如何部署到 Ethereum 网络的。部署一个新的智能合约或者说 DApp 其实总共只需要两个步骤,首先要将已经编写好的合约代码编译成二进制代码,然后将二进制数据和构造参数打包成交易发送到网络中,等待当前交易被矿工追加到区块链就可以了。 »

浅入浅出智能合约 - 概述(一)

智能合约(Smart Contract)是时下非常热门的概念,它将智能合约描述为一种以信息化方式传播、验证或者执行合约的计算机协议,能够允许在没有第三方的情况下进行可信的交易,并且这些交易是无法被追踪、同时也是不可逆的,文章中将介绍 Ethereum 中用于编写智能合约的编程语言 Solidity 的特点,同时简单介绍 ERC20 协议和接口。 »

UTXO 与账户余额模型

从写上一篇介绍区块链共识算法的文章到现在已经过去了三个多月的时间;虽然整个行业内有非常多的变化,但是区块链技术,尤其是底层技术却没有太多的改变。这篇文章将要介绍的就是 Bitcoin 以及众多的加密货币,比如 Ethereum、NEO 和 Qtum 的底层结构究竟是什么样的。目前的绝大多数区块链项目不是使用 UTXO 模型作为底层的数据结构,就是使用账户余额模型存储交易相关的信息。在这里,我们会分别介绍两种不同区块链模型的实现方式以及优缺点,我们会分别以 Bitcoin 和 Ethereum 为例介绍 UTXO 模型和介绍账户余额模型。 »

2017 年总结 - 写在转职后的一个月

一直以来都很少写这些比较软性的文章,一方面觉得没有太多可以写的事情,另一方面觉得写这种博客对读者来说没有太大的价值,不过作者在今天还是想对过去的 2017 年进行简单的总结,让自己更加清楚这一年有哪些的变化。在今年年初的时候曾经定下了两个非常简单的计划:看 30 本书、完成 20 篇博客;前者是一个输入的过程,后者是输出的过程,而这种可以量化的指标比较容易记录,对于完成与否也有一个确切的答案。 »

分布式一致性与共识算法

这篇文章主要会介绍比特币(Bitcoin)、以太坊(Ethereum)和 EOS 作为一个分布式网络是如何达到分布式一致性的,文章中会从 CAP 理论、拜占庭将军问题以及 FLP 开始介绍分布式一致性相关概念,随后介绍传统分布式系统中的共识算法 Paxos 和 Raft 以及区块链网络中使用工作量证明(POW, Proof-of-Work)、权益证明(POS, Proof-of-Stake)以及委托权益证明(DPOS, Delegated Proof-of-Stake)几种共识算法的原理。 »