使用Java框架Pronghorn编写快速的应用程序

1973年, 卡尔·休伊特Carl Hewitt)提出了一个受量子力学启发的想法。 他想开发能够并行执行任务,在包含自己的本地内存和处理器的同时无缝通信的计算机。

天生就是演员模型 ,并且有了一个非常简单的概念:一切都是演员。 这带来了一些巨大的好处:大大简化了业务和其他逻辑的分离。 因为应用程序的每个核心组件都是独立的,所以很容易获得安全性。 由于行为者的性质及其相互联系,原型制作得以加速。

什么是叉角羚?

今天,有许多参与者模型的实现。 在对象计算部 ,我们一直在致力于开发一种名为Pronghorn的高度可扩展,高性能和完全开源的Java框架,该框架以世界上最快的陆生动物之一命名。

最近发布到1.0的Pronghorn试图解决AkkaRxJava的一些缺点,这是Java和Scala的两个流行的actor框架。

因此,我们在开发Pronghorn时考虑到了全面的功能列表:

  1. 我们希望产生尽可能少的垃圾。 如果不定期启动垃圾收集器,它就可以达到前所未有的性能水平。
  2. 我们希望确保叉角叉车具有最小的内存占用空间并且是机械同情的。 它从头开始构建,并考虑到性能,它利用CPU预取功能和缓存来实现最快的吞吐量。 使用零拷贝直接访问,它可以在十亿分之一秒内从架构中加载字段,并且不会使内核停顿,同时还具有非阻塞性和无锁性。
  3. Pronghorn可确保您安全地编写正确的代码。 通过其API和合同,以及通过使用“ 软件堡垒 ”和行业领先的加密,​​Pronghorn可让您构建安全且安全失败的应用程序。
  4. 调试和测试可能会让人感到压力和烦恼,尤其是当您需要按时完成任务时。 Pronghorn可以轻松地与常见的测试框架集成,并通过其自动生成和实时更新的遥测图,基于现有消息模式的模糊测试(正在工作中)以及某些参与者行为不当或消耗过多资源时发出的警告,简化了重构和调试。 这可以帮助您快速制作原型,并花更多时间专注于您的业务需求。

有关更多详细信息,请访问Pronghorn功能列表

为什么选择叉角羚?

编写并发和高性能的应用程序从来都不是一件容易的事,而且我们也不承诺完全解决问题。 但是,为了让您了解Pronghorn的优势及其API的功能,我们编写了一个小型HTTP REST服务器,并针对常见的行业标准(例如, Node&ExpressTomcatSpring Boot)对其进行了基准测试:

requests_per_second.png

我们鼓励您自己运行这些数字 ,共享结果并添加自己的Web服务器。

如您所见,Pronghorn在此REST示例中表现出色。 虽然Pronghorn的速度几乎是传统解决方案的10倍,但它可以通过其无垃圾,静态类型的后端帮助将服务器成本(例如EC2或Azure)降低一半或更多。 可以解析HTTP请求,并在参与者同时工作时生成响应。 调度和线程由Pronghorn强大的默认调度程序自动处理。

如上所述,Pronghorn允许您快速完成原型设计和项目构想,通常需要遵循以下三个基本步骤:

  1. 定义数据流程图

这是至关重要的第一步。 Pronghorn采用数据优先的方法; 快速处理大量数据。 在您的应用程序中,考虑应该通过“管道”流动的数据类型,例如,如果要构建图像分析工具,则需要参与者来读取,写入和分析图像文件。 行动者之间的数据格式也需要建立; 它可能是包含JPG MCU或原始二进制BMP文件的架构。 选择最适合您的应用程序的格式。

  1. 定义每个阶段之间的合同

合同使您可以使用FAST (金融业用于股票交易的成熟协议)轻松定义消息。 这些合同在测试阶段中使用,以确保实现与您的消息字段定义保持一致。 这是一种合同方式; 演员之间的交流必须受到尊重。

  1. 在图形实现时使用生成测试来测试首次开发

模式是在您开发应用程序时为您生成的代码。 测试驱动的开发允许编写正确且安全的代码,从而在您准备发布时节省了宝贵的时间。 随着程序的增长,图形也随之增长,它描述了参与者之间的每个交互,并说明了阶段之间管道上的消息数据流。 通过其自动遥测,您甚至可以轻松跟踪最复杂的应用程序,如下所示:

Pronghorn tracking_apps.png

它是什么样子的?

您可能对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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值