设为首页 - 加入收藏 汉中大乐透机选倍投一注 (http://www.0916zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: 通讯 为什么 知识 透露
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

进击的 Java ,云原生时代的蜕变

发布时间:2019-09-23 09:42 所属栏目:[优化] 来源:易立
导读:【编者的话】云原生时代的来临,与Java 开发者到底有什么联系?有人说,云原生压根不是为了 Java 存在的。然而,本文的作者却认为云原生时代,Java 依然可以胜任巨人的角色。作者希望通过一系列实验,开拓同学视野,提供有益思考。 在企业软件领域,Java 依

【编者的话】云原生时代的来临,与Java 开发者到底有什么联系?有人说,云原生压根不是为了 Java 存在的。然而,本文的作者却认为云原生时代,Java 依然可以胜任“巨人”的角色。作者希望通过一系列实验,开拓同学视野,提供有益思考。

在企业软件领域,Java 依然是绝对王者,但它让开发者既爱又恨。一方面因为其丰富的生态和完善的工具支持,可以极大提升了应用开发效率;但在运行时效率方面,Java 也背负着”内存吞噬者“,“CPU 撕裂者“的恶名,持续受到 NodeJS、Python、Golang 等新老语言的挑战。

在技术社区,我们经常看到有人在唱衰 Java 技术,认为其不再符合云原生计算发展的趋势。先抛开上面这些观点,我们首先思考一下云原生对应用运行时的不同需求:

体积更小:对于微服务分布式架构而言,更小的体积意味着更少的下载带宽,更快的分发下载速度。

启动速度更快:对于传统单体应用,启动速度与运行效率相比不是一个关键的指标。原因是,这些应用重启和发布频率相对较低。然而对于需要快速迭代、水平扩展的微服务应用而言,更快的的启动速度就意味着更高的交付效率,和更加快速的回滚。尤其当你需要发布一个有数百个副本的应用时,缓慢的启动速度就是时间杀手。对于Serverless 应用而言,端到端的冷启动速度则更为关键,即使底层容器技术可以实现百毫秒资源就绪,如果应用无法在 500ms 内完成启动,用户就会感知到访问延迟。

占用资源更少:运行时更低的资源占用,意味着更高的部署密度和更低的计算成本。同时,在 JVM 启动时需要消耗大量 CPU资源对字节码进行编译,降低启动时资源消耗,可以减少资源争抢,更好保障其他应用 SLA。

支持水平扩展:JVM 的内存管理方式导致其对大内存管理的相对低效,一般应用无法通过配置更大的 heap size 实现性能提升,很少有 Java 应用能够有效使用 16G 内存或者更高。另一方面,随着内存成本的下降和虚拟化的流行,大内存配比已经成为趋势。所以我们一般是采用水平扩展的方式,同时部署多个应用副本,在一个计算节点中可能运行一个应用的多个副本来提升资源利用率。

热身准备

熟悉 Spring 框架的开发者大多对 Spring Petclinic 不会陌生。本文将借助这个着名示例应用来演示如何让我们的 Java 应用变得更小、更快、更轻、更强大!

进击的 Java ,云原生时代的蜕变

我们 fork 了 IBM 的 Michael Thompson 的示例,并做了一些调整。

  1. $?git?clone?https://github.com/denverdino/adopt-openj9-spring-boot?
  2. $?cd?adopt-openj9-spring-boot?

首先,我们会为 PetClinic 应用构建一个 Docker 镜像。在 Dockerfile 中,我们利用 OpenJDK 作为基础镜像,安装 Maven,下载、编译、打包 Spring PetClinic 应用,最后设置镜像的启动参数完成镜像构建。

  1. $?cat?Dockerfile.openjdk?
  2. FROM?adoptopenjdk/openjdk8?
  3. RUN?sed?-i?'s/archive.ubuntu.com/mirrors.aliyun.com/'?/etc/apt/sources.list?
  4. RUN?apt-get?update?
  5. RUN?apt-get?install?-y?\?
  6. ????git?\?
  7. ????maven?
  8. WORKDIR?/tmp?
  9. RUN?git?clone?https://github.com/spring-projects/spring-petclinic.git?
  10. WORKDIR?/tmp/spring-petclinic?
  11. RUN?mvn?install?
  12. WORKDIR?/tmp/spring-petclinic/target?
  13. CMD?["java","-jar","spring-petclinic-2.1.0.BUILD-SNAPSHOT.jar"]?

构建镜像并执行:

  1. $?docker?build?-t?petclinic-openjdk-hotspot?-f?Dockerfile.openjdk?.?
  2. $?docker?run?--name?hotspot?-p?8080:8080?--rm?petclinic-openjdk-hotspot?
  3. ??????????????|\??????_,,,--,,_?
  4. ?????????????/,`.-'`'???._??\-;;,_?
  5. ??_______?__|,4-??)?)_???.;.(__`'-'__?????___?__????_?___?_______?
  6. ?|???????|?'---''(_/._)-'(_\_)???|???|???|???|??|??|?|???|???????|?
  7. ?|????_??|????___|_?????_|???????|???|???|???|???|_|?|???|???????|?__?_?_?
  8. ?|???|_|?|???|___??|???|?|???????|???|???|???|???????|???|???????|?\?\?\?\?
  9. ?|????___|????___|?|???|?|??????_|???|___|???|??_????|???|??????_|??\?\?\?\?
  10. ?|???|???|???|___??|???|?|?????|_|???????|???|?|?|???|???|?????|_????)?)?)?)?
  11. ?|___|???|_______|?|___|?|_______|_______|___|_|??|__|___|_______|??/?/?/?/?
  12. ?==================================================================/_/_/_/?
  13. ...?
  14. 2019-09-11?01:58:23.156??INFO?1?---?[???????????main]?o.s.b.w.embedded.tomcat.TomcatWebServer??:?Tomcat?started?on?port(s):?8080?(http)?with?context?path?''?
  15. 2019-09-11?01:58:23.158??INFO?1?---?[???????????main]?o.s.s.petclinic.PetClinicApplication?????:?Started?PetClinicApplication?in?7.458?seconds?(JVM?running?for?8.187)?

可以通过 http://localhost:8080/ 访问应用界面。

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章