针对多租户应用程序的 JVM 支持 提高应用程序密集性

Slides:



Advertisements
Similar presentations
1 1.2 信息的表示与存储  数据:数据是对客观事物的符号表示。 如,数值、文字、语言、图形、图像等都是不同形 式的数据。  信息:信息是既是对客观事物变化和特征的反映,又 是事物之间相互作用、相互联系的表征。 信息必须数字化编码,才能用计算机进行传送、存 储和处理。 信息具有针对性和时效性。
Advertisements

湖南城市学院 Android 智能手机开发 信息科学与工程学院 主 讲:李 旎. 湖南城市学院 课程结构 Android 平台概述 – 平台介绍 开发环境: – 构建 Android 开发环境 Android 的基本操作 -- 五种基本操作 应该程序: – 应用程序结构 典型应用: – 用户界面 –
第一章 Java 程序设计技术 概述  什么是 Java 语言  一个简单的 Java 程序  程序的编译和运行  常见错误  使用 Java 核心 API 文档.
程序设计语言基础 软件工程系 秦晓燕. 课程目标 了解面向对象程序设计的思想,以及软件 开发流程。 学习 Java 语言的基本概念和编程方法,基 本掌握 Java 类库的使用。 能够利用所学的方法开发简单的小型应用 程序.
Java 程序设计 案例教程 北京大学出版社 第 01 章. Java 程序设计案例教程 第 01 章 Java 语言与面向对象程序设计 Java 语言的历史 Java 语言的特点 Java 程序的分类 Java 环境配置 Eclipse 的安装 Java 程序的调试 教学目标.
Web Maple— 云端计 算 数学学院刘海洋 胡婷婷. 需求 什么是 Web Maple ? Maple : “ 数学家的软件 ” 符号和数值计算 动态编程语言 集成编辑环境与图形输出 Web Maple :网页上的数学家 完整的 Maple 功能 云端计算 网页独特的输入输出格式.
JAVA 概述 主讲:张雷. J2ME API 地址: 广东科贸信息工程 张雷学习要求 了解各种程序设计语言及其特点 了解各种程序设计语言及其特点 了解 JAVA 的发展史和其特点 了解 JAVA 的发展史和其特点.
Java 程序设计(第二版) 普通高等教育 “ 十一五 ” 国家级规划教材 辛运帷等 编著 徐小平 主讲.
1 网站设计理念 大连理工大学创新实验学院 优秀网站展示 - LAMP 类网站
淮海工学院 计算机课程 第 1 章 Java 入门 1.1 Java 的起源与发展 1.2 Java 程序开发与运行环境 1.3 Java 程序设计步骤 1.4 Java 程序的构成 一个小游戏.
第 3 章操作系统基础 3.1 操作系统概述 3.2 操作系统的功能模块 3.3 典型操作系统概述.
山西职业技术学院 蒋晋红.
董笑菊 电子信息与电气工程学院 计算机科学与工程系
IT运维管理解决方案 -轻松管理,自在运维 产品经理 刘曜.
《 Java开发环境配置》 主讲人:耿力.
计算机硬件设备图片 go 珠海市第四中学 信息技术组.
MPM MPM MPM MPM MPM MPM 慧昇教育中心.
圖書資訊處 -智慧型網路服務介紹- 2014年1月13日.
第1章 Java语言概述.
C语言程序设计 李伟光.
教學經驗分享 吳毅成 國立交通大學資訊工程系 2012年4月.
精品开放课程的 建设与应用 谢幼如 教授 广东省高校教育技术中心 华南师范大学教育信息技术学院
讓人看了難忘的故事 中藥房轉載 分享人生積極正面訊息 創造宇宙合諧快樂能量.
門神 在傳統觀念中,門是居住環境中與外界相通的出入口,具有重要的屏障作用。門神顧名思義就是護宅守門的神仙,每逢過年,上至天子百官下至普通百姓,家家戶戶必在門上張貼門神,以保一家平安。 門神種類主要有宅第大門上將軍武門神、內室門戶上祈福文門神,還有童子門神、仙子門神等,形象豐富多樣,皇家貴戚還往往在畫上瀝粉貼金,十分吉祥喜慶。
人力资源管理 human resource management
典型案例---医院.
2014年度企业所得税业务培训 蚌埠市地方税务局所得税科.
第三节 渐开线圆柱齿轮精度等级及应用.
日新月异的信息技术.
JAVA程序设计.
北京科技大学天津学院 信息工程系 面 向 对 象 程 序 设 计 第1讲 Java初探 主讲:于静.
前言 1.课程安排: 第一章 操作系统引论(7学时) 第二章 进程管理(14学时) 第三章 处理机调度与死锁(10学时)
企业所得税年度纳税申报表(2014年版)培训 国家税务总局所得税司 2014年12月.
第8章 机床操作 主讲:臧红彬 博士.
William Stallings 计算机组成与结构(第8版)
企业所得税年度纳税申报表(2014年版)培训 国家税务总局公告2014年第63号
提升课堂质量 助推教师成长 促进教学改革 “一师一优课,一课一名师”活动总结 河南省实验小学.
义务教育新课程标准实验教科书 九年级历史下册课堂教学设计
人力资源管理 human resource management
克薩技術 vs 傳統配種 克薩人.
生产企业现代物流解决方案之JIT与TOC
第1章 java简介及环境搭建 第1章 Java简介及开发环境搭建.
科學科 污染 空氣 成因 的 : 題目 及 減少空氣污染的方法 陳玉玲 (4) 姓名 : 去到目錄.
人力资源管理 human resource management
Homework 4 an innovative design process model TEAM 7
作業系統的結構 日期 : 2018/9/17.
| 台南市教育局資訊中心 教育雲 飛番雲端中心 儲存雲與平台發展
第2章 建立Android應用程式 2-1 Java語言、XML文件與Android 2-2 建立第一個Android應用程式
ANDROID與OSGI平台整合.
資料來源:張弘明 張迪安 林欣螢 吳柏農 吳沛錡
第一章 認識Java Java 程式設計入門(I).
Native Development Kit
2018/12/7 Java语言程序设计 教师:段鹏飞.
Java基础入门 第1章 Java开发入门 · Java语言的特点 · Java开发环境的搭建 · 环境变量的配置 · Java的运行机制.
Chapter 4 多執行緒 (Multi Thread)
作業系統 (Operating System)
二:JAVA开发环境的安装和配置.
認識 Java.
01.Java语言概述 讲师:复凡.
第1章 Java语言概述 学习目标 本章要点 上机练习 习 题.
面向对象 程序设计语言基础 马骏
作業系統 第三章 作業系統結構.
广州中医药大学研究生 学位论文网络提交方法
課程網站
創新者的解答 – 第五章 什麼該外包、什麼該自己做?
猜數字遊戲.
實驗十六:匯出APK安裝檔與軟體上架.
第一章 操作系统引论 1.1 操作系统的目标和作用 1.2 操作系统的发展过程 1.3 操作系统的基本特性 1.4 操作系统的主要功能
方格紙上畫正方形.
Usage Eclipse 敏捷方法工具介紹 實驗室網站:
Presentation transcript:

