1. ভূমিকা
শেষ আপডেট: 2020-08-26
Microservices Battle Arena
কখনও স্নোবলের লড়াইয়ে ছিলেন যেখানে আপনি ঘুরে বেড়ান এবং খেলার সাথে অন্যদের দিকে স্নোবল নিক্ষেপ করেন? যদি না হয়, কোন দিন এটি চেষ্টা করুন! কিন্তু এখন শারীরিকভাবে আঘাত পাওয়ার ঝুঁকির পরিবর্তে, আপনি একটি ছোট, নেটওয়ার্ক অ্যাক্সেসযোগ্য পরিষেবা (একটি মাইক্রোসার্ভিস) তৈরি করতে পারেন যা অন্যান্য মাইক্রোসার্ভিসের বিরুদ্ধে একটি মহাকাব্যিক যুদ্ধে অংশ নেবে৷ এবং যেহেতু আমরা স্প্রিংওনে এই মাইক্রোসার্ভিস যুদ্ধটি হোস্ট করছি, আমাদের মাইক্রোসার্ভিসগুলি স্নোবলের পরিবর্তে পাতা নিক্ষেপ করবে।
আপনি হয়তো ভাবছেন... কিন্তু কিভাবে একটি মাইক্রোসার্ভিস অন্যান্য মাইক্রোসার্ভিসে একটি পাতা "নিক্ষেপ" করে? একটি মাইক্রোসার্ভিস নেটওয়ার্ক অনুরোধগুলি গ্রহণ করতে পারে (সাধারণত HTTP এর মাধ্যমে) এবং প্রতিক্রিয়াগুলি ফেরত দিতে পারে। একটি "এরিনা ম্যানেজার" আছে যেটি আপনার মাইক্রোসার্ভিসকে অ্যারেনার বর্তমান অবস্থা পাঠাবে এবং তারপরে আপনার মাইক্রোসার্ভিস কী করতে হবে তা উল্লেখ করে একটি কমান্ডের সাথে প্রতিক্রিয়া জানাবে।
অবশ্যই লক্ষ্য জয় করা, কিন্তু পথ ধরে আপনি Google ক্লাউডে মাইক্রোসার্ভিস তৈরি এবং স্থাপন করা সম্পর্কে শিখবেন।
কিভাবে এটা কাজ করে
আপনি যে কোনো প্রযুক্তির সাহায্যে একটি মাইক্রোসার্ভিস তৈরি করবেন (বা Java, Kotlin, বা Scala starters থেকে বেছে নিন) এবং তারপর Google Cloud-এ মাইক্রোসার্ভিস স্থাপন করবেন। একবার স্থাপন করা হলে, আপনি একটি ফর্ম পূরণ করবেন যাতে আপনার মাইক্রোসার্ভিসের URLটি আমাদের জানাতে পারেন এবং তারপরে আমরা এটিকে অঙ্গনে যোগ করব৷
ক্ষেত্রটিতে একটি প্রদত্ত যুদ্ধের জন্য সমস্ত খেলোয়াড় রয়েছে। SpringOne সম্মেলনের নিজস্ব ক্ষেত্র থাকবে। প্রতিটি খেলোয়াড় একটি মাইক্রোসার্ভিসের প্রতিনিধিত্ব করে যা ঘুরে বেড়ায় এবং অন্যান্য খেলোয়াড়দের দিকে পাতা ছুড়ে দেয়।
সেকেন্ডে প্রায় একবার আমাদের অ্যারেনা ম্যানেজার আপনার মাইক্রোসার্ভিসকে কল করবে, বর্তমান অ্যারেনা স্টেট (যেখানে প্লেয়াররা আছে) পাঠাবে এবং আপনার মাইক্রোসার্ভিস কী করতে হবে তার জন্য একটি আদেশের সাথে প্রতিক্রিয়া জানাবে। অঙ্গনে আপনি এগিয়ে যেতে পারেন, বাম বা ডান দিকে ঘুরতে পারেন বা একটি পাতা নিক্ষেপ করতে পারেন। একটি নিক্ষিপ্ত পাতা প্লেয়ার যে দিকে মুখ করছে সেদিকে তিনটি স্থান পর্যন্ত ভ্রমণ করবে। যদি একটি পাতা অন্য খেলোয়াড়কে "হিট" করে, তাহলে নিক্ষেপকারী এক পয়েন্ট পায় এবং আঘাতকারী খেলোয়াড় একটি পয়েন্ট হারায়। প্লেয়ারের বর্তমান সংখ্যার জন্য অ্যারেনার আকার স্বয়ংক্রিয়ভাবে সামঞ্জস্য করা হয়।
এখানে একটি অতীত ক্ষেত্র দেখায় কিভাবে:
উদাহরণ যুদ্ধ এক ক্ষেত্র
ঘূর্ণায়মান দ্বন্দ্ব
অঙ্গনে এটা সম্ভব যে একাধিক খেলোয়াড় পরস্পরবিরোধী ক্রিয়া সম্পাদন করার চেষ্টা করে। উদাহরণস্বরূপ, দুই খেলোয়াড় একই জায়গায় যাওয়ার চেষ্টা করতে পারে। দ্বন্দ্বের ক্ষেত্রে, দ্রুততম প্রতিক্রিয়ার সময় সহ মাইক্রোসার্ভিস জয়ী হয়।
যুদ্ধ দেখছি
যুদ্ধে আপনার মাইক্রোসার্ভিস কেমন করছে তা দেখতে, লাইভ অ্যারেনা দেখুন !
ব্যাটল এপিআই
আমাদের অ্যারেনা ম্যানেজারের সাথে কাজ করার জন্য, আপনার মাইক্রোসার্ভিসকে অ্যারেনায় অংশগ্রহণ করার জন্য একটি নির্দিষ্ট API প্রয়োগ করতে হবে। এরিনা ম্যানেজার একটি HTTP POST-এ আপনার দেওয়া ইউআরএলে নিম্নলিখিত 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 প্রতিক্রিয়া অবশ্যই স্ট্যাটাস কোড 200 (ঠিক আছে) হতে হবে একটি প্রতিক্রিয়া বডি সহ আপনার পরবর্তী পদক্ষেপ সহ, একটি একক বড় হাতের অক্ষর হিসাবে এনকোড করা হয়েছে:
F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw
যে এটা আছে সব! আসুন ক্লাউড রানে একটি মাইক্রোসার্ভিস স্থাপনের মাধ্যমে চলুন, মাইক্রোসার্ভিস এবং অন্যান্য অ্যাপ্লিকেশন চালানোর জন্য একটি Google ক্লাউড পরিষেবা৷
2. Google ক্লাউডে লগইন করুন৷
ক্লাউড রানে আপনার মাইক্রোসার্ভিস স্থাপন করতে সক্ষম হতে আপনাকে Google ক্লাউডে লগইন করতে হবে। আমরা আপনার অ্যাকাউন্টে একটি ক্রেডিট প্রয়োগ করব এবং আপনাকে ক্রেডিট কার্ড প্রবেশ করতে হবে না। একটি GSuite অ্যাকাউন্টের পরিবর্তে একটি ব্যক্তিগত অ্যাকাউন্ট (যেমন gmail.com) ব্যবহার করা সাধারণত কম সমস্যাযুক্ত কারণ কখনও কখনও GSuite অ্যাডমিনরা তাদের ব্যবহারকারীদের নির্দিষ্ট Google ক্লাউড বৈশিষ্ট্যগুলি ব্যবহার করতে বাধা দেয়৷ এছাড়াও, আমরা যে ওয়েব কনসোলটি ব্যবহার করব তা ক্রোম বা ফায়ারফক্সের সাথে দুর্দান্ত কাজ করা উচিত তবে সাফারিতে সমস্যা থাকতে পারে।
3. আপনার মাইক্রোসার্ভিস স্থাপন করা
আপনি যেকোনো প্রযুক্তির সাহায্যে আপনার মাইক্রোসার্ভিস তৈরি করতে পারেন এবং যতক্ষণ পর্যন্ত এটি সর্বজনীনভাবে পৌঁছানো যায় এবং ব্যাটল এপিআই-এর সাথে সামঞ্জস্য হয় ততক্ষণ পর্যন্ত এটিকে যে কোনো জায়গায় স্থাপন করতে পারেন। কিন্তু জিনিসগুলিকে সহজ করার জন্য আমরা আপনাকে একটি নমুনা পরিষেবা থেকে শুরু করতে এবং এটিকে ক্লাউড রানে স্থাপন করতে সাহায্য করব৷
শুরু করতে আপনার নমুনা বাছুন
দুটি যুদ্ধ মাইক্রোসার্ভিস নমুনা রয়েছে যা থেকে আপনি শুরু করতে পারেন:
জাভা এবং স্প্রিং বুট | ||
কোটলিন এবং স্প্রিং বুট |
আপনি কোন নমুনা দিয়ে শুরু করবেন তা স্থির করার পরে, উপরের "ক্লাউড রানে স্থাপন করুন" বোতামটি ক্লিক করুন৷ এটি ক্লাউড শেল (ক্লাউডের একটি ভার্চুয়াল মেশিনে একটি ওয়েব-ভিত্তিক কনসোল) চালু করবে যেখানে উত্সটি ক্লোন করা হবে, তারপরে একটি স্থাপনযোগ্য প্যাকেজ (একটি ডকার কন্টেইনার চিত্র) তৈরি করা হবে, যা পরে Google কন্টেইনার রেজিস্ট্রিতে আপলোড করা হয়, এবং তারপর ক্লাউড রানে স্থাপন করা হয়।
জিজ্ঞাসা করা হলে, us-central1
অঞ্চল উল্লেখ করুন।
নীচের স্ক্রিনশটটি মাইক্রোসার্ভিস বিল্ড এবং স্থাপনার জন্য ক্লাউড শেল আউটপুট দেখায়
মাইক্রোসার্ভিস কাজগুলি যাচাই করুন
ক্লাউড শেলে আপনি আপনার নতুন নিয়োজিত মাইক্রোসার্ভিসের কাছে একটি অনুরোধ করতে পারেন, আপনার পরিষেবার URL দিয়ে YOUR_SERVICE_URL
প্রতিস্থাপন করতে পারেন (যা "আপনার অ্যাপ্লিকেশন এখন এখানে লাইভ" লাইনের পরে ক্লাউড শেলে রয়েছে):
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 এর প্রতিক্রিয়া স্ট্রিং দেখতে পাবেন।
4. অ্যারেনায় অন্তর্ভুক্তির অনুরোধ করুন
অঙ্গনে অন্তর্ভুক্ত হওয়ার জন্য আপনাকে #3-স্পন্সর-google-ক্লাউড স্ল্যাক চ্যানেলে আপনার নাম, ক্লাউড রান পরিষেবা URL এবং ঐচ্ছিকভাবে আপনার গিটহাব ব্যবহারকারীর নাম এর অবতার/প্রোফাইল ছবির জন্য একটি বার্তা পাঠাতে হবে। একবার আমরা তথ্য যাচাই করলে, আপনার প্লেয়ার মাঠে উপস্থিত হবে।
5. পরিবর্তন করুন এবং স্থাপন করুন
পরিবর্তন করার আগে আপনাকে 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-springboot
এখন, আপনি ক্লাউড শেল থেকে আপনার মাইক্রোসার্ভিসের উৎস সম্পাদনা করতে পারেন। ক্লাউড শেল ওয়েব-ভিত্তিক সম্পাদক খুলতে, এই কমান্ডটি চালান:
cloudshell edit cloudbowl-microservice-game/samples/$SAMPLE/README.md
তারপরে আপনি পরিবর্তন করার জন্য আরও নির্দেশাবলী দেখতে পাবেন।
ক্লাউড শেল সম্পাদকের সাথে নমুনা প্রকল্প খোলা
আপনার পরিবর্তনগুলি সংরক্ষণ করার পরে, ক্লাউড শেলে অ্যাপ্লিকেশনটি শুরু করুন:
cd cloudbowl-microservice-game/samples/$SAMPLE ./mvnw spring-boot:run
একবার অ্যাপ্লিকেশনটি চালু হলে, একটি নতুন ক্লাউড শেল ট্যাব খুলুন এবং কার্ল ব্যবহার করে পরিষেবাটি পরীক্ষা করুন:
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" \ http://localhost:8080
আপনি যখন আপনার পরিবর্তনগুলি স্থাপন করতে প্রস্তুত হন, তখন pack
কমান্ড ব্যবহার করে ক্লাউড শেলে আপনার প্রকল্পটি তৈরি করুন। এই কমান্ডটি প্রজেক্টের ধরন সনাক্ত করতে, এটি কম্পাইল করতে এবং স্থাপনযোগ্য আর্টিফ্যাক্ট (একটি ডকার কন্টেইনার ইমেজ) তৈরি করতে Buildpacks ব্যবহার করে।
pack build gcr.io/$PROJECT_ID/$SAMPLE \ --path ~/cloudbowl-microservice-game/samples/$SAMPLE \ --builder gcr.io/buildpacks/builder
এখন আপনার কন্টেইনার ইমেজ তৈরি করা হয়েছে, ডকার কমান্ডটি ব্যবহার করুন (ক্লাউড শেলে) কনটেইনার ইমেজটিকে Google কন্টেইনার রেজিস্ট্রিতে পুশ করার জন্য যাতে এটি ক্লাউড রান দ্বারা অ্যাক্সেস করা যায়:
docker push gcr.io/$PROJECT_ID/$SAMPLE
এখন ক্লাউড রানে নতুন সংস্করণ স্থাপন করুন:
gcloud run deploy $SAMPLE\ --project=$PROJECT_ID\ --platform=managed\ --region=us-central1\ --image=gcr.io/$PROJECT_ID/$SAMPLE\ --memory=512Mi\ --allow-unauthenticated
এখন আখড়া আপনার নতুন সংস্করণ ব্যবহার করবে!
6. স্থানীয়ভাবে বিকাশ করুন
আপনি এই পদক্ষেপগুলি অনুসরণ করে আপনার নিজস্ব IDE ব্যবহার করে স্থানীয়ভাবে আপনার প্রকল্পে কাজ করতে পারেন:
- [ক্লাউড শেলে] নমুনাটি জিপ করুন:
cd ~/cloudbowl-microservice-game/samples; zip -r cloudbowl-sample.zip $SAMPLE
- [ক্লাউড শেলে] জিপ ফাইলটি আপনার মেশিনে ডাউনলোড করুন:
cloudshell download-file cloudbowl-sample.zip
- [আপনার মেশিনে] ফাইলটি আনজিপ করুন এবং তারপরে আপনার পরিবর্তনগুলি করুন এবং পরীক্ষা করুন
- [আপনার মেশিনে] gcloud CLI ইনস্টল করুন
- [আপনার মেশিনে] গুগল ক্লাউডে লগইন করুন:
gcloud auth login
- [আপনার মেশিনে] পরিবেশ ভেরিয়েবল
PROJECT_ID
এবংSAMPLE
ক্লাউড শেলের মতো একই মানগুলিতে সেট করুন৷ - [আপনার মেশিনে] কন্টেইনার তৈরি করতে ক্লাউড বিল্ড ব্যবহার করুন (রুট প্রকল্প ডিরেক্টরি থেকে):
gcloud alpha builds submit . --pack=image=gcr.io/$PROJECT_ID/$SAMPLE
- [আপনার মেশিনে] নতুন কন্টেইনার স্থাপন করুন:
gcloud run deploy $SAMPLE --project=$PROJECT_ID --platform=managed --region=us-central1 --image=gcr.io/$PROJECT_ID/$SAMPLE --memory=512Mi --allow-unauthenticated
7. অভিনন্দন
অভিনন্দন, আপনি সফলভাবে একটি মাইক্রোসার্ভিস তৈরি এবং স্থাপন করেছেন যা অন্যান্য মাইক্রোসার্ভিসের সাথে যুদ্ধ করতে পারে! শুভকামনা!
শেখা চালিয়ে যান
রেফারেন্স ডক্স
8. প্রায়শই জিজ্ঞাসিত প্রশ্নাবলী
কেন আমার মাইক্রোসার্ভিস মাঠে দেখা যাচ্ছে না?