1973年, 卡尔·休伊特 ( Carl Hewitt)提出了一个受量子力学启发的想法。 他想开发能够并行执行任务,在包含自己的本地内存和处理器的同时无缝通信的计算机。
天生就是演员模型 ,并且有了一个非常简单的概念:一切都是演员。 这带来了一些巨大的好处:大大简化了业务和其他逻辑的分离。 因为应用程序的每个核心组件都是独立的,所以很容易获得安全性。 由于行为者的性质及其相互联系,原型制作得以加速。
什么是叉角羚?
今天,有许多参与者模型的实现。 在对象计算部 ,我们一直在致力于开发一种名为Pronghorn的高度可扩展,高性能和完全开源的Java框架,该框架以世界上最快的陆生动物之一命名。
最近发布到1.0的Pronghorn试图解决Akka和RxJava的一些缺点,这是Java和Scala的两个流行的actor框架。
因此,我们在开发Pronghorn时考虑到了全面的功能列表:
- 我们希望产生尽可能少的垃圾。 如果不定期启动垃圾收集器,它就可以达到前所未有的性能水平。
- 我们希望确保叉角叉车具有最小的内存占用空间并且是机械同情的。 它从头开始构建,并考虑到性能,它利用CPU预取功能和缓存来实现最快的吞吐量。 使用零拷贝直接访问,它可以在十亿分之一秒内从架构中加载字段,并且不会使内核停顿,同时还具有非阻塞性和无锁性。
- Pronghorn可确保您安全地编写正确的代码。 通过其API和合同,以及通过使用“ 软件堡垒 ”和行业领先的加密,Pronghorn可让您构建安全且安全失败的应用程序。
- 调试和测试可能会让人感到压力和烦恼,尤其是当您需要按时完成任务时。 Pronghorn可以轻松地与常见的测试框架集成,并通过其自动生成和实时更新的遥测图,基于现有消息模式的模糊测试(正在工作中)以及某些参与者行为不当或消耗过多资源时发出的警告,简化了重构和调试。 这可以帮助您快速制作原型,并花更多时间专注于您的业务需求。
有关更多详细信息,请访问Pronghorn功能列表 。
为什么选择叉角羚?
编写并发和高性能的应用程序从来都不是一件容易的事,而且我们也不承诺完全解决问题。 但是,为了让您了解Pronghorn的优势及其API的功能,我们编写了一个小型HTTP REST服务器,并针对常见的行业标准(例如, Node&Express和Tomcat & Spring Boot)对其进行了基准测试:
我们鼓励您自己运行这些数字 ,共享结果并添加自己的Web服务器。
如您所见,Pronghorn在此REST示例中表现出色。 虽然Pronghorn的速度几乎是传统解决方案的10倍,但它可以通过其无垃圾,静态类型的后端帮助将服务器成本(例如EC2或Azure)降低一半或更多。 可以解析HTTP请求,并在参与者同时工作时生成响应。 调度和线程由Pronghorn强大的默认调度程序自动处理。
如上所述,Pronghorn允许您快速完成原型设计和项目构想,通常需要遵循以下三个基本步骤:
- 定义数据流程图
这是至关重要的第一步。 Pronghorn采用数据优先的方法; 快速处理大量数据。 在您的应用程序中,考虑应该通过“管道”流动的数据类型,例如,如果要构建图像分析工具,则需要参与者来读取,写入和分析图像文件。 行动者之间的数据格式也需要建立; 它可能是包含JPG MCU或原始二进制BMP文件的架构。 选择最适合您的应用程序的格式。
- 定义每个阶段之间的合同
合同使您可以使用FAST (金融业用于股票交易的成熟协议)轻松定义消息。 这些合同在测试阶段中使用,以确保实现与您的消息字段定义保持一致。 这是一种合同方式; 演员之间的交流必须受到尊重。
- 在图形实现时使用生成测试来测试首次开发
模式是在您开发应用程序时为您生成的代码。 测试驱动的开发允许编写正确且安全的代码,从而在您准备发布时节省了宝贵的时间。 随着程序的增长,图形也随之增长,它描述了参与者之间的每个交互,并说明了阶段之间管道上的消息数据流。 通过其自动遥测,您甚至可以轻松跟踪最复杂的应用程序,如下所示:
它是什么样子的?
您可能对Pronghorn代码的外观感到好奇。 下面是一些示例代码,用于在我们的“ Hello World ”示例中生成消息模式。
要定义消息,请创建一个类似于以下内容的新XML文件:
<?xml version="1.0" encoding="UTF-8"?>
<templates xmlns="http://www.fixprotocol.org/ns/fast/td/1.1">
<template name="HelloWorldMessage" id="1">
<string name="GreetingName" id="100" charset="unicode"/>
</template>
</templates>
然后,Hello World示例中描述的阶段将使用此模式。 使用此架构在应用程序中填充图形更加容易:
private static void populateGraph(GraphManager gm) {
Pipe<HelloWorldSchema> messagePipe =
HelloWorldSchema.instance.newPipe(10, 10_000);
new GreeterStage(gm, "Jon Snow", messagePipe);
new GuestStage(gm, messagePipe);
}
这将使用Hello World教程中创建的阶段。
我们使用Maven原型为您提供开始构建Pronghorn应用程序所需的一切。
开始使用叉角羚
我们希望本文能带您了解Pronghorn如何使用Pronghorn(Akka和RXJava的替代品)帮助您用Java编写高性能,高效和安全的应用程序。 我们希望您能就如何使它成为开发人员,经理,CFO和其他人员的理想平台提供反馈。
资源资源
翻译自: https://opensource.com/article/18/6/writing-applications-java-pronghorn