۱. مقدمه
آخرین بهروزرسانی: ۲۰۲۰-۰۲-۱۲
میدان نبرد میکروسرویسها
تا حالا شده توی یه مسابقه گلوله برفی باشی که توش حرکت کنی و با شیطنت گلوله برفی به سمت بقیه پرتاب کنی؟ اگه نه، یه روزی امتحانش کن! اما حالا به جای ریسک کردن و آسیب دیدن فیزیکی، میتونی یه سرویس کوچیک و قابل دسترسی به شبکه (یه میکروسرویس) بسازی که تو یه نبرد حماسی با بقیه میکروسرویسها شرکت کنه. و از اونجایی که ما اولین مسابقه میکروسرویسها رو تو آتلانتا، جورجیا برگزار میکنیم، میکروسرویسهای ما به جای گلوله برفی، هلو پرتاب میکنن.
شاید از خود بپرسید... اما یک میکروسرویس چگونه یک درخواست Peach را به سمت سایر میکروسرویسها ارسال میکند؟ یک میکروسرویس میتواند درخواستهای شبکه (معمولاً از طریق HTTP) را دریافت کرده و پاسخها را برگرداند. یک "مدیر آرنا" وجود دارد که وضعیت فعلی آرنا را برای میکروسرویس شما ارسال میکند و سپس میکروسرویس شما با دستوری که مشخص میکند چه کاری باید انجام دهد، پاسخ میدهد.
البته هدف برنده شدن است، اما در طول مسیر، شما در مورد ساخت و استقرار میکروسرویسها در Google Cloud یاد خواهید گرفت.
چگونه کار میکند؟
شما یک میکروسرویس با هر فناوری که میخواهید (یا از میان جاوا، کاتلین یا اسکالا یکی را انتخاب کنید) خواهید ساخت و سپس میکروسرویس را در گوگل کلود مستقر خواهید کرد. پس از استقرار، فرمی را پر میکنید تا URL میکروسرویس خود را به ما اطلاع دهید و سپس ما آن را به عرصه اضافه خواهیم کرد.
این میدان شامل تمام بازیکنان برای یک نبرد مشخص است. برای کنفرانس DevNexus، برای هر روز یک میدان وجود خواهد داشت. هر بازیکن نماینده یک میکروسرویس است که در اطراف حرکت میکند و به سمت سایر بازیکنان هلو پرتاب میکند.
تقریباً هر ثانیه یک بار، مدیر میدان ما با میکروسرویس شما تماس میگیرد و وضعیت فعلی میدان (جایی که بازیکنان هستند) را ارسال میکند و میکروسرویس شما با دستوری برای انجام کار پاسخ میدهد. در میدان میتوانید به جلو حرکت کنید، به چپ یا راست بپیچید یا یک هلو پرتاب کنید. یک هلو پرتاب شده تا سه خانه در جهتی که بازیکن رو به آن است، حرکت میکند. اگر یک هلو به بازیکن دیگری "برخورد" کند، پرتابکننده یک امتیاز میگیرد و بازیکنی که به آن برخورد کرده یک امتیاز از دست میدهد. اندازه میدان به طور خودکار برای تعداد فعلی بازیکنان تنظیم میشود.
این هم نمای ورزشگاه با سه بازیکن گریم شده:

مثال میدان نبرد پیچ
درگیریهای چرخشی
در میدان مسابقه ممکن است چندین بازیکن سعی کنند اقدامات متناقضی انجام دهند. برای مثال، دو بازیکن ممکن است سعی کنند به یک فضای مشابه حرکت کنند. در صورت بروز تضاد، میکروسرویسی که سریعترین زمان پاسخ را داشته باشد، برنده میشود.
تماشای نبرد
برای دیدن اینکه میکروسرویس شما در این نبرد چگونه عمل میکند، صحنهی زنده را بررسی کنید !
API نبرد
برای همکاری با مدیر عرصه ما، میکروسرویس شما باید یک API خاص برای شرکت در عرصه پیادهسازی کند. مدیر عرصه، وضعیت فعلی عرصه را در یک HTTP POST به URL ای که شما به ما ارائه میدهید، با ساختار JSON زیر ارسال میکند:
{
"_links": {
"self": {
"href": "https://YOUR_SERVICE_URL"
}
},
"arena": {
"dims": [4,3], // width, height
"state": {
"https://A_PLAYERS_URL": {
"x": 0, // zero-based x position, where 0 = left
"y": 0, // zero-based y position, where 0 = top
"direction": "N", // N = North, W = West, S = South, E = East
"wasHit": false,
"score": 0
}
... // also you and the other players
}
}
}
پاسخ HTTP شما باید کد وضعیت ۲۰۰ (OK) داشته باشد و متن پاسخ شامل حرکت بعدی شما باشد که به صورت یک کاراکتر بزرگ از یکی از موارد زیر کدگذاری شده است:
F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw
همین! بیایید پیادهسازی یک میکروسرویس روی Cloud Run ، یک سرویس ابری گوگل برای اجرای میکروسرویسها و سایر برنامهها، را بررسی کنیم.
۲. استقرار میکروسرویس شما
شما میتوانید میکروسرویس خود را با هر فناوری بسازید و آن را در هر جایی مستقر کنید، البته تا زمانی که به صورت عمومی قابل دسترسی باشد و با Battle API مطابقت داشته باشد. برای آسانتر کردن کارها، میتوانید با یک پروژه نمونه شروع کنید که فقط یک دستور تصادفی را انتخاب میکند.
نمونه خود را برای شروع انتخاب کنید
سه نمونه میکروسرویس نبرد وجود دارد که میتوانید از آنها شروع کنید:
جاوا و بوت اسپرینگ | ||
جاوا و کوارکوس | ||
کاتلین و میکرونات | ||
کاتلین و کوارکوس | ||
برو |
بعد از اینکه تصمیم گرفتید با کدام نمونه شروع کنید، روی دکمه "Deploy on Cloud Run" در بالا کلیک کنید. این کار Cloud Shell (یک کنسول مبتنی بر وب برای یک ماشین مجازی در فضای ابری) را اجرا میکند که در آن منبع کلون میشود، سپس در یک بسته قابل استقرار (یک تصویر کانتینر داکر) ساخته میشود، که سپس در Google Container Registry آپلود میشود و سپس روی Cloud Run مستقر میشود.
وقتی از شما خواسته شد، منطقه us-central1 را مشخص کنید.
تصویر زیر خروجی Cloud Shell را برای ساخت و استقرار میکروسرویس نشان میدهد.

