Java ve Quarkus
Merhaba,
Size aşağıdaki kitaptan ufak bir kısım paylaşacağım.
Beginning Quarkus Framework kitabından daha detaylı bilgi alabilirsiniz.
Bugünün Java’sı hem yorumlanan(interpreted) hem de derlenen(compiled) bir dil platformudur. Oysa Java yorumlanan bir dil platformu olarak yaşamına başlamıştı. Kaynak dosyalarınızı .java olarak kaydederiz ve javac
komutuyla .class dosyalarını üretiriz. Bu .class dosyaları Java bytecode denilen bilgileri tutar, bytecode yazdığınız tüm Java kodlarının Java’ya özgü yorumudur.
java yourcode.class
komutunu çalıştırdığında, bu .class dosyası JRE tarafından yorumlanarak, OS(işletim sistemi)’ye özgü olarak CPU talimatlarına çevrilir. Bu ara çevrilme adımı kodun her çalıştırılmasında uygulanır, her metod çalıştırılmadan önce her zaman tekrardan yorumlanır. Modern JVM’de ise artık programdaki çokça kullanılan metodlar hotspots olarak işaretlenir.
Bu noktada, JVM bu hotspot kısımlarına daha sonra JIT(Just-In-Time) derlemesini çalıştırır. Java bytecode’ların sürekli yeniden yorumlanması kodun çalışmasını yavaşlatır; JIT derlemesi ile CPU tarafından doğrudan çalıştırılacak talimatlar üretilir. Bu da demektir ki, tekrarlı yorumlamalara artık ihtiyaç duyulmayacaktır. Tahmin edeceğiniz gibi, bu durum uygulamanın bazı özel kısımlarının çalışmasının hızlanmasını sağlar. JIT tarafından derlenen kısımlar, diğer yorumlanan kısımlara göre daha hızlı çalışır.
AOT(Ahead-of-Time) Derleme
AOT derleme ile .java dosyalarınızı direk olarak native binary(CPU’nın anladığı yerel ikili) dosyalarına çevrilir ve bu dosyalar doğrudan CPU tarafından çalıştırılır. Yorumlama adımları ile uğraşılmaz. Uygulamanız çok daha hızlı bir şekilde çalışmaya başlar. Ek olarak, bellek kullanımı büyük ölçüde azalır. Bu süreçten elde edilen performans kazanımları, C++’ın çalışma hızı ile karşılaştırılabilir düzeye gelir. AOT ile derlenmiş tüm uygulama, kendi kendine yeten çalıştırabilir bir uygulama haline gelir. İşletim sistemine özgü JVM üzerinde çalışmasına gerek kalmaz.
Tabi bunun bazı giderleri de olacaktır. AOT kullanarak derlenen kod, JDK’dan sadece ihtiyaç duyduğu kodları alır, gereksiz kodları kırpar. Bu ön derleme adımı, Java geliştiricilerinin alışık olduğu sürelerden biraz daha uzun sürebilir. Reflection API kullanma gibi zaman alan işlemler ise azaltılmaya çalışılır. Örneğin, reflection kullanma planınız varsa, bunun için derleme sırasında ekstra ayarlar yapmanız gerekecektir. Bunlar uygulamada ufak rahatsızlıklardır. Bunların yanında kazanç çok daha büyük olur.
Kısa Bir Quarkus Turu
Native Image Desteği
Java kodlarından CPU’nın direk olarak çalıştıracağı native image’ler oluşturur. Java kodlarının yorumlama adımı atlanmış olur ve daha hızlı çalışan ve daha az kaynak tüketen bir yapı ortaya çıkar. Quarkus uygulamasını geleneksel Java uygulaması(JVM modda) olarak da yine çalıştırabilirsiniz, bu durumda bile performans kazanımı elde edersiniz. Java’yı artık embedded sistemlerde bile kullanabilirsiniz.
Serverless(Sunucusuz) ve Container Dostu
Serverless deployment(dağıtım) modeli kendi sunucularınız yerine, cloud sağlayıcılarının sunduğu sunucuları kullanmanızdır. Kendi mikroservisinizi buraya deploy edersiniz.
Quarkus, Kubernetes(K8s) ile beraber çalışmak üzere tasarlanmıştır. GraalVM’i kullanarak sağlanan native derleme desteğiyle Quarkus şunları sağlar,
- Daha küçük deployment birimleri
- Daha az bellek gereksinimi
- Hızlı başlangıç zamanları
Kullandığınız birçok üçüncü-parti kütüphaneler ve frameworklerin(çatılar)(Kafka, AWS kütüphaneleri vb.) Quarkus desteği vardır.
Canlı Kod Üzerinde Hot Reload
Hot Reload(Kodun Derlenmeye İhtiyaç Duymadan Yenilenmesi) özelliği geliştiricin üretkenliği için çok önemli bir özelliktir. Quarkus’un Hot Reload desteği ile canlı kodunu tekrar derlemeye gerek kalmadan anlık olarak yansıtır. Hatta config dosyalarını bile tekrar derlemeye gerek kalmadan koda yansıtır. Maven pom.xml’e yeni bir bağımlılık mı eklediniz, bunun için bile derlemeye ihtiyaç yoktur.
Güçlü Framework Desteği
Quarkus varoluştan birçok framework desteği sağlar. Şunun gibi birçok kütüphane ve framework desteği verir;
- JavaEE
- MicroProfile
- Apache Camel
- Spring Framework(Stabil hali çok yakında)
Geliştirici Dostu Tooling(Aletler)
Quarkus, kendi içinde kullanılmak üzere zengin seçenekli çalışma aletleri sunar. Intellij ve Visual Studio Code IDE’lerinde zengin eklenti desteği bulunur.
Quarkus Maven eklentisi ile projenizde ihtiyaç duyduğunuz birçok özelliği size sunar. Ayrıca, Homebrew(MacOS) ve Node Package Manager(Node.js) eklentileri de vardır.
Reactive SQL
Quarkus ile veritabanı programlamayı reactive programlama yöntemi ile yapılabilir. Reactive programlama ile hızlı yanıt veren, akış-odaklı ve mesaj-yönelimli bir yaklaşım sağlanır. Quarkus şimdilik MySQL, DB2 ve PostgreSQL desteği sunmaktadır.
Cloud-Native ve Hazır-Mikroservisler
Quarkus ile monolitik yapıdan mikroservislere yumuşak bir geçiş yapabilirsiniz.
Scala ve Kotlin Desteği
Quarkus başta Scala ve Kotlin olmak üzere JVM üzerinde çalışan dillere destek sağlar.
Quarkus’a ufak bir giriş yaptık, faydalı olması dileğiyle. Sağlıcakla kalın.