หลังจากทาง RedHat จะปล่อย Quarkus 1.0 ออกมา
พบว่าน่าสนใจดี มีความสามารถให้เล่นให้ใช้เยอะเลย
น่าจะเป็นอีกหนึ่งทางเลือกของเครื่องไม้เครื่องมือในการพัฒนาระบบงาน
ยิ่งพูดเรื่องของ Cloud Native แล้ว น่าจะโดนมิใช่น้อย
ดังนั้นเรามาทำความรู้จักกันนิดหน่อย

Quarkus คืออะไร ?

Quarkus is a Kubernetes Native Java framework tailored for GraalVM and HotSpot, crafted from best-of-breed Java libraries and standards.

เป้าหมายของ Quarkus คืออะไร ?

ทำให้ระบบงานที่พัฒนาด้วยภาษา Java (สนับสนุน Java 8, 11 และ 13)
สามารถทำการ deploy บน Kubernetes และ Serverless environment ได้ง่าย (Cloud Native)
โดยสนับสนุนการเขียน program ทั้งแบบ imperative และ reactive (Vert.x)

ดังนั้นแนวคิดแรกของ Quarkus คือ Container first นั่นเอง

มีขนาดของ software package ที่เล็กลงไปมาก ๆ  
(Native ด้วย GraalVM นี่ยิ่งเล็กมาก ๆ)
มี startup time เร็วมาก ๆ ใช้ resource ต่าง ๆ น้อยลงเช่น Memory เป็นต้น
ทำให้ง่ายต่อการ scale มากยิ่งขึ้น
แสดงผลการทำงานดังรูป

ในแง่ของการพัฒนา 

ก็มีเรื่องของ configuration ที่เป็นมาตรฐาน 
สามารถเริ่มต้นด้วย Zero-configuration
รวมทั้งสามารถทำงานร่วมกับเทคโนโลยีต่าง ๆ ได้ง่าย
เช่นพวก Spring framework เป็นต้น
แถมมี Live reload ด้วยนะ  

ใส่ MicroProfile OpenTracing เข้ามา
เพื่อใช้สำหรับการ tracing การติดต่อสื่อสารระหว่าง service ต่าง ๆ อีกด้วย
นี่มันเอาไปใส่ Zipkin และ Jaeger ได้เลย

รวมทั้ง  MicroProfile Metric สำหรับนำข้อมูลตัวเลขต่าง ๆ จาก JVM ออกมา
ซึ่งสามารถนำข้อมูล metric ไปเก็บไว้ยังระบบข้างนอกได้ เช่น Prometheous เป็นต้น

อธิบายเยอะไป ไม่เห็นภาพ มาลองใช้งานกันหน่อย

ขั้นตอนที่ 1 ทำการสร้าง project starter จาก https://code.quarkus.io/

มี library และรูปแบบการพัฒนาให้เลือก และทำการ generate มาใช้ได้เลย

จากรูปทำการสร้าง RESTFul API ง่าย ๆ นี่แหละ
โดย Quarkus จะเลือกใช้ JAX-RS มาเป็นตัว default
ส่วนการจัดการกับ JSON จะมีทั้ง JSON-B และ Jackson
สามารถเลือกภาษา Kotlin หรือ Scala เพิ่มได้ ยังเป็น preview version อยู่
ส่วน build tool ก็มีทั้ง Apache Maven และ Gradle (Preview version)

ขั้นตอนที่ 2 เมื่อสร้างเรียบร้อยก็ download มาและเปิดใน IDE กันเลย

ทำการ download library นิดหน่อยแค่เพียง … เยอะ !!!
พบว่าสร้างสิ่งที่เราต้องการใช้งานมาให้ครบเลย เช่น Dockerfile
ไม่ต้องมานั่งเขียนเองอีกแล้ว
แถมมีตัวอย่างของ Test ด้วยใช้งาน REST Assured นั่นเอง

รูปแบบของ RESTFul API ก็จะ … หน่อย
เพราะว่าใช้ JAX-RS แต่ถ้าใครชอบก็น่าจะรักเลยมั้ง
พอดีผมชอบ Spring มากกว่าเท่านั้นเอง

ทำการ run ด้วยคำสั่ง

$./mvnw compile quarkus:dev

จากนั้นทดสอบ RESTFul API ผ่าน browser หรือ curl ก็ได้ เช่น

$curl localhost:8080/hello

Hello Quarkus !!!

อย่าลืม feature Hot Reload ด้วยละ
ลองเปลี่ยน code เล่นดู  หรือสร้าง class ใหม่ขึ้นมาใช้งาน
พบว่า มันเปลี่ยนจริง ๆ นะ 
โดยไม่ต้องทำการ restart server ใด ๆ เลย
อันนี้สิแจ่มเลย

ส่วนการ packing software ก็ทำเช่นเดิมคือ
ทำการสร้าง JAR file ซึ่งจะเป็น executable jar file เหมือนกับ Spring Boot นั่นเอง

$./mvnw clean package
$java -jar target/code-with-quarkus-1.0.0-SNAPSHOT-runner.jar

โดยที่ JAR file มีขนาด 205 KB เท่านั้นเอง

ขั้นตอนที่ 3 ส่วนถ้าใครสาย Native คือมี GraalVM แล้ว

ก็สามารถ build ได้เลย ด้วยคำสั่ง

$export GRAALVM_HOME=<PATH of GRAALVM> 
$export PATH=.:$GRAALVM_HOME/bin:$PATH 
$./mvnw package -Pnative 

จากนั้นถ้าใครสาย Container ก็สามารถสร้าง Docker Image กันได้เลย
เพราะว่า project เขาสร้างไว้ให้แล้ว ง่ายมาก ๆ

ปล. ทาง Quarkus มีตัวอย่าง code ในหลายรูปแบบให้นะ
ลองไปดูเพิ่มเติมได้เลย Quick Start