文档章节

Atomix getting start 浓浓的机翻

桂哥
 桂哥
发布于 04/27 10:26
字数 2053
阅读 61
收藏 0
点赞 0
评论 0

概观

Atomix 2.1是用于构建容错分布式系统的全功能框架。Atomix将ZooKeeper的一致性与Hazelcast的可用性和性能相结合,使用一组定制通信API,一个分区Raft集群和一个多主协议来为构建分布式系统提供一系列高级基元。这些原语包括:

背景

Atomix最初是在2014年将它的姊妹项目Copycat(已弃用)作为爱好项目构思出来的。随着时间的推移,Copycat成长为Raft共识协议的成熟实现,并且Copycat和Atomix都在各种项目中投入使用。2017年开始开发新版本,并将Copycat和Atomix结合在Atomix 2.x中。此外,最初为在ONOS中使用而开发的项目的重要扩展被迁移到Atomix 2.x. Atomix现在作为开放网络基金会 ONOS的核心组件。

依赖管理

Atomix打包在一个模块层次结构中,用户只能依赖他们打算使用的功能。几乎所有用户都希望使用Atomix核心模块,该模块由atomix工件ID标识:

<dependencies>
  <dependency>
    <groupId>io.atomix</groupId>
    <artifactId>atomix</artifactId>
    <version>2.1.0-SNAPSHOT</version>
  </dependency>
</dependencies>

此外,大多数群集都配置有一组分区组。使用的分区组取决于系统的一致性,容错性和持久性要求。不同的用例可能需要不同的依赖关系。但与Atomix打包是两个主要协议:

  • atomix-raft

  • atomix-primary-backup

    io.atomix atomix 2.1.0-SNAPSHOT io.atomix atomix-raft 2.1.0-SNAPSHOT io.atomix atomix-primary-backup 2.1.0-SNAPSHOT

引导群集

与Atomix合作的第一步是形成一个集群。Atomix群集由两种类型的成员组成:

  • PERSISTENT 成员存在于群集配置中,无论是否可用
  • EPHEMERAL 成员根据其可用性加入和离开群集

要形成群集,通常需要引导一组节点。此外,如果使用分布式基元,则必须配置一个或多个分区组

使用Java API

用户可以使用各种方法在Atomix群集上运行。这些方法中最基本的是使用Java API,它提供了最好的性能,一致性和灵活性。

Atomix中的核心Java API是Atomix对象。Atomix严重依赖构建器模式来构建用于沟通和协调分布式系统的高级对象。

要创建一个新的Atomix实例,请创建一个Atomix构建器:

Atomix.Builder builder = Atomix.builder();

构建器应该配置本地节点配置:

builder.withLocalMember(Member.builder("node1")
  .withType(Member.Type.EPHEMERAL)
  .withAddress("localhost:5000")
  .build());

除了配置本地节点信息之外,还必须为每个实例配置一组_引导节点_,从中形成一个集群。首次启动集群时,所有实例都应提供相同的引导节点集合。

builder.withMembers(
  Member.builder("member1")
    .withType(Member.Type.EPHEMERAL)
    .withAddress("localhost:5000")
    .build(),
  Member.builder("member2")
    .withType(Member.Type.EPHEMERAL)
    .withAddress("localhost:5001")
    .build(),
  Member.builder("member3")
    .withType(Member.Type.EPHEMERAL)
    .withAddress("localhost:5002")
    .build());

Bootstrap节点可以是节点PERSISTENT或EPHEMERAL节点。需要强一致性的集群必须由一组PERSISTENT能够参与共识的节点引导。具有更宽松的持久性/一致性要求的群集可以使用EPHEMERAL可动态扩展的节点。

要详细了解各种类型的节点之间的差异,请参阅用户手册

最后,该实例必须配置一个或多个分区组。通用分区组可以使用配置文件进行配置

builder.addProfiles(Profiles.DATA_GRID);

通常情况下,需要强一致性保证的群集配置有CORE节点和至少一个RaftPartitionGroup群集,而群集设计用于DATA节点使用PrimaryBackupPartitionGroups的性能和可伸缩性。

Atomix atomix = builder.build();

调用start()实例来启动节点:

atomix.start().join();

该start()方法返回将在节点加入群集后完成的未来。

为了形成由CORE节点和Raft分区组组成的集群,大多数实例必须同时启动以允许Raft分区形成法定人数。在start()所有分区能够形成之前,该方法返回的未来将不会完成。如果您的Atomix实例在启动时无限期阻塞,请确保启用DEBUG日志记录以调试问题。

使用Atomix代理

如前所述,有多种方式可以管理和与Atomix集群进行交互。Atomix代理是Java API的一个简便替代方案。代理是一个独立的Atomix节点,其行为与Java节点的行为相似,但会为客户端交互提供REST API。代理可以用于在客户端 - 服务器体系结构中配置Atomix群集或提供对Atomix基元的多边形访问。

