热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java:ChronicleMap第3部分,快速微服务

标准Java地图需要在启动时进行初始化。了解如何利用可从文件初始化的ChronicleMaps并显着减少微服务启动时间,以及如何在JVM之间共享Maps。内置的Map

标准Java地图需要在启动时进行初始化。 了解如何利用可从文件初始化的ChronicleMaps并显着减少微服务启动时间,以及如何在JVM之间共享Maps。

内置的Map实现(例如HashMapConcurrentHashMap速度很快,但是必须先使用映射进行初始化,然后才能将其用于查找值。 而且,它们的大小受到诸如堆和RAM大小之类的实际手段的限制。 最后,它们对于运行它的JVM是本地的。

初始化过程可能会减慢微服务的关键启动速度,尤其是在从远程REST接口或远程数据库读取映射时。 在本文中,您将学习如何使用内存映射的ChronicleMap实例在几秒钟而不是几分钟内启动微服务应用程序,以及在有关CronicleMap的系列文章的第三篇文章中,如何在JVM之间共享Maps。

在第一篇文章中详细了解CronicleMap的基础知识。

在第二篇文章中阅读有关文件映射的CronicleMap对象的更多信息。

创建共享地图

如本系列第二篇文章所述,我们可以轻松地创建一个文件映射Map,如下所示:

private static Map 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 :

final Map m3 = LongStream.range( 0 , 10_000_000) .boxed() .collect( toMap( Function.identity(), FillMaps::pointFrom, (u, v) -> { throw new IllegalStateException(); }, FillMaps::createFileMapped ) );

在我的笔记本电脑(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



推荐阅读
author-avatar
壞小籽z_339
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有