针对多租户应用程序的 JVM 支持 提高应用程序密集性 San Hong Li — Java 多租户项目技术主管 23st July 2013 针对多租户应用程序的 JVM 支持 提高应用程序密集性

重要免责声明 本演示文稿中包含的信息仅供参考。 我们已尽力验证本演示文稿中所包含信息的完整性和准确性,这些信息按“原样”提供,不带有任何类型的明 示或暗示保证。 本演示文稿中包含的所有性能数据均在受控的环境中收集。由于硬件、软件或基础架构的差异,您自行实施的 测试结果可能会有所不同。 本演示文稿中所包含的全部数据只是用作指南。 此外,本演示文稿中包含的信息基于 IBM 目前的产品规划和战略给出,IBM 随时可能更改,恕不另行通知。 对于由于使用本演示文稿或任何其他文档,或与之相关的其他问题而造成的任何损害,IBM 及其子公司不承 担任何责任。 本演示文稿中包含的任何信息,均不具有以下意图或效果: - 构成 IBM、其子公司或 IBM 及其子公司的供应商和/或许可方的任何保证或表示

演讲人介绍 8 年 Java 工作经验。 近期工作重点: 我的联系信息: Java 虚拟机“云”改进 过往从业经历 多租户技术 JVM(J9) 开发 过往从业经历 Java 安全开发(Expeditor,Lotus Notes 内核) 网络编程 我的联系信息: 邮件:lisanh@cn.ibm.com 微博:sanhong_li

