什么是 ACAL Lynxus?
简而言之,Lynxus 旨在自动化系统之间的数据流。虽然"数据流"一词在各种上下文中都有使用,但我们在此用它来表示系统之间信息的自动化和管理流。这个问题空间自从企业拥有多个系统以来就一直存在,其中一些系统创建数据,一些系统消费数据。由此产生的问题和解决方案模式已被广泛讨论和阐述。一种全面且易于理解的形式可以在 Enterprise Integration Patterns [eip] 中找到。
数据流的一些高级别挑战包括:
系统故障::网络故障、磁盘故障、软件崩溃、人为错误。
数据访问超过消费能力::有时给定的数据源可能超过处理或交付链的某些部分——只需要一个薄弱环节就会出现问题。
边界条件仅仅是建议::你总是会收到太大、太小、太快、太慢、损坏、错误或格式错误的数据。
一天的噪音成为第二天的信号::组织的优先级会迅速变化。启用新流和更改现有流必须快速进行。
系统以不同的速率演进::给定系统使用的协议和格式可以随时更改,通常与其周围的系统无关。数据流的存在是为了连接本质上是一个大规模分布式组件系统,这些组件松散地或根本没有设计为协同工作。
合规性和安全性::法律、法规和政策会发生变化。企业间协议会发生变化。系统到系统和系统到用户的交互必须是安全、可信、可问责的。
在生产环境中持续改进::通常甚至不可能在实验室中接近复制生产环境。
Lynxus 的核心概念
Lynxus 的基本设计概念与流式编程 [fbp] 的主要思想密切相关。以下是 Lynxus 的一些主要概念以及它们如何映射到 FBP:
| Lynxus 术语 | FBP 术语 | 描述 |
|---|---|---|
FlowFile |
信息包 |
FlowFile 表示系统中移动的每个对象,对于每个对象,Lynxus 跟踪键/值对属性字符串的映射及其关联的零个或多个字节的内容。 |
FlowFile 处理器 |
黑盒 |
处理器实际执行工作。在 [eip] 术语中,处理器正在执行数据路由、转换或系统之间的调解的某种组合。处理器可以访问给定 FlowFile 的属性及其内容流。处理器可以在给定的工作单元中操作零个或多个 FlowFile,并提交该工作或回滚。 |
连接 |
有界缓冲区 |
连接提供处理器之间的实际链接。这些充当队列并允许各种进程以不同的速率交互。这些队列可以动态地确定优先级,并且可以具有负载上限,从而实现背压。 |
流控制器 |
调度器 |
流控制器维护进程如何连接的知识,并管理所有进程使用的线程及其分配。流控制器充当促进处理器之间 FlowFile 交换的代理。 |
进程组 |
子网 |
进程组是特定的进程集及其连接,可以通过输入端口接收数据并通过输出端口发送数据。通过这种方式,进程组允许仅通过组合其他组件来创建全新的组件。 |
这种设计模型,也类似于 [seda],提供了许多有益的结果,帮助 Lynxus 成为构建强大和可扩展数据流的非常有效的平台。其中一些好处包括:
-
非常适合处理器有向图的可视化创建和管理
-
本质上是异步的,允许非常高的吞吐量,即使在处理和流速率波动时也能自然缓冲
-
提供高度并发模型,而开发人员不必担心并发的典型复杂性
-
促进内聚和松散耦合组件的开发,然后可以在其他上下文中重用,并促进可测试单元
-
资源受限的连接使背压和压力释放等关键功能非常自然和直观
-
错误处理变得与正常路径一样自然,而不是粗粒度的全面捕获
-
数据进入和退出系统的点以及它如何流经系统都很容易理解和跟踪
Lynxus 架构
Lynxus 在主机操作系统的 JVM 内执行。Lynxus 在 JVM 上的主要组件如下:
Web 服务器::Web 服务器的目的是托管 Lynxus 的基于 HTTP 的命令和控制 API。
流控制器::流控制器是操作的大脑。它提供扩展运行的线程,并管理扩展何时接收资源执行的调度。
扩展::有各种类型的 Lynxus 扩展,在其他文档中有描述。这里的关键点是扩展在 JVM 内操作和执行。
FlowFile 存储库::FlowFile 存储库是 Lynxus 跟踪当前在流中活动的给定 FlowFile 状态的地方。存储库的实现是可插拔的。默认方法是位于指定磁盘分区上的持久性预写日志。
内容存储库::内容存储库是给定 FlowFile 的实际内容字节存在的地方。存储库的实现是可插拔的。默认方法是相当简单的机制,将数据块存储在文件系统中。可以指定多个文件系统存储位置,以便让不同的物理分区参与,减少任何单个卷上的争用。
溯源存储库::溯源存储库是存储所有溯源事件数据的地方。存储库结构是可插拔的,默认实现是使用一个或多个物理磁盘卷。在每个位置内,事件数据被索引和可搜索。
Lynxus 还能够在集群内操作。
从 Lynxus 1.0 版本开始,采用零领导者集群范式。Lynxus 集群中的每个节点对数据执行相同的任务,但每个节点操作不同的数据集。Apache ZooKeeper 选举单个节点作为集群协调器,故障转移由 ZooKeeper 自动处理。所有集群节点向集群协调器报告心跳和状态信息。集群协调器负责断开和连接节点。此外,每个集群有一个主节点,也由 ZooKeeper 选举。作为数据流管理器,您可以通过任何节点的用户界面 (UI) 与 Lynxus 集群交互。您所做的任何更改都会复制到集群中的所有节点,允许多个入口点。
Lynxus 的性能期望和特征
Lynxus 旨在充分利用其运行的底层主机系统的能力。这种资源最大化在 CPU 和磁盘方面特别强。有关详细信息,请参阅管理指南中的最佳实践和配置提示。
对于 IO::您可以期望看到的吞吐量或延迟因系统配置方式而异很大。鉴于大多数主要 Lynxus 子系统都有可插拔的方法,性能取决于实现。但是,对于具体且广泛适用的内容,请考虑开箱即用的默认实现。这些都是持久的,具有保证交付,并使用本地磁盘执行此操作。因此保守地假设,在典型服务器内的普通磁盘或 RAID 卷上,读写速率约为每秒 50 MB。对于大型数据流,Lynxus 应该能够有效地达到每秒 100 MB 或更高的吞吐量。这是因为对于添加到 Lynxus 的每个物理分区和内容存储库,预期线性增长。这将在某个时候在 FlowFile 存储库和溯源存储库上遇到瓶颈。
对于 CPU::流控制器充当引擎,决定何时给特定处理器线程执行。处理器被编写为在完成执行任务后立即返回线程。可以给流控制器一个配置值,指示它维护的各种线程池的可用线程。要使用的理想线程数取决于主机系统资源(核心数量)、该系统是否同时运行其他服务以及流中处理的性质。对于典型的 IO 密集型流,合理的是使数十个线程可用。
对于 RAM::Lynxus 存在于 JVM 内,因此受限于 JVM 提供的内存空间。JVM 垃圾回收对于限制总实际堆大小以及优化应用程序随时间运行的效果都非常重要。Lynxus 作业在定期读取相同内容时可能是 I/O 密集型的。配置足够大的磁盘以优化性能。
Lynxus 关键功能的高级概述
本节提供 Lynxus 基石基础知识的 20,000 英尺视图,以便您了解 ACAL Lynxus 的大局及其一些最有趣的功能。关键功能类别包括流管理、易用性、安全性、可扩展架构和灵活的扩展模型。
- 流管理
-
保证交付;; Lynxus 的核心哲学是,即使在非常高的规模下,保证交付也是必须的。这是通过有效使用专门构建的持久性预写日志和内容存储库来实现的。它们的设计方式允许非常高的事务率、有效的负载分散、写时复制,并发挥传统磁盘读写的优势。 数据缓冲与背压和压力释放;; Lynxus 支持所有排队数据的缓冲,以及在这些队列达到指定限制时提供背压的能力,或在数据达到指定年龄(其价值已消失)时淘汰数据。 优先级队列;; Lynxus 允许设置一个或多个优先级方案,用于如何从队列中检索数据。默认是最旧的优先,但有时数据应该最新优先、最大优先或其他自定义方案。 流特定 QoS(延迟与吞吐量、丢失容忍度等);; 数据流的某些点数据绝对关键且不容忍丢失。也有时必须在几秒内处理和交付才有价值。Lynxus 启用这些关注点的细粒度流特定配置。
- 易用性
-
可视化命令和控制;; 数据流可能变得非常复杂。能够可视化这些流并以视觉方式表达它们可以大大帮助减少复杂性并识别需要简化的区域。Lynxus 不仅启用数据流的可视化建立,而且实时进行。它不是"设计和部署",而更像是塑造粘土。如果您对数据流进行更改,该更改会立即生效。更改是细粒度的,仅限于受影响的组件。您不需要停止整个流或一组流来进行某些特定修改。 数据溯源;; Lynxus 自动记录、索引并提供溯源数据,因为对象流经系统,即使跨越扇入、扇出、转换等。此信息在支持合规性、故障排除、优化和其他场景中变得极其关键。 恢复/记录细粒度历史的滚动缓冲区;; Lynxus 的内容存储库设计为充当历史的滚动缓冲区。数据仅在从内容存储库中淘汰或需要空间时才被删除。这与数据溯源能力相结合,为点击内容、内容下载和重播提供了极其有用的基础,所有这些都可以在对象生命周期的特定时间点进行,甚至可以跨越几代。
- 安全性
-
系统到系统;; 数据流只有安全时才有效。Lynxus 在数据流的每个点都通过使用加密协议(如双向 SSL)提供安全交换。此外,Lynxus 启用流加密和解密内容,并在发送方/接收方方程的任一侧使用共享密钥或其他机制。 用户到系统;; Lynxus 启用双向 SSL 身份验证,并提供可插拔授权,以便它可以正确控制用户的访问和特定级别(只读、数据流管理器、管理员)。如果用户在流中输入敏感属性(如密码),它会立即在服务器端加密,并且永远不会在客户端再次暴露,即使是加密形式。 多租户授权;; 给定数据流的权限级别适用于每个组件,允许管理员用户具有细粒度的访问控制级别。这意味着每个 Lynxus 集群能够处理一个或多个组织的需求。与隔离拓扑相比,多租户授权启用数据流管理的自助服务模型,允许每个团队或组织在完全了解其余流的情况下管理流,而他们对这些流没有访问权限。
- 可扩展架构
-
扩展;; Lynxus 的核心是为扩展而构建的,因此它是一个平台,数据流进程可以在其上以可预测和可重复的方式执行和交互。扩展点包括:处理器、控制器服务、报告任务、优先级排序器和自定义用户界面。 类加载器隔离;; 对于任何基于组件的系统,依赖问题可能很快发生。Lynxus 通过提供自定义类加载器模型来解决此问题,确保每个扩展包仅暴露于非常有限的依赖集。因此,扩展可以构建,而无需担心它们是否可能与另一个扩展冲突。这些扩展包的概念称为"Lynxus 归档",在开发者指南中有更详细的讨论。 站点到站点通信协议;; Lynxus 实例之间的首选通信协议是 Lynxus 站点到站点 (S2S) 协议。S2S 使数据从一个 Lynxus 实例传输到另一个实例变得容易、高效和安全。Lynxus 客户端库可以轻松构建并捆绑到其他应用程序或设备中,以通过 S2S 与 Lynxus 通信。S2S 支持基于套接字的协议和 HTTP(S) 协议作为底层传输协议,使得可以将代理服务器嵌入到 S2S 通信中。
- 灵活的扩展模型
-
横向扩展(集群);; Lynxus 旨在通过使用如上所述的许多节点集群来横向扩展。如果单个节点配置为处理每秒数百 MB,则可以配置适度的集群来处理每秒 GB。这带来了 Lynxus 和它获取数据的系统之间负载平衡和故障转移的有趣挑战。使用基于异步队列的协议(如消息服务、Kafka 等)可以提供帮助。使用 Lynxus 的"站点到站点"功能也非常有效,因为它是一种协议,允许 Lynxus 和客户端(包括另一个 Lynxus 集群)相互通信、共享有关负载的信息,并在特定授权端口上交换数据。 纵向扩展和缩减;; Lynxus 还旨在以非常灵活的方式纵向扩展和缩减。从 Lynxus 框架的角度来看,增加吞吐量,可以在配置时在调度选项卡上增加处理器上的并发任务数。这允许更多进程同时执行,提供更大的吞吐量。另一方面,您可以完美地将 Lynxus 缩减到适合在边缘设备上运行,由于硬件资源有限,需要小占用空间。
参考文献
-
[eip] Gregor Hohpe. Enterprise Integration Patterns [在线]. 检索于:2014 年 12 月 27 日,来自:http://www.enterpriseintegrationpatterns.com
-
[soa] Wikipedia. Service Oriented Architecture [在线]. 检索于:2014 年 12 月 27 日,来自:http://en.wikipedia.org/wiki/Service-oriented_architecture
-
[api] Eric Savitz. Welcome to the API Economy [在线]. Forbes.com. 检索于:2014 年 12 月 27 日,来自:http://www.forbes.com/sites/ciocentral/2012/08/29/welcome-to-the-api-economy
-
[api2] Adam Duvander. The rise of the API economy and consumer-led ecosystems [在线]. thenextweb.com. 检索于:2014 年 12 月 27 日,来自:http://thenextweb.com/dd/2014/03/28/api-economy
-
[iot] Wikipedia. Internet of Things [在线]. 检索于:2014 年 12 月 27 日,来自:http://en.wikipedia.org/wiki/Internet_of_Things
-
[bigdata] Wikipedia. Big Data [在线]. 检索于:2014 年 12 月 27 日,来自:http://en.wikipedia.org/wiki/Big_data
-
[fbp] Wikipedia. Flow Based Programming [在线]. 检索于:2014 年 12 月 28 日,来自:http://en.wikipedia.org/wiki/Flow-based_programming#Concepts
-
[seda] Matt Welsh. Berkeley. SEDA: An Architecture for Well-Conditioned, Scalable Internet Services [在线]. 检索于:2018 年 1 月 18 日,来自:http://www.mdw.la/papers/seda-sosp01.pdf