SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
加速云原生应用开发
超音速亚原子
张诚
红帽高级咨询顾问
rzhang@redhat.com
Quarkus主题导览
01
价值主张
03
02
04
初心、定位、场景
竟为何物
定义、架构、原理
互动环节
问答、互动
为我所用
向导、资源、展望
8毫秒的启动
01价值主张
3
12毫秒的启动
4
5
云原生Java
01价值主张
6
RedMonk软件行业分析报告
1. JavaScript
2. Java
3. Python
4. PHP
5. C#
6. C++
7. CSS
8. Ruby
9. C
10. Objective-C
7
Quarkus项目初心
致力于将您的Java 技能和投资过渡到云原生应用开发中
8
Java世界创新脚步没有停止
云原生Java-Quarkus的诞生
App
Optimized Application Frameworks
架构方式: 微服务, 无服务器架构
部署方式: JVM 或 Native Binary
生命周期: 长期 或 几秒
内存占用: 10+Mbs RAM
启动时间: 毫秒级别
Java Virtual Machine (Hotspot)
不再是必须!
9
企业软件开发目前面临的挑战和期望?
Quarkus 能够带来什么价值
全新的应用 单体转型微服务
无服务器架构 事件驱动 响应式编程
超低的内存占用 + 快如闪电般的启动 + 超
小的磁盘占用 = 理想的K8云原生运行时
Quarkus 是单体应用向微服务架构转型的
理想的选者,从而达到轻量、松耦合、弹性、
快响应的目标
Quarkus 另一个价值是创建和运行响应式编
程和响应式系统变得简单、高效。Quarkus天
生就是基于netty和Vertx框架开发的,内核
都是非阻塞的;这样您无论采用命令式编程
(imperative),还是响应式(reactive)都很简
单。
因为缩放的速度极快,所以特别适合创建基
于Java的从0缩放的无服务器架构应用
10
Boot + First Response Time (in seconds)
Quarkus + GraalVM 0.014 Seconds
REST
REST + CRUD
Quarkus + OpenJDK 0.75 Seconds
Quarkus + GraalVM 0.055 Seconds
Quarkus + OpenJDK 2.5 Seconds
Traditional Cloud-Native Stack 9.5 Seconds
Traditional Cloud-Native Stack 4.3 Seconds
Time to first response
快速启动
11
Quarkus + GraalVM Quarkus + OpenJDK Traditional Cloud-Native Stack
REST
市场价值-节省成本
12
13 MB 140 MB74 MB
Memory is Money
Quarkus + GraalVM
35 MB
Quarkus + OpenJDK
130 MB
Traditional Cloud-Native Stack
218 MB
市场价值-节省成本
13
REST + CRUD
https://quarkus.io/guides/performance-measure
218 MB130 MB35 MB
Container First
��物理大小特别小
��超音速的启动时间
��超级小的内存(RSS)占用
✓更小的容器镜像
✓更快的扩容速度
✓更多的实例
14
部署密度
15
● 1 单体 ≈ 20 微服务 ≈ 200 函数
● 缩放到 1 vs 缩放到 0
● 启动时间
MONOLITH
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
MICRO
SERVICE
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
F FFFFFFFFF
传统单体应用的演进...
16
工作原理
02何为Quarkus
17
超音速. 亚原子. Java.
02何为Quarkus
18
A Kubernetes Native Java stack tailored for GraalVM and
OpenJDK HotSpot, crafted from the best of breed
Java libraries and standards
有GraalVM和OpenJDK加持的、由成熟的Java类库以及Java标准
打磨 、为Kubernetes量身定做的云原生 Java技术栈
适用语言: Java, Kotlin, Scala 应用
工具集 框架
02何为Quarkus
19
适用语言: Java, Kotlin, Scala 应用
工具集
Quarkus工具集
20
<build>
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<version>${quarkus-plugin.version}</version>
<executions>
<execution>
<goals>
<goal>build</goal>
<goal>generate-code</goal>
<goal>generate-code-tests</goal>
</goals>
</execution>
</executions>
</plugin>
$ native-image -jar my-app.jar 
-H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPol
icy$BySpaceAndTime 
-J-Djava.util.concurrent.ForkJoinPool.common.parallelism=1 
-H:FallbackThreshold=0 
-H:ReflectionConfigurationFiles=...
-H:+ReportExceptionStackTraces 
-H:+PrintAnalysisCallTree 
-H:-AddAllCharsets 
-H:EnableURLProtocols=http 
-H:-JNI 
-H:-UseServiceLoaderFeature 
-H:+StackTrace 
--no-server 
--initialize-at-build-time=... 
-J-Djava.util.logging.manager=org.jboss.logmanager.LogManager 
-J-Dio.netty.leakDetection.level=DISABLED 
-J-Dvertx.logger-delegate-factory-class-name=io.quarkus.vertx.core.runt
ime.VertxLogDelegateFactory 
-J-Dsun.nio.ch.maxUpdateArraySize=100 
-J-Dio.netty.allocator.maxOrder=1 
-J-Dvertx.disableDnsResolver=true
02何为Quarkus
*.class
21
*.class
第二层
第一层
22
23
Quarkus工作原理 - Build time 加速
第一层 Application Server优化
构建期优化 - Build Time Boot
Quarkus工作原理1-Build Time Boot
传统的应用服务器
● 启动时候100+以上类加
载,
● 只运行一次
● 一直占用内存
● 配置文件解析: XML, YAML, JSON, ...
● 类路径扫描, 比如@annotations
● 构建元数据对象( metamodel)
● 准备反射, 动态代理
● Open sockets/network IO, 线程开销巨大
24
Quarkus工作原理 - Build time 加速
尽可能得把任务转移到构建时期, 代码生成字节码
输出结果: 提前装配好的字节码
25
提前编译CDI举例
Quarkus工作原理
// User beans
@ApplicationScoped
class Catalog {
@Inject
Pricing pricing;
@PostConstruct
void init() {}
}
@ApplicationScoped
class Pricing { ... }
// Metadata (代码生成 bytecode)
class Catalog_Bean {
Pricing_Bean pricingBean;
Catalog create() {
Catalog catalog = new Catalog();
catalog.pricing =
pricingBean.create();
catalog.init();
return catalog;
}
}
class Pricing_Bean {...}
// The "main" class
// 代码生成 bytecode, here strongly simplified
class Application {
static Map<String, Bean> beans = new ...Map();
static Map<String, Supplier<Object>> appContext = new ...Map();
static {
// 集成 the beans
Pricing_Bean pricingBean = new Pricing_Bean();
beans.put(Pricing_Bean.key, pricingBean);
Catalog_Bean catalogBean = new Catalog_Bean();
catalogBean.pricingBean = pricingBean;
beans.put(Catalog_Bean.key, catalogBean);
// Bean初始化
Pricing pricing = pricingBean.create();
appContext.put(Pricing_Bean.key, () -> pricing)
Catalog catalog = catalogBean.create();
appContext.put(Catalog_Bean.key, () -> catalog)
}}
26
任务只做一次, 而不是每次启动都要运行
启动时期的类加载大大地将少
更快的启动速度, 更少的内存使用
很少甚至没有反射和代理
构建时期优化的好处
27
28
Quarkus工作原理 - Build time 加速
第二层 Java AOT编译
使用Graalvm编译出Native Binary
Quarkus工作原理2-AOT compile
byte
code
JVM
x86
JVM
arm
JVM
Power9
code
CPU硬件架构
跨平台特性
/>javac
/>java
29
Quarkus 框架组成
30
Quarkus Extensions
RESTEasy
Netty
HibernateORM
HibernateValidator
MPOpenAPI
MPJWT
EclipseVert.X
Agroal(connpool)
NarayanaJTA
MPReactive
Messaging
ApacheCamel
...
Quarkus Core
Arc (DI)
Jandex Gizmo Graal SDK
HotSpot SubstrateVM
丰富的生态资源
03为我所用
31
一流开发体验-vscode plugin
32
一流开发体验 code.quarkus.io
33
一流开发体验
● Runners for JUnit 5
● Isolation from GraalVM CLI
● Maven or Gradle
● Java, Kotlin or Scala
34
集成开源社区最好的项目
为我所用
35
Eclipse Vert.x Hibernate RESTEasy Apache Camel Eclipse MicroProfile Netty
Kubernetes OpenShift Jaeger Prometheus Apache Kafka Infinispan
机密标志
36
数据库支持
✓ MySQL, MariaDB
✓ PostgreSQL
✓ MS SQL Server
✓ H2
✓ FlyWay
✓ Amazon DynamoDB
✓ MongoDB
✓ Neo4j
Java EE
✓ Servlet
✓ JAX-RS
✓ JPA,JDBC
✓ CDI
✓ Bean Validation
✓ Transactions
✓ Fault Tolerance
✓ Health
✓ JWT
✓ Metrics
✓ OpenAPI
✓ OpenTracing
✓ Reactive
Messaging
✓ Rest Client
✓ Spring DI
✓ Spring Web
✓ Spring Data
✓ Spring Security
(#通过 Spring 兼容层)
秉承Java 标准
即熟悉又新颖的技术
37
统一的, 简单的编程
为我所用
38
@Inject
SayService say;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return say.hello();
}
@Inject @Stream(”kafka”)
Publisher<String> reactiveSay;
@GET
@Produces(MediaType.SERVER_SENT_EVENTS
)
public Publisher<String> stream() {
return reactiveSay;
}
Imperative Reactive
Quarkus代码演示
03为我所用
39
Quarkus CRUD+ Rest api
YouTube链接
Quarkus Reactive Demo
YouTube链接
40
Quarkus官网: https://quarkus.io/guides/
Quarkus中文指南: https://quarkus.pro/guides/
Quarkus 框架生成器: https://code.quarkus.io/
Qurakus Coding Demo: https://ryanzhang.github.io/work/2020/10/18/QurkusCodingDemo.html
超音速. 亚原子. Java.
02何为Quarkus
41
A Kubernetes Native Java stack tailored for GraalVM and
OpenJDK HotSpot, crafted from the best of breed
Java libraries and standards
有GraalVM和OpenJDK加持的、由成熟的Java类库以及Java标准
打磨 、为Kubernetes量身定做的云原生 Java技术栈
Quarkus是什么?
让 Java 成为云原生、无服务器架构的首选语言
● 经典熟悉Java的配方
● 广泛使用的Java标准和类库
● Go一样的运行效率
为我所用
42
43