本次讲座结束后,您将能够: 本次演讲能让您有何收获? 理解什么是多租户以及这种模式的优点 描述多租户 Java 部署面临的挑战 了解将现有应用程序转换为多租户部署的新 JDK 特性

注意:本次演讲具有前瞻性,IBM Java 团队 正在为演讲中提及的许多特性而努力,这些特性可能会包含在未来的版本中。 议题 不要重复自己的劳动:简化可节省时间和金钱 攀登多租户的大山:面临的挑战和登顶路线 守望相助:应对不良行为 风险和回报:我们能实现多高的密集性? 总结:总结及后续步骤 注意:本次演讲具有前瞻性,IBM Java 团队 正在为演讲中提及的许多特性而努力,这些特性可能会包含在未来的版本中。

通过消除所有不必要的部分简化软件体系,从而更好地利用硬件( 以及运行软件的人员)。 引言 通过消除所有不必要的部分简化软件体系,从而更好地利用硬件( 以及运行软件的人员)。 简单 == 更廉价 == 可预测 == 强健

不要重复自己的劳动:简化可节省时间和金钱 “每则知识在系统中必须具有唯一、明确、权威的表示” 《程序员修炼之道》(Pragmatic Programmer,Hunt 和 Thomas) (换言之:复制和粘贴容易引发问题) http://www.instructables.com/id/How-To-Create-A-LEGO-Star-Wars-Clone-Army/

什么是多租户 多租户指的是软件架构的一种原则,在多租户架构中,在一个服务器上运行的软 件的单个实例同时为多个客户端组织(租户)提供服务。 多租户是相对于多实例架构而言的,在多实例架构中,需要为不同的客户端组织 建立不同的软件实例(或硬件系统)。 在多租户架构中,软件应用程序设计为对数据和配置进行虚拟化分区,每个客户 端组织则使用一个自定义的虚拟应用程序实例。 鸣谢

多租户对于企业的意义 多租户 == 简化 单一软件实例为多个客户端组织(租户)提供服务 软件应用程序设计为对数据和配置进行虚拟化分区,每个客户端组织则使用一个自定义的虚拟应用程序实例 PaaS/SaaS 机会 == 效率就是金钱

信息来源:Peter Cousins 和 Jim Colson 白皮书 SaaS 租户解决方案演进 信息来源:Peter Cousins 和 Jim Colson 白皮书

客户观点 提供商观点 多租户的效率 成本:提供商运行服务 价值实现时间:快速启动和运行,通常频繁、快速获得升级 服务质量:需要关注 SLA,但不需要具备运行基础架构的能力 绕过 IT 积压:简化的部署(由提供商处理) 提供商观点 成本:尽量减少移动部件/重复 敏捷性:升级、备份、投入使用

攀登多租户的大山 面临的挑战和一条*相对容易的登顶路线 * 多条路线中的一条

同样多的鸡蛋(应用程序),更少的篮子 您需要精心准备上好的篮子 并非新问题 多租户挑战 1:隔离 http://bit.ly/e7G1jb http://circa71.wordpress.com/2010/07/ http://bit.ly/e7G1jb

JVM 通过 -Xshareclasses 提供帮助 在应用程序之间隔离数据 控制资源独占 JVM 能够提供帮助! 多租户挑战 2:入门成本 合并 合并 端口冲突 文件系统冲突 安全挑战 JVM 通过 -Xshareclasses 提供帮助 简单 == 无应用程序更改 仅共享虚拟机管理程序 在应用程序之间隔离数据 控制资源独占 JVM 能够提供帮助!

Java 堆占用数百 MB 的内存 即时 (JIT) 编译器占用数十 MB 的内存 专用中间件的成本(以 JVM 为中心) GC 默认具有一个每核心帮助程序线程 即时 (JIT) 编译器占用数十 MB 的内存 生成的代码专用且量大 生成的代码具有很高的生成成本 窃取应用程序的时间 默认具有多个编译线程 JVM 实例之间无编排 编译或 GC 活动可能会在相同(且糟糕)的时间发生

挑战:降低入门成本 我们需要解决以下问题 在应用程序之间隔离数据 控制资源独占 同时不能强迫人们更改其应用程序!

在应用程序的代码中嵌入 URL 模式等部署信息 数据隔离挑战:示例 1 在应用程序的代码中嵌入 URL 模式等部署信息 稍等!如果我们在一个服务器上部署该 Sevlet 的两个副本会发生什么 情况?

