İçeriğe geç
← Blog

Quarkus nedir ? Neden tercih etmeliyiz ?

8 Haziran 2020, 10:41 Quarkus 4 dk 7.3k 0

Quarkus OpenJDK ve GraalVM için sektördeki önemli library’leri içinde barındırarak hazırlanmış bir Kubernetes Java Stack. Fakat bunu sadece Kubernetes olarak düşünmeyin bu stack’i herhangi bir platform üzerinde de kullanabilirsiniz.Okuduğum kaynaklarda sürekli olarak Kubernetes Native Java framework olarak vurgulanıyor. Sanırım bu konuda Kubernetes için de-facto olmasını istedikleri için bu şekilde dile getiriliyor. Ama bence Quarkus denince akla ilk olarak Container First gelmesi daha mantıklı gibi.

Quarkus hakkındaki detaylara bakmadan önce çok daha net olması açısından quarkus.io üzerindeki Quarkus Benchmark bilgisini paylaşmak istiyorum. Bu konun benim radarıma girmesinin temel nedeni bu benchmark detayları.

Bu resim içerisinde native olarak gördüğünüz yeşil renkli alanlar JIT olmadan doğrudan Java kodunun machine code olarak elde edilip çalıştırılmasıdır. Tabi ki diğerlerine göre hem memory açısından hem de hız açısından güzel bir fark yaratmaktadır. Ama bugün bu başlık altında bunun detaylarını değilde daha çok Quarkus’u neden kullanmalıyız, nerede kullanabiliriz ve nasıl kullanabiliriz üzerinde duracağım. Ama native konusunda da size bir çalışma zamanı ekran görüntüsü paylaşmak istiyorum.

Neden Quarkus tercih etmeliyiz ?

1) Yukarıdaki resimde de gördüğünüz üzere; memory consumption değerleri daha az, düşünün ki daha az memory ile aynı işi yapmak, çok iyi bir tercih sebebi olabilir. İnsanlar Cloud Provider nimetlerinden faydalanırken zaman için şunu fark ettiler, Cost reduction yapmalıyız bu su yakmıyor.

2) Boot ve ilk response zamanları çok iyi, özellikle Serverless konusuna burada dikkatinizi çekmek istiyorum. Cloud tarafında Serverless Mimarisinin ortaya çıkmasının en önemli nedenlerinden biri Cost Reduction yapmaktı. Gerektiğinde kaynaklar ayakta olmalı, kapalı olduğunda ise; ihtiyaç duyulduğunda çok hızlı bir şekilde cevap vermesiydi. Java tarafında kalmak isteyen organizasyonlar için boot time ne kadar değerli olduğunu tahmin edebiliyorsunuzdur işte bu yüzden Quarkus biçilmiş kaftan olabilir.

3) Bu kadar iyi bir şekilde memory kullanabilen ve boot zamanını gerçek anlamda arttıran framework; Kubernetes gibi container orchestration yapabilen platformlar içinde birinci dereceden tercih sebebi olabilir, ne kadar hızlı boot o kadar hızlı scale olabilme yeteneği demek değil mi ?

4) Beni cezbeden diğer özelliği ise pluginler yardımı ile Scaffolding kısmının kısa sürede oluşturulması. Artık o kadar fazla framework ve platform var ki bunların yapısal olarak nasıl configure edilmesi gerektiği konusunu akılda tutmanın bir anlamı yok. Buradaki demek istediğim elle yapılandırma tabi ki; neyi nereye koymamız gerektiğini her zaman bilmeliyiz. Buda Quarkus’u Developer Friendly yapıyor.

5) Bir diğer Developer Friendly özelliği ise; Docker dosyalarının hem native hemde jdk için sizin için hazırlanması. Bunlarla uğraşmak zorunda kalmamak güzel. Bir kaç komut ile uygulamayı doğrudan ayağa kaldırabiliyorsunuz.

6) Quarkus için fark yaratacak diğer konuda extentionlar, ne kadar çok stabil extention o kadar çok kullanımının artması demek. Mesela Kubernetes extention olabildiğince geniş özelliklere sahip. Tabi ki kendinizde custom extentionlar yazabilirsiniz.

Quarkus’u nasıl kullanabiliriz ?

Önceki maddelerde belirttiğim gibi Quarkus scaffolding yapabileceğimiz pluginler ve bir site sunuyor. Bu pluginler maven ve gradle için mevcut. Bunun yanında bu plugin’leri kullanmadan da code.quarkus.io kullanarakta scaffolding yapabilirsiniz buda start.spring.io tadında bir site. Aşağıda gördüğünüz komut ile bir Quarkus projesi oluşturabiliriniz. Bunların yanında IDE’ler içinde plugin desteği mevcut.

Ben maven kullanacağım onun için maven tooling hakkındaki bilgilere buradan ulaşabilirsiniz. Hangi input ne işe yarıyor : https://quarkus.io/guides/maven-tooling

Bash
mvn io.quarkus:quarkus-maven-plugin:1.4.2.Final:create 
-DprojectGroupId=com.gokalpkuscu 
-DprojectArtifactId=getting-started 
-DclassName="com.gokalpkuscu.getting.started.GreetingResource" 
-Dpath="/helloworld"

Bu komut çalışmasını bitirdikten sonra, sizde bir Quarkus projesi sahibi oluyorsunuz. Proje içinde Dockerfile’lare dikkat edin. Bunun yanında bir çok extention desteği mevcut, bunları projenizin dependency’leri olarak düşünebilirsiniz. Resimde bazı extention’ları görebilirsiniz. Mesela quarkus-hibernate-orm.

Sizlere karşılaştırma yapabileceğiniz bir takım ekran görüntüleri sunacağım. Bu görüntülerde gördüğünüz bir tane rest endpoint için uygulamanın ayağa kalma zamanı.

Quarkus Native ile Boot Time (0.016s)

Quarkus JDK ile Boot Time (0.762s)

Spring Boot JDK ile Boot Time (1.504s)

Sonuç olarak Microservislere sahip bir projeniz varsa, başlangıç olarak bir kaç microservisinizi Quarkus ile denemek fena fikir olmayabilir. Özellikle GraalVM ile native tarafı denemek harika bir know-how kazandırabilir ve Kubernetes ile çalışıyorsanız tadından yenmez diye düşünüyorum.

Kaynaklar
https://learning.oreilly.com/library/view/quarkus-cookbook/9781492062646
https://www.redhat.com/en/topics/cloud-native-apps/what-is-quarkus
https://www.graalvm.org/docs/reference-manual/native-image