Azure Container Apps'te Java'ya genel bakış

Azure Container Apps, kapsayıcılı Java uygulamalarını bulutta çalıştırabilir ve uygulamalarınızı dağıtmaya yönelik esnek seçenekler sunar.


Kapsayıcılı Java uygulamalarınız için Container Apps kullandığınızda şunları elde edersiniz:

  • Uygun maliyetli ölçeklendirme: Tüketim planını kullandığınızda Java uygulamalarınız sıfıra ölçeklendirilebilir. Uygulamanız için çok az talep olduğunda ölçeği daraltmak, projeleriniz için maliyetleri otomatik olarak azaltır.

  • Dağıtım seçenekleri: Azure Container Apps, yapıt dosyalarını kullanarak veya kendi Dockerfile'ınız ile doğrudan maven derlemesinden dağıtım yapmanızı sağlayan Buildpack'lerle tümleşir.

    • JAR dağıtımı (Önizleme): Kapsayıcı uygulamanızı doğrudan bir JAR dosyasından dağıtabilirsiniz.

    • WAR dağıtımı (Önizleme): Kapsayıcı uygulamanızı doğrudan bir WAR dosyasından dağıtabilirsiniz.

    • IDE desteği: Kapsayıcı uygulamanızı doğrudan IntelliJ'den dağıtabilirsiniz.

  • Otomatik bellek sığdırma (Önizleme): Container Apps, Java Sanal Makinesi'nin (JVM) belleği yönetme şeklini iyileştirerek java uygulamalarınız için en olası belleği sağlar.

  • Ortam değişkenleri oluşturma (Önizleme): Kaynak koddan Java görüntüsü derlemesini denetlemek için özel anahtar-değer çiftleri yapılandırabilirsiniz.

Bu makalede, Azure Container Apps üzerinde Java uygulamaları oluştururken bilmeniz gereken bilgiler açıklanmaktadır.

Dağıtım türleri

Kapsayıcılı uygulamaları çalıştırmak genellikle uygulamanız için bir Dockerfile oluşturmanız gerektiği anlamına gelir, ancak Container Apps'te Java uygulamalarını çalıştırmak size birkaç seçenek sunar.

Type Açıklama Buildpack'leri kullanır Dockerfile kullanır
Kaynak kodu derlemesi Kaynak kodunuzdan doğrudan Container Apps'e dağıtabilirsiniz. Yes Hayır
Artifakt derlemesi Container Apps'e dağıtmak için maven derlemesi oluşturabilirsiniz Yes Hayır
Dockerfile Dockerfile'ınızı el ile oluşturabilir ve dağıtımınız üzerinde tam denetime sahip olabilirsiniz. Hayır Yes

Not

Derleme paketleri dağıtımları Java Geliştirme Seti (JDK) 8, 11, 17 ve 21 sürümlerini destekler.

Uygulama türleri

Farklı uygulama türleri tek bir kapsayıcı uygulaması olarak veya Container Apps işi olarak uygulanır. Senaryonuz için en uygun uygulama türüne karar vermenize yardımcı olması için aşağıdaki tabloyu kullanın.

Bu tabloda listelenen örneklerin kapsamlı olması amaçlanmamıştır, ancak farklı uygulama türlerinin amacını en iyi şekilde anlamanıza yardımcı olmak için kullanılır.

Type Örnekler Olarak uygula...
Web uygulamaları ve API uç noktaları Spring Boot, Quarkus, Apache Tomcat ve Jetty Tek bir kapsayıcı uygulaması
Konsol uygulamaları, zamanlanmış görevler, görev çalıştırıcıları, toplu işler SparkJobs, ETL görevleri, Spring Batch İşi, Jenkins işlem hattı işi Container Apps işi

Hata ayıklama

Container Apps'te Java uygulamanızda hata ayıklarken, günlük akışı ve konsol hata ayıklama iletileri için Java işlem içi aracısını incelediğinizden emin olun.