要使用Atomix代理,首先使用Maven下载并构建Atomix:

mvn clean package

项目建成后,要运行代理程序,$ATOMIX_ROOT必须设置环境变量:

export ATOMIX_ROOT=./

该代理程序与bin/atomix-agent脚本一起运行:

bin/atomix-agent -h

使用该-h选项查看代理脚本的选项列表。

在使用代理时,提供JSON或YAML配置文件是最方便的。配置文件也支持通过Java API支持的所有构建器配置。要配置代理,请创建一个atomix.yaml文件并定义群集:

atomix.yaml cluster: nodes: node1: type: ephemeral address: localhost:5001 node2: type: ephemeral address: localhost:5002 node3: type: ephemeral address: localhost:5003 profiles: - consensus - data-grid

Java API也支持配置文件。要Atomix使用配置文件配置实例,只需将该文件传递给Atomix构造函数即可。

配置文件创建完成后,通过引导配置的节点来启动群集:

bin/atomix-agent node1 -c atomix.yaml


bin/atomix-agent node2 -c atomix.yaml


bin/atomix-agent node3 -c atomix.yaml

可以在配置文件中指定本地节点,但在atomix-agent参数中指定本地实例名称可以使配置文件在所有实例之间共享。

创建一个Java客户端

所有的Atomix节点类型公开相同的API,并且能够执行与其对等体相同的功能。有状态节点和无状态节点,高度一致且最终一致的节点都可以在基元上操作,发送和接收消息以及管理集群。因此,Atomix不一定需要任何客户端节点。但是Atomix可以配置在各种不同的体系结构中,并且在有状态节点是独立代理的客户端 - 服务器体系结构中,客户端成为必需。

客户机节点的构建方式与所有其他节点相同,只是它们不参与复制,因此不是群集成员资格列表的成员。要配置客户端节点,只需创建一个CLIENT节点并将其指向一个或多个对等节点:

Atomix atomix = Atomix.builder()
  .withLocalMember(Member.builder("client1")
    .withAddress("localhost:6000")
    .build())
  .withMembers(
    Member.builder("member1")
      .withType(Member.Type.PERSISTENT)
      .withAddress("localhost:5000")
      .build(),
    Member.builder("member2")
      .withType(Member.Type.PERSISTENT)
      .withAddress("localhost:5001")
      .build(),
    Member.builder("member3")
      .withType(Member.Type.PERSISTENT)
      .withAddress("localhost:5002")
      .build());

最后,使用该start()方法启动实例将导致它加入群集:

atomix.start().join();

创建分布式基元

引导Atomix集群本身并不能提供很多功能。Atomix的真正力量来自其原始形式。基元是高级分布式对象,用于在分布式系统中复制状态和协调状态更改。

Atomix通常提供两种不同的方法来创建分布式基元:

  • 使用构建器模式创建不同的实例
  • 使用getter创建多个实例

与其他构建器一样,基元构造也提供与基元构建器相同的选项。构建者只需提供一个流畅的API来以编程方式配置基元。

要通过构建器模式创建分布式基元,请使用界面*Builder上的其中一种方法Atomix

ConsistentMap<String, String> map = atomix.consistentMapBuilder("my-map")
  .withCacheEnabled()
  .build();

map.put("foo", "Hello world!");

Versioned<String> value = map.get("foo");

if (map.put("foo", "Hello world again!", value.version())) {
  ...
}

所有分布式基元都提供了API的同步和异步版本。默认情况下,getters和builders返回一个同步原语实例。要检索基元的基础异步实例,请使用以下async()方法:

AsyncConsistentMap<String, String> asyncMap = map.async();

asyncMap.put("foo", "Hello world!").thenRun(() -> {
  ...
});

© 著作权归作者所有

共有 人打赏支持
桂哥
粉丝 2
博文 7
码字总数 3172
作品 0
深圳
高级程序员
故障容忍分布式协调框架--Atomix

Atomix 是JAVA8 的故障容忍分布式协调框架。 Fault-tolerant distributed coordination framework for Java 8 主要特性: 可靠:数据一致性 简单:提供极其简单的异步 APIs 来管理分布式资源...

李三石
2015/12/21
1K
1
手把手教你在Windows下搭建React Native Android开发环境

最近看到React Native好像好厉害的样子,好奇心驱使之下体验了一下并将在Window下搭建React Natvie Android环境的步骤记录下来,并有需要的朋友参考。(我都是参考官方文档的) react-native...

Common1140
2015/12/24
10.5K
45
iOS 网络请求Json自动转存到CoreData(二)

项目需求:从网络获取Json后,将Json自动转存到CoreData中。 继上一篇日志,那么这篇的主要内容是:将Json存到CoreData中。 说话实话,无非就是KVC赋值,思路清晰明了,但是我在想一个问题,...