تأیید کنید که میکروسرویس کار میکند
در Cloud Shell میتوانید درخواستی به میکروسرویس تازه مستقر شده خود ارسال کنید و YOUR_SERVICE_URL را با URL سرویس خود جایگزین کنید (که در Cloud Shell پس از خط "برنامه شما اکنون اینجا فعال است" قرار دارد):
curl -d '{
"_links": {
"self": {
"href": "https://foo.com"
}
},
"arena": {
"dims": [4,3],
"state": {
"https://foo.com": {
"x": 0,
"y": 0,
"direction": "N",
"wasHit": false,
"score": 0
}
}
}
}' -H "Content-Type: application/json" -X POST -w "\n" \
https://YOUR_SERVICE_URL
شما باید رشته پاسخ F، L، R یا T را ببینید.
درخواست حضور در ورزشگاه
برای حضور در میدان مسابقه، باید فرم کوتاهی را پر کنید . سختترین بخش، تعیین تصویر پروفایل شماست. میتوانید از تصویر گیتهاب، لینکدین خود استفاده کنید، یا ما فقط یک آواتار تصادفی برای شما انتخاب خواهیم کرد. پس از بررسی فرم ارسالی، بازیکن شما در میدان مسابقه ظاهر خواهد شد.
ایجاد و اعمال تغییرات
قبل از اینکه بتوانید تغییراتی ایجاد کنید، باید در Cloud Shell اطلاعاتی در مورد پروژه GCP و نمونهای که استفاده کردهاید، تنظیم کنید. ابتدا پروژههای GCP خود را فهرست کنید:
gcloud projects list
احتمالاً فقط یک پروژه دارید. PROJECT_ID از ستون اول کپی کنید و آن را در دستور زیر جایگذاری کنید (به جای YOUR_PROJECT_ID ، شناسه پروژه واقعی خود را قرار دهید)، تا یک متغیر محیطی تنظیم شود که در دستورات بعدی از آن استفاده خواهیم کرد:
export PROJECT_ID=YOUR_PROJECT_ID
اکنون یک متغیر محیطی دیگر برای نمونهای که استفاده کردید تنظیم کنید تا در دستورات بعدی بتوانیم دایرکتوری و نام سرویس صحیح را مشخص کنیم:
# Copy and paste ONLY ONE of these export SAMPLE=java-springboot export SAMPLE=kotlin-micronaut export SAMPLE=scala-play
اکنون میتوانید منبع میکروسرویس خود را از درون Cloud Shell ویرایش کنید. برای باز کردن ویرایشگر تحت وب Cloud Shell، این دستور را اجرا کنید:
cloudshell edit cloudbowl-microservice-game/samples/$SAMPLE/README.md
سپس دستورالعملهای بیشتری برای ایجاد تغییرات مشاهده خواهید کرد.

پوسته ابری به همراه ویرایشگر و پروژه نمونه باز
پس از ذخیره تغییرات، پروژه خود را در Cloud Shell با استفاده از دستور pack بسازید. این دستور از Buildpacks برای تشخیص نوع پروژه، کامپایل آن و ایجاد مصنوع قابل استقرار (یک تصویر کانتینر docker) استفاده میکند.
pack build gcr.io/$PROJECT_ID/$SAMPLE \ --path cloudbowl-microservice-game/samples/$SAMPLE \ --builder heroku/buildpacks
اکنون که تصویر کانتینر شما ایجاد شده است، از دستور docker (در Cloud Shell) برای قرار دادن تصویر کانتینر در رجیستری کانتینر گوگل استفاده کنید تا از طریق Cloud Run بتوان به آن دسترسی داشت:
docker push gcr.io/$PROJECT_ID/$SAMPLE
اکنون نسخه جدید را روی Cloud Run مستقر کنید:
gcloud run deploy $SAMPLE\
--project=$PROJECT_ID\
--platform=managed\
--region=us-central1\
--image=gcr.io/$PROJECT_ID/$SAMPLE\
--memory=512Mi\
--allow-unauthenticated
حالا ورزشگاه از نسخه جدید شما استفاده خواهد کرد!
۳. تبریک میگویم
تبریک میگویم، شما با موفقیت یک میکروسرویس ساختید و مستقر کردید که میتواند با سایر میکروسرویسها رقابت کند! موفق باشید!
بعدش چی؟
- ردیابی توزیعشده را به برنامه Spring Boot خود اضافه کنید
- از پلتفرم هوش مصنوعی برای هوشمندسازی فوقالعاده میکروسرویس خود استفاده کنید