Weitere ähnliche Inhalte Ähnlich wie Supersonic Subatomic Quarkus accelerate cloud native development (20) Supersonic Subatomic Quarkus accelerate cloud native development10. 企业软件开发目前面临的挑战和期望?
Quarkus 能够带来什么价值
全新的应用 单体转型微服务
无服务器架构 事件驱动 响应式编程
超低的内存占用 + 快如闪电般的启动 + 超
小的磁盘占用 = 理想的K8云原生运行时
Quarkus 是单体应用向微服务架构转型的
理想的选者,从而达到轻量、松耦合、弹性、
快响应的目标
Quarkus 另一个价值是创建和运行响应式编
程和响应式系统变得简单、高效。Quarkus天
生就是基于netty和Vertx框架开发的,内核
都是非阻塞的;这样您无论采用命令式编程
(imperative),还是响应式(reactive)都很简
单。
因为缩放的速度极快,所以特别适合创建基
于Java的从0缩放的无服务器架构应用
10
11. 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
12. Quarkus + GraalVM Quarkus + OpenJDK Traditional Cloud-Native Stack
REST
市场价值-节省成本
12
13 MB 140 MB74 MB
Memory is Money
13. 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
16. ● 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
18. 超音速. 亚原子. 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技术栈
20. 适用语言: 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
24. Quarkus工作原理1-Build Time Boot
传统的应用服务器
● 启动时候100+以上类加
载,
● 只运行一次
● 一直占用内存
● 配置文件解析: XML, YAML, JSON, ...
● 类路径扫描, 比如@annotations
● 构建元数据对象( metamodel)
● 准备反射, 动态代理
● Open sockets/network IO, 线程开销巨大
24
26. 提前编译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
34. 一流开发体验
● Runners for JUnit 5
● Isolation from GraalVM CLI
● Maven or Gradle
● Java, Kotlin or Scala
34
37. 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
41. 超音速. 亚原子. 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技术栈