Sorun giderme

Java uygulamalarınızı geliştirirken aşağıdaki öğeleri göz önünde bulundurun:

  • Varsayılan kaynaklar: Varsayılan olarak, bir uygulamada yarım CPU ve 1 GB kullanılabilir.

  • Durum bilgisi olmayan işlemler: Kapsayıcı uygulamanızın ölçeği genişletildiğinde veya daraltıldığında, yeni işlemler oluşturulur ve sonlandırılır. Veritabanları ve dosya sistemi paylaşımları gibi paylaşılan depolamaya veri yazmak için önceden planlama yaptığınızdan emin olun. Doğrudan kapsayıcı dosya sistemine yazılan dosyaların başka bir kapsayıcı için kullanılabilir olmasını beklemeyin.

  • Varsayılan olarak sıfıra ölçeklendirin: Uygulamanızın bir veya daha fazla örneğinin sürekli çalıştığından emin olmanız gerekiyorsa, gereksinimlerinizi en iyi şekilde karşılayacak bir ölçek kuralı tanımladığınızdan emin olun.

  • Beklenmeyen davranış: Kapsayıcı uygulamanız derlenemiyor, başlatılamıyor veya çalıştırılamıyorsa, yapıt yolunun kapsayıcınızda doğru ayarlandığını doğrulayın.

  • Derleme paketi destek sorunları: Buildpack'iniz bağımlılıkları veya ihtiyacınız olan Java sürümünü desteklemiyorsa uygulamanızı dağıtmak için kendi Dockerfile'ınızı oluşturun. Referans olarak bir Dockerfile örneğini görüntüleyebilirsiniz.

  • SIGTERM ve SIGINT sinyalleri: JVM, varsayılan olarak, SIGTERM ve SIGINT sinyallerini yönetir, ve bu sinyalleri durdurup uygulamanızda uygun şekilde işlemediğiniz sürece bu sinyalleri uygulamaya geçirmez. Container Apps, işlem denetimi için hem hem SIGTERM de SIGINT kullanır. Bu sinyalleri yakalamazsanız ve uygulamanız beklenmedik bir şekilde sonlanırsa, bunları depolamada kalıcı hale getirmezseniz bu sinyalleri kaybedebilirsiniz.

  • Kapsayıcı görüntülerine erişim: Yapıt veya kaynak kodu dağıtımını varsayılan kayıt defteriyle birlikte kullanıyorsanız kapsayıcı görüntülerinize doğrudan erişiminiz yoktur.

İzleme

Tüm standart gözlemlenebilirlik araçları Java uygulamanızla çalışır. Java uygulamalarınızı Container Apps üzerinde çalışacak şekilde oluştururken aşağıdaki öğeleri göz önünde bulundurun:

  • Ölçümler: Java Sanal Makinesi (JVM) ölçümleri, Java uygulamalarınızın sistem durumunu ve performansını izlemek için kritik öneme sahiptir. Toplanan veriler JVM'nizin bellek kullanımı, çöp toplama ve iş parçacığı sayısıyla ilgili içgörüler içerir. Uygulamalarınızın sistem durumunu ve kararlılığını sağlamaya yardımcı olmak için ölçümleri de kontrol edebilirsiniz.

  • Günlük: Uygulama ve hata iletilerinin günlük akışında ortaya çıkabilmesi için stdout veya stderror'ye gönderin. Popüler günlük hizmetleri kullanıldığında yaygın olduğu gibi, doğrudan kapsayıcının dosya sistemine log kaydetmekten kaçının.

  • Performans izleme yapılandırması: Uygulamanıza doğrudan erişebilmesi için performans izleme hizmetlerini Container Apps ortamınızda ayrı bir kapsayıcı olarak dağıtın.

Tanılama

