Java容器化部署架构方案_第1页
Java容器化部署架构方案_第2页
Java容器化部署架构方案_第3页
Java容器化部署架构方案_第4页
Java容器化部署架构方案_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java 容器化部署架构从应用服务器到云原生Java 应用程序的部署方式三个迷思困惑容器镜像包和软件启动速度Java Cloud Native概述哪个在先,哪个在后?部署包的体积,占用的内存更容易运维管理组件间交互和效率迷思之一: 单体 vs 微服务IDL文件 = 客户端,服务器代码编写服务器实现编译成多个可执行文件多个服务器进程运行注册到命名服务器中集群和高可用编写脚本,维护服务器运行Java刚诞时都是微服务架构CorbagRPCDubbo多种语言Java接口定义IDLIDLJava Interface协议IIOPProtobuf/Http2dubbo等多种异步响应式callbackstre

2、amcallback服务治理对照表:业界主流技术发展浏览器和前端技术GUI客户端RPC浏览器HTTP通信浏览器终端设备REST1 传统Client-Server2 J2EEHTTP浏览器3 JavaEE with SpringREST4 JS 框架和 REST5 Microservice架构基于 Java EE,依赖注入框架,集成了各种技术库Spring FrameworkJava EESpring Framework依赖注入CDIIoC ContainerAOPIntercepterSpring AOPPersistenceJPAJPA, JDBC, SpringDataTransactio

3、nJTA, EJBJTA, JDBC, JPARestJaxRSSpringMVCMessagingJMS, EJBSpring Messaging, JMSSecurityJavaEE Security, EJB, ServletSpring Security架构部署包组成部署包是否可执行应用服务器容器说明CS独立服务器jar客户端维持状态JEEear,war,jarServlet/EJB分布对象的争议Spring webwarServletMVC模式JS / RestwarServlet异步响应式Java微服务war or jar可选三个维度划分复制状态Servlet 的 Session

4、信息有状态 Session BeanHibernate 缓存Wildfly 利用 Infinispan优化后性能上乘(状态缓存在JVM中)应用服务器集群状态复制基于 Spring 的可引导的程序可选择不同的 Servlet Starter开发微服务应用与 Servlet 容器包含关系:和Spring框架开发的war包 正好相反Spring BootSpring BootTomcat StarterConfigurationVSWar SpringFrameworkTomcatSpring Cloud 和 MicroProfile微服务要考虑的要素微服务要素Spring CloudMicropr

5、ofile配置管理Config serverConfig服务发现EurekaJavaEE naming负载均衡RibbonBy Application Server性能指标Spring Boot ActuatorMetrics, health分布式跟踪Spring Cloud SleuthOpentracing故障容错HystrixFault-tolerance路由和拦截器ZuulJavaEE Servlet, interceptor以 Spring 微服务举例:JDKSpring Boot Spring Cloud 各种三方库Jar 包非常庞大启动时,需要相关服务就绪Java微服务Sprin

6、g BootTomcat StarterJPA StarterMessgaing Starter StarterSpring Could Config EurekaZuulManagementConfigurationJava 包,功能为返回REST数据信息部署包数据对比方式JavaEE war包Spring war包Spring Boot jar包Spring Boot / Spring Cloud jar大小7K6.4M16.7M39.4M包含容器 总体积217M30M16.7M39.4M+40.1M(Eureka)启动时长4500ms1800ms1850ms7200ms占用内存60M45

7、M42M初始600M,GC 后约170M说明Wildfly 14 full profileTomcat 9, Spring4.2SpringBoot 2.1.4,Tomcat 9SpringCloud 1.4.0, Zuul 1.3Java EE Container 和 Docker container迷思之二: 容器Container所指的是?以进程为单元,资源受限应用开发和部署应当:受容器管控向容器设施申请资源提供全局管理功能平台提供接口,方便应用开发应用容器化部署Kubernetes容器编排,管理大规模集群概念对照容器部署组件容器JavaEE应用服务器Docker and Kuberne

8、tes无状态组件Managed Bean, Stateless EJBPods有状态组件Servlet Session, Stateful EJBStatefulSet任务Scheduled BeanJob, CronJob主控和任务节点DomainController, NodeMaster, Worker Node控制器ControllerController manager服务群组Server groupsLabel selector扩展性ExtensionCustomResourceDefinitions提供服务治理功能,业务组件专注逻辑实现Service Mesh帮助微服务“减肥”流

