ব্যাটল পিচ - একটি মাইক্রোসার্ভিসেস ব্যাটল গ্রাউন্ড

১. ভূমিকা

সর্বশেষ হালনাগাদ: ১২-০২-২০২০

মাইক্রোসার্ভিসেস ব্যাটল এরিনা

কখনো কি এমন বরফ ছোড়াছুড়ির খেলায় অংশ নিয়েছেন যেখানে আপনি ঘুরে ঘুরে মজা করে অন্যদের দিকে বরফের গোলা ছুঁড়ে মারেন? যদি না নিয়ে থাকেন, তবে কোনো একদিন চেষ্টা করে দেখুন! কিন্তু এখন শারীরিকভাবে আঘাত পাওয়ার ঝুঁকি নেওয়ার পরিবর্তে, আপনি একটি ছোট, নেটওয়ার্কে প্রবেশযোগ্য সার্ভিস (একটি মাইক্রোসার্ভিস) তৈরি করতে পারেন যা অন্যান্য মাইক্রোসার্ভিসের বিরুদ্ধে এক মহাকাব্যিক যুদ্ধে অংশ নেবে। আর যেহেতু আমরা এই প্রথম মাইক্রোসার্ভিস যুদ্ধটি জর্জিয়ার আটলান্টায় আয়োজন করছি, তাই আমাদের মাইক্রোসার্ভিসগুলো বরফের গোলার পরিবর্তে পীচ ফল ছুঁড়বে।

আপনি হয়তো ভাবছেন... কিন্তু একটি মাইক্রোসার্ভিস কীভাবে অন্য মাইক্রোসার্ভিসগুলোকে কোনো অনুরোধ পাঠায়? একটি মাইক্রোসার্ভিস নেটওয়ার্ক অনুরোধ (সাধারণত HTTP-এর মাধ্যমে) গ্রহণ করতে এবং প্রতিক্রিয়া ফেরত পাঠাতে পারে। এখানে একটি 'অ্যারেনা ম্যানেজার' থাকে, যা আপনার মাইক্রোসার্ভিসকে অ্যারেনার বর্তমান অবস্থা পাঠিয়ে দেয় এবং তারপর আপনার মাইক্রোসার্ভিসটি কী করতে হবে তা নির্দিষ্ট করে একটি কমান্ডের মাধ্যমে প্রতিক্রিয়া জানায়।

অবশ্যই লক্ষ্য হলো জেতা, কিন্তু এই যাত্রাপথে আপনি গুগল ক্লাউডে মাইক্রোসার্ভিস তৈরি ও স্থাপন করা সম্পর্কেও শিখবেন।

এটি কীভাবে কাজ করে

আপনি আপনার পছন্দের যেকোনো প্রযুক্তি ব্যবহার করে একটি মাইক্রোসার্ভিস তৈরি করবেন (অথবা জাভা, কোটলিন বা স্কালা স্টার্টার থেকে বেছে নিতে পারেন) এবং তারপর মাইক্রোসার্ভিসটি গুগল ক্লাউডে ডেপ্লয় করবেন। ডেপ্লয় করার পর, আপনি একটি ফর্ম পূরণ করে আপনার মাইক্রোসার্ভিসটির ইউআরএল আমাদের জানাবেন এবং তারপর আমরা সেটিকে এরিনাতে যুক্ত করে দেব।

একটি নির্দিষ্ট লড়াইয়ের জন্য এরিনাতে সকল খেলোয়াড় থাকে। ডেভনেক্সাস সম্মেলনের জন্য প্রতিদিন একটি করে এরিনা থাকবে। প্রতিটি খেলোয়াড় একটি মাইক্রোসার্ভিসের প্রতিনিধিত্ব করে, যা ঘুরে বেড়ায় এবং অন্য খেলোয়াড়দের দিকে পীচ ফল ছুঁড়ে মারে।

প্রায় প্রতি সেকেন্ডে একবার আমাদের এরিনা ম্যানেজার আপনার মাইক্রোসার্ভিসকে কল করবে এবং এরিনার বর্তমান অবস্থা (খেলোয়াড়রা কোথায় আছে) পাঠাবে, এবং আপনার মাইক্রোসার্ভিস কী করতে হবে তার জন্য একটি কমান্ড দিয়ে সাড়া দেবে। এরিনার মধ্যে আপনি সামনে এগোতে, বামে বা ডানে ঘুরতে, অথবা একটি পীচ ছুঁড়তে পারেন। ছোঁড়া পীচটি খেলোয়াড় যেদিকে মুখ করে আছে, সেই দিকে সর্বোচ্চ তিন ঘর পর্যন্ত যাবে। যদি একটি পীচ অন্য কোনো খেলোয়াড়কে "আঘাত" করে, তবে যে ছুঁড়বে সে এক পয়েন্ট পাবে এবং যে খেলোয়াড় আঘাত পাবে সে এক পয়েন্ট হারাবে। খেলোয়াড়ের বর্তমান সংখ্যা অনুযায়ী এরিনার আকার স্বয়ংক্রিয়ভাবে সামঞ্জস্য করা হয়।