Azure Container Apps, yalnızca Java geliştiricileri için yerleşik tanılama araçları sunar. Bu destek, gelişmiş verimlilik ve kolaylıklar için Azure Container Apps üzerinde çalışan Java uygulamalarında hata ayıklamayı ve sorun gidermeyi kolaylaştırır.

  • Dinamik günlükçü düzeyi: Kod değişikliği yapmadan veya uygulamanızı yeniden başlatmaya zorlamadan farklı günlük ayrıntılarına erişmenizi ve denetlemenizi sağlar. Başvuru için Dinamik günlükçü düzeyini ayarlama seçeneğini görüntüleyebilirsiniz.

Ölçeklendirme

Ön uç uygulamalarınızdan gelen isteklerin aynı sunucuya ulaştığından veya ön uç uygulamanızın birden çok kapsayıcı arasında bölündüğünden emin olmanız gerekiyorsa, yapışkan oturumları etkinleştirdiğinizden emin olun.

Güvenlik

Container Apps çalışma zamanı, Container Apps ortamınızda TLS'yi sizin için sonlandırır.

Bellek yönetimi

Java uygulamanızda bellek yönetimini iyileştirmeye yardımcı olmak için uygulamanızda JVM bellek sığdırma özelliğinin etkinleştirildiğinden emin olun.

Bellek, gibibaytlar (GiB) ve CPU çekirdek çiftleriyle ölçülür. Aşağıdaki tabloda, kapsayıcı uygulamanız için kullanılabilen kaynak aralığı gösterilmektedir.

Eşik CPU çekirdekleri Gibibayt cinsinden bellek (GiB)
Minimum 0.25 0,5
Maksimum 4 8

Çekirdekler 0,25 çekirdek artışıyla kullanılabilir ve bellek 2:1 oranında kullanılabilir. Örneğin, 1,25 çekirdek gerekiyorsa kapsayıcı uygulamanızda 2,5 GiB bellek kullanılabilir.

Not

JDK sürüm 9 ve daha düşük sürümleri kullanan uygulamalar için, Azure Container Apps'teki bellek ayırmayla eşleşecek özel JVM bellek ayarlarını tanımladığınızdan emin olun.

Java bileşenleri desteği

Azure Container Apps, yönetilen hizmetler olarak aşağıdaki Java bileşenleri için destek sunar:

  • Spring için Eureka Server: Hizmet kaydı ve bulma, canlı uygulama örneklerinin listesini tutmak için önemli gereksinimlerdir. Uygulamanız gelen istekleri yönlendirmek ve yük dengelemek için bu listeyi kullanır. Her istemcinin el ile yapılandırılması zaman alır ve insan hatası olasılığını getirir. Eureka Server, mikro hizmetlerin kendilerini kaydedebildiği ve sistemdeki diğer hizmetleri bulabildiği bir hizmet kayıt defteri olarak çalışarak hizmet bulma yönetimini basitleştirir.

  • Spring için Yapılandırma Sunucusu: Config Server, dağıtılmış sistemler için merkezi dış yapılandırma yönetimi sağlar. Bu bileşen, buluta özel bir ortamda birden çok mikro hizmette yapılandırma ayarlarını yönetmenin zorluklarını gidermek için tasarlanmıştır.

  • Spring için Ağ Geçidi: Spring için Ağ Geçidi, mikro hizmet mimarisinin bir parçası olarak API isteklerini yönlendirmek, yönetmek ve işlemek için verimli ve güçlü bir yol sunar. Dış istekleri farklı hizmetlere yönlendiren ve filtreleme ve yük dengeleme gibi özellikler ekleyen bir API Gateway işlevi görür.

  • Spring yöneticisi: Spring yöneticisi tarafından yönetilen bileşen, aktüatör uç noktalarına sahip Spring Boot web uygulamaları için tasarlanmış bir yönetim arabirimi sağlar. Yönetilen bileşen, kapsayıcı uygulamanızı Spring için Yönetici bileşenine bağlamanıza olanak tanıyarak kapsayıcı uygulamanıza tümleştirme ve yönetim sağlar.