萨斯辈的呼唤
2014/10/18
1K
0
ORCHARD 是什么?

官网 http://orchard.codeplex.com 教程 http://www.cnblogs.com/sunjunlin/p/3876693.html 【翻译】从头开始编写一个Orchard网上商店模块(1) - 介绍 http://www.cnblogs.com/zhongzf/archi......

付翔
2016/02/03
0
0
Reveal真机查看任意APP

前言: 在Xcode开发时,可以使用Xcode自带的 Debug view Hierarchy查看View布局,如下图 但是使用起来很麻烦,具体找某个view的时候,还有可能找不到,也不能动态的改变view的属性。 这里要推...

刀客445
2016/08/05
18
0
RichFaces 最快速的入门方法

如果你还不了解 RichFaces 是干嘛的,请进入这里先了解下。 了解过后,下面的步骤假设你已经安装好 JBoss Tools 的 3.0 或者 3.1 版本。如果还没安装,请看本文最后的 JBoss Tools 的安装步骤...

红薯
2010/06/11
3.3K
1
[jQuery]Improve Your Skills: 25 jQuery Beginner Tutorials Roundup

jQuery is the most popular JavaScript library that highlights the interaction between JavaScript and HTML. With jQuery you can write less and do more. jQuery has become an activ......

吞吞吐吐的
2017/01/13
0
0
wengcd/react-start-kit-flux-demo

React Starter Kit — "isomorphic" web app boilerplate React Starter Kit is an opinionated boilerplate for web development built on top of Facebook's React library, Node.js / Exp......

wengcd
2015/10/11
0
0
求:项目开发过程管理软件!

求这样一款软件:更好的管理项目进度,项目成员可以加入一个项目,项目组所有成员可以看到一些通知什么的,等等。。。描述不是很清楚,也不知该如何表达!总而言之就是可以提高团队凝聚力,让...

坚持_执着
2012/04/29
276
11
从现在起 你再也不能嘲笑别人的翻译是“机翻”了

  相比下棋下赢人类,AI能听懂人话、看懂人写的文字意义明显重要太多,当AI能把握人类说话意思的时候,人们肯定会驱使通晓各国语言的它去尝试挑战打破自然语言间的隔阂。继通过语音识别测试...

中国机器人
05/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

虚拟机怎么安装vmware tools

https://blog.csdn.net/tjcwt2011/article/details/72638977

AndyZhouX
7分钟前
0
0
There is no session with id[xxx]

参考网页 https://blog.csdn.net/caimengyuan/article/details/52526765 报错 2018-07-19 23:04:35,330 [http-nio-1008-exec-8] DEBUG [org.apache.shiro.web.servlet.SimpleCookie] - Found......

karma123
7分钟前
0
0
vue-router懒加载

1. vue-router懒加载定义 当路由被访问的时候才加载对应组件 2. vue-router懒加载作用 当构建的项目比较大的时候,懒加载可以分割代码块,提高页面的初始加载效率。 ###3. vue-router懒加载实...

不负好时光
15分钟前
0
0
庆祝法国队夺冠:用Python放一场烟花秀

天天敲代码的朋友,有没有想过代码也可以变得很酷炫又浪漫?今天就教大家用Python模拟出绽放的烟花庆祝昨晚法国队夺冠,工作之余也可以随时让程序为自己放一场烟花秀。 这个有趣的小项目并不...

猫咪编程
17分钟前
0
0
SpringBoot | 第七章:过滤器、监听器、拦截器

前言 在实际开发过程中,经常会碰见一些比如系统启动初始化信息、统计在线人数、在线用户数、过滤敏高词汇、访问权限控制(URL级别)等业务需求。这些对于业务来说一般上是无关的,业务方是无需...

oKong
30分钟前
4
0
存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储

存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储 存储结构分四类:顺序存储、链接存储、索引存储 和 散列存储。 顺序结构和链接结构适用在内存结构中。 顺序表每个单元都是按物理...

DannyCoder
41分钟前
1
0
Firefox 61已经为Ubuntu 提供支持

最新和最好的Mozilla Firefox 61 “Quantum”网络浏览器已经为Ubuntu Linux操作系统的用户提供了支持,现在可以通过官方软件库进行更新。 Mozilla于2018年6月26日发布了Firefox 61版本,该版...

六库科技
今天
0
0
Win10升级后执行系统封装(Sysprep)报错

开始封装 一年多以前开始给公司封装Win10系统,便于统一给公司电脑初始化携带各种软件的系统,致力于装完既可以开发的状态。那时候最新的版本是Win10 1703版本,自然就以他为母盘,然后结合V...

lyunweb
今天
40
0
php 性能优化

#什么情况下会遇到性能问题 PHP 语法使用的不恰当

to_be_better
今天
0
0
Jenkins 构建触发器操作详解

前言 跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。 一、定时构建语法 * * * * * (五颗星,中间用空格隔...

覃光林
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部