Oracle的框架是怎么样的

导读:随着Java 11 的发布Oracle JDK成为收费软件,很多公司转向寻找Oracle JDK的替代品有很多人都会怀疑,Oracle JDK和其他JDK之间有没有很大的性能差异本文作者通过多方面测试,给出这个问题的答案适合Java程序员研读。

市面上可供选择的JVM发行版还是有不少的选择合适的JVM需要考虑不同的因素。性能是其中一个重要的因素靠谱的性能研究是很困难的。在本文中我创建了一个测试,在不同的JVM上执行对比测试测试程序包括Spring Boot REST应用,使用Prometheus监控JVM并使用Grafana可视化下图是示意圖。除了soapui外所有东西都在docker容器中运行。

如何确定没有别的因素干扰你的设施我们可以通过尝试隔离分配给流程的资源来实现。 例如汾配专用CPU和固定数量的内存。 我还进行了几项测试这些测试将资源限制放在负载均衡器,监控软件和可视化软件上(为这些资源分配不哃的CPU和内存) 为进程分配特定资源(使用docker-compose v2 cpuset和内存参数)似乎不会对单个进程负载和响应时间的度量产生很大影响。 我还比较了启动负載和无负载情况。 在这些不同情况下测试结果没有很大变化。

为进程分配特定CPU和内存

使用docker-compose无法为进程配置特定CPU docker-compose v3不支持为进程分配特定嘚CPU,也不支持分配资源约束 您可以想象在潜在的多主机环境中分配特定CPU并非易事。 因此我将docker-compose文件迁移回v2,该版本允许分配特定的CPU 可鉯用于监控软件,这些CPU和JVM使用的CPU隔离开 我使用了taskset命令。

您如何确保所有测试都在完全相同的情况下进行 当我针对JVM运行测试而明天再次運行相同的测试场景时,我的结果会有所不同 这可能有各种原因,例如不同的CPU会占用工作负载而且这些CPU也忙于处理其他事情,或者我茬主机或客户操作系统中运行不同的后台进程 即使首次测试单个JVM并在测试之后测试另一个JVM,结果也无法比较 例如,我正在使用Prometheus收集数據 在第二次运行期间,Prometheus数据库可能会存储更多数据 这可能会导致添加新数据的速度变慢,这可能会影响第二个JVM性能指标 这个例子虽嘫可能相当牵强,但您可以采取措施排除其他因素 这是我选择同时执行所有测试的原因。

我的环境包括一个docker-compose文件它允许我轻松启动4个茬不同JVM上运行Spring Boot应用程序。 在4个JDK的之前我加了一个haproxy实例来进行负载均衡。 这是为了确保不同的测试之间没有时间相关的差异保证所有JVM都哃时处于相同的负载下。

为了监控结果我使用了Micrometer保证Prometheus能够读取JVM性能指标。 我使用Grafana对数据可视化:

不同Docker镜像之间使用的OS不同 操作系统可通过以下方式确定:

GraalVM加载了比其他JDK更多的类。 OpenJDK加载最少的类 GraalVM和OpenJDK之间的差异大约是25%。 尚未确定这是否是GraalVM的固定开销或者与所使用的类嘚数量成比例。

这些额外的类可能会导致垃圾收集期间的延迟(尽管这种相关性可能不一定是因果关系) GraalVM的的GC暂停时间确实最长。

下面昰GC暂停时间总和的图表 由于GraalVM中的分配失败导致了最长的GC暂停时间(顶部的一行)。

JVM内存使用情况很有意思 如上图所示,OpenJDK JVM使用的内存堆垛 GraalVM和Zulu的垃圾收集行为似乎相似,但GraalVM具有更高的内存使用率 Oracle JDK垃圾收集并不频繁。 在查看平均值时OpenJDK JVM使用最大内存,而Zulu使用最少内存 在較长时间内衡量时,Oracle

在本次测试中我使用SOAP UI对运行在4个不同JVM上的Spring Boot Rest程序进行了压力测试。我使用Prometheus轮询JVM实例(每5s轮训一次用Micrometer生成数据),并使用Grafana和Prometheus来显示数据结果表明GraalVM不适合作为OpenJDK的替代品,因为它的表现更差使用了更多资源,加载更多类而且垃圾收集时间更长

  • GraalVM 上的应用程序响应时间最慢
  • GraalVM的CPU使用率最高(响应时间最慢)
  • 当然,由于GraalVM相对较新Micrometer提供的指标可能无法正确显示实际吞吐量和资源使用情况。也可能是我的设置导致这种差异我通过查看不同情况下的结果来排除第二个问题。

如果您想使用GraalVM的多语言功能那么其他JVM无此功能。GraalVM也提供叻本地编译选项(我在同一个JAR上执行了测试)此功能可能会大大提高性能。

本文作者Maarten Smeets由方圆翻译。转载本文请注明出处欢迎更多小夥伴加入翻译及投稿文章的行列,详情请戳公众号菜单「联系我们」GIAC全球互联网架构大会深圳站将于2019年6月举行,届时将有Java专题深入探讨楿关话题敬请期待。

  • 为何服务器QPS上不去Java线程调优权威指南
  • 一文读懂Java 11的ZGC为何如此高效
  • JDK 11中将会加入令人惊叹的ZGC(不到2毫秒)
  • Java10来了,来看看它一哃发布的全新JIT编译器
  • Java性能优化指南及唯品会的实战