静态变量是有害的(由于共享) 大多数库都充斥着静态变量 数据隔离挑战:示例 2 稍等! What happens if each tenant needs a different default locale?

通过常规类加载器技巧实现隔离 通过类加载器隔离静态变量 每当您加载一个租户时,将其放入一个新的类加载器 现在不再共享静态变量! 主租户 A X 主租户 类 加载器 A 租户1 类 加载器 A 租户2

通过常规类加载器技巧实现隔离 通过类加载器隔离静态变量 每当您加载一个租户时,将其放入一个新的类加载器 现在不再共享静态变量! 大量重复! A X 主租户 类 加载器 A 租户1 类 加载器 A 租户2 大量重复! 类数据 即时编译代码 重复的静态变量,其中大部分可能相同

通过字节码重写隔离静态变量 让我们只关注静态变量 对每个静态变量使用一个数据结构 使用属性访问风格来获取静态变量 重写字节码! 对每个静态变量使用一个数据结构 使用属性访问风格来获取静态变量 仍然容易出错:类加载规则、反射、JNI、其他字节码重写程序 好了,那么您需要开始将可共享(默认)的内容标记为隔离(新)的内容 <租户1 值> 租户1 上下文 静态索引 …

先例和相关工作 Sun/Oracle MVM 和 JSR 121 — 应用程序隔离 API 是一个多租户 JRE 允许多个 Java 应用程序在相同 JVM 中运行 通过隔离所有静态字段而非使用不同的类加载器实现应用程序间的精细隔离 支持共享类字节码和元数据 Google 应用引擎和 JSR 284 — 资源占用管理 API 是一个多租户中间件服务 允许多个 Servlet 应用程序部署到引擎中(以及按需扩展至多个节点) 显式地控制资源占用(CPU、带宽) 通过白名单限制 Java SE API 访问 为托管应用程序提供基于“命名空间”的多租户编程模型

结果:您的应用程序就好像在专用的 JVM 中运行,而实际上是与其他 应用程序一同运行。 多租户 JDK:易于隔离和控制 概念:Add a single argument (–Xmt for multi-tenant) to your Java command-line to opt into sharing a runtime with others. 结果:您的应用程序就好像在专用的 JVM 中运行,而实际上是与其他 应用程序一同运行。 优点:更小、更快且最终更智能 减少重复:(1 GC、1 JIT),堆对象共享 快速启动:启动应用程序时,JVM 已经运行并预热

MultiTenancy JDK 多租户 JDK:组件概述 允许多个 Java 应用程序在一个 JVM 中运行 模拟 JSR121 隔离 每个隔离的应用程序都“认为”自己拥有整个 VM 积极且透明地共享元数据: 方法的字节码 GC JIT Tenant Programming Model Tenant Scope Field Resource Consumption Management (RCM) MultiTenancy JDK 在 Java API 中实例化“租户”: 管理租户的生命周期 保持不同租户的“私有”属性。 按租户实施资源占用策略。 动态向租户附加/分离线程. 隔离不同租户的运行时状态: @TenantScope 语义:类的静态字段 按租户存储。 实现 JSR284 兼容 API: 节流使用者的资源占用 资源可以是 CPU 时间、I/O 带宽等 使用者可以是线程、租户、JVM

多租户 JDK:启动您的应用程序 Opt-in to multitenancy by adding –Xmt

多租户 JDK:注册 javad 后台进程 JVM 将自动定位/启动后台进程 定位 javad

多租户 JDK:创建一个新租户 在 javad 后台进程中创建新租户 租户1 javad

javad 进程中存在 通用代码的一份副本。 大部分运行时结构 是共享的。 多租户 JDK:创建第二个租户 在 javad 后台进程中创建新租户 租户1 租户2 javad javad 进程中存在 通用代码的一份副本。 大部分运行时结构 是共享的。

解决数据隔离挑战 如果 JVM 了解租户并向每个租户提供不同的静态变量视图会怎样? 来认识一下 @TenantScope 批注。 租户1 … LocaleSettings.setDefaultLocale( LocaleSettings.UK ); … 租户2 … LocaleSettings.setDefaultLocale( LocaleSettings.USA ); … @TenantScope 语义:静态变量值按租户存储 借助 JIT 尝试限制一位数吞吐量间接产生的额外成本 每个租户拥有各自的 LocaleSettings.defaultLocale 现在许多租户可以共享一个 LocaleSettings 类

