Bu modülde node.js uygulamanızı, Application Load Balancer (ALB)’in birbirine bağlı bir dizi hizmeti olarak dağıtacaksınız. Daha sonra trafiği tek parça uygulamadan mikro hizmetlere sorunsuz bir şekilde taşımak için ALB’yi kullanacaksınız. Oluşturmaya Başlayın

Bu, mikro hizmetleri dağıtmak ve güvenli bir şekilde uygulamanın trafiğini tek parçalı uygulamadan taşımak için takip edeceğiniz süreçtir.

mimari genel bakış
  1. Trafiği Değiştirin
    Bu başlangıç yapılandırmasıdır. Tek parçalı node.js uygulaması Amazon ECS’de bir container’da çalışmaktadır.
  2. Mikro Hizmetleri Başlatın
    Bir önceki modülde oluşturduğunuz ve Amazon ECR’ye ilettiğiniz üç container görüntüsünü kullanarak mevcut Amazon ECS kümenizde üç mikro hizmeti başlatacaksınız.
  3. Hedef Grupları Yapılandırın
    Modül 2’de olduğu gibi her bir hizmet için hedef grup ekleyeceksiniz ve yeni mikro hizmetleri bağlamak için ALB Kuralları’nı güncelleyeceksiniz.
  4. Tek Parça Uygulamayı Kapatın
    ALB’de bir tek kural değiştirerek trafiği çalışmakta olan mikro hizmetlere yönlendirmeye başlayacaksınız. Trafiğin yeniden yönlendirilmesi onaylandığında tek parça uygulamayı kapatın.

Mikro hizmetleri dağıtmak için aşağıda adım adım gösterilen yönergeleri takip edin. Bölümü genişletmek için her adımın numarasını seçin.

