中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

ActiveJ概述。新的全棧Java框架

發(fā)布于:2021-01-07 17:22:45

0

1680

0

ActiveJ 開發(fā)平臺 Java

ActiveJ是一個全新的開發(fā)平臺,可通過輕量級且可本地伸縮的異步體系結(jié)構(gòu)創(chuàng)建各種復(fù)雜程度的現(xiàn)代應(yīng)用程序,從而從硬件中擠出最后的性能。讓我們概述框架的核心組件!

什么是ActiveJ?

ActiveJ是全新的全棧Java框架,可用于各種Web,云和微服務(wù)高負(fù)載場景。

ActiveJ是本機(jī)高性能解決方案。根據(jù)ActiveJ網(wǎng)站的說法,它最初是為RTB廣告平臺的解決方案重新開發(fā)的,該平臺每天處理超過1000億個入站請求。

為了滿足這個想法,ActiveJ不僅效率極高,而且還提供了另一種開發(fā)方法。它具有最少的第三方依賴關(guān)系,可實現(xiàn)高性能,一致性和簡化的開發(fā)流程。ActiveJ使應(yīng)用程序業(yè)務(wù)邏輯超出了框架規(guī)范和限制。

讓我們概述框架的核心組件!

ActiveJ組件

ActiveJ具有一組松散耦合的組件,這些組件涵蓋了整個應(yīng)用程序堆棧。有些組件沒有依賴性,可以用作獨立庫。

異步核心

ActiveJ具有自己的高性能異步I / O核心:Eventloop,Promise和Net。它還具有異步數(shù)據(jù)流處理功能:CSP和Datastream。

主動注入

快速輕量的依賴注入庫。它是多線程友好的,功能豐富的,并且具有閃電般的快速啟動時間和運(yùn)行時間。它提供了對嵌套作用域,單例和臨時綁定,模塊,程序化綁定生成,依賴關(guān)系圖的自省,轉(zhuǎn)換,丟失綁定的自動生成以及對現(xiàn)有綁定的修改的支持。它沒有第三方依賴性,可以獨立于ActiveJ平臺使用。您可以在ActiveInject的網(wǎng)站上找到其用法的一些示例。

ActiveJ HTTP

高性能異步HTTP客戶端和服務(wù)器。根據(jù)基準(zhǔn)測試,在某些使用情況下,即使在單核上并且總CPU負(fù)載也要少50%,它比多線程Vert.x HTTP服務(wù)器快15%。帶有嵌入式HTTP服務(wù)器的最小ActiveJ Web應(yīng)用程序的總大小僅為1.4MB,啟動時間僅為0.65秒,而Spring為17MB和14秒。

讓我們使用HTTP組件創(chuàng)建一個簡單的服務(wù)器。它具有預(yù)定義的HTTP客戶端和服務(wù)器實現(xiàn),并具有出色的性能。我們還將使用ActiveJ啟動器模塊。Launcher是對主要方法的高度概括的抽象,主要方法負(fù)責(zé)應(yīng)用程序的生命周期,依賴關(guān)系和日志記錄。

public final class HttpHelloWorldExample extends HttpServerLauncher {

    @Provides

    AsyncServlet servlet() {

         return request -> HttpResponse.ok200().withPlainText("Hello World!");

    }

 

    public static void main(String[] args) throws Exception {

        Launcher launcher = new HttpHelloWorldExample();

        launcher.launch(args);

    }

}

我們已經(jīng)從Launcher模塊擴(kuò)展了HttpServerLauncher類。

ActiveInject @Provides批注創(chuàng)建一個AsyncServlet。它異步接收來自客戶端的HTTP請求并發(fā)送HTTP響應(yīng)。要啟動服務(wù)器,只需使用Launcher.launch方法即可。轉(zhuǎn)到localhost:8080以檢查您的服務(wù)器。多虧了ActiveInject,您可以輕松擴(kuò)展示例以使其更加復(fù)雜。

您可以在GitHub上找到此示例的源代碼,或在ActiveJ HTTP文檔中找到更多信息。

ActiveCodegen

動態(tài)字節(jié)碼生成器,通過精簡的API封裝了直接字節(jié)碼操作的復(fù)雜性。它使用自動類型推斷,將開銷幾乎為零的類Lisp類AST樹表達(dá)式直接編譯為字節(jié)碼。這是一個實現(xiàn)Example接口的sayHello方法的小示例。

Class<Example> example = ClassBuilder

// DefiningClassLoader represents a loader for defining dynamically generated classes       .create(DefiningClassLoader.create(Thread.currentThread().getContextClassLoader()), Example.class)

    .withMethod("sayHello", call(staticField(System.class, "out"), "println", value("Hello world")))

    .build();

Example instance = example.getDeclaredConstructor().newInstance();

instance.sayHello();

ActiveSerializer

ActiveSerializer是使用ActiveCodegen實現(xiàn)的,并引入了無模式的方法來實現(xiàn)序列化過程的最佳性能。它具有對Java子類,集合(包括帶有循環(huán)引用的圖形以及HPPC等專用集合)的全面支持。而且,它支持插件,擴(kuò)展,版本控制,可以使用Java注釋等進(jìn)行微調(diào)。根據(jù)ActiveSerializer網(wǎng)站上的基準(zhǔn)測試,它是世界上最快的基于JVM的序列化器。這是一個用例的小例子:

public static class Person {

    public Person(@Deserialize("age") int age,

                  @Deserialize("name") String name) {

        this.age = age;

        this.name = name;

    }

 

    @Serialize(order = 0)

    public int age;

 

    @Serialize(order = 1)

