Atomix getting start 浓浓的机翻

2023-05-16

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

概观

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

  • 集群管理和故障检测
  • 通过Netty进行集群通信(直接和pub-sub)
  • 强烈一致的被动分布式协调原语(锁定,领导者选举等)
  • 高效的分区分布式数据结构(地图,集合,树等)
  • 独立代理
  • REST API
  • 交互式CLI

背景

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(() -> {
  ...
});

转载于:https://my.oschina.net/wuguirong/blog/1802016

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Atomix getting start 浓浓的机翻 的相关文章

随机推荐

  • Oracle与OpenJDK之间的区别

    简介 在本文中 xff0c 我们将探讨Oracle Java Development Kit和OpenJDK之间的差异并进行比较 Oracle JDK Oracle JDK由Oracle公司开发 xff0c 该公司是Sun许可证 xff0c
  • Maven 3.6.1版本

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 下载和配置 下载Maven 解压到文件目录下 mac配置maven环境变量 conf settings xml 仓库路径默认目录地址 xff0c 可修改 lt localR
  • 如何解决“ add-apt-repository命令未找到”的错误,在Ubuntu,Debian,Mint,Kali中

    deb or apt based distributions like Debian Ubuntu Mint and Kali uses apt package management system These distributions p
  • 浅谈运营商线路-----TDM、SDH、MSTP,OTN

    我单位的运营商专线有SDH和MSTP两种 xff0c 那么它们有什么区别呢 xff0c 这个isp的东西 xff0c 相信很多同学一脸懵 xff0c 因为你工作的层级问题 xff0c 很多人都是二层以上的 xff0c 所以不了解也是正常的
  • autodesk CAD2020许可检出超时

    笔记本电脑系统为windows7 xff0c 系统休眠后没有正常恢复系统 xff0c 之后使用cad2020提示 许可检出超时 xff0c 开始通过重新安装cad软件可以正常使用 xff0c 但休眠后cad还是会出现同样的提示 查询CAD官
  • Presto SQl中使用date_format()和date_parse()遇到的问题

    昨天在Presto中查数据 查出来数据不对 后来发现是我使用date parse 函数有问题 我需要查2018年12月31号到2019年1月6号之间的数据 我使用的时间过滤方式是 and behavior datetime gt 61 da
  • vue点击实现 路由的跳转

    点击按钮实现路由的跳转 lt div 64 click 61 34 gotoMenu 34 gt 按钮 lt div gt 实现跳转 methods gotoMenu 跳转到上一次浏览的页面 this router go 1 this ro
  • 分享一下我在东方时尚学车的经历

    楼主是4月26日报的名 xff0c 7月22日拿的本 xff0c 不算快的 xff0c 不过也不算慢的 和大多数简子们一样 xff0c 楼主也是个苦比的白领一族 xff0c 白天上班 xff0c 大多数都是晚上去学车 xff0c 每一次请个
  • Linux Kernel Development有关内存管理

    1 Pages Page的概念来源为处理器Processor的部件MMU Memory Management Unit xff0c MMU通过设置好的页表 通过设置CR3寄存器 xff0c 指向页目录所在的物理内存 对内存进行管理 xff0
  • 控件权限管理思路

    1 编写判断用户角色相关的类及方法 protected bool ShowButtonBasedOnRole string RoleOfInterest return User IsInRole RoleOfInterest 2 通过调用相
  • 华为交换机LACP模式链路聚合配置

    交换机A和交换机B之间通过3条GE以太网连接 xff0c 活动链路为2 xff0c 配置如下 xff1a SwitchA配置 lt HUAWEI gt system view HUAWEI sysname SwitchA SwitchA i
  • 检查HTTP 的 Digest 认证代码示例-JSP

    检查HTTP 的 Digest 认证 since http1 1 代码如下所示 xff1a 此代码还不完善 RFC2617算法未实现 lt 64 page pageEncoding 61 34 UTF 8 34 contentType 61
  • 每天一个linux命令(4):mkdir命令

    linux mkdir 命令用来 创建指定的 名称的 目录 xff0c 要求创建目录的用户在当前目录中具有写权限 xff0c 并且指定的目录名不能是当前目录中已有的目录 1 xff0e 命令格式 xff1a mkdir 选项 目录 2 xf
  • 历史上消失的十天--儒略日(Julian Days)的来历

    儒略日是由法国学者 Joseph Justus Scaliger xff08 1540 1609 xff09 发明的 xff0c 名称可能是取自 Scaliger 的父亲 xff0c 意大利学者Julius Caesar Scaliger
  • “ -bash:sudo:未找到命令”对于Linux,Debian,CentOS的错误和解决方案

    sudo command is used to execute command as another user This is generally used to run command as root In some cases we c
  • 球机和云台的差别 以及他们的组成

    说的 球机 和 云台 的差别那不得不介绍球机和云台的概念了 xff0c 球机全称为球型 摄像机 xff0c 是现代电视监控发展的代表 xff0c 她集成彩色一体化摄像机 云台 解码器 防护罩等多功能与一体 xff0c 安装方便 使用简单但功
  • [Shell学习笔记] 命令行下的高级网络工具cURL命令

    原文 xff1a http www 1987 name 365 html Linux curl命令是一个利用URL规则在命令行下工作的文件传输工具 它支持文件的上传和下载 xff0c 所以是综合传输工具 xff0c 但按传统 xff0c 习
  • 74系列的型号

    74系列TTL数字逻辑集成电路系国际上通用的标准电路 其品种共分为六大类即 74xx 标准 74LSxx 低功耗肖特基 74Sxx 肖特基 74ALSxx 先进低功耗肖特基 74ASxx 先进肖特基 74Fxx 高速 只要序列号相同 xff
  • 【C#】使用fo-dicom完成BMP,JPG,PNG图片转换为DICOM文件

    最近研究了一下DICOM和BMP文件转换的问题 xff0c 也是很头大 度娘了很久 xff0c 也在CSDN等论坛看到一些断断续续的文件 xff0c 最主要的是代码只是片断 xff0c 不是完整的实现 头大了 首先 xff0c 了解一下BM
  • Atomix getting start 浓浓的机翻

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 概观 Atomix 2 1是用于构建容错分布式系统的全功能框架 Atomix将ZooKeeper的一致性与Hazelcast的可用性和性能相结合 xff0c 使用一组定制通