break-the-monolith
  • 1. Adım. Hizmetleriniz için Görev Tanımlarını Yazın

    Modül 2’de başlattığınız kümeye üç yeni hizmet dağıtacaksınız. Modül 2 gibi her bir hizmet için Görev Tanımları yazacaksınız.

    ⚐ NOT: Tek bir görev tanımına birden fazla container eklemek mümkündür. Bu, üç mikro hizmeti de, tek bir hizmetin farklı container’ları olarak çalıştırabileceğiniz anlamına gelmektedir. Ancak bu yaklaşım, her bir container’ın hizmet ile doğrusal olarak ölçeklenmesi gerektiğinden yine de tek parçalıdır. Amacınız üç bağımsız hizmete sahip olmaktır. Her hizmetin, ilgili hizmetin görüntüsü ile bir container çalıştırmak için kendi görev tanımına ihtiyacı vardır.

    Bu görev tanımlarını Amazon ECS konsolundan oluşturabilirsiniz veya bunları JSON şeklinde yazarak işlemi hızlandırabilirsiniz. Görev tanımını JSON dosyası şeklinde yazmak için aşağıdaki adımları takip edin:

    1. Amazon ECS altında Amazon Container Services konsolundan, Görev tanımları öğesini seçin.
    2. Görev Tanımları sayfasında, Yeni Görev Tanımı Oluştur butonunu seçin.
    3. Başlama türü uyumluluğu seç sayfasında, EC2 seçeneğinin ardından Sonraki adım öğesini seçin.
    4. Görev ve container tanımlarını yapılandır sayfasında, Birimler bölümüne kaydırın ve JSON ile yapılandır butonunu seçin.
    5. Aşağıdaki kod parçacığını kopyalayıp JSON alanına yapıştırın ve mevcut kodu değiştirin.
      [service-name], [account-ID], [region] ve [tag] yer tutucularını değiştirmeyi unutmayın.

    ⚐ Not: Aşağıdaki parametreler görev tanımı için kullanılır:

    • Ad = [service-name: posts, threads, and users] 
    • Görüntü = [Amazon ECR repository image URL]:güncel 
    • cpu = 256 
    • bellek = 256 
    • Container Bağlantı Noktası = 3000 
    • Konak Gönderi = 0
    {
        "containerDefinitions": [
            {
                "name": "[service-name]",
                "image": "[account-id].dkr.ecr.[region].amazonaws.com/[service-name]:[tag]",
                "memoryReservation": "256",
                "cpu": "256",
                "essential": true,
                "portMappings": [
                    {
                        "hostPort": "0",
                        "containerPort": "3000",
                        "protocol": "tcp"
                    }
                ]
            }
        ],
        "volumes": [],
        "networkMode": "bridge",
        "placementConstraints": [],
        "family": "[service-name]"
    }

    ♻ Her hizmet için bir görev tanımı oluşturmak için adımları tekrar edin:

    • gönderiler
    • iş parçacıkları
    • Kullanıcılar
  • 2. Adım. Application Load Balancer’ı Yapılandırın: Hedef Gruplar

    Modül 2’de olduğu gibi her hizmet için bir hedef grup yapılandırın (gönderiler, iş parçacıkları ve kullanıcılar). Hedef grup, trafiğin belirltilen bir hizmete doğru bir şekilde ulaşmasını sağlar. AWS CLI kullanarak hedef grupları yapılandıracaksınız. Ancak devam etmeden önce bu öğretici için kullanılan doğru VPC adına sahip olduğunuzdan emin olun:

    • EC2 Konsolu’nun Load Balancer bölümüne gidin.
    • Demonun yanındaki onay kutusunu seçin, Tanım sekmesini seçin ve VPC özniteliğini bulun (bu formatta: vpc-xxxxxxxxxxxxxxxxx).
      ⚐ Not: Hedef grupları yapılandırırken VPC özniteliğine ihtiyaç duyacaksınız.

    Hedef Grupları Yapılandırın

    Terminalinizde her hizmet (gönderiler, iş parçacıkları ve kullanıcılar) için bir hedef grup oluşturmak amacıyla aşağıdaki komutu girin. Buna ek olarak mikro hizmetleriniz tam olarak çalıştıktan sonra trafiğin tek parça uygulamanıza ulaşmasını önlemek için bir hedef grup (drop-trafik) oluşturacaksınız. Aşağıdaki yer tutucuları değiştirmeyi unutmayın: [bölge], [hizmet adı] ve [vpc-özniteliği].

    Hizmet adları: gönderiler, iş parçacıkları, kullanıcılar, ve drop-trafik

    aws elbv2 create-target-group --region [region] --name [service-name] --protocol HTTP --port 80 --vpc-id [vpc-attribute] --healthy-threshold-count 2 --unhealthy-threshold-count 2 --health-check-timeout-seconds 5 --health-check-interval-seconds 6
    hedef grupları
  • 3. Adım. Dinleyici Kurallarını Yapılandırın

    Dinleyici, trafiği uygun şekilde yönlendirmek için ALB'nize gelen bağlantı isteklerini kontrol eder.

    Şu anda hizmetlerinizin dördü de (tek parça uygulama ve üç mikro hizmetiniz) aynı yük dengeleyicinin arkasında çalışıyor. Tek parça uygulamadan mikro hizmetlere geçiş yapmak için trafiği mikro hizmetlerinize yönlendirmeye başlayacak ve trafiği tek parça uygulamanıza yönlendirmeyi durduracaksınız.

    Dinleyici kurallarına erişin

    Dinleyici Kurallarını Güncelleyin

    Bu sekmede yalnızca bir dinleyici listelenmelidir. Dinleyici kurallarını düzenlemek için aşağıdaki adımları uygulayın:

    • Kurallar sütununun altında Kuralları görüntüle/düzenle öğesini seçin.
    • Kurallar sayfasında, artı(+) butonunu seçin.
      Kural Ekle seçeneği sayfada görünür. 
    • Trafiğin tek parça uygulamayı koruması için bir ve her bir mikro hizmet için bir kuralın dâhil olduğu gerekli kuralları eklemek için aşağıdaki kural şablonunu kullanın:
      • Yol şöyle ise = /api/[service-name]* Şuna yönlendirin:[service-name]
        Örneğin: Yol şöyle ise = /api/posts* şuna yönlendirin: gönderiler
      • Kuralları aşağıdaki sırayla ekleyin:
        • api: /api* api’ye yönlendirir
        • kullanıcılar: /api/users* kullanıcılar’a yönlendirir
        • iş parçacıkları: /api/threads* iş parçacıkları’na yönlendirir
        • gönderiler: /api/posts* gönderiler’e yönlendirir
    • Kaydet öğesini seçin.
    • Yük dengeleyici konsoluna geri dönmek için sayfanın sol üst köşesindeki geri okunu seçin.
    Application Load Balancer Dinleyici Kurallarını Yapılandırın
  • 4. Adım. Mikro Hizmetlerinizi Dağıtın

    Üç mikro hizmetini (gönderiler, iş parçacıkları ve kullanıcılar) kümenize dağıtın. Üç mikro hizmetinizin her biri için bu adımları tekrarlayın:

    • Amazon ECS konsolu seçeneğine gidin ve sol menü çubuğundan Kümeleröğesini seçin.
    • BreakTheMonolith-Demo (TekParçaUygulamayıAyır-Demo) kümesini seçin, Hizmetler sekmesini seçtikten sonra Oluştur öğesini seçin.
    • Hizmeti yapılandırsayfasında aşağıdaki parametreleri düzenleyin (ve aşağıda listelenmeyen parametreler için varsayılan değerleri koruyun):
      • Başlatma türü için EC2 öğesini seçin.
      • Görev Tanımı için, en yüksek düzeltme değerini otomatik olarak seçmek için Bir değer girin düğmesini seçin.
        Örneğin; api.1 
      • Hizmet adı için bir hizmet adı (gönderiler, iş parçacıkları veya kullanıcılar) girin.
      • Gönderilerin sayısı için 1 değerini girin
    • Sonraki adım öğesini seçin.
    • Ağ yapılandırması sayfasında Yük dengeleme bölümünde aşağıdakileri yapın:
      • Yük dengeleyici türü için Uygulama Yük Dengeleyici'sini seçin.
      • Hizmet IAM rolü için BreakTheMonolith-Demo-ECSServiceRole ögesini seçin.
      • Yük dengeleyici adı için demo seçildiğini doğrulayın.
      • Denge yüklenecek container bölümünde Yük dengeleyiciye ekle düğmesini seçin ve aşağıdaki düzenlemeleri yapın:
        • Üretim dinleyici bağlantı noktası alanını 80:HTTP olarak ayarlayın.
        • Hedef grup adı için uygun grubu seçin:  (gönderiler, iş parçacıkları veya kullanıcılar)
    • Sonraki adım öğesini seçin.
    • Auto Scalingyi Ayarla sayfasında Sonraki adım öğesini seçin.
    • Gözden geçir sayfasında, Hizmet Oluştur öğesini seçin.
    • Hizmet Görüntüle öğesini seçin.

    Tüm hizmetlerin başlaması yalnızca birkaç saniye sürer. Devam etmeden önce tüm hizmetlerin ve görevlerin çalışıp çalışmadığını bir kez daha kontrol edin.

    Amazon ECS Mikro Hizmetleri Dağıtır
  • 5. Adım. Trafiği Mikro Hizmetlerinize Değiştirin

    Mikro hizmetleriniz şu anda çalışıyor, ancak tüm trafik hâlâ tek parça uygulama hizmetinize akıyor. Trafiği mikro hizmetlere yeniden yönlendirmek için dinleyici kurallarını güncellemek amacıyla aşağıdaki adımları uygulayın:

    • EC2 Konsolu’nun Yük Dengeleyicileri bölümüne gidin.
    • Yük Dengeleyici ayrıntılarını görmek için demonun yanındaki onay kutusunu seçin.
    • Dinleyiciler sekmesini seçin.
      Yalnızca bir dinleyici listelenmelidir.
    • Kurallar sütununun altında Kuralları görüntüle/düzenle öğesini seçin.
    • Kurallar sayfasında üst menüden eksi (-) butonunu seçin.
    • Kuralın yanındaki onay kutusunu seçerek ilk kuralı (/ api * api'ye yönlendirir) silin.
    • Sil öğesini seçin.
    • Drop-trafiğe yönlendirmek için varsayılan kuralı güncelleyin:
      • Üst menüden düzenle (kalem) butonunu seçin.
      • Varsayılan kuralın yanındaki düzenle (kalem) simgesini seçin (HTTP 80: varsayılan eylem).
      • Yönlendir’i düzenlemek için ÖYLEYSE sütunundaki düzenle (kalem) simgesini seçin.
      • Hedef grubu alanındadrop-trafik öğesini seçin.
      • Güncelle butonunu seçin.

    Güncellenmiş kuralların bir örneği için aşağıdaki ekran görüntüsüne bakın.

    Amazon EC2 Trafiği Mikro Hizmetlere Değiştirir

    Tek parça uygulamayı devre dışı bırakın: Trafik artık mikro hizmetlerinize akarken, tek parça uygulama servisini devre dışı bırakabilirsiniz.

    • Amazon ECS kümesi BreakTheMonolith-Demo-ECSCluster'a geri dönün.
    • Hizmetler sekmesinde, api'nin yanındaki onay kutusunu ve Güncelle öğesini seçin.
    • Hizmeti yapılandır sayfasında Görev numarasınıbulun ve 0 değerini girin.
    • Gözden geçire atla öğesini seçin.
    • Hizmeti Güncelle öğesini seçin.

    Amazon ECS artık hizmetin küme üzerine dağıttığı container’lardan bağlantıları boşaltacak ve container’ları durduracaktır. Dağıtımlar veya Görevler listelerini yaklaşık 30 saniye sonra yenilerseniz görev sayısının 0'a düşeceğini göreceksiniz. Hizmet hâlâ etkindir; dolayısıyla herhangi bir nedenle geri almanız gerekiyorsa daha fazla görev dağıtmak üzere hizmeti güncelleyebilirsiniz.

    İsteğe bağlı olarak api hizmetini silebilirsiniz. Hizmetler sekmesinde api'nin yanındaki onay kutusunu seçin, Sil öğesini seçin ve silme işlemini onaylayın.

    Artık node.js'nizi kesinti olmadan tek parça uygulamadan mikro hizmetlere tamamen geçirdiniz!

  • 6. Adım. Dağıtımınızı Doğrulayın

    Hizmet URL’nizi bulun: Bu, bu öğreticinin 2. Modülünde kullandığınız URL ile aynıdır.

    • EC2 Konsolu’nun Yük Dengeleyicileri bölümüne gidin.
    • Yük Dengeleyici ayrıntılarını görmek için demonun yanındaki onay kutusunu seçin.
    • Açıklama sekmesinde DNS adını bulun ve URL'nin sonundaki kopya simgesini seçin. 
    • DNS adını yeni bir tarayıcı sekmesine veya penceresine yapıştırın.

    ‘İstekleri almaya hazır’ mesajını görmeniz gerekir.

    Her bir mikro hizmetin değerlerine bakın: ALB'niz trafiği istek URL'sine göre yönlendirir. Her hizmeti görmek için hizmet adını DNS adınızın sonuna eklemeniz yeterlidir:

    • http://[DNS name]/api/users
    • http://[DNS name]/api/threads
    • http://[DNS name]/api/posts
    her bir mikro hizmetin değerine bakın

    ⚐ NOT: Bu URL'ler, tek parça uygulamanın dağıtıldığı zamankiyle tamamen aynı şekilde çalışır. Bu çok önemlidir; çünkü bu uygulamaya bağlanmayı bekleyecek herhangi bir API veya kullanıcı yaptığınız değişikliklerden etkilenmeyecektir. Tek parça uygulamadan mikro hizmetlere geçmek altyapınızın diğer bölümlerinde değişiklik yapılmasını gerektirmez.

    API'larınızı test etmek için Postman gibi araçları da kullanabilirsiniz.