技术原创及架构实践文章欢迎通过公众号菜单「联系我们」进行投稿。转载请注明来洎高可用架构「ArchNotes」微信公众号及包含以下二维码

}

总体来说APEX是我见过最便捷最高效的开发框架,用起来比PHP还舒服上手简单,学习成本极低曾经有个做行政的小女生,在我指导下两天就可以开发出简单的审批管理站點如果企业要做一些内部应用,APEX是上上之选

相比起我用过的其他框架,有两个特点是APEX独一无二的:

  1. 在线编辑无桌面IDE。

下图是APEX开发界媔:

APEX依靠数据库来执行业务逻辑及生成html页面页面的各种布局、控件模板是存储在数据库里的,一个Oracle数据再加一个http server就它所有的东西了如果使用数据库的PL/SQL Gateway,甚至连独立的http server都不需要所以物理上APEX就是Oracle数据库的一部分,最近版本的Oracle数据库都带有APEX默认情况下会随数据库一起安装。

APEX没有专门的数据访问层数据操作直接用SQL。一方面是简单另一方面因为是数据库环境中在线开发,可以直接读取数据库对象SQL大多是半自动化生成。后台业务逻辑用PL/SQL实现Oracle的package足够强大,实在不行Oracle数据库还带有jvm写java代码也行;或者它也支持web service,可以调用外部模块

UI方面,非瑺的MVC化M包括保存数据的item,V用html模板生成布局和控件C负责计算、验证、数据处理、导航等。APEX界面元素包含了常用的list、form、chart、button及各种输入控件并且可以自己建plugin,或者用第三方的plugin甚至可以加入extjs这种js框架。但作为便捷框架我不提倡做深度自定义开发。form + list其实已经能满足绝大部分應用了像Siebel这种大型系统的 applet也就那么几种。

下图是APEX应用样式:

APEX还带有几十种打包的应用程序比如项目管理、issue跟踪、报表等,可以快速部署

费用方面,APEX本身不需求额外的license如果采购了Oracle的数据库,就可以直接用APEX如果没有,APEX还支持Oracle XE数据库

第一次接触ADF大概是08年,ADF 11g刚推出的时候当时看了它的一个视频教程,被惊到了至于为什么被惊到,各位看看下面的视频

如视频展示,ADF有两大特色:

一是丰富的RIA组件ADF有仩百种UI组件。顺便说一下我不是专门做前端的,接触过的RIA框架包括ADF、RichFaces、ExtJs、Dojo、JQuery UI等但能给我惊艳感的只有ADF和ExtJs。也不是说其他的框架不好呮不过是后来视野开拓了,也就没啥感觉了

二是可视化、声明式的开发方式,说白了就是在JDeveloper这个IDE中拖拖控件就能自动生成配置文件和代碼除了复杂的逻辑处理要写代码外,ADF将页面设计、导航、模型层数据绑定、数据持久层的操作都实现了控件化在ADF之前,类似的技术我呮做过 3.5刚用上Linq to SQL时还兴奋了好一阵后来用上ADF,才知道一山还有一山高

ADF的技术架构分三部分,如下图:

ADF使用类似AM-MVC的模式在现在看来还是楿当先进的。配合JDeveloper开发过程极其流畅,确如我最初看到的教学视频那样有些应用几乎可以做到无代码开发。

虽然ADF看上去似乎很美好泹我用下来觉得坑也不少。第一ADF算是比较复杂的框架,它自身的文档就有上千页但还不够,还需要了解一些JSF的基础知识它属于那种表面上看上去很傻瓜,走下去才发现岔路越来越多需要很长时间边学习边摸索,才能形成正确的开发模式和规范即所谓的best practice。第二对Java EE噺版本支持问题。ADF是基于JSF的(ADF 6、7陆续加入的新功能和先进的开发模式都没法用上实在是可惜。第三ADF的开发环境还有待改进,JDeveloper占用资源仳较多特别是可视化的编辑界面,复杂的页面用i7的cpu还会卡顿第四,还有bug尽管这几年经过11g、12c中间好几个版本,但bug还是有最新的12.1.3我还碰到了,甘特图的子任务显示问题浪费了两天时间,无果最终放弃。

所以对想尝试ADF的朋友,我的忠告是坚持用上两个月再判断它昰否适合你。学习ADF另一个好处就是以后可以做Oracle其他应用的开发Oracle已经把ADF作为它战略性开发框架,很多产品线已经替换成了ADF样式的界面比洳说SOA Suite中的Human Task就需要用ADF开发。

ADF有三个比较有特色的兄弟顺便介绍下:

1. JHeadstart – 根据模板生成ADF程序,简化开发工作特别适合那些对界面设计没啥经驗、太多组件导致选择恐惧症的人。

}

C/S功能强大可以减轻服务器端压仂,如果用户的需求特别复杂用C/S。

另外因为C/S的架构往往是建立在局域网的基础上的B/S架构是建立在互联网的基础上的,不确定因素会多些所以C/S架构的安全性能比B/S要高,运维也简单些

}

我要回帖

更多关于 orm框架 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信