Weitere ähnliche Inhalte

Was ist angesagt?

项目开发实践No.1
项目开发实践No.1项目开发实践No.1
项目开发实践No.1
pepsixp
 
性能优化
性能优化性能优化
性能优化
Lu Wei
 

Was ist angesagt? (20)

twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
twMVC#21 | 以實例說明ASP.NET Web API 服務的開發與測試過程
 
twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決twMVC#19 | opserver監控服務的解決
twMVC#19 | opserver監控服務的解決
 
Entity framework + Linq 介紹
Entity framework + Linq 介紹Entity framework + Linq 介紹
Entity framework + Linq 介紹
 
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
Windows 與 Azure 的容器旅程 @ Ignite Mini 2016
 
Vue
VueVue
Vue
 
20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting20170830 2nd sre build and deployment scripting
20170830 2nd sre build and deployment scripting
 
W3CTech美团react专场-React Native 初探
W3CTech美团react专场-React Native 初探W3CTech美团react专场-React Native 初探
W3CTech美团react专场-React Native 初探
 
Redux+react js
Redux+react jsRedux+react js
Redux+react js
 
ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)
ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)
ASP.NET 開發人員不可不知的 IIS (IIS for ASP.NET Developers)
 
项目开发实践No.1
项目开发实践No.1项目开发实践No.1
项目开发实践No.1
 
