zoukankan      html  css  js  c++  java
  • 关于云原生应用的思考

      文中前半部分截取、参照、截取了周志明《Graal VM 云原生时代的Java》视频讲解公开的PPT的部分内容,特此声明,在此对周志明精彩的分享表示感谢。

      云原生的核心是什么?

      技术人员谈技术问题直接、要看本质,不能东拉西扯。现在很多厂商都在谈云原生应用,那么云原生应用的核心是什么?

      云原生的应用开发框架。

      提到开发框架。传统的Java系的应用开发框架比较著名的是SSH(Spring框架、Hibernate框架、Struts框架)。

      Spring MVC是基于 Servlet 的一个 MVC 框架 主要解决 WEB 开发的问题,因为 Spring 的配置非常复杂,各种XML、 JavaConfig、hin处理起来比较繁琐。于是为了简化开发者的使用,从而创造性地推出了Spring boot,约定优于配置,简化了spring的配置流程。

      现有的绝大多数企业级应用都是由Java开发的。Java的特点如下:

      

      所以说,Java通过众多的规范(JSR),让应用开发人员遵从,这有助于提升应用的规模、稳定性。

      在微服务时代,传统Java的理念与时代产生了巨大的矛盾。

      

      随着Web应用的发展,微服务时代,应用的稳定性不再依赖于单个单体应用实例的稳定性,而是借助于应用集群、K8S等技术保证应用的高可用性。好比传统应用是宠物,微服务是牛羊。微服务更关注与单个应用实例是否消耗资源,启动速度是否快。

      在微服务时代,如果我们只是将应用运行的“底座”由Linux换成容器,如下图所示,那效果就会比较尴尬(例如在容器中运行weblogic,承载应用),这不是成不成的问题,而是效果好不好的问题。

      

      那么问题的根源是什么呢?

      还是由Java本身的特点决定的。Java的解释型语言,解释型语言就需要解释器,JVM。而JVM是相当耗费内存的,并且启动也慢。

      此外,Java的代码域是动态的。常用到的Java动态特性主要是反射,在运行时查找对象属性、方法,修改作用域,通过方法名称调用方法等。这样做的好处是,Java 程序可以加载一个运行时才得知名称的 .class 文件,然后获悉其完整构造,并生成其对象实体、或对其 fields(变量)设值、或调用其 methods(方法)。

      解决Java问题的方法

      Oracle当然也意识到Java在微服务时代的尴尬之处,因此在前两年推出了新一代JVM:GraalVM。

      GraalVM是一款高性能的可嵌入式多语言虚拟机,它能运行不同的编程语言,包括:

      基于JVM的语言,比如Java, Scala, Kotlin和Groovy

      解释型语言,比如JavaScript, Ruby, R和Python

      LLVM支持的原生语言,比如C, C++, Rust和Swift

      GraalVM中包含Graal Compiler编译器。Graal Compiler是GraalVM与HotSpotVM(从JDK10起)共同拥有的服务端即时编译器,是C2编译器未来的替代者。

      

      Graal Compiler支持提前编译(AOT)和即时编译(JIT)。

      两者的优缺点对比如下表所示:

      

      总结起来,AOT编译后,应用包更小、消耗内存更少、启动速度更快。JIT编译的应用,吞吐量更高、延迟更低。

      

      此外,我们知道,HotSpotVM是JVM标准的技术实现。HotSpotVM是Sun JDK和OpenJDK中自带的JCM,使用很广。而Substrate VM是一个框架,可以将Java程序编译为独立的可执行文件,它的架构如下图所示。对于GraalVM而言,HotSpotVM是可选的:

      

      接下来,我们再看一下GraalVM的版本。Oracle推出了社区版本(CE)和企业版(EE),两者区别如下图所示:

      

      截止到目前,我们已经清楚了针对Java不适用于微服务,Oracle的做法,就是通过GraalVM实现本地编译,从而甩来HotSpot。

      那么,针对Java不适用于微服务的现状,让我们跳出Java圈,IT圈的大佬们是想如何解决的呢?

      解决问题的流派

      解决问题的方法大致有如下几种:

      

      在上图中,后两种主要是更为靠谱的。

      至于采取第二种还是第三种,那不同的厂商显然会有自己的思路。

      从技术角度看:传统的Java应用改造成GraalVM Native还是有难度的。

      Quarkus是红帽主导发布的新一代云原生Java。Quarkus确实面临重新书写应用的问题。从红帽的角度,传统的应用与其向GraalVM Native迁移,不如向基于K8S的轻量级应用服务器JBoss EAP迁移更为靠谱(后面也会给出介绍)。

      Quarkus红帽在2020年正式GA(开源项目去年发布),目前github上有5000个Star,还算不错。

      

      Quarkus的框架

      Quarkus的框架如下,

      郑州人流医院哪家好:http://yyk.39.net/zz3/zonghe/1d426.html

      郑州妇科医院:http://jbk.39.net/yiyuanfengcai/yyjs_sysdfkyy/

      

      由于Quarkus依赖GraalVM CE,而GraalVM CE是由Oracle发布的。因此红帽发布了GraalVM CE的下游社区:Mandrel。通过Mandrel红帽将GraalVM特性集成在在Red Hat Enterprise Linux和OpenJDK 11发行版上,以便红帽可以对此提供企业级支持。

      Quarkus的一个特点是包含很多扩展。Quarkers 的扩展是一组依赖项,可以将它们添加到 Quarkus 项目中,从而获得特定的功能,例如健康检查等。扩展将配置或引导框架或技术集成到 Quarkus 应用程序中。通过命令行可以列出 Quarkers 可用和支持的扩展:

      

      此外,Quarkus还有个优势是:支持热加载。即以开发模式启动应用后,修改应用源代码无需重新编译和重新运行,应用而直接生效。如果是 web 应用,在前台刷新浏览器即可看到更新结果。Quarkus 的开发模式非常适合应用调试阶段、经常需要调整源码并验证效果的需求。

  • 相关阅读:
    Badboy参数化
    Badboy运行脚本
    Badboy中创建Suite, test, step和Template
    美食
    Badboy录制模式
    美食
    BadBoy+JMeter来录制和运行Web测试脚本
    JMeter简介及使用JMeter来访问网站
    软件测试的艺术
    泗泾办小卡需要的材料
  • 原文地址:https://www.cnblogs.com/sushine1/p/13336127.html
Copyright © 2011-2022 走看看