怎么说呢,市面上介绍pasox协议的资料都不是给小白准备的,甚至不是给具备一定计算计算机基础的同学准备的。
比如这篇佳作:https://weibo.com/ttarticle/p/show?id=2309404510981786042616,也没有让人一下子看了之后顿悟,而是要结合诸多其他的信息才能理解。
这些文章一般不交待一些前置条件都,比如,数据是每台server上都是要存储的,因为普通人的认知里,都会认为一份数据并不是要在每台server上都存储的,一般是三副本,并不是全副本。但是pasox协议说的完全不是这件事情,pasox协议是一个高度抽象的协议,他讲的是一个分布式集群中各个节点是如何做到一致性。
好了又被绕晕了,分布式集群中,如何做到一致性(这句话在各种介绍zk的文章中出现无数遍了)。
搞分布式的同学,一般见识过的集群都是1000台机器,10000台机器的规模,上面部署的组件真是很多,比如分布式调度系统,hadoop,分布式存储系统,hdfs。
那这些系统的开发人员,好像也没怎么见着要做好分布式一致性的事情呢。拿yarn来举例子,ResourceManager和NodeManager好像也不涉及到什么一致性的问题,大家就那样去开发了,上报资源,然后把作业调度到这台机器上。其实,很多分布式系统组件,对一致性的依赖没有那么强烈,不用谈分布式色变,感觉一致性被刻入到分布式系统的每寸肌肤当中。
那么pasox协议到底是解决的什么问题呢?是为了解决分布式系统中的一致性问题,是的,这里又来了一遍,分布式系统中的一致性的问题。
其实不难想象,在单台服务器上,一个进程的多个线程之间共享资源是通过锁机制来实现的,那么在分布式系统中,一个“进程”的多个“线程”可能是分布在不同的机器上的,这个时候如何完成这个锁机制?每个“进程”其实都可以提供自己的锁服务,但是就传统操作系统的设计经验,此类锁服务其实应该下沉到操作系统来完成的,上层应用调用接口就好。那么在云操作系统中,就应该有这样一个角色来提供锁的服务了。锁,其实就是一致性的一部分。
pasox协议不是用来专门处理分布式锁的,锁只是其中的一个应用,pasox解决的事情在不同节点间的数据一致性的问题,对操作系统比较熟悉的同学应该一下子就能在这里关联起:数据的一致性和锁。linux内核中的自旋锁难道不就是在某一个核上不断地去检查一个数据是否变化吗。所以数据的一致性是实现锁的基础。
有了这些内容,再去看pasox协议就能比较畅快了。
pasox协议是说,独立的几台机器,比如5台,3台专门组成了一个锁集群,专门去提供锁服务的事情,这是个大前提。