9、量管理 故障处理 路由规则混合多个组件 微服务设施认证授权三大功能:BuildServingEventingServerless广泛应用Knative 构建函数运算服务平台函数化启动速度容器镜像大小占用内存大小迷思之三: Java是否适应云原?JDK AppCDS (Application Class-Data Sharing) 特性-Xshare:on-XX:+UseAppCDSSpringBoot on JDK11提升启动速度AppCDSStartup timeoff2160mson1980ms启动速度提升8.3%。一般应用启动速度能快20%左右Java 9 之后支持模块化可以通过 Jli

10、nk 工具,只提取必须的 jmod裁减JDKJDK11JDK占用空间Modules文件完整版310.6M130.8M只含有 java.base mod49.7M24.6M$ jar -create file myapp-1.0.jar -main-class app.StringHash -module-version 1.0 -C mods .$ jlink -module-path jmods:mods -add-modules myapp-output target官方的OpenJDK Slim 镜像,基于Debian Slim FROM debian:stretch-slimDebia

11、n还是通用的Linux发行版可以使用Alpine Linux FROM alpine:3.9 Musl-libc 和 Busybox使用更小的镜像源55.3M5.53M优化 Java 应用类加载Java 程序“静态”化,“函数”化Quarkus 项目(官方给出的性能比较图,分别为 传统Java技术栈,Quarkus Java 和 Quarkus Native)如何减少运行时内存占用?REST数据服务性能比较方式Spring Boot jar包Quarkus JVMQuarkus native大小16.7M49.5K20M含libs总体 积16.7M9.8M20M启动时长1850ms530ms1

12、0ms占用内存(RSS)264M117M13.7M说明SpringBoot 2.1.4,Tomcat 9Quarkus 0.14, JDK 8Quarkus 0.14借用了 Java EE 和 Microprofile 部分规范Quarkus规范化技术Java EEMicroProfileOtherCDIConfigOpenAPIJAX-RSRest-ClientReactive StreamJPAMetricsReactive MessagingJSON-P / JSON-BFault ToleranceKeyCloakServletJWT SecurityCamelBean Validat

13、orVertxQuarkus技术栈核心组件和主要部件Quarkus ExtensionRestEasyUndertowHibernateBean ValidationNarayanaAgroalReactive SteamRest ClinetMetricsOpenAPIOpenSSLFault ToleranceQuarkus CoreGizmoJandexGraal SDKWeld ArcHotspotSubstrate利用 Graal 项目的 Substrate VM中 native- image 工具将 Java 应用“转换”为本 地代码Java 原生程序编译Compile提供Prov

14、ision组合AugmentJDK 虚拟 机运行AOT 本地编译运行容 器镜像在编译时重写 Java 代码,使得程序 能够被快速加载和启动运行能静态初始化加载的尽量静态构造, 对原有的动态发现的进行必要代码重 写需要考虑本地编译的要求Quarkus 核心技术INFO - quarkus-maven-plugin:0.14.0:native-image (default) using- websockets -INFO io.quarkus.creator.phase.nativeimage.NativeImagePhase Running Quarkus native-image plugin

15、 on Java HotSpot(TM) 64-Bit Server VMINFO io.quarkus.creator.phase.nativeimage.NativeImagePhase /x1/java/javalib/graalvm-ce-1.0.0-rc16/bin/native-image -J- Djava.util.logging.manager=org.jboss.logmanager.LogManager - H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceA

16、ndTime -jar app-runner.jar -J- Djava.util.concurrent.ForkJoinPmon.parallelism=1 - H:FallbackThreshold=0 -H:+PrintAnalysisCallTree -H:-AddAllCharsets - H:EnableURLProtocols=http -H:NativeLinkerOption=-no-pie -H:-SpawnIsolates - H:-JNI -no-server -H:-UseServiceLoaderFeature -H:+StackTraceapp-runner:22

17、276classlist:2,884.84msapp-runner:22276(cap):1,091.63msapp-runner:22276setup:2,310.69ms20:48:44,880 WARNio.und.web.jsr UT026010: Buffer pool was not set on WebSocketDeploymentInfo, the default pool will be used20:48:44,894 INFOio.und.web.jsr UT026003: Adding annotated server endpoint class org.acme.

18、websocket.ChatSocket for path /chat/username20:48:45,773INFOorg.jbo.threads JBoss Threads version 3.0.0.Alpha420:48:46,336INFOorg.xnio XNIO version 3.7.0.Final20:48:46,370INFOorg.xni.nio XNIO NIO Implementation Version 3.7.0.Finalapp-runner:22276(typeflow):10,598.82msapp-runner:22276(objects):9,051.49msapp-runner:22276(features):817.12msapp-runner:22276analysis:20,971.70msapp-runner:22276universe:555.74msapp-runner:22276(parse):1,794.73msapp-runner:22276(inline):3,270.11msapp-runner:22276(compile):19,523.92msapp-runner:22276compile:25,859.57msapp-runner:22276i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论