তিনজন কাল্পনিক খেলোয়াড় নিয়ে আখড়াটি দেখতে এইরকম:

9e4775d13ff18d4d.png

উদাহরণস্বরূপ ব্যাটল পিচ এরিনা

আবর্তনশীল সংঘাত

খেলার মাঠে একাধিক খেলোয়াড় পরস্পরবিরোধী কাজ করার চেষ্টা করতে পারে। উদাহরণস্বরূপ, দুজন খেলোয়াড় একই ঘরে যাওয়ার চেষ্টা করতে পারে। কোনো বিরোধের ক্ষেত্রে, সবচেয়ে দ্রুত প্রতিক্রিয়া জানানো মাইক্রোসার্ভিসটি বিজয়ী হয়।

যুদ্ধ দেখা

প্রতিযোগিতায় আপনার মাইক্রোসার্ভিসটি কেমন করছে তা দেখতে লাইভ এরিনাটি দেখুন !

যুদ্ধ এপিআই

আমাদের এরিনা ম্যানেজারের সাথে কাজ করার জন্য, আপনার মাইক্রোসার্ভিসকে এরিনাতে অংশগ্রহণের জন্য একটি নির্দিষ্ট এপিআই (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 (OK) হতে হবে এবং এর রেসপন্স বডিতে আপনার পরবর্তী পদক্ষেপটি উল্লেখ থাকবে, যা নিম্নলিখিতগুলির মধ্যে যেকোনো একটির একটিমাত্র বড় হাতের অক্ষর দিয়ে এনকোড করা থাকবে:

F <- move Forward
R <- turn Right
L <- turn Left
T <- Throw

এইটুকুই! চলুন ক্লাউড রান-এ একটি মাইক্রোসার্ভিস ডেপ্লয় করার প্রক্রিয়াটি দেখে নেওয়া যাক। ক্লাউড রান হলো মাইক্রোসার্ভিস এবং অন্যান্য অ্যাপ্লিকেশন চালানোর জন্য ব্যবহৃত একটি গুগল ক্লাউড পরিষেবা।

২. আপনার মাইক্রোসার্ভিস স্থাপন করা

আপনি যেকোনো প্রযুক্তি ব্যবহার করে আপনার মাইক্রোসার্ভিস তৈরি করতে পারেন এবং যেকোনো জায়গায় তা স্থাপন করতে পারেন, যতক্ষণ পর্যন্ত এটি সর্বজনীনভাবে অ্যাক্সেসযোগ্য থাকে এবং ব্যাটল এপিআই (Battle API) মেনে চলে। কাজটি সহজ করার জন্য, আপনি একটি নমুনা প্রকল্প দিয়ে শুরু করতে পারেন যা কেবল এলোমেলোভাবে একটি কমান্ড বেছে নেয়।

শুরু করার জন্য আপনার নমুনা বেছে নিন

তিনটি ব্যাটল মাইক্রোসার্ভিস স্যাম্পল রয়েছে যা থেকে আপনি শুরু করতে পারেন:

জাভা ও স্প্রিং বুট

উৎস

ক্লাউড রানে স্থাপন করুন

জাভা ও কোয়ার্কাস

উৎস

ক্লাউড রানে স্থাপন করুন

কোটলিন এবং মাইক্রোনাট

উৎস

ক্লাউড রানে স্থাপন করুন

কোটলিন এবং কোয়ার্কাস

উৎস

ক্লাউড রানে স্থাপন করুন

স্কালা এবং প্লে ফ্রেমওয়ার্ক

উৎস

ক্লাউড রানে স্থাপন করুন

যান

উৎস

ক্লাউড রানে স্থাপন করুন

কোন স্যাম্পলটি দিয়ে শুরু করবেন তা ঠিক করার পর, উপরের "Deploy on Cloud Run" বোতামটিতে ক্লিক করুন। এটি ক্লাউড শেল (ক্লাউডের একটি ভার্চুয়াল মেশিনের ওয়েব-ভিত্তিক কনসোল) চালু করবে, যেখানে সোর্সটি ক্লোন করা হবে, তারপর একটি ডেপ্লয়েবল প্যাকেজ (একটি ডকার কন্টেইনার ইমেজ) হিসেবে বিল্ড করা হবে, যা পরবর্তীতে গুগল কন্টেইনার রেজিস্ট্রি- তে আপলোড করা হয় এবং তারপর ক্লাউড রান- এ ডেপ্লয় করা হয়।

জিজ্ঞাসা করা হলে us-central1 অঞ্চলটি উল্লেখ করুন।

নিচের স্ক্রিনশটটিতে মাইক্রোসার্ভিস বিল্ড এবং ডিপ্লয়মেন্টের জন্য ক্লাউড শেল আউটপুট দেখানো হয়েছে।

d88e40430706a32b.png

মাইক্রোসার্ভিসটি কাজ করছে কিনা যাচাই করুন

ক্লাউড শেলে আপনি আপনার সদ্য ডেপ্লয় করা মাইক্রোসার্ভিসে একটি রিকোয়েস্ট পাঠাতে পারেন, যেখানে YOUR_SERVICE_URL এর জায়গায় আপনার সার্ভিসের URL-টি বসাতে হবে (যা ক্লাউড শেলে "Your application is now live here" লাইনের পরে থাকে):

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 দেখতে পাবেন।

এরিনাতে অন্তর্ভুক্তির জন্য অনুরোধ করুন

এরিনাতে অন্তর্ভুক্ত হওয়ার জন্য আপনাকে একটি সংক্ষিপ্ত ফর্ম পূরণ করতে হবে। সবচেয়ে কঠিন কাজ হবে আপনার প্রোফাইল ইমেজ হিসেবে কী ব্যবহার করবেন তা ঠিক করা। আপনি আপনার গিটহাব (GitHub) ইমেজ বা লিঙ্কডইন (LinkedIn) ইমেজ ব্যবহার করতে পারেন, অথবা আমরা আপনার জন্য র‍্যান্ডমভাবে একটি অ্যাভাটার বেছে নেব। আমরা আপনার জমা দেওয়া তথ্য পর্যালোচনা করার পর, আপনার প্লেয়ারটি এরিনাতে প্রদর্শিত হবে।

পরিবর্তনগুলি তৈরি ও প্রয়োগ করুন

পরিবর্তন করার আগে আপনাকে ক্লাউড শেলে 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

এখন, আপনি ক্লাউড শেল-এর ভেতর থেকে আপনার মাইক্রোসার্ভিসের সোর্স এডিট করতে পারবেন। ক্লাউড শেল ওয়েব-ভিত্তিক এডিটরটি খোলার জন্য, এই কমান্ডটি চালান:

cloudshell edit cloudbowl-microservice-game/samples/$SAMPLE/README.md

এরপর পরিবর্তন করার জন্য আরও নির্দেশাবলী দেখতে পাবেন।

f910c9ef7b51c406.png

স্যাম্পল প্রজেক্টটি এডিটরসহ ক্লাউড শেলে খোলা আছে।

আপনার পরিবর্তনগুলি সংরক্ষণ করার পরে, ক্লাউড শেলে pack কমান্ড ব্যবহার করে আপনার প্রজেক্টটি বিল্ড করুন। এই কমান্ডটি বিল্ডপ্যাকস ব্যবহার করে প্রজেক্টের ধরন শনাক্ত করে, এটিকে কম্পাইল করে এবং ডিপ্লয়যোগ্য আর্টিফ্যাক্ট (একটি ডকার কন্টেইনার ইমেজ) তৈরি করে।

pack build gcr.io/$PROJECT_ID/$SAMPLE \
  --path cloudbowl-microservice-game/samples/$SAMPLE \
  --builder heroku/buildpacks

এখন যেহেতু আপনার কন্টেইনার ইমেজটি তৈরি হয়ে গেছে, সেটিকে গুগল কন্টেইনার রেজিস্ট্রি-তে পুশ করার জন্য (ক্লাউড শেল-এ) ডকার কমান্ডটি ব্যবহার করুন, যাতে পরবর্তীতে ক্লাউড রান সেটিকে অ্যাক্সেস করতে পারে:

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

এখন এরিনা আপনার নতুন সংস্করণটি ব্যবহার করবে!

৩. অভিনন্দন

অভিনন্দন, আপনি সফলভাবে এমন একটি মাইক্রোসার্ভিস তৈরি ও স্থাপন করেছেন যা অন্যান্য মাইক্রোসার্ভিসের সাথে পাল্লা দিতে পারে! শুভকামনা!

এরপর কী?

রেফারেন্স নথি