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
:
final Map<Long, Point> 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
Java:ChronicleMap第3部分,快速微服务相关推荐
- 联发科heli p90_“如果您是Java开发人员并且正在编写微服务,那么Helidon是一个不错的选择”
联发科heli p90 " Helidon仅设计用于微服务" 尽管Oracle最近开放了 Helidon(一组Java库)的开源资源 ,但是该项目本身并不新鲜,正如Helidon项 ...
- 从 Java 9 开始,Java 就华丽的转身为微服务了…
继 2014 年 3 月 Java 8 发布之后,时隔 4 年,2018 年 9 月,Java 11 如期发布,其间间隔了 Java 9 和 Java 10 两个非LTS(Long Term Supp ...
- redis 什么是冷数据_阿里Java三面凉凉:微服务,Redis,JVM一个都搞不懂
前言: 金九银十刚刚过去了,不知道很多小伙伴都拿到自己心仪的offer没有,我这边也收到了一个粉丝投来的消息,说看到阿里的面试真题之后人都是懵的,发现自己一窍不通,下面给大家分享我这个粉丝的经历,以及 ...
- Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战
Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...
- Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析
Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...
- Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案
Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案 说明:Java生鲜电商平台中由于采用了微服务架构进行业务的处理,买家,卖家,配送,销售,供应商等进行服务化,但是不可避免存在 ...
- Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲
Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台: 微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...
- JAVA计算机毕业设计鲜花订购网微服务Mybatis+系统+数据库+调试部署
JAVA计算机毕业设计鲜花订购网微服务Mybatis+系统+数据库+调试部署 JAVA计算机毕业设计鲜花订购网微服务Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语 ...
- java微服务,微在哪_Java:ChronicleMap第3部分,快速微服务
java微服务,微在哪 标准Java Maps需要在启动时进行初始化. 了解如何利用可从文件初始化的ChronicleMaps并显着减少微服务启动时间,以及如何在JVM之间共享Maps. 内置的Map ...
最新文章
- F# ≥ C# (Record)
- 并发库应用之三 线程池与定时器应用
- HTML DOM Attribute 对象
- 异步编程:JDeferred 2.x 的使用(针对Android)
- php oracle 锁表,频繁使用的一张表经常好被锁死?怎样处理!
- 5分钟搞定jQuery zepto.js 面向对象插件
- php task todolist,Todolist--(4)登录
- PG基于pgpool-II实现读写分离和负载均衡
- Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】 1
- 《Algorithms》—— Dijkstra 的双栈算术表达式求值算法
- 蛮力法求最大字段和时间复杂度_蛮力法
- 备份Foxmail7.2邮箱
- 学生宿舍管理项目开发计划书_第六组学生宿舍管理系统项目计划书
- 《程序员修炼之道》笔记(五)
- HDU 5879 Cure -2016 ICPC 青岛赛区网络赛
- 使用Python防止SQL注入攻击
- mac版本idea反编译jar包
- 网页服务器 根,服务器根域名301重定向到www完整教程
- 前端开发如何使得PC端和手机端的页面效果不一样
- ElementUI项目使用pdf.js预览pdf文件