Fourinone2.0 提供了一个 4 合 1 分布式框架和简单易用的编程 API,实现对多台计算机 CPU、内存、硬盘的统一利用,从而获取到强大计算能力去解决复杂问题。由于多计算机物理上独立,Fourinone 框架也提供完整的分布式协同和锁以及简化 MQ 功能,用于实现多机的协作和通讯。
Fourinone 框架提供了一系列并行计算模式(农民工 / 包工头 / 职介绍 / 手工仓库)用于利用多机多核 CPU 的计算能力;提供完整的分布式缓存和小型缓存用于利用多机内存能力;
使提供像操作本地文件一样操作远程文件(访问、并行读写、拆分、排它、复制、解析、事务等)用于利用多机硬盘存储能力;由于多计算机物理上独立,Fourinone 框架也提供完整的分布式协同和锁以及简化 MQ 功能,用于实现多机的协作和通讯。
Fourinone 采用 Java 开发,2.0 版本整体大小 150k,就一个 jar 和一个配置文件,没有任何依赖,很方便嵌入式开发使用。
fourinone 对分布式协同的实现, 是通过建立一个 domain、node 两层结构的节点信息去完成。domain 可以是分类或者包,node 可以是具体属性。domain 和 node 都是自己根据需求设计命名,比如可以将 domain 命名为“a.b.c...”表示一个树型类目。
一个 domain 下可以有很多个 node,每个 node 只指定一个 domain,可以通过 domain 返回它下面所有的 node。
domain 不需要单独建立,通常在建立 node 时,如果不存在 domain 会自动创建。
如果 domain 下没有 node 了,该 domain 会自动删除。
如果删除 domain,该 domain 下面 node 也都会删除。
每个 node 下可以存放一个值,可以是任意对象。
所有的节点信息存放在 parkserver 里,parkserver 提供协同者的功能。如下图所示:
图 1. 协调实现架构
从上图可以看到,其他分布式进程可以通过 parkserver 的用户接口:ParkLocal,对节点进行增加、修改、删除、指定心跳、指定权限等操作,并且结合 parkserver 提供同步备份、领导者选举、过期时间设置等功能,共同来实现众多分布式协同功能。
我们举个例子,说明两个分布式应用完成协同功能的流程:
分布式应用 A 通过 ParkLocal 在 ParkServer 上创建一个 domain/node 的节点,并且在节点里存放相应的 value,这个节点以及它的 value 值代表分布式应用 A 的某种协同信息,它存放在 ParkServer 上用于向分布式应用 B 分享。
分布式应用 B 通过 ParkLocal 操作 ParkServer,对它上面的分布式应用 A 建立的这个 domain/node 节点进行监听,如果节点 value 发生变化,那么分布式应用 B 可以获取到这个 value,并进行相应的业务处理,这样便将各自独立的分布式应用 A 和 B 协同了起来。
由于 ParkServer 保存着用于协同的节点和信息,为了防止 ParkServer 宕机导致整体故障,ParkServer 配置为一主多备的关系,互相同步信息,在故障时可以进行领导者选举,切换到备用 ParkServer 上继续提供协同服务。