Java:ChronicleMap第3部分,快速微服务
標準Java地圖需要在啟動時進行初始化。 了解如何利用可從文件初始化的ChronicleMaps并顯著減少微服務啟動時間,以及如何在JVM之間共享Maps。
內置的Map實現(例如HashMap和ConcurrentHashMap速度很快,但是必須先使用映射進行初始化,然后才能將其用于查找值。 而且,它們的大小受到諸如堆和RAM大小之類的實際手段的限制。 最后,它們對于運行它的JVM是本地的。
初始化過程可能會減慢微服務的關鍵啟動速度,尤其是在從遠程REST接口或遠程數據庫讀取映射時。 在本文中,您將學習如何使用內存映射的ChronicleMap實例在幾秒鐘而不是幾分鐘內啟動微服務應用程序,以及在有關CronicleMap的系列文章的第三篇文章中,如何在JVM之間共享Maps。
在第一篇文章中詳細了解CronicleMap的基礎知識。
在第二篇文章中閱讀有關文件映射的CronicleMap對象的更多信息。
創建共享地圖
如本系列第二篇文章所述,我們可以輕松地創建一個文件映射Map,如下所示:
private static Map<Long, Point> createFileMapped() { try { return ChronicleMap .of(Long. class , Point. class ) .averageValueSize( 8 ) .valueMarshaller(PointSerializer.getInstance()) .entries(10_000_000) .createPersistedTo( new File( "my-map" )); } catch (IOException ioe) { throw new RuntimeException(ioe); } } 已建立
現在,任何有權訪問“ my-map”文件的JVM都可以訪問Map對象。 映射的更新將通過共享文件在參與的JVM之間共享。
初始化地圖
如第二篇文章中所示,我們可以創建并初始化一個
像這樣的Map :
在我的筆記本電腦(2015年中的MacBook Pro,16 GB,2.2 GHz Intel Core i7)上運行時,創建和填充筆記本電腦大約需要10秒鐘。
Map一千萬個條目。
如果Map內容是從外部檢索的(而不是通過pointFrom()方法在本地創建的),則填充Map可能會花費更長的時間。 例如,如果我們獲得50 Mbit / s的REST吞吐量,并且每個JSON Point表示消耗25個字節,則填充Map大約需要60秒。
啟動一個新的JVM
現在已經有一個預先存在的映射文件,我們可以直接從該文件開始,如以下代碼片段所示:
return ChronicleMap .of(Long. class , Point. class ) .averageValueSize( 8 ) .valueMarshaller(PointSerializer.getInstance()) .entries(10_000_000) .createOrRecoverPersistedTo( new File( "my-map" ));這將直接從現有的“我的地圖”文件中創建一個Map 。
在我的筆記本電腦上運行此程序將產生5秒鐘的開始時間。 可以將其與60秒REST示例進行比較,從而將啟動時間減少90%。
在同一節點上運行多個JVM
我們可以選擇在同一物理服務器節點上運行多個JVM。 通過這樣做,我們受益于操作系統通過公開共享內存使文件映射可用于每個JVM的能力。 這構成了JVM之間有效且低延遲的通信方式。 與每個JVM / OS都必須維護自己的獨立映射的情況相比,存在一個公用的映射內存池這一事實使內存管理效率更高。
摘要
ChronicleMaps可以通過共享文件在參與的JVM之間共享
使用共享文件可以大大減少啟動時間
如果JVM在同一臺物理計算機上運行,??則性能和效率將進一步提高 通過ChronicleMap共享的文件提供了JVM之間低延遲的通信方式
翻譯自: https://www.javacodegeeks.com/2019/08/java-chroniclemap-fast-microservices.html
總結
以上是生活随笔為你收集整理的Java:ChronicleMap第3部分,快速微服务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: (linux查看ftp)
- 下一篇: 12123您提交的申请信息不符合备案(符