1. Giriş
Google Cloud'da web sitelerini dağıtmanın birçok yolu vardır. Her çözüm farklı özellikler, beceriler ve kontrol düzeyleri sunar. Compute Engine, web sitesini çalıştırırken kullanılan altyapı üzerinde derin bir kontrol seviyesi sunmakla birlikte Google Kubernetes Engine ve App Engine gibi çözümlere kıyasla biraz daha fazla operasyon yönetimi gerektirir. Compute Engine ile altyapının sanal makineler ve yük dengeleyici gibi birçok yönü üzerinde ayrıntılı kontrol sahibi olursunuz. Bugün bir web sitesinin Compute Engine ile nasıl kolayca dağıtılabileceğini ve ölçeklendirilebileceğini göstermek için örnek bir uygulama (Fancy Store'un e-ticaret web sitesi) dağıtacaksınız.
Neler öğreneceksiniz?
- Compute Engine örnekleri oluşturma
- Kaynak örnekleri kullanarak örnek şablonları oluşturma
- Yönetilen örnek grupları oluşturma
- Durum denetimleri ve otomatik iyileştirmeyi ayarlama
- HTTP(S) Yük Dengeleme oluşturma
- Yük dengeleyiciler için durum denetimleri oluşturma
- Önbelleğe almak için içerik yayınlama ağı nasıl kullanılır?
Codelab'in sonunda web sitenize otomatik iyileştirme, yük dengeleme, otomatik ölçeklendirme ve periyodik güncellemeler sağlamak üzere yönetilen örnek gruplarının içinde örnekleriniz olacak.
Ön koşullar
- Bu laboratuvarda kullanacağımız kavramlara genel bir bakış için lütfen aşağıdaki materyale göz atın:
- GCP'nin Temelleri olan Google Cloud Platform'a hoş geldiniz
- Google Cloud Compute Engine'i Kullanmaya Başlama
- Google Cloud Storage'ı Kullanmaya Başlama
- Başlangıç: Cloud Shell
2. Ortam kurulumu
Kendi hızınızda ortam kurulumu
- Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.
Tüm Google Cloud projelerinde benzersiz bir ad olan proje kimliğini unutmayın (yukarıdaki ad zaten alınmış ve size uygun olmayacaktır!). Bu kod laboratuvarın ilerleyen bölümlerinde PROJECT_ID
olarak adlandırılacaktır.
- Sonraki adımda, Google Cloud kaynaklarını kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir.
Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. "Temizleme" bölümündeki talimatları izlediğinizden emin olun. bölümünde, bu eğiticinin dışında faturalandırmayla karşılaşmamanız için kaynakları nasıl kapatacağınız konusunda tavsiyelerde bulunuyoruz. Yeni Google Cloud kullanıcıları, 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
Compute Engine API'yi etkinleştirme
Sonraki adımda Compute Engine API'yi etkinleştirmeniz gerekir. API'yi etkinleştirebilmek için API'nin hizmet şartlarını ve faturalandırma sorumluluğunu kabul etmeniz gerekir.
Cloud Shell'de aşağıdaki kodu yürüterek Compute Engine API'yi etkinleştirin:
gcloud services enable compute.googleapis.com
Cloud Shell
Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de bu codelab'de Cloud'da çalışan bir komut satırı ortamı olan Cloud Shell'i kullanacaksınız.
Bu Debian tabanlı sanal makine, ihtiyacınız olan tüm geliştirme araçlarıyla yüklüdür. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud'da çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Yani bu codelab'de ihtiyacınız olan tek şey bir tarayıcıdır (Evet, Chromebook'ta çalışır).
- Cloud Shell'i Cloud Console'dan etkinleştirmek için Cloud Shell'i etkinleştir simgesini tıklamanız yeterlidir (sağlanması ve ortama bağlanması yalnızca birkaç dakika sürer).
Cloud Shell'e bağlandıktan sonra kimliğinizin doğrulandığını ve projenin PROJECT_ID
olarak ayarlanmış olduğunu göreceksiniz.
gcloud auth list
Komut çıkışı
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
Komut çıkışı
[core] project = <PROJECT_ID>
Herhangi bir nedenle proje ayarlanmamışsa şu komutu vermeniz yeterlidir:
gcloud config set project <PROJECT_ID>
PROJECT_ID
cihazınızı mı arıyorsunuz? Kurulum adımlarında kullandığınız kimliği kontrol edin veya Cloud Console kontrol panelinden arayın:
Cloud Shell bazı ortam değişkenlerini de varsayılan olarak ayarlar. Bu değişkenler, gelecekte komut çalıştırdığınızda işinize yarayabilir.
echo $GOOGLE_CLOUD_PROJECT
Komut çıkışı
<PROJECT_ID>
- Son olarak, varsayılan alt bölgeyi ve proje yapılandırmasını ayarlayın.
gcloud config set compute/zone us-central1-f
Çeşitli farklı alt bölgeler seçebilirsiniz. Daha fazla bilgi için Bölgeler ve Bölgeler.
Cloud Storage paketi oluşturma
Hem derleme kodumuzu hem de başlangıç komut dosyalarımızı barındırmak için bir Cloud Storage paketi kullanacağız. Cloud Shell'de aşağıdaki komutu yürüterek yeni bir Cloud Storage paketi oluşturun:
gsutil mb gs://fancy-store-$DEVSHELL_PROJECT_ID
3. Kaynak depoyu klonlama
Web sitenizin temeli olarak monolitten mikro hizmetlere veri deposunu temel alan Fancy Store'un mevcut e-ticaret web sitesini kullanacaksınız. Compute Engine'e dağıtımla ilgili özelliklere odaklanabilmek için deponuzdaki kaynak kodunu klonlayacaksınız. Ardından, Compute Engine'deki güncellemelerin ne kadar basit olduğunu göstermek için kodda küçük bir güncelleme yapacaksınız.
Kod deposunu otomatik olarak projeye klonlayabilir, ayrıca Cloud Shell'i ve yerleşik kod düzenleyiciyi açmak için şu bağlantıyı kullanabilirsiniz: Cloud Shell'de aç.
Alternatif olarak, Cloud Shell'de aşağıdaki komutları kullanarak depoyu manuel olarak klonlayabilirsiniz:
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices
Uygulamanın yerel olarak çalıştırılmasını sağlamak için Cloud Shell komut isteminde kodun ilk derlemesini çalıştırın. Komut dosyasının çalışması birkaç dakika sürebilir.
./setup.sh
Gerekli özeni gösterin ve uygulamanızı test edin. Web sunucunuzu başlatmak için aşağıdaki komutu çalıştırın:
cd microservices npm start
Çıkış:
Products microservice listening on port 8082! Frontend microservice listening on port 8080! Orders microservice listening on port 8081!
Web önizlemesi simgesini tıklayıp "Preview on port 8080" (8080 bağlantı noktasında önizle) seçeneğini belirleyerek uygulamanızı önizleyin.
Bunu yaptığınızda Fancy Store'un ön ucunu iş başında görebileceğiniz yeni bir pencere açılacaktır.
Web sitesini görüntüledikten sonra bu pencereyi kapatabilirsiniz. Web sunucusu işlemini durdurmak için terminal penceresinde Control+C
(Macintosh'ta Command+C
) tuşuna basın.
4. Compute Engine örnekleri oluşturma
Geliştirme ortamınız çalışır durumda olduğuna göre artık bazı Compute Engine örneklerini dağıtabilirsiniz. Aşağıdaki adımlarda şunları yapacaksınız:
- Örnekleri yapılandırmak için başlangıç komut dosyası oluşturma
- Kaynak kodunu klonlama ve Cloud Storage'a yükleme
- Arka uç mikro hizmetlerini barındırmak için bir Compute Engine örneği dağıtma
- Arka uç mikro hizmetler örneğini kullanmak için ön uç kodunu yeniden yapılandırma
- Ön uç mikro hizmetini barındırmak için Compute Engine örneği dağıtma
- İletişime olanak tanıyacak şekilde ağı yapılandırma
Başlangıç komut dosyası oluşturun
Başlangıç komut dosyası, örneğe her başlatıldığında ne yapılacağına ilişkin talimatları vermek için kullanılır. Bu yolla örnekler otomatik olarak yapılandırılır.
Kod düzenleyiciyi açmak için Cloud Shell şeridindeki kalem simgesini tıklayın.
monolith-to-microservices klasörüne gidin. File (Dosya) seçeneğini tıklayın > Yeni Dosya'yı tıklayın ve startup-script.sh adlı bir dosya oluşturun.
Aşağıdaki kodu yeni dosyaya yapıştırın. Yapıştırdıktan sonra bazılarını düzenleyeceksiniz:
#!/bin/bash
# Install logging monitor. The monitor will automatically pick up logs sent to
# syslog.
curl -s "https://storage.googleapis.com/signals-agents/logging/google-fluentd-install.sh" | bash
service google-fluentd restart &
# Install dependencies from apt
apt-get update
apt-get install -yq ca-certificates git build-essential supervisor psmisc
# Install nodejs
mkdir /opt/nodejs
curl https://nodejs.org/dist/v8.12.0/node-v8.12.0-linux-x64.tar.gz | tar xvzf - -C /opt/nodejs --strip-components=1
ln -s /opt/nodejs/bin/node /usr/bin/node
ln -s /opt/nodejs/bin/npm /usr/bin/npm
# Get the application source code from the Google Cloud Storage bucket.
mkdir /fancy-store
gsutil -m cp -r gs://fancy-store-[DEVSHELL_PROJECT_ID]/monolith-to-microservices/microservices/* /fancy-store/
# Install app dependencies.
cd /fancy-store/
npm install
# Create a nodeapp user. The application will run as this user.
useradd -m -d /home/nodeapp nodeapp
chown -R nodeapp:nodeapp /opt/app
# Configure supervisor to run the node app.
cat >/etc/supervisor/conf.d/node-app.conf << EOF
[program:nodeapp]
directory=/fancy-store
command=npm start
autostart=true
autorestart=true
user=nodeapp
environment=HOME="/home/nodeapp",USER="nodeapp",NODE_ENV="production"
stdout_logfile=syslog
stderr_logfile=syslog
EOF
supervisorctl reread
supervisorctl update
Şimdi, kod düzenleyicide [DEVSHELL_PROJECT_ID] metnini bulup aşağıdaki komutun çıkışıyla değiştirin:
echo $DEVSHELL_PROJECT_ID
Örnek çıkış:
my-gce-codelab-253520
startup-script.sh dosyasındaki kod satırı şimdi aşağıdakine benzer olmalıdır:
gs://fancy-store-my-gce-codelab-253520/monolith-to-microservices/microservices/* /fancy-store/
Başlangıç komut dosyası aşağıdaki görevleri yerine getirir:
- Syslog'dan günlükleri otomatik olarak toplayan Günlük Kaydı aracısının kurulumu
- Uygulamayı arka plan programı olarak çalıştıran Node.js ve Supervisor'ın yüklenmesi
- Cloud Storage paketinden uygulamanın kaynak kodunun klonlanması ve bağımlılıkların yüklenmesi
- Uygulamayı çalıştıran Supervisor'ın yapılandırması, beklenmedik bir şekilde çıkış yapılırsa veya bir yönetici ya da proses tarafından durdurulursa uygulamanın yeniden başlatılmasını ve uygulamanın stdout ile stderr değerlerini Günlük Kaydı aracısının toplaması için syslog'a göndermesini sağlar.
Şimdi, oluşturulan startup-script.sh dosyasını daha önce oluşturduğunuz Cloud Storage paketine kopyalayın:
gsutil cp ~/monolith-to-microservices/startup-script.sh gs://fancy-store-$DEVSHELL_PROJECT_ID
Artık dosyaya https://storage.googleapis.com/[BUCKET_NAME]/startup-script.sh adresinden erişebilirsiniz. [BUCKET_NAME], Cloud Storage paketinin adını temsil eder. Bu paket, varsayılan olarak yalnızca yetkili kullanıcılar ve hizmet hesapları tarafından görüntülenebilir. Dolayısıyla web tarayıcısı üzerinden erişilemez. Compute Engine örnekleri kendi hizmet hesapları aracılığıyla bu pakete otomatik olarak erişebilir.
Kodu Cloud Storage paketine kopyalama
Örnekler başlatıldığında kod Cloud Storage paketinden alınır. Böylece bazı yapılandırma değişkenlerini ".env" içinde depolayabilirsiniz. ile başlamalıdır.
Klonlanan kodu Cloud Storage paketine kopyalayın:
cd ~ rm -rf monolith-to-microservices/*/node_modules gsutil -m cp -r monolith-to-microservices gs://fancy-store-$DEVSHELL_PROJECT_ID/
Arka uç örneğini dağıtma
Dağıtacağınız ilk örnek, siparişleri ve ürünlerin mikro hizmetlerini barındıracak olan arka uç örneği olacaktır.
Önceden oluşturduğunuz başlangıç komut dosyasını kullanacak şekilde yapılandırılan ve arka uç örneği olarak etiketlenmiş bir f1-micro örneği oluşturmak için Cloud Shell'de aşağıdaki komutu yürütün. Böylece, bu örneğe daha sonra belirli güvenlik duvarı kurallarını uygulayabilirsiniz:
gcloud compute instances create backend \ --machine-type=f1-micro \ --image=debian-9-stretch-v20190905 \ --image-project=debian-cloud \ --tags=backend \ --metadata=startup-script-url=https://storage.googleapis.com/fancy-store-$DEVSHELL_PROJECT_ID/startup-script.sh
Arka uca bağlantıyı yapılandırma
Uygulamanın ön ucunu dağıtmadan önce yapılandırmayı dağıttığınız arka uca işaret edecek şekilde güncellemeniz gerekir.
Arka ucun harici IP adresini alın. Bu adres, arka uç örneği için EXTERNAL_IP sekmesi altındaki aşağıdaki komuttan görülebilir:
gcloud compute instances list
Örnek çıkış:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS backend us-central1-a f1-micro 10.128.0.2 34.68.223.88 RUNNING
Cloud Shell'in kod düzenleyicisinde monolith-to-microservices klasörüne gidin > react-app. Kod Düzenleyici menüsünden Görünüm > Gizli Dosyalar'ı açın/kapatın.env dosyasını görmek için.
.env dosyasını arka ucun harici IP adresine işaret edecek şekilde düzenleyin. [ARKA_UÇ_ADRESİ], gcloud aracındaki önceki komutta belirlenen arka uç örneğinin harici IP adresini temsil eder.
REACT_APP_ORDERS_URL=http://[BACKEND_ADDRESS]:8081/api/orders
REACT_APP_PRODUCTS_URL=http://[BACKEND_ADDRESS]:8082/api/products
Dosyayı kaydedin.
Aşağıdaki komutu kullanarak tepki uygulamasını yeniden derleyin. Bu işlemle ön uç kodu güncellenir:
cd ~/monolith-to-microservices/react-app npm install && npm run-script build
Uygulama kodunu Cloud Storage paketine kopyalayın:
cd ~ rm -rf monolith-to-microservices/*/node_modules gsutil -m cp -r monolith-to-microservices gs://fancy-store-$DEVSHELL_PROJECT_ID/
Ön uç örneğini dağıtma
Kod yapılandırıldığına göre artık ön uç örneğini dağıtabilirsiniz. Ön uç örneğini öncekine benzer bir komutla dağıtmak için aşağıdaki kodu yürütün. Ancak bu örnek "frontend" olarak etiketlenmiştir .
gcloud compute instances create frontend \ --machine-type=f1-micro \ --image=debian-9-stretch-v20190905 \ --image-project=debian-cloud \ --tags=frontend \ --metadata=startup-script-url=https://storage.googleapis.com/fancy-store-$DEVSHELL_PROJECT_ID/startup-script.sh
Ağı yapılandırın
Ön uç için bağlantı noktası 8080'e ve arka uç için de bağlantı noktası 8081 ile 8082'ye erişim sağlayacak güvenlik duvarı kuralları oluşturun. Güvenlik duvarı komutlarında, uygulama için örnek oluşturulurken atanan etiketler kullanılır.
gcloud compute firewall-rules create fw-fe \ --allow tcp:8080 \ --target-tags=frontend
gcloud compute firewall-rules create fw-be \ --allow tcp:8081-8082 \ --target-tags=backend
Web sitesi artık çalışır durumda olmalıdır. Ön ucun harici IP adresini belirleyin. Adres, ön uç örneğinin EXTERNAL_IP bilgisi aratılarak belirlenebilir:
gcloud compute instances list
Örnek çıkış:
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS backend us-central1-a f1-micro 10.128.0.2 104.198.235.171 RUNNING frontend us-central1-a f1-micro 10.128.0.3 34.69.141.9 RUNNING
Örneğin başlatılması ve yapılandırılması birkaç dakika sürebilir. Uygulamanın hazır olma durumunu izlemek için aşağıdaki komutu yürütün:
watch -n 5 curl http://[EXTERNAL_IP]:8080
Aşağıdakine benzer bir çıkış gördüğünüzde web sitesi hazır olacaktır. Saat komutunu iptal etmek için, komut isteminde Control+C
(Macintosh'ta Command+C
) tuşuna basın.
Web sitesine erişmek için yeni bir web tarayıcısı sekmesi kullanarak http://[ÖN_UÇ_ADRESİ]:8080 adresine gidin. Burada [ÖN_UÇ_ADRESİ], yukarıda belirlenen EXTERNAL_IP değeridir.
Ürünler ve Siparişler sayfalarına gitmeyi deneyin. Talimatlar da çalışacaktır.
5. Yönetilen örnek grupları oluşturma
Uygulamanızın ölçeklendirilmesine olanak sağlamak için yönetilen örnek grupları oluşturulur ve bunlar, örnek şablonu olarak frontend ve backend örneklerini kullanır.
Yönetilen örnek grupları, tek bir alt bölgede tek bir varlık olarak yönetebileceğiniz benzer örnekleri içerir. Yönetilen örnek grupları, örneklerinizi proaktif olarak kullanılabilir durumda, diğer bir deyişle RUNNING (ÇALIŞIYOR) durumda tutarak yüksek kullanılabilirlik sağlar. Otomatik iyileştirme, yük dengeleme, otomatik ölçeklendirme ve periyodik güncellemeler sağlamak amacıyla ön uç ve arka uç örneklerinizde yönetilen örnek grupları kullanacaksınız.
Kaynak örnekten örnek şablonu oluşturma
Yönetilen örnek grubu oluşturabilmek için önce grubun temelini sağlayan bir örnek şablonu oluşturmanız gerekir. Örnek şablonları yeni sanal makine örnekleri oluştururken kullanılacak makine türü, önyükleme diski görüntüsü veya kapsayıcı görüntüsü, ağ ve diğer örnek özelliklerini tanımlamanıza olanak sağlar. Örnek şablonlarını kullanarak yönetilen örnek grubunun içinde örnekler oluşturabileceğiniz gibi tek tek örnekler bile oluşturabilirsiniz.
Örnek şablonunu oluşturmak için hazırladığınız mevcut örnekleri kullanın.
İlk olarak her iki örneği de durdurmanız gerekir.
gcloud compute instances stop frontend
gcloud compute instances stop backend
Şimdi kaynak örneklerden örnek şablonu oluşturun.
gcloud compute instance-templates create fancy-fe \ --source-instance=frontend
gcloud compute instance-templates create fancy-be \ --source-instance=backend
Örnek şablonlarının oluşturulduğunu onaylayın:
gcloud compute instance-templates list
Örnek çıkış:
NAME MACHINE_TYPE PREEMPTIBLE CREATION_TIMESTAMP fancy-be f1-micro 2019-09-12T07:52:57.544-07:00 fancy-fe f1-micro 2019-09-12T07:52:48.238-07:00
Yönetilen örnek grubu oluşturma
Biri ön uç, diğeri de arka uç için olmak üzere iki yönetilen örnek grubu oluşturacaksınız. Bu yönetilen örnek grupları daha önce oluşturulmuş örnek şablonlarını kullanır ve her grupta her biri birer örnek olmak üzere iki örneğin başlatılacağı şekilde yapılandırılır. Örnekler "base-instance-name" temel alınarak otomatik olarak adlandırılır eklenmiş rastgele karakterlerle belirtilir.
gcloud compute instance-groups managed create fancy-fe-mig \ --base-instance-name fancy-fe \ --size 2 \ --template fancy-fe
gcloud compute instance-groups managed create fancy-be-mig \ --base-instance-name fancy-be \ --size 2 \ --template fancy-be
Sizin uygulamanızda ön uç mikro hizmeti 8080 bağlantı noktasında çalışırken arka uç mikro hizmetleri siparişler için bağlantı noktası 8081 ve ürünler için bağlantı noktası 8082 üzerinde çalışır. Bunların standart olmayan bağlantı noktaları olduğundan, bunları tanımlamak için adlandırılmış bağlantı noktaları belirtirsiniz. Adlandırılmış bağlantı noktaları, hizmet adını ve bu hizmetin üzerinde çalıştırıldığı bağlantı noktasını temsil eden anahtar:değer çifti meta verileridir. Adlandırılmış bağlantı noktaları bir örnek grubuna atanabilir ve bu da hizmetin gruptaki tüm örneklerde kullanılabilir olduğunu gösterir. Bu bilgiler, daha sonra yapılandıracağınız yük dengeleyici tarafından kullanılır.
gcloud compute instance-groups set-named-ports fancy-fe-mig \ --named-ports frontend:8080
gcloud compute instance-groups set-named-ports fancy-be-mig \ --named-ports orders:8081,products:8082
Otomatik iyileştirmeyi yapılandırma
Uygulamanın kullanılabilirliğini iyileştirmek ve yanıt verdiğini doğrulamak amacıyla yönetilen örnek grupları için otomatik iyileştirme politikası yapılandırabilirsiniz.
Otomatik iyileştirme politikası uygulamanın beklendiği gibi yanıt verdiğini doğrulamak için uygulama tabanlı durum denetimine güvenir. Uygulamanın yanıt verip vermediğini denetlemek, yalnızca örneğin ÇALIŞIYOR durumda olduğunu doğrulamaktan (varsayılan davranış) daha kesin sonuç verir.
Ön uç ve arka uç için art arda üç kez kötü durumda döndürülürse örneği onaran bir durum denetimi oluşturun:
gcloud compute health-checks create http fancy-fe-hc \ --port 8080 \ --check-interval 30s \ --healthy-threshold 1 \ --timeout 10s \ --unhealthy-threshold 3
gcloud compute health-checks create http fancy-be-hc \ --port 8081 \ --request-path=/api/orders \ --check-interval 30s \ --healthy-threshold 1 \ --timeout 10s \ --unhealthy-threshold 3
Durum denetimi kontrollerinin 8080 ve 8081 bağlantı noktalarında mikro hizmetlere bağlanmasını sağlamak için bir güvenlik duvarı kuralı oluşturun:
gcloud compute firewall-rules create allow-health-check \ --allow tcp:8080-8081 \ --source-ranges 130.211.0.0/22,35.191.0.0/16 \ --network default
Durum denetimlerini ilgili hizmetlerine uygulayın:
gcloud compute instance-groups managed update fancy-fe-mig \ --health-check fancy-fe-hc \ --initial-delay 300
gcloud compute instance-groups managed update fancy-be-mig \ --health-check fancy-be-hc \ --initial-delay 300
Otomatik iyileştirmenin gruptaki örnekleri izlemesine biraz zaman tanımak için codelab'e devam edin. Daha sonra, otomatik iyileştirmeyi test etmek için bir hatayı simüle edeceksiniz.
6. Yük dengeleyici oluştur
Yönetilen örnek gruplarımızı tamamlamak amacıyla ön uç ve arka uç mikro hizmetlerine trafik sağlamak için HTTP(S) Yük Dengeleme'yi, yol oluşturma kurallarına göre uygun arka uç hizmetlerine trafik göndermek için eşlemeleri kullanacaksınız. Bu sayede tüm hizmetler için yük dengeli tek bir IP adresi elde edilir.
Google Cloud'da kullanılabilen yük dengeleme seçenekleri hakkında daha fazla bilgi edinmek için Yük Dengelemeye Genel Bakış sayfasını inceleyin.
HTTP(S) Yük Dengeleme Oluşturma
Google Cloud birçok farklı türde yük dengeleme sunar ancak trafiğiniz için HTTP(S) Yük Dengelemeyi kullanırsınız. HTTP(S) Yük Dengeleme şu şekilde yapılandırılır:
- Bir iletim kuralı gelen istekleri hedef HTTP proxy'ye yönlendirir.
- Hedef HTTP proxy isteğe uygun arka uç hizmetini belirlemek için her isteği bir URL eşlemesine göre denetler.
- Arka uç hizmeti; ekli arka uçlarının hizmet kapasitesi, alt bölgesi ve örnek durumuna göre her isteği uygun arka uca yönlendirir. Her arka uç örneğinin durumu HTTP durum denetimi kullanılarak doğrulanır. Arka uç hizmeti HTTPS veya HTTP/2 durum denetimi kullanacak şekilde yapılandırıldıysa istek, arka uç örneğine giderken şifrelenir.
- Yük dengeleyici ile örnek arasındaki oturumlar HTTP, HTTPS veya HTTP/2 protokolünü kullanabilir. HTTPS veya HTTP/2 kullanırsanız arka uç hizmetlerindeki her örneğin bir SSL sertifikası olmalıdır.
Her hizmette trafik sunabilecek örnekleri belirlemek için kullanılacak durum denetimlerini oluşturun.
gcloud compute http-health-checks create fancy-fe-frontend-hc \ --request-path / \ --port 8080
gcloud compute http-health-checks create fancy-be-orders-hc \ --request-path /api/orders \ --port 8081
gcloud compute http-health-checks create fancy-be-products-hc \ --request-path /api/products \ --port 8082
Yük dengeli trafiğin hedefi olan arka uç hizmetlerini oluşturun. Arka uç hizmetleri sizin oluşturduğunuz durum denetimlerini ve adlandırılmış bağlantı noktalarını kullanır.
gcloud compute backend-services create fancy-fe-frontend \ --http-health-checks fancy-fe-frontend-hc \ --port-name frontend \ --global
gcloud compute backend-services create fancy-be-orders \ --http-health-checks fancy-be-orders-hc \ --port-name orders \ --global
gcloud compute backend-services create fancy-be-products \ --http-health-checks fancy-be-products-hc \ --port-name products \ --global
Arka uç hizmetlerini ekleyin.
gcloud compute backend-services add-backend fancy-fe-frontend \ --instance-group fancy-fe-mig \ --instance-group-zone us-central1-f \ --global
gcloud compute backend-services add-backend fancy-be-orders \ --instance-group fancy-be-mig \ --instance-group-zone us-central1-f \ --global
gcloud compute backend-services add-backend fancy-be-products \ --instance-group fancy-be-mig \ --instance-group-zone us-central1-f \ --global
URL eşlemesi oluşturun. URL eşlemesi hangi URL'lerin hangi arka uç hizmetlerine yönlendirildiğini tanımlar.
gcloud compute url-maps create fancy-map \ --default-service fancy-fe-frontend
/api/orders ve /api/products yollarının ilgili hizmetlere yönlendirilmesini sağlamak için bir yol eşleştirici oluşturun.
gcloud compute url-maps add-path-matcher fancy-map \ --default-service fancy-fe-frontend \ --path-matcher-name orders \ --path-rules "/api/orders=fancy-be-orders,/api/products=fancy-be-products"
Oluşturulan URL eşlemesine bağlanan bir proxy oluşturun.
gcloud compute target-http-proxies create fancy-proxy \ --url-map fancy-map
Herkese açık IP adresini ve bağlantı noktasını proxy'ye bağlayan bir genel iletim kuralı oluşturun.
gcloud compute forwarding-rules create fancy-http-rule \ --global \ --target-http-proxy fancy-proxy \ --ports 80
Yapılandırmayı güncelleyin
Artık yeni bir statik IP adresiniz olduğuna göre ön uçtaki kodu, daha önce kullanılan ve backend örneğine işaret eden geçici adres yerine yeni adrese işaret edecek şekilde güncellemeniz gerekir.
Cloud Shell'de, yapılandırmanın bulunduğu .env dosyasını barındıran tepki-uygulama klasörüne geçin.
cd ~/monolith-to-microservices/react-app/
Yük dengeleyicinin IP adresini bulun:
gcloud compute forwarding-rules list --global
Örnek çıkış:
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET fancy-http-rule 34.102.237.51 TCP fancy-proxy
Tercih ettiğiniz metin düzenleyiciyle (ör. GNU nano) .env dosyasını yük dengeleyicinin herkese açık IP adresine işaret edecek şekilde düzenleyin. [LB_IP], arka uç örneğinin harici IP adresini temsil eder.
REACT_APP_ORDERS_URL=http://[LB_IP]/api/orders
REACT_APP_PRODUCTS_URL=http://[LB_IP]/api/products
Ön uç kodunu güncelleyecek olan tepki uygulamasını yeniden derleyin.
cd ~/monolith-to-microservices/react-app npm install && npm run-script build
Uygulama kodunu GCS paketine kopyalayın.
cd ~ rm -rf monolith-to-microservices/*/node_modules gsutil -m cp -r monolith-to-microservices gs://fancy-store-$DEVSHELL_PROJECT_ID/
Ön uç örneklerini güncelleme
Şimdi, yönetilen örnek grubundaki ön uç örneklerinin yeni kodu almasını istiyorsunuz. Örnekleriniz, başlatma sırasında kodu alır. Böylece periyodik bir yeniden başlatma komutu düzenleyebilirsiniz.
gcloud compute instance-groups managed rolling-action restart fancy-fe-mig \ --max-unavailable 100%
Web sitesini test etme
Örneklerin işlenmesine zaman tanımak için rolling-action restart komutunu yayınladıktan sonra yaklaşık 30 saniye bekleyin. Ardından, örnekler listede görünene kadar yönetilen örnek grubunun durumunu kontrol edin.
watch -n 5 gcloud compute instance-groups list-instances fancy-fe-mig
Öğeler listede göründükten sonra, Control+C
(Macintosh'ta Command+C
) tuşuna basarak Watch komutundan çıkın.
Hizmetin iyi durumda olduğunu doğrulayın.
watch -n 5 gcloud compute backend-services get-health fancy-fe-frontend --global
Örnek çıkış:
--- backend: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instanceGroups/fancy-fe-mig status: healthStatus: - healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instances/fancy-fe-x151 ipAddress: 10.128.0.7 port: 8080 - healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instances/fancy-fe-cgrt ipAddress: 10.128.0.11 port: 8080 kind: compute#backendServiceGroupHealth
Öğeler listede göründüğünde, Control+C
(Macintosh'ta Command+C
) tuşuna basarak watch
komutundan çıkın.
Ardından uygulamaya http://[LB_IP] üzerinden erişilebilir. Burada [LB_IP], yük dengeleyici için belirlenen IP_ADDRESS değeridir ve aşağıdaki komutla bulunabilir:
gcloud compute forwarding-rules list --global
7. Compute Engine'i ölçeklendirme
Şimdiye kadar her birinde iki örnek bulunan iki yönetilen örnek grubu oluşturdunuz. Tamamen işlevsel ama yükten bağımsız olarak statik bir yapılandırmadır. Şimdi, her yönetilen örnek grubunu otomatik olarak ölçeklendirmek üzere kullanımı temel alan bir otomatik ölçeklendirme politikası oluşturacaksınız.
Kullanıma göre otomatik olarak yeniden boyutlandırma
Otomatik ölçeklendirme politikası oluşturmak için Cloud Shell'de aşağıdaki komutları yürütün. Yönetilen örnek gruplarında, yük dengeleyicinin kullanım oranı% 60'ı aştığında otomatik olarak örnek ekleyen ve yük dengeleyici% 60 kullanım oranının altına düştüğünde örnek kaldıran bir otomatik ölçekleyici oluştururlar.
gcloud compute instance-groups managed set-autoscaling \ fancy-fe-mig \ --max-num-replicas 5 \ --target-load-balancing-utilization 0.60
gcloud compute instance-groups managed set-autoscaling \ fancy-be-mig \ --max-num-replicas 5 \ --target-load-balancing-utilization 0.60
İçerik yayınlama ağını etkinleştirme
Ölçeklendirmeye yardımcı olabilecek bir diğer özellik, ön uç hizmeti için önbelleğe alma sağlamak üzere bir içerik yayınlama ağ hizmeti olan Cloud CDN'yi etkinleştirmektir. Bunun için ön uç hizmetinizde aşağıdaki komutu çalıştırabilirsiniz:
gcloud compute backend-services update fancy-fe-frontend \ --enable-cdn --global
Artık bir kullanıcı yük dengeleyiciden içerik istediğinde istek bir Google ön ucuna gelir ve bu ön uç, kullanıcı isteğinin yanıtı için ilk olarak Cloud CDN önbelleğine bakar. Ön uç önbelleğe alınmış bir yanıt bulursa önbellekteki yanıtı kullanıcıya gönderir. Buna önbellek isabeti denir.
Aksi takdirde, ön uç istek için önbelleğe alınmış bir yanıt bulamazsa doğrudan arka uca istekte bulunur. Bu isteğin yanıtı önbelleğe alınabiliyorsa ön uç, yanıtı Cloud CDN önbelleğinde depolar ve bu şekilde sonraki isteklerde önbellek kullanılabilir.
8. Web sitesini güncelle
Örnek şablonunu güncelleme
Mevcut örnek şablonları düzenlenemez. Bununla birlikte, örneklerinizin durum bilgisiz olduğu ve tüm yapılandırmanın başlangıç komut dosyası aracılığıyla yapıldığı göz önünde bulundurulduğunda, şablon ayarları temel görüntüsünün kendisini değiştirmek istediğinizde örnek şablonunu değiştirmeniz yeterlidir. Şimdi, daha büyük bir makine türü kullanıp bunu yaymak için basit bir değişiklik yapacaksınız.
Örnek şablonu için temel işlevi gören ön uç örneğini güncelleyin. Güncelleme sırasında örnek şablonu görüntüsünün güncellenmiş sürümüne bir dosya yerleştirecek, ardından örnek şablonunu güncelleyecek, yeni şablonu kullanıma sunacak ve dosyanın yönetilen örnek grubu örneklerinde mevcut olduğunu onaylayacaksınız.
f1-micro standart makine türünden 4 vCPU ve 3840 MiB RAM'e sahip bir özel makine türüne geçerek örnek şablonunuzun makine türünü değiştireceksiniz.
Cloud Shell'de aşağıdaki komutu çalıştırarak frontend örneğinin makine türünü değiştirin:
gcloud compute instances set-machine-type frontend --machine-type custom-4-3840
Yeni örnek şablonunu oluşturun:
gcloud compute instance-templates create fancy-fe-new \ --source-instance=frontend \ --source-instance-zone=us-central1-a
Güncellenen örnek şablonunu yönetilen örnek grubunun kullanımına sunun:
gcloud compute instance-groups managed rolling-action start-update fancy-fe-mig \ --version template=fancy-fe-new
Güncellemenin durumunu izleyin:
watch -n 2 gcloud compute instance-groups managed list-instances fancy-fe-mig
RUNNING durumunda birden fazla örneğiniz olduğunda, ACTION None olarak ayarlandığında ve INSTANCE_TEMPLATE yeni şablon adı (fancy-fe-new) olarak ayarlandığında sonraki komutta kullanılmak üzere listelenen makinelerden birinin adını kopyalayın.
Control+S
(Macintosh'ta Command+S
) tuşlarına basarak izleme işleminden çıkın.
Sanal makinenin yeni makine türünü (custom-4-3840) kullanıp kullanmadığını görmek için aşağıdakini çalıştırın; burada [SANAL MAKİNE_ADI], yeni oluşturulan örnektir:
gcloud compute instances describe [VM_NAME] | grep machineType
Beklenen örnek çıkış:
machineType: https://www.googleapis.com/compute/v1/projects/project-name/zones/us-central1-f/machineTypes/custom-4-3840
Web sitesinde değişiklik yapma
Pazarlama ekibiniz sizden sitenizin ana sayfasını değiştirmenizi istedi. Bu sayfanın şirketinizin kimliği ve aslında nelerin satışını yaptığı konusunda daha bilgilendirici olması gerektiğini düşünüyorlar. Bu bölümde pazarlama ekibini mutlu etmek için ana sayfaya bazı metinler ekleyeceksiniz. Geliştiricilerinizden biri, istenen değişiklikleri index.js.new dosya adıyla zaten oluşturmuş. Dosyayı index.js dosyasına kopyalarsanız değişiklikleriniz sayfaya yansıtılacaktır. Uygun değişiklikleri yapmak için aşağıdaki talimatları uygulayın.
Aşağıdaki komutları çalıştırın, güncellenen dosyayı doğru dosya adına kopyalayın ve ardından değişiklikleri doğrulamak için dosyanın içeriğini yazdırın:
cd ~/monolith-to-microservices/react-app/src/pages/Home mv index.js.new index.js cat ~/monolith-to-microservices/react-app/src/pages/Home/index.js
Bu işlem sonucunda elde edilen kod aşağıdaki gibi görünmelidir:
/*
Copyright 2019 Google LLC
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
import React from "react";
import { makeStyles } from "@material-ui/core/styles";
import Paper from "@material-ui/core/Paper";
import Typography from "@material-ui/core/Typography";
const useStyles = makeStyles(theme => ({
root: {
flexGrow: 1
},
paper: {
width: "800px",
margin: "0 auto",
padding: theme.spacing(3, 2)
}
}));
export default function Home() {
const classes = useStyles();
return (
<div className={classes.root}>
<Paper className={classes.paper}>
<Typography variant="h5">
Fancy Fashion & Style Online
</Typography>
<br />
<Typography variant="body1">
Tired of mainstream fashion ideas, popular trends and societal norms?
This line of lifestyle products will help you catch up with the Fancy trend and express your personal style.
Start shopping Fancy items now!
</Typography>
</Paper>
</div>
);
}
React bileşenlerini güncellediniz ancak statik dosyaları oluşturmak için React uygulamasını derlemeniz gerekiyor. React uygulamasını derlemek için aşağıdaki komutu çalıştırın ve monolitin herkese açık dizinine kopyalayın:
cd ~/monolith-to-microservices/react-app npm install && npm run-script build
Ardından kodu tekrar Cloud Storage paketinize aktarın.
cd ~ rm -rf monolith-to-microservices/*/node_modules gsutil -m cp -r monolith-to-microservices gs://fancy-store-$DEVSHELL_PROJECT_ID/
Periyodik güncellemeleri kullanarak değişiklikleri aktarma
Artık güncellemeyi almak için tüm örnekleri yeniden başlatmaya zorlayabilirsiniz.
gcloud compute instance-groups managed rolling-action restart fancy-fe-mig \ --max-unavailable=100%
Örneklerin işlenmesine zaman tanımak için periyodik işlem yeniden başlatma komutu gönderildikten sonra yaklaşık 30 saniye bekleyin ve ardından örnekler listede görünene kadar yönetilen örnek grubunun durumunu kontrol edin.
watch -n 5 gcloud compute instance-groups list-instances fancy-fe-mig
Öğeler listede göründüğünde, Control+S
(Macintosh'ta Command+S
) tuşuna basarak Watch komutundan çıkın.
Hizmetin sağlıklı olarak listelendiğini onaylamak için aşağıdaki komutu çalıştırın:
watch -n 5 gcloud compute backend-services get-health fancy-fe-frontend --global
Örnek çıkış:
--- backend: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instanceGroups/fancy-fe-mig status: healthStatus: - healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instances/fancy-fe-x151 ipAddress: 10.128.0.7 port: 8080 - healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/my-gce-codelab/zones/us-central1-a/instances/fancy-fe-cgrt ipAddress: 10.128.0.11 port: 8080 kind: compute#backendServiceGroupHealth
Öğeler listede göründükten sonra, Control+S
(Macintosh'ta Command+S
) tuşuna basarak Watch komutundan çıkın.
İçerik yayınlama ağındaki önbelleğe alınmış içeriği geçersiz kılmak ve yeni içeriğin gösterildiğinden emin olmak için aşağıdakileri çalıştırın:
gcloud compute url-maps invalidate-cdn-cache fancy-map \ --path "/*"
Web sitesine http://[LB_IP] üzerinden göz atabilirsiniz. Burada [LB_IP], yük dengeleyici için belirlenen IP_ADDRESS değeridir ve aşağıdaki komutla bulunabilir:
gcloud compute forwarding-rules list --global
Yeni web sitesi değişiklikleri artık görülebiliyor olmalıdır.
Hata simülasyonu
Durum denetiminin çalıştığını onaylamak için bir örneğe giriş yapın ve hizmetleri durdurun. Örnek adını bulmak için aşağıdakini yürütün:
gcloud compute instance-groups list-instances fancy-fe-mig
Buradan, güvenli kabuk aşağıdaki örneklerden birinde oluşturulur; burada ÖRNEK_ADI, listedeki örneklerden biridir:
gcloud compute ssh [INSTANCE_NAME]
Örnekte uygulamayı durdurmak için supervisorctl'i kullanın.
sudo supervisorctl stop nodeapp; sudo killall node
Örnekten çıkın.
exit
Onarım işlemlerini izleyin.
watch -n 5 gcloud compute operations list \ --filter='operationType~compute.instances.repair.*'
Aşağıdaki örnek çıkışı bulun:
NAME TYPE TARGET HTTP_STATUS STATUS TIMESTAMP repair-1568314034627-5925f90ee238d-fe645bf0-7becce15 compute.instances.repair.recreateInstance us-central1-a/instances/fancy-fe-1vqq 200 DONE 2019-09-12T11:47:14.627-07:00
Onarım işlemi fark edildikten sonra, saat komutundan çıkmak için Control+C
(Macintosh'ta Command+S
). Bu noktada, yönetilen örnek grubu örneği onarmak için yeniden oluşturur.
9. Temizleme
Hazır olduğunuzda, gerçekleştirilen tüm faaliyetleri temizlemenin en kolay yolu projeyi silmektir. Proje silindiğinde, beklenmedik yinelenen ücretlerin oluşmaması için codelab'de oluşturulan yük dengeleyici, örnekler, şablonlar ve diğer öğeler silinir. Cloud Shell'de aşağıdaki kodu yürütün. Burada PROJECT_ID yalnızca proje adını değil, tam proje kimliğini de temsil eder.
gcloud projects delete [PROJECT_ID]
"Y" yazarak silme işlemini onaylayın sorulduğunda.
10. Tebrikler!
Web sitenizi Compute Engine üzerinde dağıttınız, ölçeklendirdiniz ve güncellediniz. Artık Compute Engine, yönetilen örnek grupları, yük dengeleme ve durum denetimleri konularında deneyimli bir kullanıcısınız.