… 让我们提供一些用于管理租户的 API:TenantContext.class 可供中间件使用的基本租户操作(选择加入) 数据隔离 资源管理(稍后详细介绍) 中间件区分租户的能力 哪一个引起了问题? 查询租户的状态 您有多少空闲内存? 创建和查询 数据隔离 资源管理

多租户 JDK:实际共享但“感觉像是”专用的 JVM 在类加载时自动添加 @TenantScope 标记 租户看到专用的中间件 — 但在幕后实际为共享的类(和 JIT 编译代码) 应用程序 更改 合并

守望相助:应对不良行为 http://bit.ly/ficwkl 图片来自 http://www.rra.memberlodge.org/Neighbourhood-Watch-Reporting http://mcsholding.com/DetailsPage.aspx?Page_Id=42

您与邻居的关系越紧密,控制能力就越强 多租户 JDK 可提供对以下资源的控制 共享的环境需要资源控制 CPU 时间 堆大小 线程数量 文件 IO:读取带宽、写入带宽 套接字 IO:读取带宽、写入带宽

资源控制工效学 针对新资源的单命令行开关 无成本映射现有选项 添加一些 JMX bean 以查看您对每种资源的使用量 -Xlimit:cpu=10-30 // 最低 CPU 10%,最高 30% -Xlimit:cpu=30 // 最高 CPU 30% -Xlimit:netIO=20M // 最高带宽 20 Mbps 无成本映射现有选项 -Xms8m –Xmx64m // 初始 8M 堆,最高 64M 添加一些 JMX bean 以查看您对每种资源的使用量 即,通过包装在租户中,了解您的代码对资源的使用情况

JSR-284 资源占用管理 API 对于每种资源: JSR 284 提供了一个可按“域”管理资源占用的标准化 API。 资源属性 1 N 也作为 MBean 公开 策略 资源属性 1 N 1 N 资源域 资源使用者 1 1 N N 约束 通知

结果:JVM 控制可实现与操作系统相当的性能,但准确性较低。 JVM 与操作系统 CPU 限制 基准测试设置 时长比较:Linux AMD64,运行一个 CPU 配额为 100% 的 10 线程 CPU 密集型应用程序,每个线程执行相同的斐波纳契计算,对时长进行基准测试 准确性比较:Linux AMD64, run two CPU-intensive apps each doing the same Fibonacci calculation, but with different CPU quota:60% vs 30%, benchmark the accuracy 时长 轮次 操作系统作为控制器 JVM 作为控制器 1 1362 秒 1267 秒 2 1167 秒 1239 秒 3 1452 秒 1390 秒 4 1094 秒 1122 秒 5 1139 秒 1123 秒 6 1244 秒 1134 秒 平均 1243 秒 1212 秒 准确性 较短的时长相信是不准确的限制所致 结果:JVM 控制可实现与操作系统相当的性能,但准确性较低。