前端自動化工具
前端自動化工具前端自動化工具
前端自動化工具
 
Angular js twmvc#17
Angular js twmvc#17Angular js twmvc#17
Angular js twmvc#17
 
企业应用架构:模块化、微服务与 Linux 容器技术
企业应用架构:模块化、微服务与 Linux 容器技术企业应用架构:模块化、微服务与 Linux 容器技术
企业应用架构:模块化、微服务与 Linux 容器技术
 
用Maven管理專案的依賴關係
用Maven管理專案的依賴關係用Maven管理專案的依賴關係
用Maven管理專案的依賴關係
 
twMVC#26 | Redis資料型別與場景的連結
twMVC#26 | Redis資料型別與場景的連結twMVC#26 | Redis資料型別與場景的連結
twMVC#26 | Redis資料型別與場景的連結
 
twMVC#31沒有 hdd 的網站重構 webform to mvc
twMVC#31沒有 hdd 的網站重構 webform to mvctwMVC#31沒有 hdd 的網站重構 webform to mvc
twMVC#31沒有 hdd 的網站重構 webform to mvc
 
性能优化
性能优化性能优化
性能优化
 
美团技术团队 - KVM性能优化
美团技术团队 - KVM性能优化美团技术团队 - KVM性能优化
美团技术团队 - KVM性能优化
 
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
[2020 .NET Conf] 企業Azure DevOps Service 實際應用架構與秘辛
 
Nuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的packageNuget介紹- 如何使用和建立自己的package
Nuget介紹- 如何使用和建立自己的package
 

Ähnlich wie Supersonic Subatomic Quarkus accelerate cloud native development

建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4
Cat Chen
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
Guo Albert
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
Wade Huang
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renren
d0nn9n
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering Architecture
Target Source
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
Jackson Tian
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介
Allen Lsy
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
Dongxu Yao
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
maclean liu
 
讓你的人工智慧更智慧 - Developer Student Clubs.pptx
讓你的人工智慧更智慧 - Developer Student Clubs.pptx讓你的人工智慧更智慧 - Developer Student Clubs.pptx
讓你的人工智慧更智慧 - Developer Student Clubs.pptx
NCUDSC
 

Ähnlich wie Supersonic Subatomic Quarkus accelerate cloud native development (20)

建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4建站大业,实战ASP.NET 4
建站大业,实战ASP.NET 4
 
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit TestingASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
ASP.NET Core MVC 2.2從開發到測試 - Development & Unit Testing
 
ASP.NET Core 2.1設計新思維與新發展
ASP.NET  Core 2.1設計新思維與新發展ASP.NET  Core 2.1設計新思維與新發展
ASP.NET Core 2.1設計新思維與新發展
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 
Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有Asp.net mvc網站的從無到有
Asp.net mvc網站的從無到有
 
twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸twMVC#01 | ASP.NET MVC 的第一次親密接觸
twMVC#01 | ASP.NET MVC 的第一次親密接觸
 
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練3
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練32015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練3
2015 年逢甲大學資訊系:ASP.NET MVC 4 教育訓練3
 
EventProxy introduction - JacksonTian
EventProxy introduction - JacksonTianEventProxy introduction - JacksonTian
EventProxy introduction - JacksonTian
 
Event proxy introduction
Event proxy introductionEvent proxy introduction
Event proxy introduction
 
Huangjing renren
Huangjing renrenHuangjing renren
Huangjing renren
 
基于Ivy ant的java构建初探
基于Ivy ant的java构建初探基于Ivy ant的java构建初探
基于Ivy ant的java构建初探
 
Terracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering ArchitectureTerracotta And Continuent Based Clustering Architecture
Terracotta And Continuent Based Clustering Architecture
 
Kissy design
Kissy designKissy design
Kissy design
 
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
twMVC#04 | ASP.NET MVC 4 新功能介紹(快速上手)
 
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
ASP.NET MVC 4 新功能介紹(快速上手) -twMVC#4
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
 
ASP.Net MVC2 简介
ASP.Net MVC2 简介ASP.Net MVC2 简介
ASP.Net MVC2 简介
 
Javascript primer plus
Javascript primer plusJavascript primer plus
Javascript primer plus
 
配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制配置Oracle 10g 双向流复制
配置Oracle 10g 双向流复制
 
讓你的人工智慧更智慧 - Developer Student Clubs.pptx
讓你的人工智慧更智慧 - Developer Student Clubs.pptx讓你的人工智慧更智慧 - Developer Student Clubs.pptx
讓你的人工智慧更智慧 - Developer Student Clubs.pptx
 

Supersonic Subatomic Quarkus accelerate cloud native development