Ⅰ zookeeper是什么语言写的
本文是Jason Wilder对于常见的服务发现项目 Zookeeper , Doozer , Etcd 所写的一篇博客,其原文地址如下: Open-Source Service Discovery 。
服务发现是大多数分布式系统以及面向服务架构(SOA)的一个核心组成部分。这个难题,简单来说,可以认为是:当一项服务存在于多个主机节点上时,client端如何决策获取相应正确的IP和port。
在传统情况下,当出现服务存在于多个主机节点上时,都会使用静态配置的方法来实现服务信息的注册。但是当大型系统中,需要部署更多服务的时候,事情就显得复杂得多。在一个实时的系统中,由于自动或者人工的服务扩展,或者服务的新添加部署,还有主机的宕机或者被替换,服务的location信息可能会很频繁的变化。
在这样的场景下,为了避免不必要的服务中断,动态的服务注册和发现就显得尤为重要。
关于服务发现的话题,已经很多次被人所提及,而且也的确不断的在发展。现在,笔者介绍一下该领域内一些open-source或者被经常被世人广泛讨论的解决方案,尝试理解它们到底是如何工作的。特别的是,我们会较为专注于每一个解决方案的一致性算法,到底是强一致性,还是弱一致性;运行时依赖;client的集成选择;以后最后这些特性的折中情况。
本文首先从几个强一致性的项目于开始,比如Zookeeper,Doozer,Etcd,这些项目主要用于服务间的协调,同时又可用于服务的注册。
随后,本文将讨论一些在服务注册以及发现方面比较有意思的项目,比如:Airbnb的SmartStack,Netflix的Eureka,Bitly的NSQ,Serf,Spotify and DNS,最后是SkyDNS。
问题陈述
在定位服务的时候,其实会有两个方面的问题:服务注册(Service Registration)和服务发现(Service Discovery)。
服务注册—— 一个服务将其位置信息在中心注册节点注册的过程。该服务一般会将它的主机IP地址以及端口号进行注册,有时也会有服务访问的认证信息,使用协议,版本号,以及关于环境的一些细节信息。
服务发现—— client端的应用实例查询中心注册节点以获知服务位置的过程。
每一个服务的服务注册以及服务发现,都需要考虑一些关于开发以及运营方面的问题:
监控—— 当一个已注册完毕的服务失效的时候,如何处理。一些情况下,在一个设定的超时定时(timeout)后,该服务立即被一个其他的进程在中心注册节点处注销。这种情况下,服务通常需要执行一个心跳机制,来确保自身的存活状态;而客户端必然需要能够可靠处理失效的服务。
负载均衡—— 如果多个相同地位的服务都注册完毕,如何在这些服务之间均衡所有client的请求负载?如果有一个master节点的话,是否可以正确处理client访问的服务的位置。
集成方式—— 信息注册节点是否需要提供一些语言绑定的支持,比如说,只支持Java?集成的过程是否需要将注册过程以及发现过程的代码嵌入到你的应用程序中,或者使用一个类似于集成助手的进程?
运行时依赖—— 是否需要JVM,ruby或者其他在你的环境中并不兼容的运行时?
可用性考虑—— 如果系统失去一个节点的话,是否还能正常工作?系统是否可以实时更新或升级,而不造成任何系统的瘫痪?既然集群的信息注册节点是架构中的中心部分,那该模块是否会存在单点故障问题?
强一致性的Registries
首先介绍的三个服务注册系统都采用了强一致性协议,实际上为达到通用的效果,使用了一致性的数据存储。尽管我们把它们看作服务的注册系统,其实它们还可以用于协调服务来协助leader选举,以及在一个分布式clients的集合中做centralized locking。
Zookeeper
Zookeeper是一个集中式的服务,该服务可以维护服务配置信息,命名空间,提供分布式的同步,以及提供组化服务。Zookeeper是由Java语言实现,实现了强一致性(CP),并且是使用 Zab协议 在ensemble集群之间协调服务信息的变化。
Zookeeper在ensemble集群中运行3个,5个或者7个成员。众多client端为了可以访问ensemble,需要使用绑定特定的语言。这种访问形式被显性的嵌入到了client的应用实例以及服务中。
服务注册的实现主要是通过命令空间(namespace)下的 ephemeral nodes 。ephemeral nodes只有在client建立连接后才存在。当client所在节点启动之后,该client端会使用一个后台进程获取client的位置信息,并完成自身的注册。如果该client失效或者失去连接的时候,该ephemeral node就从树中消息。
服务发现是通过列举以及查看具体服务的命名空间来完成的。Client端收到目前所有注册服务的信息,无论一个服务是否不可用或者系统新添加了一个同类的服务。Client端同时也需要自行处理所有的负载均衡工作,以及服务的失效工作。
Zookeeper的API用起来可能并没有那么方便,因为语言的绑定之间可能会造成一些细小的差异。如果使用的是基于JVM的语言的话, Curator Service Discovery Extension 可能会对你有帮助。
由于Zookeeper是一个CP强一致性的系统,因此当网络分区(Partition)出故障的时候,你的部分系统可能将出出现不能注册的情况,也可能出现不能找到已存在的注册信息,即使它们可能在Partition出现期间仍然正常工作。特殊的是,在任何一个non-quorum端,任何读写都会返回一个错误信息。
Doozer
Doozer是一个一致的分布式数据存储系统,Go语言实现,通过 Paxos算法 来实现共识的强一致性系统。这个项目开展了数年之后,停滞了一段时间,而且现在也关闭了一些fork数,使得fork数降至160 。.不幸的是,现在很难知道该项目的实际发展状态,以及它是否适合使用于生产环境。
Doozer在集群中运行3,5或者7个节点。和Zookeeper类似,Client端为了访问集群,需要在自身的应用或者服务中使用特殊的语言绑定。
Doozer的服务注册就没有Zookeeper这么直接,因为Doozer没有那些ephemeral node的概念。一个服务可以在一条路径下注册自己,如果该服务不可用的话,它也不会自动地被移除。
现有很多种方式来解决这样的问题。一个选择是给注册进程添加一个时间戳和心跳机制,随后在服务发现进程中处理那些超时的路径,也就是注册的服务信息,当然也可以通过另外一个清理进程来实现。
服务发现和Zookeeper很类似,Doozer可以罗列出指定路径下的所有入口,随后可以等待该路径下的任意改动。如果你在注册期间使用一个时间戳和心跳,你就可以在服务发现期间忽略或者删除任何过期的入口,也就是服务信息。
和Zookeeper一样,Doozer是一个CP强一致性系统,当发生网络分区故障时,会导致同样的后果。
Etcd
Etcd 是一个高可用的K-V存储系统,主要应用于共享配置、服务发现等场景。Etcd可以说是被Zookeeper和Doozer催生而出。整个系统使用Go语言实现,使用Raft算法来实现选举一致,同时又具有一个基于HTTP+JSON的API。
Etcd,和Doozer和Zookeeper相似,通常在集群中运行3,5或者7个节点。client端可以使用一种特定的语言进行绑定,同时也可以通过使用HTTP客户端自行实现一种。
服务注册环节主要依赖于使用一个key TTL来确保key的可用性,该key TTL会和服务端的心跳捆绑在一起。如果一个服务在更新key的TTL时失败了,那么Etcd会对它进行超时处理。如果一个服务变为不可用状态,client会需要处理这样的连接失效,然后尝试另连接一个服务实例。
服务发现环节设计到罗列在一个目录下的所有key值,随后等待在该目录上的所有变动信息。由于API接口是基于HTTP的,所以client应用会的Etcd集群保持一个long-polling的连接。
由于Etcd使用 Raft一致性协议 ,故它应该是一个强一致性系统。Raft需要一个leader被选举,然后所有的client请求会被该leader所处理。然而,Etcd似乎也支持从non-leaders中进行读取信息,使用的方式是在读情况下提高可用性的未公开的一致性参数。在网络分区故障期间,写操作还是会被leader处理,而且同样会出现失效的情况。
Ⅱ 请问oracle rac集群中的脑裂brain split是怎么回事请详细介绍下
这2天在面试DBACandidate的时候,我问到OracleRAC中BrainSplit脑裂决议的一些概念,几乎所有的Candidate都告诉我当”只有2个节点的时候,投票算法就失效了,会让2个节点去抢占QuorumDisk,最先获得的节点将活下来”。我们姑且把这套理论叫做”抢占论”。
“抢占论”的具体观点可能与下面这一段文字大同小异:
“在集群中,节点间通过某种机制(心跳)了解彼此的健康状态,以确保各节点协调工作。假设只有”心跳”出现问题,各个节点还在正常运行,这时,每个节点都认为其他的节点宕机了,自己是整个集群环境中的”唯一建在者”,自己应该获得整个集群的”控制权”。在集群环境中,存储设备都是共享的,这就意味着数据灾难,这种情况就是”脑裂”
解决这个问题的通常办法是使用投票算法(QuorumAlgorithm).它的算法机理如下:
观点1:
集群中各个节点需要心跳机制来通报彼此的”健康状态”,假设每收到一个节点的”通报”代表一票。对于三个节点的集群,正常运行时,每个节点都会有3票。当结点A心跳出现故障但节点A还在运行,这时整个集群就会分裂成2个小的partition。节点A是一个,剩下的2个是一个。这是必须剔除一个partition才能保障集群的健康运行。对于有3个节点的集群,A心跳出现问题后,B和C是一个partion,有2票,A只有1票。按照投票算法,B和C组成的集群获得控制权,A被剔除。
观点2:
如果只有2个节点,投票算法就失效了。因为每个节点上都只有1票。这时就需要引入第三个设备:QuorumDevice.QuorumDevice通常采用饿是共享磁盘,这个磁盘也叫作Quorumdisk。这个QuorumDisk也代表一票。当2个结点的心跳出现问题时,2个节点同时去争取QuorumDisk这一票,最早到达的请求被最先满足。故最先获得QuorumDisk的节点就获得2票。另一个节点就会被剔除。“
以上这段文字描述中观点1与我在<OracleRACBrainSplitResolution>一文中提出的看法其实是类似的。这里再列出我的描述:
在脑裂检查阶段ReconfigManager会找出那些没有NetworkHeartbeat而有DiskHeartbeat的节点,并通过NetworkHeartbeat(如果可能的话)和DiskHeartbeat的信息来计算所有竞争子集群(subcluster)内的节点数目,并依据以下2种因素决定哪个子集群应当存活下去:
拥有最多节点数目的子集群(Sub-)
若子集群内数目相等则为拥有最低节点号的子集群(Sub-clusterwithlowestnodenumber),举例来说在一个2节点的RAC环境中总是1号节点会获胜。
补充:关于我引入的子集群的概念的介绍:
“在解决脑裂的场景中,NM还会监控votingdisk以了解其他的竞争子集群(subclusters)。关于子集群我们有必要介绍一下,试想我们的环境中存在大量的节点,以Oracle官方构建过的128个节点的环境为我们的想象空间,当网络故障发生时存在多种的可能性,一种可能性是全局的网络失败,即128个节点中每个节点都不能互相发生网络心跳,此时会产生多达128个的信息”孤岛”子集群。另一种可能性是局部的网络失败,128个节点中被分成多个部分,每个部分中包含多于一个的节点,这些部分就可以被称作子集群(subclusters)。当出现网络故障时子集群内部的多个节点仍能互相通信传输投票信息(votemesg),但子集群或者孤岛节点之间已经无法通过常规的Interconnect网络交流了,这个时候NMReconfiguration就需要用到votingdisk投票磁盘。”
fromaskmaclean
Ⅲ Paxos 算法的数学问题
既然Lamport 是通过故事的方式提出Paxos 问题 ,我们就有必要简述下这个问题:希腊岛屿Paxon 上的执法者(legislators,后面称为牧师priest)在议会大厅(chamber)中表决通过法律,并通过服务员传递纸条的方式交流信息,每个执法者会将通过的法律记录在自己的账目(ledger)上。问题在于执法者和服务员都不可靠,他们随时会因为各种事情离开议会大厅,并随时可能有新的执法者(或者是刚暂时离开的)回到议会大厅进行法律表决,使用何种方式能够使得这个表决过程正常进行,且通过的法律不发生矛盾。
说明:不难看出故事中的议会大厅就是我们的分布式系统,每个牧师就是对应的每个节点或者进程,服务员传递纸条的过程即通信的过程,法律即是我们需要保证一致性的值(value)。牧师和服务员的进出对应着节点/网络的失效和加入,牧师的账目对应节点持久化存储设备。上面表决过程正常进行可以进一步表述为过程需求(progress requirements):当大部分牧师在议会大厅呆了足够长时间,且期间没有牧师进入或者退出,那么提出的法案应该被通过并被记录在每个牧师的账目上。 Paxon 中的法律通过投票(ballots,也有翻译成选举)完成,每次投票涉及到的一群牧师称为法定人数(quorum),当且仅当法定人数中的所有牧师都赞成这个法案时,投票成功并通过该法律。每次投票B 包含以下内容:
B_dec 正在进行的投票
B_qrm 法定人数牧师的集合(非空牧师集合)
B_vot 赞成的牧师集合
B_bal 投票编号
有了以上定义,我们看出投票B 通过的充要条件是:B_qrm 属于 B_vot。接着我们定义B 为一次投票的集合,并说明投票如果满足下面三个条件,那么一致性可以得到保证。实际中每一次投票都可以看做是一次读写请求,所有法定人数的牧师赞成才通过法律表示:所有涉及到这次请求的节点都同时响应请求(比如更新某个值)才能保证一致性。这里选举编号(B_bal)的大小代表选举发起的先后顺序。下面给出三个重要的定义:
B1(B) B 中每个选举都有一个独一无二的选举编号。
B2(B) B 中每两个选举至少有一个共同的牧师。
B3(B) B 中每一次选举B ,如果其法定人数中任意牧师在之前的一次选举中赞成,那么这次选举B 等于之前一次所有B 中牧师赞成的选举,。即新的法律等于所有参与选举牧师中投赞成票的法律。
说明:看到这里,读者八成已经很迷糊了,下面我们以一个版本更新的分布式key-value 数据库为例,每个key-value 有多个副本,如果客户端发起一个update(key,vaule) 的操作,则会产生由一个节点发起、相关节点进行响应的一次一致性操作,即选举B。对保存了该key-value 的副本进行更新。需要注意的是法定人数牧师(B_qrm)是例子中所有保存这个key-value 副本的节点的一个大部分子集,因为可能在某些时候某些保存这个key-value 副本的节点不可达。B 是关于某个key-value 的一系列更新操作,不同的法律实际上是一个key-value 的不同值。那么B1-B3就好明白了,B1指一次只进行一个更新操作;B2指每两次更新操作必须有共同的节点参与;B3指某次key-value 操作的key-value 值与所有参与节点中之前进行投赞成票的最新值一致。这是因为如果某个节点在之前已经投票,说明它已经确认可以修改该值,而其他法定人数的牧师/节点还没有确认该值。
下面说明为什么B1-B3 蕴含一致性!
引理1.1 如果B1(B),B2(B)$ 和B3(B) 满足,那么对于在B中的任意B 和B’ ,有
证明略,有兴趣的可以参考原文
定理1.2 如果B1(B),B2(B) 和B3(B) 满足,那么对于在B 中的任意B 和B’ ,有
证:如果$B’_bal=B_bal 那么由B1(B) 可知B’=B 。如果B’_bal 不等于 B_bal ,那么总有一个编号大、一个小,根据引理1.1 可得。
定理1.3 b>B_bal 且对于所有B 中的B 都有Q 和 B_qrm 交集不为空。有一个选举B’ 满足B’_bal=b、B’_qrm=B’_vot=Q,那么如果B1(B)、B2(B)、B3(B)满足,则B1(B并B’)、B1(B并B’)、B1(B并B’) 也满足。
证明略,见原文。
这个定理说的是在一个选举集合B 之后的每次成功选举,只要和之前集合中每次选举都有交集,那么这些成功的选举合并选举集合B 满足一致性。
Ⅳ 字节跳动有多难进
进字节跳动至少是985、211重点一流工科院校毕业,且需最低三年以上相关从业经验。
字节跳动后台研发招聘条件:
1、三年以上开发经验, 一年以上的Golang/Java/Python开发经验,具有较强的责任心, 自驱力和成长型思维;
2、具有良好的业务梳理和抽象能力, 掌握重构代码基本功;
4、熟练使用基本的数据结构和算法, 深入理解多线程、Socket等相关技术;
5、具备良好的编码习惯, 结构清晰, 命名规范, 逻辑性强, 代码冗余率低;
6、熟练掌握Golang/Java/Python常用框架, 深入了解框架提供的特性及其实现原理细节;
7、有大规模分布式系统的设计和开发经验, 能独立完成系统的设计及开发;
8、熟练掌握MySQL数据库, 具备MySQL索引优化、查询优化的能力;
9、熟练掌握一种以上非关系型数据库, 如Redis, Cassandra, HBase, 理解其使用场景及限制;
10、熟悉分布式系统, 熟练掌握一种以上服务框架和消息中间件, 了解其实现原理;
11、熟悉Internet常用协议, 如HTTP、TCP/IP、熟悉RESTful规范;
12、有以下经验者优先:
① 熟练掌握一种以上脚本语言并能灵活运用;
② 具有大规模分布式系统的调优经验;
③ 熟悉大规模分布式系统架构设计, 熟悉CAP、Quorum、Consistent Hashing等原理和算法。
(4)quorum算法扩展阅读:
一、公司评分
大师兄APP数据显示:字节跳动公司的整体评分为9.7。除此之外,还有4个评分的维度为财力、成长、稳定和舆情,字节跳动公司的对应评分为9.3、10.0、10.0和9.6分。
二、薪资情况
来看下大家都关心的薪酬:据数据显示,字节跳动公司员工的平均月薪达到13592元。相比行业均值, 高 出32%。
再来看下各个薪酬区间的情况:字节跳动公司的薪资分布划分为6个区间,分别是3k-8k元、10k-18k元、18k-25k元、25k-33k元、33k-40k元、40k以上元。六个薪资区间的员工占比分别为48%、26%、10%、7%、3%和6%。
Ⅳ vSphere 5.5 vSAN 见证是怎么部署的
你好,
现在的IT技术就是让人变傻,全部自动化,虚拟化。就像存储的自动分层,再也不需要精确计算数据的热度,应该分配到哪个存储层,也不需要建立RAID。买来盘,全部加入到池,要空间就从池子里化,够简单吧。但有的人就是喜欢较真,非要搞明白数据究竟用到了哪几块盘,比例怎样。这种要么就是技术控,要么就是控制狂,用现在的话就是no o no die。
经过了几次实验,发现 vSAN 配置和使用起来确实非常简单,在 vSphere 5.5 vSAN 虚拟机存储策略(VM Storage Policy) 中,我们看到了当改变虚拟机的存储策略时,虚拟机的存储对象会使用不同的 vSAN 组件(条带、副本和见证)。你可以选择不理不睬,但我今天就要较真一会,看看为什么要这样。
当然最简单的方法就是找来 vSAN 关于这一段的源代码或设计方案读一读就明白了,可惜我没有这个渠道,那就自己动手,上网找,搭环境测试了。主要参考这2篇文章:
VSAN Part 21 – What is a witness? 及其 中文翻译
VMware Virtual SAN: Witness Component Deployment Logic 及其 中文翻译
先上一段来自官网对于见证和副本的定义:
见证(witness)和副本
副本是为虚拟机指定可用性功能时创建的虚拟机存储对象实例的备份。可用性功能决定了可创建的副本数量。在集群中出现主机、网络或磁盘故障时,此机制可使虚拟机使用一组完整的对象继续运行。
见证是每个存储对象的一部分。它们不包含数据,而仅包含元数据。,其目的是在必须做出可用性决策时(在Virtual SAN 群集中)充当打破平局组件,以避免裂脑行为并满足仲裁要求。见证在 VSAN 数据存储上占用大约 2 MB 的空间用于存储元数据。
注意 :要使某个对象在 VSAN 中可访问,则其 50% 以上的组成部分必须可供访问。
默认存储策略Witness部署逻辑: 允许的故障数目 (FTT) =1
VSAN Part 21 – What is a witness? 给了一个简单的例子。
我们以 VSAN 数据存储上部署的一个简单的虚拟机为例。即使我们没有创建策略,而是使用了默认策略,vSAN 数据存储上部署的这台虚拟机的磁盘 ( VMDK ) 也会获得允许的故障数目 (FTT) =1 的功能。这意味着这个 VMDK 将创建两个副本,每个副本放置在不同的 ESXi 主机上,使得数据在群集出现单个故障时仍有一个副本可用。这其中的每个副本都是 VM DK 存储对象的一个组件。下图是 vSphere 5.5 vSAN 简介及配置 中的默认存储策略:
现在有两个问题需要提出:
第一,VSAN 如何处理裂脑/网络分区?
第二,我们如何才能确保主机/磁盘发生故障时这个 VM DK 对象有 50% 的组件可用?
这就是见证的角色。除了创建 VM DK的两个副本,系统也会创建对象的第三个组件。这就是见证磁盘。它是纯粹的元数据,只占用 2MB 的磁盘空间。现在,在一个 3 节点群集中,如果 VMDK 的副本放置在 host1 和 host2 上,则见证会被放置在 host3 上。这意味着,如果任何一个主机发生故障,我们仍有一份数据副本可用,我们仍有超过 50% 的组件可用。如果出现网络分区或裂脑,一侧分区有 2 个节点,另一侧分区有一个节点,那么仍然有一个分区会拥有超过 50% 的组件。下图所示为虚拟机上的一个VMDK(硬盘 1),该 VMDK 的允许的故障数目被设置为 1。
组件共有 3 个: 2 个副本,1 个见证。所有 3 个组件都放置在群集的不同的主机上。这就是一个最简单的示例。
如果使用 StripeWidth 功能或将 FFT 设置为大于 1 的值,许多人会发现系统创建了大量额外的见证。需要记住的一点是,虚拟机的虚拟机存储策略中功能要求不同,见证的数量也会发生改变,见证的分布也会不同。 怎么个不同法呢? 请看下文分晓。
自定义存储策略部署逻辑:允许故障数目 (FTT) =?
我们来看看 VMware Virtual SAN: Witness Component Deployment Logic 。Virtual SAN 见证组件以三种方式进行定义和部署:
Primary Witness初级见证
Secondary Witness次级见证
Tiebreaker Witness打破平局见证
Primary Witnesses:Need at least (2 * FTT) + 1 nodes in a cluster to be able to tolerate FTT number of node / disk failures. If after placing all the data components, we do not have the required number of nodes in the configuration, primary witnesses are on exclusive nodes until there are (2*FTT)+ 1 nodes in the configuration.
至少需要群集中 (2 * FTT) + 1 节点以便能容许 FTT 节点/磁盘故障数。如果安装了所有数据组件后,配置没有获得所需的节点数,则初级见证将位于独占节点直到配置中有 (2*FTT)+ 1 个节点。
什么意思呢?如果是2*FTT个节点的话,即虚拟机组件都保存了2个副本,如果发生脑裂的情况怎么办?到底有哪个副本来提供服务呢?需要一个第三方的仲裁机构来决定。
Secondary Witnesses:Secondary witnesses are created to make sure that every node has equal voting power towards quorum. This is important because every node failure should affect the quorum equally. Secondary witnesses are added so that every node gets equal number of component, this includes the nodes that only hold primary witnesses. So the total count of data component + witnesses on each node are equalized in this step.
创建次级见证的目的是确保每个节点在仲裁时有相同的投票权。这点很重要,因为每个节点故障都应对仲裁产生相同的影响。次级见证的添加应使每个节点都获得相同的组件数,包括仅拥有初级见证的节点。因此,这一步骤使得每个节点上的数据组件 + 见证组件的总数相同。
Tiebreaker witness:If after adding primary and secondary witnesses we end up with even number of total components (data + witnesses) in the configuration then we add one tiebreaker witnesses to make the total component count odd. 如果在添加初级见证和次级见证之后,配置中的组件总数是偶数(数据 + 见证数),那么,我们需要添加一个打破平局见证,使组件总数变为奇数。
实例分析
上面提到的默认存储策略,5台主机,只部署了 1 个见证,为什么?
初级见证:数据组件分布在 2 个节点上,没有大于 2*FTT+1,因此,我们需要一个初级见证。
次级见证:因为每个参与配置的节点都只有一个组件,因此,我们无需次级见证来平衡投票数。
打破平局见证:因为配置中的组件总数是 3,因此,我们不需要一个打破平局见证。
2. vSphere 5.5 vSAN 虚拟机存储策略(VM Storage Policy) 中第一次应用了虚拟机存储策略,5台主机,FTT=1,Stripe=3,部署了3个见证,为什么?
这里我们看到部分 RAID 0 条带在相同节点上,说实在的我也不知道为什么要这样。而且还有一台主机根本就没有参与。我在想,如果有6台主机,那应该数据组件会用到6台主机。我们来看看数据组件的分布情况:
2个数据组件在主机esx-01a上面
2个数据组件在主机esx-03a上面
1个数据组件在主机esx-04a上面
1个数据组件在主机esx-02a上面
我们来看看见证组件的计算方法:
初级见证:数据组件分布在 4 个节点间,大于 1*FTT+1。因此,不需要初级见证。
次级见证:因为两个节点每个都有 2 个投票,但有 2 个节点每个都只有一个投票,我们需要在下列节点上添加一个投票(见证):esx-04a,esx-02a。
打破平局见证:添加了上述两个见证后,配置中的组件总数为 8(6 数据 + 2 见证),我们需要一个打破平局见证,即第三个见证。在这个例子中,部署到了节点esx-01a。
3. vSphere 5.5 vSAN 虚拟机存储策略(VM Storage Policy) 中我修改了虚拟机存储策略,5台主机,FTT=1,Stripe=4,部署了1个见证,为什么?
这里我们看到部分 RAID 0 条带在相同节点上:
2个数据组件在主机esx-01a上面
2个数据组件在主机esx-03a上面
2个数据组件在主机esx-04a上面
2个数据组件在主机esx-02a上面
我们来看看见证组件的计算方法:
初级见证:数据组件分布在 4 个节点间,大于 1*FTT+1。因此,不需要初级见证。
次级见证:因为参与部署的每个节点每个都有 2 个投票,因此,我们无需次级见证来平衡投票数。。
打破平局见证:配置中的组件总数为 8(8 数据 + 0 见证),我们需要一个打破平局见证,即第三个见证。在这个例子中,部署到了节点esx-04a。
至此,你是不是完全明白了呢?
为了验证算法,我又重新删掉集群,打开vSAN,我们来看看新的部署情况。还是一样的存储策略,5台主机,FTT=1,Stripe=4,这次却部署了3个见证,为什么?自己想吧。
Ⅵ NET中有没有类似ZooKeeper这样的分布式服务框架
本文是JasonWilder对于常见的服务发现项目Zookeeper,Doozer,Etcd所写的一篇博客,其原文地址如下:Open-SourceServiceDiscovery。服务发现是大多数分布式系统以及面向服务架构(SOA)的一个核心组成部分。这个难题,简单来说,可以认为是:当一项服务存在于多个主机节点上时,client端如何决策获取相应正确的IP和port。在传统情况下,当出现服务存在于多个主机节点上时,都会使用静态配置的方法来实现服务信息的注册。但是当大型系统中,需要部署服务的时候,事情就显得复杂得多。在一个实时的系统中,由于自动或者人工的服务扩展,或者服务的新添加部署,还有主机的宕机或者被替换,服务的location信息可能会很频繁的变化。在这样的场景下,为了避免不必要的服务中断,动态的服务注册和发现就显得尤为重要。关于服务发现的话题,已经很多次被人所提及,而且也的确不断的在发展。现在,笔者介绍一下该领域内一些open-source或者被经常被世人广泛讨论的解决方案,尝试理解它们到底是如何工作的。特别的是,我们会较为专注于每一个解决方案的一致性算法,到底是强一致性,还是弱一致性;运行时依赖;client的集成选择;以后最后这些特性的折中情况。本文首先从几个强一致性的项目于开始,比如Zookeeper,Doozer,Etcd,这些项目主要用于服务间的协调,同时又可用于服务的注册。随后,本文将讨论一些在服务注册以及发现方面比较有意思的项目,比如:Airbnb的SmartStack,Netflix的Eureka,Bitly的NSQ,Serf,SpotifyandDNS,最后是SkyDNS。问题陈述在定位服务的时候,其实会有两个方面的问题:服务注册(ServiceRegistration)和服务发现(ServiceDiscovery)。服务注册——一个服务将其位置信息在中心注册节点注册的过程。该服务一般会将它的主机IP地址以及端口号进行注册,有时也会有服务访问的认证信息,使用协议,版本号,以及关于环境的一些细节信息。服务发现——client端的应用实例查询中心注册节点以获知服务位置的过程。每一个服务的服务注册以及服务发现,都需要考虑一些关于开发以及运营方面的问题:监控——当一个已注册完毕的服务失效的时候,如何处理。一些情况下,在一个设定的超时定时(timeout)后,该服务立即被一个其他的进程在中心注册节点处注销。这种情况下,服务通常需要执行一个心跳机制,来确保自身的存活状态;而客户端必然需要能够可靠处理失效的服务。负载均衡——如果多个相同地位的服务都注册完毕,如何在这些服务之间均衡所有client的请求负载?如果有一个master节点的话,是否可以正确处理client访问的服务的位置。集成方式——信息注册节点是否需要提供一些语言绑定的支持,比如说,只支持Java?集成的过程是否需要将注册过程以及发现过程的代码嵌入到你的应用程序中,或者使用一个类似于集成助手的进程?运行时依赖——是否需要JVM,ruby或者其他在你的环境中并不兼容的运行时?可用性考虑——如果系统失去一个节点的话,是否还能正常工作?系统是否可以实时更新或升级,而不造成任何系统的瘫痪?既然集群的信息注册节点是架构中的中心部分,那该模块是否会存在单点故障问题?强一致性的Registries首先介绍的三个服务注册系统都采用了强一致性协议,实际上为达到通用的效果,使用了一致性的数据存储。尽管我们把它们看作服务的注册系统,其实它们还可以用于协调服务来协助leader选举,以及在一个分布式clients的集合中做centralizedlocking。ZookeeperZookeeper是一个集中式的服务,该服务可以维护服务配置信息,命名空间,提供分布式的同步,以及提供组化服务。Zookeeper是由Java语言实现,实现了强一致性(CP),并且是使用Zab协议在ensemble集群之间协调服务信息的变化。Zookeeper在ensemble集群中运行3个,5个或者7个成员。众多client端为了可以访问ensemble,需要使用绑定特定的语言。这种访问形式被显性的嵌入到了client的应用实例以及服务中。服务注册的实现主要是通过命令空间(namespace)下的ephemeralnodes。ephemeralnodes只有在client建立连接后才存在。当client所在节点启动之后,该client端会使用一个后台进程获取client的位置信息,并完成自身的注册。如果该client失效或者失去连接的时候,该ephemeralnode就从树中消息。服务发现是通过列举以及查看具体服务的命名空间来完成的。Client端收到目前所有注册服务的信息,无论一个服务是否不可用或者系统新添加了一个同类的服务。Client端同时也需要自行处理所有的负载均衡工作,以及服务的失效工作。Zookeeper的API用起来可能并没有那么方便,因为语言的绑定之间可能会造成一些细小的差异。如果使用的是基于JVM的语言的话,可能会对你有帮助。由于Zookeeper是一个CP强一致性的系统,因此当网络分区(Partition)出故障的时候,你的部分系统可能将出出现不能注册的情况,也可能出现不能找到已存在的注册信息,即使它们可能在Partition出现期间仍然正常工作。特殊的是,在任何一个non-quorum端,任何读写都会返回一个错误信息。DoozerDoozer是一个一致的分布式数据存储系统,Go语言实现,通过Paxos算法来实现共识的强一致性系统。这个项目开展了数年之后,停滞了一段时间,而且现在也关闭了一些fork数,使得fork数降至160。.不幸的是,现在很难知道该项目的实际发展状态,以及它是否适合使用于生产环境。Doozer在集群中运行3,5或者7个节点。和Zookeeper类似,Client端为了访问集群,需要在自身的应用或者服务中使用特殊的语言绑定。Doozer的服务注册就没有Zookeeper这么直接,因为Doozer没有那些ephemeralnode的概念。一个服务可以在一条路径下注册自己,如果该服务不可用的话,它也不会自动地被移除。现有很多种方式来解决这样的问题。一个选择是给注册进程添加一个时间戳和心跳机制,随后在服务发现进程中处理那些超时的路径,也就是注册的服务信息,当然也可以通过另外一个清理进程来实现。服务发现和Zookeeper很类似,Doozer可以罗列出指定路径下的所有入口,随后可以等待该路径下的任意改动。如果你在注册期间使用一个时间戳和心跳,你就可以在服务发现期间忽略或者删除任何过期的入口,也就是服务信息。和Zookeeper一样,Doozer是一个CP强一致性系统,当发生网络分区故障时,会导致同样的后果。EtcdEtcd是一个高可用的K-V存储系统,主要应用于共享配置、服务发现等场景。Etcd可以说是被Zookeeper和Doozer催生而出。整个系统使用Go语言实现,使用Raft算法来实现选举一致,同时又具有一个基于HTTP+JSON的API。Etcd,和Doozer和Zookeeper相似,通常在集群中运行3,5或者7个节点。client端可以使用一种特定的语言进行绑定,同时也可以通过使用HTTP客户端自行实现一种。服务注册环节主要依赖于使用一个keyTTL来确保key的可用性,该keyTTL会和服务端的心跳捆绑在一起。如果一个服务在更新key的TTL时失败了,那么Etcd会对它进行超时处理。如果一个服务变为不可用状态,client会需要处理这样的连接失效,然后尝试另连接一个服务实例。服务发现环节设计到罗列在一个目录下的所有key值,随后等待在该目录上的所有变动信息。由于API接口是基于HTTP的,所以client应用会的Etcd集群保持一个long-polling的连接。由于Etcd使用Raft一致性协议,故它应该是一个强一致性系统。Raft需要一个leader被选举,然后所有的client请求会被该leader所处理。然而,Etcd似乎也支持从non-leaders中进行读取信息,使用的方式是在读情况下提高可用性的未公开的一致性参数。在网络分区故障期间,写操作还是会被leader处理,而且同样会出现失效的情况。
Ⅶ 趁热再说几句区块链
趁热再说几句区块链
区块链,又火了
互联网成了维密的 T 台,大佬们穿着技术的内衣裤,搔首弄姿秀性感,腿毛飘飘在风中丝丝缕缕,油黑闪亮。
2017 年末,区块链成了最性感的小内内,各路人马人手一件,有的穿在裆部,有的顶在头上,还有的插在杆上当旗帜。
盯着屏幕上的智能合约代码,我有些忧郁。T 台上没我,T 台下也没我,我在暖气不足的办公室里,还穿着跟性感毫不沾边的羽绒服。
今天早上,在小区里遇到牛大妈,她拉住我,语重心长的告诫我,别写 Java 了,搞区块链吧,概念股都涨疯了。那是早上 7 点,小区里零下10 度严寒逼人,空气中却有一种莫名其妙的气息,闻起来生机勃勃,很可能是天然气锅炉排放的废气中有某种兴奋剂。
我感到无力,感到无奈,这一波的热度,绝逼又跟我无关了。我那几行智能合约代码,对区块链这个2017年的网红毫无贡献。 那些 T 台上的大佬们,又一次没叫我 “同去”,他们一贯如此!
区块链火的莫名其妙,仿佛就在一瞬间,几个月前的情势还完全不同。那时候,人工智能是主角,区块链就像是嫁到山东人家的媳妇,上不得台面的。有一次在饭桌上,一位 VC 大佬 (不是很大,半大不大)介绍自己的投资方向:“必须是人工智能,区块链不行的。” 他眼睛盯着我,炯炯有神。 我低下头,有些羞愧。这要是在微博上,我就死掐了,你可以看不起我这个人,但你不能看不起我用的技术,对不对?
然而,就在最近,这位大佬(不是很大,半大不大)开始转徐小平,马化腾关于区块链的文章了,而且评论道:“深刻好文!改变世界的区块链!”。不知道这位大佬(不是很大,半大不大)是否也要掀区块链的牌子了。
我一直疑心,有一个神秘的 “互联网名词炒作委员会”,就是他们在翻云覆雨兴风作浪,一波波的炒作各种概念......而我见到的那 VC 大佬(不是很大,半大不大),很可能不在这个委员会中。
人工智能 VS 区块链,该谁吃鸡?
人工智能与区块链,可谓是绝代双骄,成了近年来最火热的两个概念。
如果硬要比一下的话,人工智能与区块链,谁更牛逼?
谈起人工智能,人类就要发抖,说是害怕有一天被机器收拾了。这有点像家养的宠物狗,看到只断翅的苍蝇,就如临大敌,张牙舞爪上蹿下跳的汪汪叫,其实就是平时太无聊,找个机会自己吓自己玩。人工智能也好,机器人也好,别说收拾人类了,就是收拾只苍蝇,都还早着呢,往一百年外展望吧。我觉得,我国的 GDP 银河系第一,都会比人工智能拥有自我意识来的早。
而谈起区块链,那发抖的是各个中心化的权力机构,其中就要包括各国政府啦。这可真不是小狗抓苍蝇的游戏,想想吧,现在就有多少财富藏在了比特币链条上,而各国政府无能为力,束手无策,一筹莫展,恨之入骨。苍蝇也是肉,眼看着苍蝇越来越肥,小狗们抓不到,着急死了。
所以说啊,从长远来看,人工智能一定是牛逼多了。未来科技的接力棒,是要从人类的手上交给 AI 的,这还不够 AI 臭屁的?
但从近期看,区块链的意义却更加重大,因为,它改变的目标,乃是人类的组织模式。
区块链消解中心化的权力;区块链建立信任的网络;区块链用代码传递价值;区块链协调机器间的对话;区块链实现社区自治。从来就没有什么救世主,也没有神仙皇帝 - 这句歌词完全可以送给区块链。过去千百年来,社会的运转全赖中心化威权机构的安排,而今,终于有一丝曙光出现在技术的地平线......
管它什么东西,到我中华民族眼里,第一个问题是:这东西能不能吃?第二个问题是:这玩意能不能挣钱。
区块链自然不能吃,这个不用我回答了,问问你身边的广东朋友吧。要问人工智能与区块链,哪个在挣钱这件事上更牛逼,我还真回答不上来,广东人也一样不知道。这个问题该问那位 VC 大佬(不是很大,半大不大)。
中本聪当年搞 “一种点对点的电子现金系统”,真不是为的钱。 密码朋克小组里的那些大佬(真的很大,大无可大)哥们,都是货真价实的反贼,他们就是要跟政府对着干! 追求的那是个自由的感觉。 早到从 RSA 那三个哥们开始,只要是搞密码学的,又不是美国政府体制内的,哪一个不是美国政府的眼中钉肉中刺?这还说的是美国政府,换个别的政府,噢,天哪,血都凉了,坟头草都亭亭如盖了。
还有另一波大佬(真的很大,大无可大)哥们,他们是米塞斯、哈耶克一伙,对各国政府深怀敌意的一群经济学者。哈耶克认为,货币的发行权就不该垄断在政府手里,政府根本没有能力掌控货币的发行,货币的发行应该交给自由市场。让政府发行货币,就如同让老鼠去烹饪美食,首先老鼠就压根做不到烹饪,其次老鼠会偷吃原材料。 哈耶克说:任何人都可以发行货币,应该让多种货币在市场中自由竞争。
哈耶克一贯的核心思想就是:从来就没有什么救世主,也没有神仙皇帝,能够制定和控制经济运行的规则,这些规则是在自由市场中无意识的演化出来的。
交给自由市场吧,有些事情是人类理解不了的,也操作不好的。
哈耶克的核心思想,也是人工智能的核心思想,也是区块链的核心思想。为什么这么巧合呢?因为啊,牛逼的人想法都是相同的,而不牛逼的人各有各的想法。
人工智能说,这个函数太复杂,人类找不出来的,让机器找出很多个线性函数来拟合它吧,交给机器吧。
区块链说,信任这种事,交给人类真的不放心,还是让机器来执行约定好的规则吧。
把权力交给机器,是人工智能与区块链共同的哲学思想。
说到这里,我们可以犀利睿智的指出,其实人工智能和区块链干的是一件事嘛。 区块链从组织形式上,为机器开道。人工智能则从能力上,为机器开道。人类的组织形式和能力,都太过老旧了,该为将来的机器文明做一些变革了。
对于开发者来说,区块链要更容易上手一些。人工智能太麻烦了,又要数据又要显卡,还要建模调参看效果。所以,穷屌丝程序员,要挣小钱,就搞区块链吧。怀揣梦想,渴望挣大钱的程序员,请走右边,右边是人工智能通道,请闭上眼睛,齐步走,一二三,跳!
区块链,能干些什么?
在现阶段,用区块链干什么最合适? 我的答案是营销!换句话来表达,就是用来忽悠,最合适不过。
据说,现在全国有 5000 家公司与区块链有关系。又据说,全国能开发区块链的开发者,一共 200 人。
我觉得这两个数字都不很靠谱。我认为,靠谱的说法是,全国共有 5000 家公司的老总,在朋友圈里浏览过区块链的科普文章,于是他们的公司就都与区块链沾边了。 至于开发者,能跑起来 Hyperledger,Ethereum,能写几行智能合约,全国怎么也得有个 5000 人。
还据说,这个说法我认为较为靠谱,那就是在 2017 年,区块链技术带来的收入,不超过 1 亿人民币。
所以说,现在那些铺天盖地的宣传,大家听听就好了,不必太当真。在这个阶段,这种宣传倒也不是坏事,也算是推动行业发展了。四人抬轿,千人吆喝,总能快一点点,啦啦队也不是没有贡献。
而且,区块链的发展,也确实被推动了。我已经被 50000 个人问过:我能用区块链做些什么?
被忽悠一番后,大家都开始盯着自己家那些中心化系统了,怀疑的波光在眼神中流转。就像新一季开始,女人审视自己的衣柜一样。
其实呢,大家完全不必喜新厌旧。 区块链要干掉的,是中心化的 “组织”,不是要干掉中心化的 “系统”。你那 OA 该怎么用还怎么用吧,自家的 OA 系统,没必要搞区块链。就跟你一家族企业,要投票选举董事长了,你这不是脑子进水么。
要用区块链,您先想一想,您是要与谁,在哪个业务上,去达成 “共识”? 您是要与谁,在哪个环节,去取得 “互信”?
核心是 “共识”。
当然,区块链还能做到永不停机,这是以太坊大肆宣扬的。但在我看来,这真没那么重要。中心化的系统做好了,离永不停机也差不多。
举个区块链应用的例子。常见且便于理解的例子,是签合同的场景。我们现在签订合同,依然依赖的纸质合同。在纸质合同上签字盖章,然后一式两份,双方各持一份。这是发生在现实世界中,一次 “共识” 的达成。
“纸质” 与 “签字盖章”,这就是为了防篡改。而 “一式两份”,就是分布式存储。
要把签纸质合同这个过程,用软件来完美的实现,那就是区块链了。“纸质签字盖章” 在区块链上的实现,是通过时间戳、哈希运算、非对称加密签名等技术。 而 “分布式存储”,则是通过 POW,POS 共识算法以及 P2P 协议完成。
以上全过程的软件实现,就是一次区块链 “共识” 的达成。
IT 技术、互联网技术发展到今天,现金都被电子支付取代了,而合同却一直是个老大难,纸质合同流程一直顽固的存在着。现在,区块链就是来颠覆纸质合同这样顽固场景的。
再举个例子吧。 积分互通的场景。不知道为什么,2017 年末,做积分突然火起来了,家家户户都要做积分。我私下猜测,怕是有些楚王好细腰的意思,楚王的圣意被 “ “互联网名词炒作委员会” 破解了。早年间咱们的 “工分” 不就是一种积分么。
当然,商业积分在很多国家是非常成熟的,对于企业来说,积分是很好的客户忠诚度管理工具,但在我国一直没有做起来,所以,发展一下商业积分,是个好方向。
例子是这样的。两家企业,A 与 B,都发行了自己的积分,叫 A 积分与 B 积分吧。 两家企业想搞积分共用,让消费者可以在 B 那里用 A 的积分,在 A 那里用 B 的积分。
这就产生了一个场景,消费者灯下鼠到了企业 B,用 A 积分 100 万买了台保时捷,若是在传统的中心化系统下,企业 B 的系统要通过 API 连接到 A 的系统,验证灯下鼠的身份,以及积分数量。验证后,请求 A 的系统,要消费 100 万 A 积分,经 A 的同意,A 的系统记录 B 消费了 100 万积分。B 在自己的数据库中记录,收到 A 积分 100 万。
到了月底,B 拿着 100 万积分的报表,到 A 那里去结账。A 到数据库中查询,确认有 100 万积分到了 B 那里。OK,结算成功。
问题是,A 若是不承认 100 万积分怎么办? 抵赖怎么办?A 若是改自己的数据库怎么办?若是再复杂一些, 多家企业参与, B 收到 A 的积分,还可以到 C 那里去消费 A 的积分,这该怎么处理?
区块链就能完美的解决这个问题。A B 两家企业,通过联盟链,把积分交易近乎实时的达成共识。也不用月底再走对账手续了,任何时候,A B 两者的区块链数据都是一致的。
有的开发者要钻牛角尖了:我用传统的中心化系统,一样能保证数据库一致。
当然是可以的。但只要你做的完美,让 A B 两家的数据库能够完全一致,解决了各种可能出现的问题,那么实际上,你就是在开发一套区块链了。
在多方之间,达成 “信任”,达成 “共识”,就是区块链的用武之地。
中本聪设计比特币,完全是为了设计一种去中心化的电子货币。由此,诞生了区块链。
而到了以太坊,则区块链摇身一变成了 IT 基础设施。以太币乃是驱动区块链应用的价值度量,而以太坊上的智能合约,才是链条的主角。
理论上,智能合约能开发任何系统。智能合约英文是 Smart Contract,这里的 “智能”,与 AI 的 Artificial Intelligence 的智能没关系。实际上,尼克萨博在 95 年提出智能合约时,也与区块链也没关系,它的概念很简单,就是将法律条文写成可执行代码。
但巧克力与下雨天最配,智能合约与区块链最配。 如上文所述,合同,都是要一式两份,或者一式四份的。 而智能合约,既然是法律条文,又要可自动执行,当然不能控制在合同的某一方手中,一定是要实现分布式存储,才能令参与各方放心,这就是所谓的去中心化了。
今天,用区块链,用智能合约来做的应用,主要集中在如下几个领域:
金融领域:用来做数字货币;用来做支付系统;用来做汇款系统;用来做清算系统;用来做证券交易系统;用来做供应链金融。
资产描述:用来做资产的登记,例如房产土地注册,贵重物品登记。
保险产品:用来做互助保险,以及其它条款简单的保险产品。
身份认证:用来做个人以及企业的身份信息存储以及在线认证。
供应链:用来做商品的溯源,生产流程的跟踪。
政务:用来做投票;用来做公文存证;用来做产权登记。
当然还可以用来做游戏,比如做一个区块链养猫,养狗,养青蛙,或者也可以试试养汉子?
甭管做什么了,在您决定要进军区块链之前,在您决定开始搜索 “区块链” 之前,记住我的话,一定要先宣传,要用能让全世界都听到的嘹亮声音呼喊:我们做区块链了。
区块链技术的现状
能干什么,与干的怎么样,是两件事。
区块链最成熟的应用,自然还是比特币、以太坊等系统。而在商业应用领域,只能说大家都还在摸索。
很多报道说xx公司区块链应用上线了,其实多数都是在自己家里,或者几家公司联盟,在各自的实验室里跑了条链而已。还没见到哪个应用,把链条数据直接放出来的。
现阶段,智能合约的应用,也是与中心化的系统结合使用。少有把所有的业务逻辑,都在智能合约上实现。
把区块链用的纯熟的,多数都是创业型公司。能自己写一条链条的人,大约是不屑于打工了。
大规模、大容量的应用,例如电商什么的,几乎没有用区块链实现的。毕竟现阶段,区块链还有效率和容量的问题。 但我想,真的实现,也不会太久了。现在虽然还是 “只听楼梯响,不见人下来”,但一旦下来一个人,跟风者马上就会挤满房间的。
不用 10 年,区块链就会成为一种常用的技术,就和今天的关系型数据库一样。
但区块链注定有别于关系型数据库,有别于移动、大数据技术什么的,它是与互联网一个级别,甚至超越互联网的概念。因为,它挑战了人类的组织模式,它改变了人类的组织模式。
今天的互联网如此繁荣,如此剧烈的改变人类的生活,但它并没有改变人类的组织模式。电商是非常发达了,但只不过把市场从社区商店超市搬到了淘宝和亚马逊。银行还是那个银行,支付宝微信也不过是另一个银行;中介还是中介,淘宝店不过是商店的网上形态;你要证明自己是父母的蛾子,还是要去派出所盖个章,一切都没有变化,和明清时代也少有不同。以 “人” 为中心,来执行判断,来做决策,几千年来毫无变化。
是时候,将一部分工作,交给机器了。
当区块链技术发展 50 年后,人们回首望去,惊讶的发现,有那么多的机构竟然消失不见,才能领会到 2107 年区块链所生发出的意义。
10 年之后,区块链技术在开发中,将要占据十分之一的工作量。这是我估计的,不一定准,先瞎猜一个,万一准了呢。
上文说的,智能合约与区块链最配,智能合约仿佛侠客,而区块链则是一匹骏马。
区块链还有一个绝配,那就是物联网。万物互联,物与物之间的对话,物与物之间的交易,该怎么搞? 用区块链的去中心化存储,用区块链的共识算法,再合适不过。不过,那还远,区块链结合上物联网的时候,我国 GDP 肯定早已太阳系第一了。
我该怎么应用区块链
前文已叙,使用区块链的第一件事,是要大声喧哗,要让全世界都知道你用区块链了,一方面给自己做做营销,另一方面顺便推动行业发展。
第二件事,是审视下自己的业务,有那些地方,需要与他人达成共识,需要与他人达成互信,找到了,就是你用区块链的地方。
但切切记住,在今天应用区块链,一定要谨慎,这与用关系型数据库和JAVA 开发系统还是很不一样的。
一定要认真的分析,认真的设计,然后再动手。用哪个开源区块链,是公链部署还是私链部署,智能合约如何设计,与中心化系统的接口怎么搞,上线后怎么运行,怎么维护,这些都要仔细考虑。
其实能选择的技术路线,就那么几种,比特币,以太坊,Hyperledger,Quorum,可选的不多。
找国内的区块链公司,直接用他们的链条也可以,有些公司的链也很可靠了。趣链、布比好多家都是认真做链的。不过,就我所知,国内的链,也都是从那几条国际链改过来的。
要是自己搞,就找两个研究能力强的工程师,从头开始学习以太坊或者 Hyperledger,大约过二三个月,应该就能写智能合约了,也能做 Dapp 了,要是还不能,你就开掉他们吧,重新招两个。要是野心大的,想要自己改链条协议,从源码玩起,这个难度要大些,你得找几个数学好,精通算法的博士,认真干个一两年吧。其实,改链条源码,也是个良心活,改多改少,只要不放出去,也只有你自己知道。
动手之前,最好还是找一些做过区块链项目的,咨询一下。可能人家的一句话,就省却你 3 个月的功夫。 要知道,在浩瀚的互联网上,还真找不到区块链的成熟应用方案,大家都在摸索。
最大的挑战就是:我的应用场景,该如何用区块链技术来实现。
大家都在黑暗中摸索,摸到成功的,就是开了一盏灯,等到千百盏灯亮起,房间里灯火通明的时候,区块链技术也就不稀罕了。
怕的是摸了一通,黑灯瞎火,光摸到飘飘的腿毛,摸不到灯,大家就灰心丧气,就散了,不摸了。人工智能就散了好几次,这几年又重振信心,继续摸开了,大佬们的腿毛再次在黑暗中油光发亮。
用了区块链,我能得到什么
对于工程师来说,掌握了区块链技术,当然薪资要涨一把了。今天区块链人才还是很稀缺的。
对于一家企业来说,若是用上了区块链,千万别看着区块刷刷挖出来,自己个儿偷着乐,一定要大肆宣传,品牌会提升,销售会增加,股价市值会暴涨。
说到底呢,股价和市值,跟区块链技术没多大关系,涨了也是因为忽悠的技术好。那些大佬们,也就是 “互联网名词炒作委员会” 的委员们,人家不炒区块链,也会去炒 AI,不炒 AI 也会去炒 iOT,总之,人家的炒锅里不会缺料的。怎么忽悠,怎么来钱,刷刷的从天上掉钱。
真喜欢区块链技术,又在 “互联网名词炒作委员会” 里没有干爹的,就别想那么多了,屌丝戒之在贪。 别想钱的事了,先用上再说,得不到什么便宜,也能尝个鲜不是。
2013 年的时候,在望京的一间狭小办公室中,我与几个朋友聊天,谈起用 Java FX 做一个比特币交易网站。一位朋友说:“比特币现在涨疯了, 200 多块钱一个,做个交易所不错的。”
我那个时候就喜欢比特币,因为比特币那反贼气质,但我没有买。交易所也没做。
现在我后悔了,但却不仅仅因为错过了比特币高涨的盈利机会。而是我反思得出了一个结论,那就是,虽然我口口声声热爱自由,实在只是叶公好龙罢了,当一个自由的乌托邦摆在我的面前,我却没有珍惜,不敢走进去。我没买比特币,就是个好的例证。
Ⅷ 介绍一些网络术语
Windows2000术语表
A
access control / 访问控制
access control entry, ACE / 访问控制项
account lockout / 帐户锁定
ACE, access control entry / 访问控制项
acknowledgment message / 应答消息
ACPI (Advanced Configuration and Power Interface) / 高级配置和电源接口
active / 活动
active content / 活动内容
Active Directory
Active Directory Users and Computers / Active Directory 用户和计算机
active partition / 活动分区
active volume / 活动卷
ActiveX
Address Resolution Protocol, ARP / 地址解析协议
administration queue / 管理队列
administrative alerts / 管理警报
administrator / 管理员
Advanced Configuration and Power Interface, ACPI / 高级配置和电源接口
agent / 代理
Alerter service / 警报器服务
allocation unit size / 分配单元大小
American Standard Code for Information Interchange, ASCII / 美国信息交换标准码
AppleTalk
AppleTalk Transport / AppleTalk 传输
ARP, Address Resolution Protocol / 地址解析协议
ASCII, American Standard Code for Information Interchange / 美国信息交换标准码
Assistive Technology Program / 辅助技术程序
asymmetric encryption / 非对称加密
asynchronous communication / 异步通讯
ATM asynchronous transfer mode / 异步传输模式
attributes / 属性
audit policy / 审核策略
auditing / 审核
authentication / 身份验证
authoritative restore / 强制性还原
authorization / 授权
B
B-channel / B-信道
background program / 后台程序
backup media pool / 备份媒体池
backup operator / 备份操作员
backup set / 备份集
backup set catalog / 备份集分类
backup types / 备份类型
bandwidth / 带宽
BAP, Bandwidth Allocation Protocol / 带宽分配协议
base priority / 基本优先级
basic disk / 基本磁盘
basic input/output system, BIOS / 基本输入/输出系统
basic volume / 基本卷
batch program / 批处理程序
baud rate / 波特率
binary / 二进制
binary digit, bit / 二进制数字,位
bindery / 平构数据库
BIOS, basic input/output system / 基本输入/输出系统
bit, binary digit / 位,二进制数字
bits per second, bps / 每秒位数
boot / 启动
boot files / 启动文件
boot partition / 启动分区
boot volume / 启动卷
bps, bits per second / 每秒位数
buffer / 缓冲区
built-in groups / 内置组
bus / 总线
bytes received / 接收的字节数
bytes transmitted / 传输的字节数
C
CA, certification authority / 证书颁发机构
callback number / 回叫号码
callback security / 回叫安全
called subscriber ID (CSID) string / 被叫订户 ID (CSID) 字符串
CAPI (CryptoAPI)
cartridge font / 字体盒字体
catalog / 编录
CDP, CRL Distribution Point / CRL 分发点
certificate / 证书
certificate revocation list, CRL / 证书吊销列表
certificate store / 证书存储区
certificate template / 证书模板
certificate trust list, CTL / 证书信任列表
certification authority, CA / 证书颁发机构
certification hierarchy / 证书等级
certification path / 证书路径
channel / 信道
CHAP, Challenge Handshake Authentication Protocol / 质询握手身份验证协议
character mode / 字符方式
child object / 子对象
clear / 清除
client / 客户
client application / 客户应用程序
Client Service for NetWare / NetWare 客户服务
ClipBook Server / 剪贴簿服务器
Cluster Administrator / 群集管理器
Cluster Administrator extension / 群集管理器扩展
Cluster service / 群集服务
cluster size / 簇大小
Cluster.exe
CMYK color space / CMYK 颜色空间
code page / 代码页
codec / 编解码器
color gamut / 色阶
color management / 颜色管理
color profile / 颜色配置文件
color space / 颜色空间
Command Prompt window /“命令提示符”窗口
common groups / 公用组
communication port / 通讯端口
communication settings / 通讯设置
community name / 社团名
Compression Control Protocol, CCP / 压缩控制协议
computer account / 计算机帐户
Computer Browser service / 计算机浏览器服务
computer quota / 计算机配额
connect / 连接
connected, authenticating user / 已连接,正验证身份的用户
connected, user authenticated / 已连接且身份已验证的用户
connector application / 连接器应用程序
connector queue / 连接器队列
console tree / 控制台树
container object / 容器对象
backup / 副本备份
CPU Time / CPU 时间
CPU Usage / CPU 使用
CRC errors / CRC 错误
CRL, certificate revocation list / 证书吊销列表
CRL Distribution Point, CDP / CRL 分发点
CryptoAPI (CAPI)
cryptographic service provider, CSP / 加密服务提供程序
cryptography / 加密
CSID (called subscriber ID) string / CSID(被叫订户 ID)字符串
CSP, cryptographic service provider / 加密服务提供程序
CTL, certificate trust list / 证书信任列表
custom file type / 自定义文件类型
D
D-channel / D-信道
DACL, discretionary access control list / 任意访问控制表
daily backup / 每日备份
Data Communications Equipment, DCE / 数据通讯设备
Data Terminal Equipment, DTE / 数据终端设备
data-overrun error / 数据溢出错误
DCE, Data Communications Equipment / 数据通讯设备
DDE, dynamic data exchange / 动态数据交换
dead-letter queue / 死信队列
debugger / 调试器
default button / 默认按钮
default network / 默认网络
default printer / 默认打印机
default tree and context / 默认树和上下文
default user / 默认用户
defragmentation / 碎片整理
dependency / 从属关系
dependent client / 从属客户
descendent key / 派生项
desktop / 桌面
desktop pattern / 桌面方案
destination document / 目标文档
details pane / 详细信息窗格
device / 设备
device conflict / 设备冲突
device driver / 设备驱动程序
device fonts / 设备字体
Device Manager / 设备管理器
DHCP, Dynamic Host Configuration Protocol 动态主机配置协议
DHCP option / DHCP 选项
dial location / 拨号位置
dial-up connection / 拨号连接
differential backup / 差异备份
digital signature / 数字签名
Digital Signature Standard, DSS / 数字签名标准
digital video disc, DVD / 数字化视频光盘
direct cable connection / 直接电缆连接
direct memory access, DMA / 直接内存访问
directory partition / 目录分区
disable / 禁用
discretionary access control list, DACL / 任意访问控制表
disk / 磁盘
disk configuration information / 磁盘配置信息
dismount / 卸除
display adapter / 显示适配器
DLL, dynamic-link library / 动态链接库
DMA, direct memory access / 直接内存访问
DNS, Domain Name System / 域名系统
DNS server / DNS 服务器
docking station / 插接站
document / 文档
domain / 域
domain controller / 域控制器
domain name / 域名
Domain Name System, DNS / 域名系统
domain namespace / 域名空间
dots per inch, DPI / 每英寸点数
downloadable fonts / 可下载字体
drag / 拖动
drive / 驱动器
drive letter / 驱动器号
drop folder / 拖动文件夹
DSS, Digital Signature Standard / 数字签名标准
DTE, Data Terminal Equipment / 数据终端设备
al boot / 双重启动
plex / 双工
DVD, digital video disc / 数字化视频光盘
DVD decoder / DVD 解码器
DVD drive / DVD 驱动器
DWORD
dynamic data exchange, DDE / 动态数据交换
dynamic disk / 动态磁盘
Dynamic Host Configuration Protocol, DHCP / 动态主机配置协议
dynamic volume / 动态卷
dynamic-link library, DLL / 动态链接库
E
EAP, Extensible Authentication Protocol / 可扩展的身份验证协议
EFS, encrypting file system / 加密文件系统
embedded object / 内嵌对象
emergency repair disk, ERD / 紧急修复磁盘
enable / 启用
encapsulated PostScript (EPS) file / 封装的 PostScript (EPS) 文件
encrypted passwords / 加密的密码
encrypting file system, EFS / 加密文件系统
encryption / 加密
enhanced small device interface, ESDI / 增强型小型设备接口
environment variable / 环境变量
EPS (encapsulated PostScript) file / EPS(封装的 PostScript)文件
ERD, emergency repair disk / 紧急修复磁盘
error detection / 错误检测
event / 事件
Event Log service / 事件日志服务
event logging / 事件记录
everyone category / everyone 的分类
expanded memory / 扩充内存
expansion slot / 扩展槽
explicit permissions / 直接权限
express message / 快递消息
extended memory / 扩展内存
extended partition / 扩展分区
Extensible Authentication Protocol, EAP / 可扩展的身份验证协议
external network number / 外部网络号
F
failback / 故障回复
failed / 失败
failover / 故障转移
FAT, file allocation table / 文件分配表
FAT32
fault tolerance / 容错
Fax Service / 传真服务
FCB, file control block / 文件控制块
Federal Information Processing Standard 140-1, FIPS 140-1 / 联邦信息处理标准 140-1
FEP, (front-end processor) / 前端处理器
file allocation table, FAT / 文件分配表
file control block, FCB / 文件控制块
File Server for Macintosh / Macintosh 文件服务器
file system / 文件系统
file type / 文件类型
filter / 筛选器
FIPS 140-1, Federal Information Processing Standard 140-1 / 联邦信息处理标准 140-1
font / 字体
font cartridge / 字体盒
foreground program / 前台程序
foreign computer / 外部计算机
form / 表单
FORTEZZA
fragmentation / 碎片
frame type / 帧类型
free media pool / 可用媒体池
free space / 可用空间
front-end processor, FEP / 前端处理器
full-plex / 全双工
full name / 全名
G
Gateway Service for NetWare / NetWare 网关服务
GDI objects / GDI 对象
global group / 全局组
graphics mode / 图形模式
group / 组
group account / 组帐户
group memberships / 组成员身份
group name / 组名
Group Policy / 组策略
Group Policy object / 组策略对象
guest / 来宾
guest account / 来宾帐户
H
half-plex / 半双工
handle count / 句柄数
handshaking / 握手
Hardware Compatibility List, HCL / 硬件兼容性列表
hardware compression / 硬件压缩
hardware configuration / 硬件配置
hardware decoder / 硬件解码器
hardware profile / 硬件配置文件
hardware type / 硬件类型
hash / 散列
hash algorithm / 散列算法
Hash-based Message Authentication Mode, HMAC / 基于散列的消息验证模式
HCL, Hardware Compatibility List / 硬件兼容性列表
hexadecimal / 十六进制
histogram / 直方图
hive / 配置单元
HMAC, Hash-based Message Authentication Mode / 基于散列的消息验证模式
home directory / 主目录
host name / 主机名
HTML, Hypertext Markup Language / 超文本标记语言
hub / 网络集线器
hubbed mode / 集线模式
hue / 色调
Hypertext Markup Language, HTML / 超文本标记语言
I
I/O (input/output) port / I/O(输入/输出)端口
ICMP, Internet Control Message Protocol / 网际消息控制协议
IDE, integrated device electronics / 集成设备电路
IEEE 1394
Image Name / 映像名称
IME, Input Method Editor / 输入法
import media pool / 导入媒体池
incremental backup / 增量备份
independent client / 独立客户
.inf
infrared, IR / 红外线
Infrared Data Association, IrDA / 红外数据协会
infrared device / 红外设备
infrared file transfer / 红外文件传送
infrared network connection / 红外网络连接
infrared port / 红外端口
inherited permissions / 继承权限
input locale / 输入法区域设置
Input Method Editor, IME / 输入法
input/output (I/O) port / 输入/输出 (I/O) 端口
install / 安装
integrated device electronics, IDE / 集成电路设备
Integrated Services Digital Network, ISDN / 综合服务数字网
interactive dialog box / 交互式对话框
interactive logon / 交互式登录
intermediary device / 中间设备
internal network number / 内部网络号
international prefix / 国际前缀
International Telecommunication Union - Telecommunication [Standardization Sector] (ITU-T) / 国际电信联盟 - 电信 [标准化部门]
Internet
Internet address / 网际地址
Internet Control Message Protocol, ICMP / 网际消息控制协议
Internet Protocol, IP / 网际协议
Internet service provider, ISP / Internet 服务提供商
interrupt / 中断
interrupt request (IRQ) lines / 中断请求 (IRQ) 线路
IP, Internet Protocol / 网际协议
IP address / IP 地址
IPX, Internetwork Packet Exchange / 网间数据包交换
IR, infrared / 红外线
IPX/SPX
IrDA (Infrared Data Association) 红外数据协会
Integrated Services Digital Network, ISDN / 综合服务数字网
ISP, Internet service provider / Internet 服务提供商
ITU-T, International Telecommunication Union - Telecommunication [Standardization Sector] / 国际电信联盟 - 电信[标准化部门]
J
journal queue / 日志队列
journal quota / 日志配额
junction point / 交接点
K
KDC, Key Distribution Center / 密钥分发中心
Kerberos V5
key / 注册表项
Key Distribution Center, KDC / 密钥分发中心
keyboard layout / 键盘布局
L
L2TP, Layer 2 Tunneling Protocol / 第二层隧道协议
LAN, local area network / 局域网
lease / 租用
library / 库
Line Printer Daemon, LPD / 行式打印机后台程序
Line Printer Remote, LPR / 远程行式打印机
linked object / 链接对象
Lmhosts file / Lmhosts 文件
local area network, LAN / 局域网
local computer / 本地计算机
local group / 本地组
local printer / 本地打印机
local user profile / 本地用户配置文件
location / 位置
log file / 日志文件
logical drive / 逻辑驱动器
logical printer / 逻辑打印机
logon rights / 登录权限
logon script / 登录脚本
logon script path / 登录脚本路径
long distance operator / 长途接线员
long name / 长文件名
LPR, Line Printer Remote / 远程行式打印机
luminosity / 光度
M
MAC, Message Authentication Code / 消息验证代码
MADCAP, Multicast Address Dynamic Client Allocation Protocol / 多播地址动态客户分配协议
Make Changes / 进行更改
Management Information Base, MIB / 管理信息库
management system / 管理系统
mandatory user profile / 强制用户配置文件
MARS, multicast address resolution service / 多播地址解析服务
master boot record,MBR / 主引导记录
master domain / 主域
Master File Table, MFT / 主文件表
maximize / 最大化
MBR, master boot record / 主引导记录
MCS, multicast server / 多播服务器
MD2
MD4
MD5, Message Digest Five / 消息摘要 5
media / 媒体
media pool / 媒体池
member server / 成员服务器
memory address / 内存地址
Memory Usage / 内存使用
Memory Usage Delta / 内存使用变化
message / 消息
Message Authentication Code, MAC / 消息身份验证码
message digest / 消息摘要
Message Digest Five, MD5 / 消息摘要 5
Message Queuing / 消息队列
Message Queuing server / 消息队列服务器
Messenger service / 信使服务
MFT, Master File Table / 主文件表
MIB, Management Information Base / 管理信息库
Microcom Networking Protocol Five, MNP5 / Microcom 网络协议 5
Microcom Networking Protocol Four, MNP4 / Microcom 网络协议 5
Microsoft Distributed Transaction Coordinator, MS DTC / Microsoft 分布式事务协调器
Microsoft Management Console, MMC / Microsoft 管理控制台
Microsoft Point-to-Point Encryption, MPPE / Microsoft 点对点加密
MIDI, Musical Instrument Digital Interface / 乐器数字接口
MIDI setup / MIDI 安装程序
minimize / 最小化
mirror / 镜像
mirror set / 镜像集
mirrored volume / 镜像卷
MMC, Microsoft Management Console / Microsoft 管理控制台
MNP4, Microcom Networking Protocol Four / Microcom 网络协议 4
MNP5, Microcom Networking Protocol Five / Microcom 网络协议 5
modem / 调制解调器
modem compression / 调制解调器压缩
molation standards / 调制标准
mount / 装入
mounted drive / 已装入的驱动器
MS DTC, Microsoft Distributed Transaction Coordinator / Microsoft 分布式事务协调器
MS-DOS
MS-DOS-based program / MS-DOS 程序
MSMQ
Multicast Address Dynamic Client Allocation Protocol, MADCAP / 多播地址动态客户分配协议
multicast address resolution service, MARS / 多播地址解析服务
multicast server, MCS / 多播服务器
multihomed computer / 多宿主计算机
multilink dialing / 多链路拨号
multiple boot / 多重启动
Musical Instrument Digital Interface, MIDI / 乐器数字接口
My Documents / 我的文档
N
name / 名称
named pipe / 命名管道
namespace / 名称空间
NCP, NetWare Core Protocol / NetWare 核心协议
NDS, Novell Directory Services / Novell 目录服务
NetBEUI, NetBIOS Enhanced User Interface / NetBIOS 增强型用户界面
NetBIOS, network basic input/output system / 网络基本输入/输出系统
NetWare Core Protocol, NCP / NetWare 核心协议
network adapter / 网卡
network administrator / 网络管理员
network basic input/output system, NetBIOS / 网络基本输入/输出系统
network card driver / 网卡驱动程序
Network DDE service / 网络 DDE 服务
network number / 网络号
node / 节点
nonauthoritative restore / 非强制性还原
noncontainer object / 非容器对象
nonhubbed mode / 非集线模式
nonpaged memory / 未分页内存
nonpaged pool / 未分页池
normal backup / 普通备份
Novell Directory Services, NDS / Novell 目录服务
NTFS file system / NTFS 文件系统
null modem cable / 零调制解调器电缆
NWLink
O
object / 对象
offline / 脱机
OLE
on-disk catalog / 磁盘目录
on-media catalog / 媒体目录
online / 联机
OpenType fonts / OpenType 字体
operator / 操作符
orphan / 孤立
orphan file / 孤立文件
OS/2
owner / 所有者
owner category / 所有者类别
P
package / 对象包
packet / 数据包
packet header / 数据包头
PAD, packet assembler/disassembler / 分组拆装器
page-description language, PDL / 页面描述语言
page fault / 页面错误
Page Faults Delta / 页错误变化
paged pool / 分页池
paging file / 页面文件
paper source / 纸张来源
parent object / 父对象
parity / 奇偶校验
parity bit / 奇偶校验位
partition / 分区
partition boot sector / 分区引导扇区
password / 密码
paused / 已暂停
PBX,Private Branch Exchange / 专用分组交换机
PC Card / PC 卡
PCL, Printer Control Language / 打印机控制语言
PDL, page-description language / 页面描述语言
Peak Memory Usage / 最大内存使用
pel
pending / 挂起
performance alert / 性能警报
performance counter / 性能计数器
performance object / 性能对象
performance object instance / 性能对象实例
permission / 权限
PID, process identifier / 进程标识符
PIF, program information file / 程序信息文件
pixel / 像素
PJL, Printer Job Language / 打印机作业语言
PKCS, Public Key Cryptography Standards / 公钥加密标准
PKCS #7
PKCS #10
PKCS #12
PKI, public key infrastructure / 公钥基础结构
plotter font / 绘图仪字体
Plug and Play / 即插即用
point of termination station, POTS / 终端站点
Point-to-Point Protocol, PPP / 点对点协议
Point-to-Point Tunneling Protocol, PPTP / 点对点隧道协议
policy / 策略
port / 端口
POSIX
possible owners / 可能的所有者
PostScript
PostScript fonts / PostScript 字体
PostScript printer / PostScript 打印机
POTS, point of termination station / 终端站点
power conditioning / 电源调节
PPP, Point-to-Point Protocol / 点对点协议
PPTP, Point-to-Point Tunneling Protocol / 点对点隧道协议
predefined key / 预定义项
preferred owner / 首选所有者
preferred server / 首选服务器
preset-to callback / 预设回叫
primary partition / 主分区
print job / 打印作业
print processor / 打印处理器
print server / 打印服务器
Print Server for Macintosh / Macintosh 打印服务器
print spooler / 打印后台处理程序
printer / 打印机
Printer Control Language, PCL / 打印机控制语言
printer driver / 打印机驱动程序
printer fonts / 打印机字体
Printer Job Language, PJL / 打印机作业语言
printer permissions / 打印机权限
Printer window / 打印机窗口
Printers / 打印机
printing pool / 打印池
Private Branch Exchange, PBX / 专用分组交换机
private key / 私钥
private queue / 专用队列
privileges / 特权
process identifier, PID / 进程标识
program / 程序
program information file, PIF / 程序信息文件
property / 属性
property cache / 属性缓存
property value / 属性值
protocol / 协议
PSTN, Public Switched Telephone Network / 公共交换电话网
public key / 公钥
public key cryptography / 公钥加密系统
Public Key Cryptography Standards, PKCS / 公钥加密标准
public key encryption / 公钥加密
public key infrastructure, PKI / 公钥基础结构
public queue / 公用队列
Public Switched Telephone Network, PSTN / 公共交换电话网
pulse dialing / 脉冲拨号
Q
query / 查询
queue / 队列
queue quota / 队列配额
queue type / 队列类型
quiet answer / 安静应答
quorum log / 仲裁日志
quorum resource / 仲裁资源
quota limit / 配额限制
R
RADIUS, Remote Authentication Dial-In User Service / 远程身份验证拨入用户服务
RAID, Rendant Array of Independent Disks / 独立磁盘冗余阵列
RAID-5 volume / RAID-5 卷
RAM, random-access memory / 随机存取存储器(内存)
raster fonts / 光栅字体
read-only memory, ROM / 只读存储器
realm / 领域
recoverable message / 可恢复的信息
recovery agent / 恢复代理
Recovery Console / 恢复控制台
Recycle Bin / 回收站
reced instruction set computing, RISC / 精简指令集计算
Rendant Array of Independent Disks, RAID / 独立磁盘冗余阵列
refresh / 刷新
refresh rate / 刷新频率
region / 区域
registered file type / 已注册文件类型
registry / 注册表
registry size limit, RSL / 注册表大小限制
remote access / 远程访问
remote access server / 远程访问服务器
remote administration / 远程管理
Remote Authentication Dial-In User Service, RADIUS / 远程身份验证拨入用户服务
remote computer / 远程计算机
remote procere call, RPC
Ⅸ Paxos 算法的几种算法
上面通过证明如果一个协议满足B1-B3 约束条件,那么就可以保证一致性。直接从这些约束得到preliminary protocol ,basic protocol 是preliminary protocol 的限制版,保证了一致性。complete Synod protocol 进一步限制了basic protocol ,满足一致性和过程需求(progress requirements)。下面将这三个算法的具体过程。 满足B1,牧师发起选举的编号必须满足偏序关系,有一个方法是每个发起牧师使用递增的数值作为选举编号,但这样牧师无法立即知道他们选的数值有没有被其他牧师选作选举编号已经被使用。还有一个方法是使用数字+牧师姓名作为选举编号,这样就避免了自己的选举编号被其他牧师使用。
满足B2,每次选举的法定人数必须是一个大部分集合(majority set)Q,这样任意两个选举都会有一个共同的牧师。这里大部分集合是一个灵活的选择,在原文中Lamport 使用体重打比方,体重的人更有可能呆在议会大厅,这样就可以使用体重超过一半的牧师集合作为大部分集合。至于实际情况中的大部分集合是什么要看具体情况了。
满足B3,要求每个牧师p 每次在发起选举前必须找到B_qrm 中每个牧师q 的MaxVote(b,q,B)。
根据以上要求,可以得到初始协议:
1. 牧师p 选择一个选举编号b ,并发送NextBallot(b)送给其他牧师
2. 其他牧师q 在收到NextBallot(b) 后,返回LastVote(b,v) 给牧师p,v=MaxVote(b,q,B)$是小于b 编号的q 投的最大的赞成票。为了保证B3,q 不能在b 和b_bal 之间的选举投赞成票。(如果q 在发送了LastVote(b,v)又对新的选举投票了那么v 也就不是q 投的最大赞成票)
3. 牧师p 从一个大部分集合Q 中每个牧师q 中都收到LastVote(b,v) 后,发起一个新的选举,编号为b,法定人数为Q,法律d满足B3。然后牧师p 将这个法律写在自己账目的背面,发送BeginBallot(b,d)给Q 中每个牧师。
4. 牧师q 收到BeginBallot(b,d) 后决定是否为这次选举投赞成票,如果赞同,则他将发送Vote(b,q) 给牧师p。
5. 如果牧师p 收到Q 中每个牧师q 发来的赞成票Vote(b,q),则将法律d 写入他的账目中,并向所有q发送Success(d) 消息。
6. 收到Success(d) 消息后,牧师q 将法律d 写入到自己的账目中。
说明:第一步表示发起法律的牧师p 希望下一个选举的编号是b 。牧师q 用LastVote(b,v) 回应了牧师p 的请求,也就是向牧师p 通过法律时保证了v=MaxVote(b,q,B) 的被改变,具体来说就是不在b 和b_bal 之间的选举投赞成票。
第三步要求法律d 需要满足B3,这里我开始有点迷糊,实际系统中的值是客户端决定的,而不应该是B3 决定的。这里我们还是用上面的key-value 数据库的例子来理清下思路:当某个节点/牧师第一次发起更新前相当于B为空集,发起更新/选举的操作不断进行,直至所有法定人数(quorum)都对法律投了赞成票(即majority set 的节点都更新了该key-value 的值则认为更新成功),B3对应的就是之前的更新没有成功,那么新的选举值需要保持的情况。第四步允许牧师可以不发送Vote(b,q) 或者发送几次,对应的是发送的信息可能因为通信而失败而未发送或者被多次发送。一旦牧师投了赞成票则确认可以修改该值。
考虑到最后第六步法律d 才被牧师q 写入到账目,有可能出现的情况就是在第五步的时候牧师p 将法律写入到了自己账目中,接着发送Success(d) 给其他牧师,其中因为通信或者牧师离开议会大厅而没有被写入到自己的账目中,导致不一致。所以真正写入到账目时机应该是在第四步牧师q 在发送给牧师p 赞成票的同时就法律写入到了各自账目中。而不用考虑如何保证牧师q 第四步写入的法律会导致不一致,因为法律如果没有通过则还有更多的选举来保证一致性。后面也谈到了当法律第一次别写入到账目中算通过法律。 初始协议(Preliminary Protocol)要求每个牧师都保存 (i) 他发起的每个选举; (ii) 他投的每个赞成票; (iii) 他发送的每个$LastVote$。为了简化牧师需要保存的数据,我们对上面的协议做一个限制,得到基础(Basic Protocol)协议。首先介绍三个新的参数:
lastTried[p] 牧师p 发起的最后一个选举
prevVote[p] 牧师p 最近一次的投票
nextBal[p] 收到的选举编号的b 的最大值,即牧师p参加的最大选举编号
在初始协议中,每个牧师可以同时发起任意个选举,在基础协议中要求每个牧师只能发起一个选举lastTried[p],一旦发起一个选举,那么之前发起选举的信息就都不重要了。在初始协议中要求每个牧师不能在b_bal 和b 之间投赞成票,在基础协议中则更严格地要求不能给小于b 的选举投赞成票。那么基础协议可以概述为下面几步:
1. 牧师p 选择一个大于lastTried[p] 的选举编号b ,发送NextBallot(b)给其他牧师
2. 牧师q 收到NextBallot(b) 且b>nextBal[q]后设置nextBal[q]=b ,接着发送LastVote(b,v) 给牧师p,其中v==prevBa[q] 。(如果b 小于或等于nextBal[q],则不回复)
3. 从满足某个大部分集合Q 中每个牧师收到了LastVote(b,v) 信息,牧师p 发起一个编号为b ,法定人数为Q ,法律为d(满足B3 )的选举,并将BeginBallot(b,d) 发送给Q 中每个牧师。(如果没有满足任意大部分集合Q 的牧师返回,则返回第一步)
4. 牧师q 收到BeginBallot(b,d) ,决定投赞成票,设置prevVote[p] 为这次投票,并发送Vote(b,q) 给牧师p。(如果在收到BeginBallot(b,d) 后发现b 不等于nextBal[q] 则忽略这条信息,说明这期间牧师q 还收到了其他的编号更大的选举)
5. 牧师p 从大部分集合Q 中每个牧师q 收到了Voted(b,d) ,且b==lastTried[p] ,则认为这次选举成功,将法律d 记录在账目中,并向Q 中每个牧师q 发功成功消息Success(d) 。
6. 每个牧师q 收到Success(d) 消息后将法律写入账目。
基础协议是初始协议的限制版,因为两者都对牧师没有行为要求,所以也不保证过程(QS)。下面介绍一个保证过程的协议— 完整议会协议(complete Synode protocol)。 基础协议保证了一致性却没有保证任何过程,因为它只阐述了牧师可能做什么,没有要求牧师应该做什么。为了达到之前谈到的过程需求(Qrogress Requirements),我们需要添加一些额外的要求使得牧师们尽快执行完2-6 步。
考虑一种情况如果牧师q 第二步收到的选举编号b 都比之前收到的要大,那么他就要放弃之前收到的所有选举。可是在选举编号为b 的选举在未确认前,可能又会收到更大编号的选举b’ ,这样就无法通过任何法律,过程也不能保证。所以为了达到过程需求则需要一个选举成功后再发起另一个选举。而首先应该知道服务员传递消息和牧师处理消息的时间,在网络中常常通过设置timeout 来实现,同样的如果超过了一定时间牧师没有收到服务员的回复,则认为该服务员或者对应的牧师离开了议会大厅。
假设牧师执行一个动作在7 分钟以内,服务员传递一个消息在4 分钟以内,那么一个牧师p 发送消息给牧师q ,希望其回复的时间应该是在22 分钟内(7+4+7+4 分钟)。
有了上面时间的假设,再考虑上面讨论过的情况,如果发起选举的牧师p 会在第二步和第四步期望22 分钟内收到其他牧师的回复,如果没有则可能是一些牧师或者服务员离开了议会大厅,或者还有一些牧师发起了编号更大的选举。遇到这两种情况都牧师p 应该终止本次选举,而重新开始发起一个新的选举,为了不至于新发起的选举编号还是太小而仍不能执行,需要从其他牧师哪里获取最新的选举编号,从而选取一个更大的编号发起选举。
进而假设牧师p 是唯一能够发起选举的牧师且议会大厅内有大部分集合的牧师,那么可以保证在99分钟内通过一条法律:22 分钟内发现了有更大编号的法律,22 分钟内获取最大编号并选择个更大的编号,55 分钟内完成1-6 步完成一次成功的选举(疑问:既然只有牧师p 能够发起选举,那么编号都是由其控制的,前两步发现并选择更大的编号似乎就没有必要了。答:并不是所有的选举都是president发起的,其他牧师发起选举,president向其他希望发起选举的牧师配发选举编号)。从上面的过程我们发现完整议会协议需要一个选举president的过程,president的选举算法不是文章重点,所以文章中仅用T 分钟代替了选举president的时间,这样T+99 分钟内可以通过一部法律。
文中选择president的方法是谁的姓在字母表中最后,并将自己的姓发送给议会大厅内所有牧师,如果在T-11 分钟内某个牧师没有收到比自己姓在字母表中更靠后的姓,则认为自己是president(我觉得广播体重也应该不错,不是说体重更重的呆在议会大厅会更久么?^_^)。还有一个细节:在选举president的时候每个牧师p 需要将自己的lastTried[p] 发送给其他牧师,以使得president能够在第一次选举时选择一个足够大的编号。
至此,通过选举president和设置超时,完整议会协议就可以保证过程了。
多法律国会协议
上节的议会协议(complete Synod protocol)中,president被选举出来后,每个希望发起选举的牧师通知他,president给牧师配发选举编号,每次仅通过一部法律。多法律国会协议(The Multi-Decree Parliment)选择一个president通过一系列法律,且只需要执行前两步一次即可。
具体方法是president第一步发送NextBallot(b,n) 代替NextBallot(b) ,表示希望通过n-b 之间的所有的法律,在president 的账目上,编号n 之前的法律都是连续记录了的,b>n 。其他牧师q 收到消息后将每部已经出现在其账目中编号大于$n$的法律都返回给president,不在账目上的返回正常的LastVote 信息。
下面谈到多法律国会协议有关性质,首先是法律的顺序,不同法律编号的选举同时进行,发起选举的每个牧师都认为自己是president(不知道president 是怎么选举出来的,也不知道法律通过的顺序)。在完整议会协议第三步中法律被提议,第一次写入到账目上时称法律被通过。当一个president需要提出新的法案时,他必须从大部分集合牧师中学习到那么法律他们都投了赞成票,每部法律都被大部分集合牧师中至少一个牧师投了票,所以president发起新的选举前总能学到所有之前通过了的法律。president不会在空缺的法律编号内填补重要的法律。,也不会乱序提议法律,所以协议满足“法律有序性”:如果法律A 和法律B 都是重要的法律,法律A 在法律B 提议之前通过,那么法律A 有比法律B 更低的法律编号。第二点属性是president在选举出后且没有人再进出议会大厅,法律是按照下面步骤不断通过的(对应完整议会协议的3-5步):
3. president 向一个法定人数牧师中每个牧师发送BeginBallot ;
4.每个牧师向president 发送Voted 信息。
5.president向每个牧师发送Success 消息。这样通过每部法律只需要三次消息传递,通过合并BeginBallot 和Success 命令可以进一步减少消息传递。
Ⅹ 有什么可以投资的虚拟货币
新一代比特币-比特盛世诞生
大背景:区块链技术的金融应用带来极高投资价值
2018中国国际大数据产业博览会26日在贵州省贵阳市开幕,会上指出我国未来会大力发展数字经济,深入实施大数据和云计算发展行动计划,深入研究区块链技术及应用。尤其在金融领域的落地应用,更是成为科技界和金融界共同关注的焦点。
1、区块链的价值来源在于其能完美解决当下金融行业痛点:
当今资产证券化、保险、供应链金融、大宗商品交易、资产托管等多个金融场景中,由于参与主体众多、信用评估代价高昂、中介机构结算效率低下等原因,传统的金融服务手段难以有效解决行业长期存在的诸如信息不对称、流程繁复冗余、信息验真成本高等核心痛点。
2、区块链为什么能解决上述痛点:
区块链技术集成了分布式记账、不可篡改、内置合约等多项基础技术,构建了一种以更低成本建立信任的机制。基于区块链技术的金融应用,可以实现所有市场参与人无差别获取市场中所有交易信息和资产归属记录的能力,有效解决了信息不对称问题;智能合约嵌入减少了支付结算环节的出错率,简化了流程并提高效率;同时各参与方之间基于透明的信息和全新的信任机制无需再耗费人力、物力、财力去进行信息确认,这将大大降低各机构之间的信任成本进而降低金融服务价格和交易成本。
3、区块链技术在金融领域的应用主要有以下方面:
① 数字货币
其中以比特币最为出名。而在比特币基础上,又衍生出了大量其他种类的去中心化数字货币。如:比特盛世。
② 支付清算
与传统支付体系相比,区块链支付可以为交易双方直接进行端到端支付,无需借助银行体系,在提高速度和降低成本方面能得到大幅的改善。
③ 数字票据
④ 银行征信管理:区块链的优势在于可依靠程序算法自动记录信用相关信息,并存储在区块链网络的每一台计算机上,信息透明、不可篡改、使用成本低。
⑤ 权益证明和交易所证券交易
欧美各大金融机构和交易所纷纷探索以区块链技术为蓝本打造下一代金融资产交易平台的应用研究。
4、区块链发展前景
区块链技术与金融领域结合的深度和广度还远未饱和,应用前景广阔。未来发展区块链技术以联盟链为切入点将最具生命力,并对传统金融行业痛点的改造产生重大效果和深远影响。
响应区块链的良好投资前景,国内企业阿里巴巴、京东、网络均已入局。以区块链技术为依托的金融场景应用带给我们安全与便利的同时,更会提供给我们更广阔的投资空间。以比特币为代表的数字货币的兴起和价格暴涨(比特币2009年刚上市时约人民币2角钱,现今价格7300美元左右!)就是最好的证明,嗅觉敏锐的人已从中获利颇丰。
新一代比特盛世币的理念及技术实现
摘要:这是一款以中本聪所开发的比特币为基础,改进并添加了诸如双层奖励制网络—也称为主节点网络,等多项新功能的加密数字货币。其中还包含为提高可互换性的匿名支付(比特盛世),和在不依赖中心权威下实现即时交易确认的即时支付功能对接(p2p商城)。
1. 介绍
2009年,中本聪提出比特币的概念,自那以后,比特币已迅速在主流应用和商业用途中传播开来,成为首个吸引大量用户的数字货币,是数字货币史上的里程碑。不过从完成交易的角度来看比特币接收的情形,我们可以发现一个重要问题,就是比特币区块确认交易的时间过长,而传统的支付公司已找出使买卖双方实现比特币交易零确认的解决方案,但这一解决方案通常是要在协议之外采用可信赖的第三方完成交易。
比特币提供假名交易,实现发送者和接受者之间一对一交易的关系,并能永远记录全网发生过的交易。比特币只提供低层次的隐私保护,这点在学术界众所周知,尽管有此不足,许多人仍然相信区块链记录的转账历史。
基于中本聪成果,比特盛世以保护隐私为要旨的加密数字货币。我们在比特币概念的基础上进行了一系列的改进,由此诞生出一个去中心化的和具备良好匿名性的加密数字货币,它支持防篡改的即时交易,又有能为比特盛世网络提供服务奖励制的点对点次级网络。
2. 主节点网络
全节点是运行在 p2p 网络上的服务器,让小节点使用它们来接受来自全网的动态变化。这些全节点需要显着的流量和要消耗大量成本的其它资源,由此在一段时间内会观察到比特币网络上的这些节点数量呈现稳步下降的趋势,使区块广播的时间需要额外增加40秒。为解决这问题,提出了许多方案,例如引入微软研究的新奖励计划和 Bitnodes激励计划。
图6:挖矿奖励模型