GC 读/写屏障提供了一个控制租户间引用的机会 按租户占用堆 IBM JDK 具有一种新的基于区域的 GC 技术,可良好地映射到租户 (详情请访问 http://ibm.co/JtWfXr) 技术: 最初给予每个租户足够的 GC 区域,以满足其最低预留 在租户范围内运行的代码在其拥有的区域内分配对象 可申请新的区域,最多不超过租户的最高预留 租户1 租户2 1 2 堆(划分为区域) 详细介绍: 终结需要在适当的租户上下文中运行 我们必须能够轻松实现从对象  租户的映射 GC 读/写屏障提供了一个控制租户间引用的机会

风险和回报:我们能实现多高的密集性? 图片来自 http://www.colourbox.com/image/street-post-with-risk-st-and-reward-way-signs-image-1449085 http://www.economist.com/blogs/babbage/2011/11/facebook-and-privacy

我们仍在为之努力的目标: 后续步骤 目前的状态:探索密集性的极限 扩大规模:目前运行 Liberty 规模的负载,接下来的挑战是扩展应用程序规模和 租户数量 提高安全性:增强租户间的屏障,强健终结,提供针对“僵尸”租户的检测/纠正 措施 配额实施:评估停滞和异常抛出选项 性能:Measuring density, and improving throughput and some new concerns like:idle behavior, idle->busy responsiveness 后续步骤 我们需要您的反馈:我们前进的方向是否正确? 我们旨在通过 Java Community Process 实现标准化

多租户:目前的性能 我们能实现多少节省? 简单的 ('Hello World') 应用程序,每租户约为 170 KB 的堆大小 这相当于在相同硬件上多运行 5-6 倍的应用程序 Java HelloWorld 启动时间从 375 ms 下降至 25 ms(16 倍) 积极调优或许能进一步提高该数字 JRuby 每个租户约 6 MB 的堆和 6 MB 大多为共享的代码 密集性改进约 3.8 倍:每 GB 内存 89 个实例 启动改进约 12 倍 Liberty 型负载接近 2.2 倍的密集性 OSGi 类加载器层次结构对共享提出了更大的挑战 堆占据的空间 (64 MB) Liberty 启动应用程序监视器的时间从 13 秒下降到 4 秒 吞吐量测量显示出约 15% 的损失,目标为正式发布时小于 10% 第二次运行启动时间显著改善 由于 JVM 已经启动并运行,因此启动速度提高了 如果我们能够将其降到足够低,就能够避免出现空闲服务器 应用程序平衡点 相对较大的类/堆比(JRuby 和其他 JVM 语言) 需要快速启动:运行并成功 / 批量 100% 纯 Java 代码 具有不同忙碌/空闲周期的负载 — 多租户 JDK 擅长在租户间转移资源

多租户:说明和限制 多租户模型的限制(针对正式发布版) JNI 原生库 操作系统仅允许共享的 JVM 进程加载共享库的一个副本。只能使用 JVM 的 bootclasspath 中存在的原生库 。 JVMTI 由于调试和配置活动会影响共享 JVM 后台进程的所有租户,因此这些特性在多租户 JVM 进程模型中不受 支持。注意:我们提供按租户的 -javaagent:支持。 GUI 程序 多租户 JVM 进程模型中不支持 Standard Widget Toolkit (SWT) 等库,因为这些库在原生层会保持全局状态 。 Java 8 测试版 3 的限制 有限的平台覆盖 有限的租户数量,目前上限为 256 个租户(将在下个版本中修复) 许多 RAS 特性展示了 JVM 级的视图(例如,javacore、堆转储等) 在崩溃情况下,有限的后台进程->启动程序消息传递(将在下个版本中修复)

规划 关注“零应用程序更改”的日期 借助租户感知中间件,我们能做得更好 用于提供隔离和限制的 API 可供体系产品使用 JSR-284(资源管理) JSR-121(隔离) @TenantScope 字段 Java 语言 (EE7) 和框架 (EclipseLink) 正在不断改进,以提供一流的多租户支持 我们已发布了多租户 JDK,包含于 IBM Java8 B3 请持续关注未来的进展:拭目以待 IBM Java 727 计划

性能调优:测量代码的性能并进行优化,以便尽可能减少 GC 花费的时 间和空闲状态占用的周期。 最后的思考:我应该如何处理现有的代码 性能调优:测量代码的性能并进行优化,以便尽可能减少 GC 花费的时 间和空闲状态占用的周期。 成为多租户环境中的“好邻居”,更好地利用现有硬件。 为过量使用做好准备:测量并了解忙碌/空闲时段,以便确切了解需要多 少资源,以及如何安排负载以错开活动“高峰”。 通过提高应用程序密集性改善利用率

通过消除所有不必要的部分简化软件体系,从而更好地利用硬件(以及运行软件 的人员)。 总结 通过消除所有不必要的部分简化软件体系,从而更好地利用硬件(以及运行软件 的人员)。 多租户能够提高我们的效率: 通过隔离换取空间和敏捷性 JVM 支持提高了多租户安全性和简易性 测量资源使用情况和负载模式至关重要 多租户 JDK 基元为我们提供了未来发展空间

目标回顾 本次讲座已经结束,您现在应该能够: 理解什么是多租户以及这种模式的优点 描述多租户 Java 部署面临的挑战 每个租户的成本可以按一位数的 MB 来衡量 描述多租户 Java 部署面临的挑战 对于虚拟机技术人员很难,对您应该很容易 加载/部署随您编排 了解将现有应用程序转换为多租户部署的新 JDK 特性 我们前进的方向是否正确?这些特性对您的业务是否有所帮助?

版权和商标

…是否还有任何问题?