1. مقدمه
راههای زیادی برای استقرار وبسایتها در Google Cloud وجود دارد که هر راهحلی ویژگیها، قابلیتها و سطوح کنترل متفاوتی را ارائه میدهد. Compute Engine سطح عمیقی از کنترل را بر زیرساخت مورد استفاده برای اجرای یک وب سایت ارائه می دهد، اما همچنین در مقایسه با راه حل هایی مانند Google Kubernetes Engine، App Engine یا موارد دیگر به مدیریت عملیاتی کمی بیشتری نیاز دارد. با Compute Engine، کنترل دقیقی بر جنبه های زیرساخت، از جمله ماشین های مجازی، متعادل کننده بار و غیره دارید. امروز، یک برنامه نمونه - وبسایت تجارت الکترونیک فروشگاه فانتزی - را برای نشان دادن اینکه چگونه یک وبسایت را میتوان به راحتی با Compute Engine گسترش داد و مقیاسبندی کرد، اجرا میکنید.
چیزی که یاد خواهید گرفت
- نحوه ایجاد نمونه های Compute Engine
- نحوه ایجاد الگوهای نمونه از نمونه های منبع
- نحوه ایجاد گروه های نمونه مدیریت شده
- نحوه تنظیم چکهای سلامت و اتوهالینگ
- نحوه ایجاد تعادل بار HTTP(S).
- نحوه ایجاد چک های سلامت برای متعادل کننده های بار
- نحوه استفاده از شبکه تحویل محتوا برای ذخیره سازی
در انتهای نرم افزار کد، نمونه هایی در داخل گروه های نمونه مدیریت شده برای ارائه به روز رسانی خودکار، تعادل بار، مقیاس خودکار و به روز رسانی های چرخشی برای وب سایت خود خواهید داشت.
پیش نیازها
- برای مرور مقدماتی مفاهیمی که در این آزمایشگاه استفاده خواهیم کرد، لطفاً مطالب زیر را بررسی کنید:
- به پلتفرم Google Cloud خوش آمدید - ملزومات GCP
- شروع کار با Google Cloud Compute Engine
- شروع کار با Google Cloud Storage
- شروع به کار: Cloud Shell
2. تنظیم محیط
تنظیم محیط خود به خود
- به کنسول Cloud وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
شناسه پروژه را به خاطر بسپارید، یک نام منحصر به فرد در تمام پروژه های Google Cloud (نام بالا قبلاً گرفته شده است و برای شما کار نخواهد کرد، متأسفیم!). بعداً در این آزمایشگاه کد به عنوان PROJECT_ID
نامیده خواهد شد.
- در مرحله بعد، برای استفاده از منابع Google Cloud، باید صورتحساب را در Cloud Console فعال کنید .
اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. حتماً دستورالعملهای موجود در بخش «تمیز کردن» را دنبال کنید که به شما توصیه میکند چگونه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
Compute Engine API را فعال کنید
در مرحله بعد، باید Compute Engine API را فعال کنید. فعال کردن یک API مستلزم پذیرش شرایط خدمات و مسئولیت صورتحساب برای API است.
در Cloud Shell موارد زیر را برای فعال کردن Compute Engine API اجرا کنید:
gcloud services enable compute.googleapis.com
پوسته ابری
در حالی که Google Cloud را می توان از راه دور از لپ تاپ شما کار کرد، در این کد لبه از Cloud Shell ، یک محیط خط فرمان در حال اجرا در Cloud استفاده خواهید کرد.
این ماشین مجازی مبتنی بر دبیان با تمام ابزارهای توسعه که شما نیاز دارید بارگذاری شده است. این دایرکتوری اصلی 5 گیگابایتی دائمی را ارائه می دهد و در Google Cloud اجرا می شود و عملکرد شبکه و احراز هویت را بسیار افزایش می دهد. این بدان معنی است که تمام چیزی که برای این کد لبه نیاز دارید یک مرورگر است (بله، روی کروم بوک کار می کند).
- برای فعال کردن Cloud Shell از Cloud Console، کافی است روی Activate Cloud Shell کلیک کنید. (تهیه و اتصال به محیط فقط چند لحظه طول می کشد).
پس از اتصال به Cloud Shell، باید ببینید که قبلاً احراز هویت شده اید و پروژه قبلاً روی PROJECT_ID
شما تنظیم شده است.
gcloud auth list
خروجی فرمان
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
خروجی فرمان
[core] project = <PROJECT_ID>
اگر به دلایلی پروژه تنظیم نشد، به سادگی دستور زیر را صادر کنید:
gcloud config set project <PROJECT_ID>
به دنبال PROJECT_ID
خود هستید؟ بررسی کنید از چه شناسه ای در مراحل راه اندازی استفاده کرده اید یا آن را در داشبورد Cloud Console جستجو کنید:
Cloud Shell همچنین برخی از متغیرهای محیطی را به صورت پیشفرض تنظیم میکند که ممکن است هنگام اجرای دستورات آینده مفید باشند.
echo $GOOGLE_CLOUD_PROJECT
خروجی فرمان
<PROJECT_ID>
- در نهایت، منطقه پیش فرض و پیکربندی پروژه را تنظیم کنید.
gcloud config set compute/zone us-central1-f
شما می توانید مناطق مختلفی را انتخاب کنید. برای اطلاعات بیشتر، به مناطق و مناطق مراجعه کنید.
ایجاد سطل فضای ذخیره سازی ابری
ما قصد داریم از یک سطل فضای ذخیره سازی ابری برای قرار دادن کدهای ساخته شده خود و همچنین اسکریپت های راه اندازی خود استفاده کنیم. در Cloud Shell، دستور زیر را برای ایجاد یک سطل Cloud Storage جدید اجرا کنید:
gsutil mb gs://fancy-store-$DEVSHELL_PROJECT_ID
3. کلون کردن مخزن منبع
شما از وبسایت تجارت الکترونیک موجود Fancy Store بر اساس مخزن monolith-to-microservices به عنوان پایه وب سایت خود استفاده خواهید کرد. شما کد منبع را از مخزن خود کلون می کنید تا بتوانید روی جنبه های استقرار در Compute Engine تمرکز کنید. بعداً، برای نشان دادن سادگی بهروزرسانیها در Compute Engine، یک بهروزرسانی کوچک برای کد انجام میدهید.
میتوانید بهطور خودکار مخزن کد را در پروژه کلون کنید، همچنین Cloud Shell و ویرایشگر کد داخلی را از طریق پیوند زیر باز کنید: Open in Cloud Shell .
از طرف دیگر، می توانید به صورت دستی مخزن را با دستورات زیر در داخل Cloud Shell کلون کنید:
cd ~ git clone https://github.com/googlecodelabs/monolith-to-microservices.git cd ~/monolith-to-microservices
در خط فرمان Cloud Shell، ساخت اولیه کد را اجرا کنید تا برنامه به صورت محلی اجرا شود. ممکن است چند دقیقه طول بکشد تا اسکریپت اجرا شود.
./setup.sh
بررسی های لازم را انجام دهید و برنامه خود را آزمایش کنید. دستور زیر را برای راه اندازی وب سرور خود اجرا کنید:
cd microservices npm start
خروجی:
Products microservice listening on port 8082! Frontend microservice listening on port 8080! Orders microservice listening on port 8081!
با کلیک کردن روی نماد پیشنمایش وب و انتخاب «پیشنمایش در پورت 8080»، برنامه خود را پیشنمایش کنید.
این باید یک پنجره جدید باز کند که در آن می توانید نمای ظاهری فروشگاه فانتزی را در عمل ببینید!
پس از مشاهده وب سایت می توانید این پنجره را ببندید. برای توقف فرآیند وب سرور، Control+C
( Command+C
در مکینتاش) را در پنجره ترمینال فشار دهید.
4. نمونه های Compute Engine را ایجاد کنید
اکنون که محیط توسعه دهنده کار خود را دارید، می توانید برخی از نمونه های Compute Engine را مستقر کنید! در مراحل زیر، شما:
- یک اسکریپت راه اندازی برای پیکربندی نمونه ها ایجاد کنید.
- کد منبع را شبیه سازی کنید و آن را در فضای ذخیره سازی ابری آپلود کنید.
- یک نمونه موتور محاسباتی را برای میزبانی میکروسرویس های باطن اجرا کنید.
- برای استفاده از نمونه microservices، کد frontend را مجدداً پیکربندی کنید.
- یک نمونه Compute Engine را برای میزبانی microservice frontend اجرا کنید.
- شبکه را طوری پیکربندی کنید که امکان برقراری ارتباط فراهم شود.
ایجاد اسکریپت راه اندازی
یک اسکریپت راهاندازی برای آموزش به نمونه استفاده میشود که هر بار که شروع میشود چه کاری انجام دهد. به این ترتیب نمونه ها به طور خودکار پیکربندی می شوند.
روی نماد مداد در نوار Cloud Shell کلیک کنید تا ویرایشگر کد باز شود.
به پوشه monolith-to-microservices بروید. روی File > New File کلیک کنید و فایلی به نام startup-script.sh ایجاد کنید.
در فایل جدید کد زیر را پیست کنید که پس از پیست کردن برخی از آن ها را ویرایش خواهید کرد:
#!/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
اکنون در ویرایشگر کد، متن [DEVSHELL_PROJECT_ID] را پیدا کرده و خروجی دستور زیر را جایگزین آن کنید:
echo $DEVSHELL_PROJECT_ID
خروجی نمونه:
my-gce-codelab-253520
خط کد در startup-script.sh اکنون باید شبیه به زیر باشد:
gs://fancy-store-my-gce-codelab-253520/monolith-to-microservices/microservices/* /fancy-store/
اسکریپت راه اندازی وظایف زیر را انجام می دهد:
- نصب عامل Logging که به طور خودکار گزارش ها را از syslog جمع آوری می کند
- نصب Node.js و Supervisor که برنامه را به صورت دیمون اجرا می کند
- شبیه سازی کد منبع برنامه از سطل فضای ذخیره سازی ابری و نصب وابستگی ها
- پیکربندی Supervisor که برنامه را اجرا میکند، اطمینان حاصل میکند که در صورت خروج غیرمنتظره یا متوقف شدن برنامه توسط مدیر یا فرآیند، برنامه مجدداً راهاندازی میشود و stdout و stderr برنامه را به syslog ارسال میکند تا عامل Logging جمعآوری کند.
اکنون فایل startup-script.sh ایجاد شده را در سطل Cloud Storage که قبلا ایجاد کرده اید کپی کنید:
gsutil cp ~/monolith-to-microservices/startup-script.sh gs://fancy-store-$DEVSHELL_PROJECT_ID
اکنون در https://storage.googleapis.com/[BUCKET_NAME]/startup-script.sh قابل دسترسی است. [BUCKET_NAME] نشان دهنده نام سطل فضای ذخیرهسازی ابری است. این تنها توسط کاربران مجاز و حسابهای سرویس بهطور پیشفرض قابل مشاهده خواهد بود، بنابراین از طریق مرورگر وب غیرقابل دسترسی خواهد بود. نمونه های Compute Engine به طور خودکار می توانند از طریق حساب های سرویس خود به آن دسترسی داشته باشند.
کد را در سطل فضای ذخیره سازی ابری کپی کنید
هنگامی که نمونهها راهاندازی میشوند، کد را از سطل ذخیرهسازی ابری میکشند تا بتوانید برخی از متغیرهای پیکربندی را در فایل '.env' کد ذخیره کنید.
کد کلون شده را در سطل Cloud Storage کپی کنید:
cd ~ rm -rf monolith-to-microservices/*/node_modules gsutil -m cp -r monolith-to-microservices gs://fancy-store-$DEVSHELL_PROJECT_ID/
استقرار نمونه پشتیبان
اولین نمونه ای که شما مستقر خواهید کرد، نمونه پشتیبان است که سفارشات و ریزسرویس های محصولات را در خود جای می دهد.
دستور زیر را در Cloud Shell اجرا کنید تا یک نمونه f1-micro بسازید که برای استفاده از اسکریپت راه اندازی قبلی ایجاد شده شما پیکربندی شده و به عنوان نمونه پشتیبان برچسب گذاری شده است تا بتوانید قوانین فایروال خاصی را بعداً روی آن اعمال کنید:
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
پیکربندی اتصال به باطن
قبل از استقرار بخش جلویی برنامه، باید پیکربندی را بهروزرسانی کنید تا به پشتیبانی که مستقر کردهاید اشاره کند.
آدرس IP خارجی بکاند را که میتوانید از دستور زیر در تب EXTERNAL_IP برای نمونه پشتیبان مشاهده کنید، بازیابی کنید:
gcloud compute instances list
خروجی نمونه:
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، به پوشه monolith-to-microservices > react-app بروید. از منوی ویرایشگر کد، View > Toggle Hidden Files را انتخاب کنید تا فایل .env را ببینید.
فایل .env را ویرایش کنید تا به آدرس IP خارجی باطن اشاره کند. [BACKEND_ADDRESS] در زیر نشاندهنده آدرس IP خارجی نمونه پشتیبان است که از دستور قبلی در ابزار gcloud تعیین شده است.
REACT_APP_ORDERS_URL=http://[BACKEND_ADDRESS]:8081/api/orders
REACT_APP_PRODUCTS_URL=http://[BACKEND_ADDRESS]:8082/api/products
فایل را ذخیره کنید.
از دستور زیر برای بازسازی react-app استفاده کنید که کد frontend را به روز می کند:
cd ~/monolith-to-microservices/react-app npm install && npm run-script build
کد برنامه را در سطل Cloud Storage کپی کنید:
cd ~ rm -rf monolith-to-microservices/*/node_modules gsutil -m cp -r monolith-to-microservices gs://fancy-store-$DEVSHELL_PROJECT_ID/
استقرار نمونه frontend
اکنون که کد پیکربندی شده است، می توانید نمونه frontend را مستقر کنید. برای استقرار نمونه frontend با دستوری مشابه قبل، موارد زیر را اجرا کنید، اما این نمونه برای اهداف فایروال به عنوان "frontend" برچسب گذاری شده است.
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
پیکربندی شبکه
قوانین فایروال را ایجاد کنید تا اجازه دسترسی به پورت 8080 را برای قسمت جلویی و پورت های 8081 و 8082 را برای باطن فراهم کنید. دستورات فایروال از تگ های اختصاص داده شده در هنگام ایجاد نمونه برای برنامه استفاده می کنند.
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
اکنون وب سایت باید کاربردی باشد. آدرس IP خارجی صفحه اصلی را تعیین کنید. آدرس را می توان با جستجوی EXTERNAL_IP نمونه frontend تعیین کرد:
gcloud compute instances list
خروجی نمونه:
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
ممکن است چند دقیقه طول بکشد تا نمونه شروع و پیکربندی شود. برای نظارت بر آمادگی برنامه موارد زیر را اجرا کنید:
watch -n 5 curl http://[EXTERNAL_IP]:8080
هنگامی که خروجی مشابه زیر را مشاهده کردید، وب سایت باید آماده باشد. برای لغو فرمان ساعت، Control+C
( Command+C
در مکینتاش) را در خط فرمان فشار دهید.
به http://[FRONTEND_ADDRESS]:8080 با یک برگه مرورگر وب جدید برای دسترسی به وب سایت، جایی که [FRONTEND_ADDRESS] EXTERNAL_IP تعیین شده در بالا است، مرور کنید.
سعی کنید به صفحات محصولات و سفارشات پیمایش کنید، که باید کار کند.
5. گروه های نمونه مدیریت شده ایجاد کنید
برای اینکه برنامه شما مقیاس شود، گروههای نمونه مدیریت شده ایجاد میشوند و از نمونههای frontend و backend به عنوان الگوهای نمونه استفاده میکنند.
یک گروه نمونه مدیریت شده حاوی نمونه های یکسانی است که می توانید آنها را به عنوان یک موجودیت واحد در یک منطقه مدیریت کنید. گروههای نمونه مدیریتشده با در دسترس نگهداشتن نمونههای شما، یعنی در حالت در حال اجرا، دسترسی بالایی به برنامههای شما را حفظ میکنند. شما از گروههای نمونه مدیریتشده برای نمونههای جلویی و باطنی خود برای ارائه بهروزرسانیهای خودکار، متعادلسازی بار، مقیاسبندی خودکار و بهروزرسانیهای چرخشی استفاده خواهید کرد.
الگوی نمونه را از نمونه منبع ایجاد کنید
قبل از اینکه بتوانید یک گروه نمونه مدیریت شده ایجاد کنید، باید یک الگوی نمونه ایجاد کنید که پایه و اساس گروه باشد. الگوهای نمونه به شما این امکان را میدهند که نوع ماشین، تصویر دیسک راهاندازی یا تصویر ظرف، شبکه و سایر ویژگیهای نمونه را برای استفاده در هنگام ایجاد نمونههای جدید ماشین مجازی (VM) تعریف کنید. می توانید از الگوهای نمونه برای ایجاد نمونه در یک گروه نمونه مدیریت شده یا حتی برای ایجاد نمونه های جداگانه استفاده کنید.
برای ایجاد الگوی نمونه، از نمونه های موجودی که ایجاد کرده اید استفاده کنید.
ابتدا باید هر دو مورد را متوقف کنید.
gcloud compute instances stop frontend
gcloud compute instances stop backend
اکنون، الگوی نمونه را از نمونه های منبع ایجاد کنید.
gcloud compute instance-templates create fancy-fe \ --source-instance=frontend
gcloud compute instance-templates create fancy-be \ --source-instance=backend
تأیید کنید که الگوهای نمونه ایجاد شده اند:
gcloud compute instance-templates list
خروجی نمونه:
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
ایجاد گروه نمونه مدیریت شده
شما دو گروه نمونه مدیریت شده ایجاد خواهید کرد، یکی برای قسمت جلویی و دیگری برای باطن. آن گروههای نمونه مدیریتشده از الگوهای نمونهای که قبلا ایجاد شدهاند استفاده میکنند و برای شروع برای هر کدام در هر گروه برای دو نمونه پیکربندی میشوند. نمونه ها به طور خودکار بر اساس "نام نمونه پایه" مشخص شده با نویسه های تصادفی اضافه می شوند.
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
برای برنامه شما، microservice frontend روی پورت 8080 اجرا می شود و microservices backend برای سفارشات روی پورت 8081 و برای محصولات درگاه 8082 اجرا می شود. با توجه به اینکه این پورت ها غیر استاندارد هستند، شما پورت های نامگذاری شده را برای شناسایی آنها مشخص می کنید. پورتهای نامگذاریشده متادادههای جفت کلید: ارزش هستند که نشاندهنده نام سرویس و پورتی هستند که روی آن اجرا میشود. پورت های نامگذاری شده را می توان به یک گروه نمونه اختصاص داد که نشان می دهد این سرویس در همه نمونه های گروه در دسترس است. این اطلاعات توسط بار متعادل کننده استفاده می شود که بعداً آن را پیکربندی خواهید کرد.
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
تنظیم خودکار درمان
برای بهبود در دسترس بودن خود برنامه و تأیید پاسخگویی آن، می توانید یک خط مشی درمان خودکار برای گروه های نمونه مدیریت شده پیکربندی کنید.
یک خطمشی درمان خودکار به بررسی سلامت مبتنی بر برنامه برای تأیید اینکه یک برنامه مطابق انتظار پاسخ میدهد، متکی است. بررسی اینکه یک برنامه پاسخ میدهد دقیقتر از تأیید اینکه یک نمونه در حالت RUNNING است، که رفتار پیشفرض است، دقیقتر است.
یک بررسی سلامتی ایجاد کنید که اگر نمونه سه بار متوالی به عنوان ناسالم برای قسمت جلویی و باطن بازگردد، آن را تعمیر کند:
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
یک قانون فایروال ایجاد کنید تا پروب های بررسی سلامت به میکروسرویس های پورت های 8080 و 8081 متصل شوند:
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
بررسی های بهداشتی را برای خدمات مربوطه خود اعمال کنید:
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
برای نظارت بر نمونههای موجود در گروه، با کد لبه ادامه دهید تا مقداری زمان برای بهبود خودکار در نظر گرفته شود. بعداً، یک شکست در آزمایش اتوهیلینگ را شبیهسازی خواهید کرد.
6. ایجاد تعادل بار
برای تکمیل گروههای نمونه مدیریتشده ما، از HTTP(S) Load Balancing برای ارائه ترافیک به میکروسرویسهای frontend و backend و استفاده از نقشهبرداری برای ارسال ترافیک به سرویسهای backend مناسب بر اساس قوانین مسیریابی استفاده میکنید. این یک آدرس IP واحد و متعادل برای همه سرویس ها را نشان می دهد.
برای اطلاعات بیشتر درباره گزینههای متعادلسازی بار موجود در Google Cloud، به نمای کلی Load Balancing مراجعه کنید.
ایجاد تعادل بار HTTP(S).
Google Cloud انواع مختلفی از تعادل بار را ارائه می دهد، اما شما از HTTP(S) Load Balancing برای ترافیک خود استفاده خواهید کرد. ساختار بار HTTP(S) به صورت زیر است:
- یک قانون حمل و نقل، درخواست های دریافتی را به یک پروکسی HTTP هدف هدایت می کند.
- پروکسی HTTP هدف، هر درخواست را در برابر نقشه URL بررسی می کند تا سرویس Backend مناسب برای درخواست را تعیین کند.
- سرویس Backend هر درخواست را بر اساس ظرفیت سرویس دهی، منطقه و سلامت نمونه پشتیبان های پیوست شده خود به یک باطن مناسب هدایت می کند. سلامت هر نمونه پشتیبان با استفاده از بررسی سلامت HTTP تأیید می شود. اگر سرویس پشتیبان برای استفاده از بررسی سلامت HTTPS یا HTTP/2 پیکربندی شده باشد، در این صورت درخواست در مسیر خود به سمت نمونه پشتیبان رمزگذاری میشود.
- جلسات بین بار متعادل کننده و نمونه می توانند از پروتکل HTTP، HTTPS یا HTTP/2 استفاده کنند. اگر از HTTPS یا HTTP/2 استفاده میکنید، هر نمونه در سرویسهای پشتیبان باید گواهی SSL داشته باشد.
بررسیهای بهداشتی را ایجاد کنید که برای تعیین اینکه کدام نمونهها قادر به ارائه ترافیک برای هر سرویس هستند استفاده میشوند.
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
خدمات باطنی را ایجاد کنید که هدف ترافیک متعادل بار هستند. خدمات باطن از بررسی های سلامت و پورت های نامگذاری شده ای که شما ایجاد کرده اید استفاده می کند.
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
خدمات باطن را اضافه کنید.
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 ایجاد کنید. نقشه URL مشخص می کند که کدام URL ها به کدام خدمات باطن هدایت می شوند.
gcloud compute url-maps create fancy-map \ --default-service fancy-fe-frontend
یک تطبیق مسیر ایجاد کنید تا به مسیرهای /api/orders و /api/products اجازه دهید تا به خدمات مربوطه خود هدایت شوند.
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"
پروکسی را ایجاد کنید که به نقشه URL ایجاد شده مرتبط است.
gcloud compute target-http-proxies create fancy-proxy \ --url-map fancy-map
یک قانون حمل و نقل جهانی ایجاد کنید که یک آدرس IP عمومی و پورت را به پروکسی متصل می کند.
gcloud compute forwarding-rules create fancy-http-rule \ --global \ --target-http-proxy fancy-proxy \ --ports 80
پیکربندی را به روز کنید
اکنون که یک آدرس IP ثابت جدید دارید، باید کد موجود در قسمت جلویی را بهروزرسانی کنید تا به آدرس جدید اشاره کند به جای آدرس زودگذری که قبلاً استفاده میشد و به نمونه پشتیبان اشاره میکرد.
در Cloud Shell، به پوشه react-app تغییر دهید که حاوی فایل .env است که پیکربندی را در خود جای داده است.
cd ~/monolith-to-microservices/react-app/
آدرس IP را برای متعادل کننده بار پیدا کنید:
gcloud compute forwarding-rules list --global
خروجی نمونه:
NAME REGION IP_ADDRESS IP_PROTOCOL TARGET fancy-http-rule 34.102.237.51 TCP fancy-proxy
فایل .env را با ویرایشگر متن دلخواه خود (مانند نانو گنو) ویرایش کنید تا به آدرس IP عمومی متعادل کننده بار اشاره کند. [LB_IP] نشان دهنده آدرس IP خارجی نمونه پشتیبان است.
REACT_APP_ORDERS_URL=http://[LB_IP]/api/orders
REACT_APP_PRODUCTS_URL=http://[LB_IP]/api/products
React-app را بازسازی کنید، که کد ظاهری را به روز می کند.
cd ~/monolith-to-microservices/react-app npm install && npm run-script build
کد برنامه را در سطل GCS کپی کنید.
cd ~ rm -rf monolith-to-microservices/*/node_modules gsutil -m cp -r monolith-to-microservices gs://fancy-store-$DEVSHELL_PROJECT_ID/
نمونه های ظاهری را به روز کنید
اکنون می خواهید نمونه های frontend در گروه نمونه مدیریت شده کد جدید را بکشند. نمونههای شما کد را هنگام راهاندازی میکشند، بنابراین میتوانید فرمان راهاندازی مجدد را صادر کنید.
gcloud compute instance-groups managed rolling-action restart fancy-fe-mig \ --max-unavailable 100%
وب سایت را تست کنید
پس از صدور فرمان راهاندازی مجدد، تقریباً 30 ثانیه صبر کنید تا به نمونهها زمان داده شود تا پردازش شوند. سپس، وضعیت گروه نمونه مدیریت شده را بررسی کنید تا نمونه ها در لیست ظاهر شوند.
watch -n 5 gcloud compute instance-groups list-instances fancy-fe-mig
پس از ظاهر شدن موارد در لیست، با فشار دادن Control+C
( Command+C
در مکینتاش) از فرمان watch خارج شوید.
تأیید کنید که سرویس به عنوان سالم فهرست شده است.
watch -n 5 gcloud compute backend-services get-health fancy-fe-frontend --global
خروجی نمونه:
--- 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
هنگامی که موارد در لیست ظاهر شدند، با فشار دادن Control+C
( Command+C
در مکینتاش) از فرمان watch
خارج شوید.
سپس برنامه از طریق http://[LB_IP] قابل دسترسی خواهد بود، جایی که [LB_IP] IP_ADDRESS مشخص شده برای متعادل کننده بار است که با دستور زیر می توانید آن را پیدا کنید:
gcloud compute forwarding-rules list --global
7. Scaling Compute Engine
تاکنون دو گروه نمونه مدیریت شده ایجاد کرده اید که هر کدام دارای دو نمونه است. پیکربندی کاملاً کاربردی است، اما یک پیکربندی ایستا بدون در نظر گرفتن بار. اکنون، یک خطمشی مقیاسبندی خودکار بر اساس استفاده ایجاد میکنید تا بهطور خودکار هر گروه نمونه مدیریتشده را مقیاسبندی کنید.
تغییر اندازه خودکار با استفاده
برای ایجاد خط مشی مقیاس خودکار، دستورات زیر را در Cloud Shell اجرا کنید. آنها یک مقیاسکننده خودکار در گروههای نمونه مدیریتشده ایجاد میکنند که بهطور خودکار مواردی را اضافه میکند که متعادلکننده بار بیشتر از ۶۰ درصد استفاده است و مواردی را حذف میکند که متعادلکننده بار کمتر از ۶۰ درصد استفاده است.
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
فعال کردن شبکه تحویل محتوا
یکی دیگر از ویژگیهایی که میتواند به مقیاسسازی کمک کند، فعال کردن Cloud CDN - یک سرویس شبکه تحویل محتوا - برای ارائه حافظه پنهان برای سرویس frontend است. برای انجام این کار، می توانید دستور زیر را در سرویس frontend خود اجرا کنید:
gcloud compute backend-services update fancy-fe-frontend \ --enable-cdn --global
اکنون، زمانی که کاربر محتوا را از متعادلکننده بار درخواست میکند، درخواست به یک فرانتاند Google میرسد، که ابتدا در حافظه پنهان Cloud CDN برای پاسخ به درخواست کاربر جستجو میکند. اگر frontend یک پاسخ کش پیدا کند، پاسخ ذخیره شده را برای کاربر ارسال می کند. به آن ضربه کش می گویند.
در غیر این صورت، اگر frontend نتواند یک پاسخ ذخیره شده برای درخواست پیدا کند، آنگاه درخواستی را مستقیماً به باطن ارسال می کند. اگر پاسخ به آن درخواست قابل ذخیرهسازی باشد، بخش frontend پاسخ را در حافظه پنهان Cloud CDN ذخیره میکند تا از کش برای درخواستهای بعدی استفاده شود.
8. وب سایت را به روز کنید
در حال به روز رسانی الگوی نمونه
الگوهای نمونه موجود قابل ویرایش نیستند. با این حال، با توجه به اینکه نمونههای شما فاقد حالت هستند و تمام پیکربندیها از طریق اسکریپت راهاندازی انجام میشود، اگر میخواهید خود تصویر هسته تنظیمات قالب را تغییر دهید، فقط باید الگوی نمونه را تغییر دهید. اکنون، یک تغییر ساده برای استفاده از یک نوع ماشین بزرگتر ایجاد میکنید و آن را خارج میکنید.
نمونه frontend را بهروزرسانی کنید، که به عنوان مبنایی برای الگوی نمونه عمل میکند. در طول بهروزرسانی، فایلی را روی نسخه بهروزرسانیشده تصویر الگوی نمونه قرار میدهید، سپس الگوی نمونه را بهروزرسانی میکنید، الگوی جدید را منتشر میکنید و تأیید میکنید که فایل در نمونههای گروه نمونه مدیریتشده وجود دارد.
شما نوع ماشین الگوی نمونه خود را با تغییر از نوع ماشین استاندارد f1-micro به نوع ماشین سفارشی با 4 vCPU و 3840 MiB RAM تغییر خواهید داد.
در Cloud Shell، دستور زیر را برای تغییر نوع ماشین نمونه frontend اجرا کنید:
gcloud compute instances set-machine-type frontend --machine-type custom-4-3840
الگوی نمونه جدید را ایجاد کنید:
gcloud compute instance-templates create fancy-fe-new \ --source-instance=frontend \ --source-instance-zone=us-central1-a
الگوی نمونه بهروزرسانی شده را در گروه نمونه مدیریت شده قرار دهید:
gcloud compute instance-groups managed rolling-action start-update fancy-fe-mig \ --version template=fancy-fe-new
نظارت بر وضعیت به روز رسانی:
watch -n 2 gcloud compute instance-groups managed list-instances fancy-fe-mig
هنگامی که بیش از 1 نمونه در وضعیت RUNNING دارید، ACTION روی هیچ ، و با تنظیم INSTANCE_TEMPLATE به عنوان نام الگوی جدید ( fancy-fe-new )، نام یکی از ماشین های فهرست شده را برای استفاده در دستور بعدی کپی کنید.
Control+S
( Command+S
در مکینتاش) برای خروج از فرآیند ساعت.
موارد زیر را اجرا کنید تا ببینید آیا ماشین مجازی از نوع ماشین جدید (custom-4-3840) استفاده میکند، جایی که [VM_NAME] نمونه جدید ایجاد شده است:
gcloud compute instances describe [VM_NAME] | grep machineType
خروجی نمونه مورد انتظار:
machineType: https://www.googleapis.com/compute/v1/projects/project-name/zones/us-central1-f/machineTypes/custom-4-3840
تغییراتی در وب سایت ایجاد کنید
تیم بازاریابی شما از شما خواسته است که صفحه اصلی سایت خود را تغییر دهید. آنها فکر می کنند باید اطلاعات بیشتری در مورد اینکه شرکت شما چه کسی است و چه چیزی می فروشید بیشتر باشد. در این بخش، متنی را به صفحه اصلی اضافه می کنید تا تیم بازاریابی را خوشحال کنید! به نظر می رسد یکی از توسعه دهندگان شما قبلاً تغییرات را با نام فایل index.js.new ایجاد کرده است. می توانید فایل را در index.js کپی کنید و تغییرات شما باید منعکس شود. دستورالعمل های زیر را برای ایجاد تغییرات مناسب دنبال کنید.
دستورات زیر را اجرا کنید، فایل به روز شده را به نام فایل صحیح کپی کنید و سپس محتوای آن را چاپ کنید تا تغییرات را تأیید کنید:
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
کد حاصل باید به شکل زیر باشد:
/*
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 را بهروزرسانی کردید، اما برای تولید فایلهای استاتیک باید برنامه React را بسازید. دستور زیر را برای ساخت برنامه React اجرا کنید و آن را در فهرست عمومی monolith کپی کنید:
cd ~/monolith-to-microservices/react-app npm install && npm run-script build
سپس، دوباره کد را به سطل فضای ذخیره سازی ابری خود فشار دهید.
cd ~ rm -rf monolith-to-microservices/*/node_modules gsutil -m cp -r monolith-to-microservices gs://fancy-store-$DEVSHELL_PROJECT_ID/
تغییرات را با بهروزرسانیهای در حال تغییر فشار دهید
اکنون میتوانید همه نمونهها را مجبور به راهاندازی مجدد برای بهروزرسانی بهروزرسانی کنید.
gcloud compute instance-groups managed rolling-action restart fancy-fe-mig \ --max-unavailable=100%
پس از صدور فرمان راهاندازی مجدد، تقریباً 30 ثانیه صبر کنید تا به نمونهها زمان داده شود تا پردازش شوند، و سپس وضعیت گروه نمونه مدیریتشده را بررسی کنید تا نمونهها در لیست ظاهر شوند.
watch -n 5 gcloud compute instance-groups list-instances fancy-fe-mig
هنگامی که موارد در لیست ظاهر شدند، با فشار دادن Control+S
( Command+S
در مکینتاش) از فرمان watch خارج شوید.
برای تأیید اینکه سرویس به عنوان سالم فهرست شده است، موارد زیر را اجرا کنید:
watch -n 5 gcloud compute backend-services get-health fancy-fe-frontend --global
خروجی نمونه:
--- 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
پس از ظاهر شدن موارد در لیست، با فشار دادن Control+S
( Command+S
در مکینتاش) از فرمان watch خارج شوید.
برای بی اعتبار کردن محتوای حافظه پنهان در شبکه تحویل محتوا و اطمینان از نمایش محتوای جدید، موارد زیر را اجرا کنید:
gcloud compute url-maps invalidate-cdn-cache fancy-map \ --path "/*"
وب سایت را از طریق http://[LB_IP] مرور کنید که در آن [LB_IP] IP_ADDRESS مشخص شده برای متعادل کننده بار است که با دستور زیر می توانید آن را پیدا کنید:
gcloud compute forwarding-rules list --global
تغییرات جدید وب سایت اکنون باید قابل مشاهده باشد.
شبیه سازی شکست
برای تأیید اینکه بررسی سلامت کار می کند، وارد یک نمونه شوید و خدمات را متوقف کنید. برای یافتن نام نمونه، موارد زیر را اجرا کنید:
gcloud compute instance-groups list-instances fancy-fe-mig
از آنجا، پوسته را در یکی از نمونهها ایمن کنید، جایی که INSTANCE_NAME یکی از نمونههای فهرست است:
gcloud compute ssh [INSTANCE_NAME]
در مثال، از supervisorctl برای توقف برنامه استفاده کنید.
sudo supervisorctl stop nodeapp; sudo killall node
از نمونه خارج شوید.
exit
نظارت بر عملیات تعمیر
watch -n 5 gcloud compute operations list \ --filter='operationType~compute.instances.repair.*'
به دنبال خروجی نمونه زیر باشید:
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
بعد از اینکه تعمیر متوجه شد، Control+C
( Command+S
در مکینتاش) را برای خروج از فرمان ساعت انجام دهید. در این مرحله، گروه نمونه مدیریت شده، نمونه را دوباره ایجاد می کند تا آن را تعمیر کند.
9. پاکسازی کنید
پس از آماده شدن، ساده ترین راه برای پاکسازی تمام فعالیت های انجام شده، حذف پروژه است. حذف پروژه باعث حذف متعادلکننده بار، نمونهها، الگوها و موارد دیگر میشود که در طول برنامه کد ایجاد شدهاند تا اطمینان حاصل شود که هیچ هزینههای تکراری غیرمنتظرهای رخ نمیدهد. موارد زیر را در Cloud Shell اجرا کنید، جایی که PROJECT_ID شناسه کامل پروژه است، نه تنها نام پروژه.
gcloud projects delete [PROJECT_ID]
در صورت درخواست، با وارد کردن "Y" حذف را تأیید کنید.
10. تبریک می گویم!
شما وب سایت خود را در Compute Engine مستقر، مقیاس و به روز کردید. اکنون با Compute Engine، گروههای نمونه مدیریتشده، متعادلسازی بار و بررسی سلامت تجربه دارید!