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

内置的Map实现(例如HashMapConcurrentHashMap速度很快,但是必须先使用映射进行初始化,然后才能将其用于查找值。 而且,它们的大小受到诸如堆和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部分,快速微服务相关推荐

  1. 联发科heli p90_“如果您是Java开发人员并且正在编写微服务,那么Helidon是一个不错的选择”

    联发科heli p90 " Helidon仅设计用于微服务" 尽管Oracle最近开放了 Helidon(一组Java库)的开源资源 ,但是该项目本身并不新鲜,正如Helidon项 ...

  2. 从 Java 9 开始,Java 就华丽的转身为微服务了…

    继 2014 年 3 月 Java 8 发布之后,时隔 4 年,2018 年 9 月,Java 11 如期发布,其间间隔了 Java 9 和 Java 10 两个非LTS(Long Term Supp ...

  3. redis 什么是冷数据_阿里Java三面凉凉:微服务,Redis,JVM一个都搞不懂

    前言: 金九银十刚刚过去了,不知道很多小伙伴都拿到自己心仪的offer没有,我这边也收到了一个粉丝投来的消息,说看到阿里的面试真题之后人都是懵的,发现自己一窍不通,下面给大家分享我这个粉丝的经历,以及 ...

  4. Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战

    Java生鲜电商平台-SpringCloud微服务架构高并发参数优化实战 一.写在前面 在Java生鲜电商平台平台中相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这 ...

  5. Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析

    Java生鲜电商平台-SpringCloud微服务架构中网络请求性能优化与源码解析 说明:Java生鲜电商平台中,由于服务进行了拆分,很多的业务服务导致了请求的网络延迟与性能消耗,对应的这些问题,我们 ...

  6. Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案

    Java生鲜电商平台-SpringCloud微服务架构中分布式事务解决方案 说明:Java生鲜电商平台中由于采用了微服务架构进行业务的处理,买家,卖家,配送,销售,供应商等进行服务化,但是不可避免存在 ...

  7. Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲

    Java生鲜电商平台-SpringCloud微服务开发中的数据架构设计实战精讲 Java生鲜电商平台:   微服务是当前非常流行的技术框架,通过服务的小型化.原子化以及分布式架构的弹性伸缩和高可用性, ...

  8. JAVA计算机毕业设计鲜花订购网微服务Mybatis+系统+数据库+调试部署

    JAVA计算机毕业设计鲜花订购网微服务Mybatis+系统+数据库+调试部署 JAVA计算机毕业设计鲜花订购网微服务Mybatis+系统+数据库+调试部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  9. java微服务,微在哪_Java:ChronicleMap第3部分,快速微服务

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

最新文章

  1. F# ≥ C# (Record)
  2. 并发库应用之三 线程池与定时器应用
  3. HTML DOM Attribute 对象
  4. 异步编程:JDeferred 2.x 的使用(针对Android)
  5. php oracle 锁表,频繁使用的一张表经常好被锁死?怎样处理!
  6. 5分钟搞定jQuery zepto.js 面向对象插件
  7. php task todolist,Todolist--(4)登录
  8. PG基于pgpool-II实现读写分离和负载均衡
  9. Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)【Dalston版】 1
  10. 《Algorithms》—— Dijkstra 的双栈算术表达式求值算法
  11. 蛮力法求最大字段和时间复杂度_蛮力法
  12. 备份Foxmail7.2邮箱
  13. 学生宿舍管理项目开发计划书_第六组学生宿舍管理系统项目计划书
  14. 《程序员修炼之道》笔记(五)
  15. HDU 5879 Cure -2016 ICPC 青岛赛区网络赛
  16. 使用Python防止SQL注入攻击
  17. mac版本idea反编译jar包
  18. 网页服务器 根,服务器根域名301重定向到www完整教程
  19. 前端开发如何使得PC端和手机端的页面效果不一样
  20. ElementUI项目使用pdf.js预览pdf文件

热门文章

  1. Codeforces Round #654 (Div. 2)
  2. 【归并排序】休息(jzoj 3462)
  3. JS中typeof的用法
  4. Redis 的 8 大应用场景
  5. 总结Java常见面试题和答案
  6. MyBatis 思维导图,让 MyBatis 不再难懂(一)
  7. javaweb实现分页(二)
  8. sh(Spring+Spring mvc+hibernate)——IEmpDao.java
  9. 迪杰斯特拉算法(最短路径)
  10. EasyExcel(笔记)