    public final String name;

}


您可以在GitHub或ActiveSerializer docs中找到更多示例。ActiveSerializer可以獨立于框架使用,也可以作為獨立庫使用。

ActiveSpecializer

通過在運(yùn)行時重寫字節(jié)碼來自動加速代碼的獨特技術(shù)。與傳統(tǒng)的編譯器優(yōu)化工具不同,它使用類實例的運(yùn)行時信息:所有類字段都轉(zhuǎn)換為靜態(tài)類字段,所有虛擬方法調(diào)用都被虛擬化并替換為靜態(tài)方法調(diào)用。根據(jù)基準(zhǔn)測試,在某些情況下,ActiveSpecializer可使您的代碼速度提高7倍。

例如,讓我們看看如何使用ActiveSpecializer優(yōu)化典型的AST表達(dá)式樹f(x)=((x + 5)– 5)*(-1)。該表達(dá)式將如下所示:

static IntUnaryOperator INT_UNARY_OPERATOR =

    new IntUnaryOperatorProduct(

        new IntUnaryOperatorSum(

            new IntUnaryOperatorSum(

                 new IntUnaryOperatorIdentity(),

                 new IntUnaryOperatorConst(5)),

            new IntUnaryOperatorConst(-5)),

         new IntUnaryOperatorConst(-1));

 

//And it is equivalent to this manually optimized equation:

static IntUnaryOperator INT_UNARY_OPERATOR_OPTIMIZED_MANUALLY =

    new IntUnaryOperator() {

        @Override

        public int applyAsInt(int x) {

            return -x;

        }

    };

讓我們看看ActiveSpecializer將如何自動處理第一個表達(dá)式:

static IntUnaryOperator INT_UNARY_OPERATOR_OPTIMIZED_AUTOMATICALLY =

    SPECIALIZER.specialize(INT_UNARY_OPERATOR);

根據(jù)基準(zhǔn),原始方程式的運(yùn)算時間為69.938 ns,而手動和自動專用方程式的運(yùn)算時間分別僅為26.533 ns和26.691 ns。

但是,ActiveSpecializer遠(yuǎn)遠(yuǎn)超出了算術(shù)方程式。您可以在GitHub或ActiveSpecializer docs中找到ActiveSpecializer示例??梢元毩⒂诳蚣苁褂盟鳛楠毩?。

ActiveRPC

閃電般的二進(jìn)制協(xié)議,用于開發(fā)分布式應(yīng)用程序和微服務(wù)解決方案。為了最大程度地減少開銷,ActiveRPC不使用HTTP和JSON或XML編碼。相反,它由快如閃電的ActiveSerializer驅(qū)動,在TCP上運(yùn)行,并具有自定義的高性能二進(jìn)制流協(xié)議。

ActiveRPC具有高度優(yōu)化的服務(wù)器和客戶端實現(xiàn)以及預(yù)定義的云策略,這些策略有助于管理服務(wù)器之間或服務(wù)器分片之間的請求安排。這些策略包括first available,round-robin,集合點哈希等。您可以組合這些策略。例如,讓我們使用第一個可用的和循環(huán)戰(zhàn)略管理的4個連接池:

RpcStrategy strategy = roundRobin(

    firstAvailable(servers(ADDRESS_1, ADDRESS_2)),

    firstAvailable(servers(ADDRESS_3, ADDRESS_4)));

您可以更改連接數(shù)量,應(yīng)用不同的策略,并且您的應(yīng)用程序?qū)⒛軌蛟幚砀哓?fù)載方案:

RpcStrategy strategy = rendezvousHashing(hashFunction)

    .withShard(1, firstAvailable(servers(ADDRESS_1, ADDRESS_2)))

    .withShard(2, firstAvailable(servers(ADDRESS_3, ADDRESS_4)))

    .withShard(3, server(ADDRESS_5));

您可以在GitHub或ActiveRPC docs中找到ActiveRPC示例。

還請參見:Java(和您)的類型安全單元表達(dá)式

ActiveFS

通過上載,下載,追加,列出,復(fù)制,移動,刪除以及其他用于本地,遠(yuǎn)程或分布式存儲的方法,提供微小的異步抽象。它具有類似于FTP的簡單協(xié)議以及零開銷流傳輸,并支持?jǐn)?shù)據(jù)冗余,重新平衡和重新分片。

private RemoteFsClusterClient client;

 

    ...

 

Eventloop eventloop = Eventloop.create();

 

Map<Object, FsClient> clients = ...;

 

client = RemoteFsClusterClient.create(eventloop, clients)

    .withReplicationCount(N / 2)

    .withServerSelector(RENDEZVOUS_HASH_SHARDER);

專業(yè)數(shù)據(jù)庫

ActiveJ具有一系列專用數(shù)據(jù)庫實現(xiàn),例如操作轉(zhuǎn)換數(shù)據(jù)庫,CRDT服務(wù)器數(shù)據(jù)庫和OLAP數(shù)據(jù)庫。

實用程序

包括應(yīng)用程序引導(dǎo),生命周期和管理組件,如啟動器,服務(wù)圖,JMX和觸發(fā)器。

結(jié)論

ActiveJ是一個全新的開發(fā)平臺,可通過輕量級且可本地伸縮的異步體系結(jié)構(gòu)創(chuàng)建各種復(fù)雜程度的現(xiàn)代應(yīng)用程序,從而從硬件中擠出最后的性能。

您可以在GitHub存儲庫上瀏覽ActiveJ源代碼。可以在官方網(wǎng)站上找到有關(guān)ActiveJ的文檔和示例。