माइक्रोसर्विस रेनबो रम्पस

1. परिचय

पिछली बार अपडेट किया गया: 06-05-2021

माइक्रोसर्विस रेनबो रम्पस

क्या आपने कभी बर्फ़ के गोलों की लड़ाई का हिस्सा बनाया है, जहां आप इधर-उधर घूमते हैं और हंसी-मज़ाक़ के साथ दूसरों पर बर्फ़ के गोले फेंकते हैं? अगर नहीं, तो किसी दिन ज़रूर आज़माएं! हालांकि, अब खुद को नुकसान पहुंचाने के बजाय, नेटवर्क को ऐक्सेस करने वाली एक छोटी सी सेवा (माइक्रोसर्विस) बनाई जा सकती है. यह सेवा, बर्फ़ के गोलों की जगह इंद्रधनुष की तरह फेंकने वाली दूसरी माइक्रोसेवाओं से मुकाबला करने के लिए तैयार हो जाएगी.

आपको लग रहा होगा कि... लेकिन एक माइक्रोसर्विस कैसे "थ्रो" करती है और अन्य माइक्रोसेवाओं पर इंद्रधनुष देखें? माइक्रोसर्विस को नेटवर्क के अनुरोध (आम तौर पर, एचटीटीपी पर) मिल सकते हैं और उससे जवाब मिल सकते हैं. एक "अरेना मैनेजर" होता है, जो आपके माइक्रोसर्विस को अरेना की मौजूदा स्थिति भेजेगा. इसके बाद, आपका माइक्रोसर्विस जवाब में एक निर्देश देगा, जिसमें यह बताया जाएगा कि क्या करना है.

बेशक, इस प्रतियोगिता में जीतना ही आपका लक्ष्य है, लेकिन इस दौरान आपको Google Cloud पर माइक्रोसर्विस बनाने और उन्हें डिप्लॉय करने के बारे में भी पता चलेगा.

यह सुविधा कैसे काम करती है

आपको अपनी पसंद की किसी भी टेक्नोलॉजी का इस्तेमाल करके, एक माइक्रोसर्विस बनानी होगी. इसके अलावा, Go, Java, Kotlin, Scala, NodeJS या Python स्टार्टर में से कोई भी विकल्प चुना जा सकता है. इसके बाद, Google Cloud पर माइक्रोसर्विस डिप्लॉय की जाएगी. डिप्लॉय होने के बाद, आपको हमें अपने माइक्रोसर्विस का यूआरएल बताना होगा. इसके बाद, हम उसे अरेना में जोड़ देंगे.

इस अरीना में किसी भी मुकाबले के लिए, सभी खिलाड़ी मौजूद होते हैं. Rainbow Rumpus का अपना अलग अरीना होगा. हर खिलाड़ी एक माइक्रोसर्विस को दिखाता है, जो इधर-उधर घूमती है और दूसरे खिलाड़ियों पर रेनबो फेंकती है.

हमारा अरेना मैनेजर, हर सेकंड में एक बार आपके माइक्रोसर्विस को कॉल करेगा. साथ ही, अरेना की मौजूदा स्थिति (जहां खिलाड़ी हैं) भेजेगा. इसके बाद, आपका माइक्रोसर्विस जवाब में यह बताएगा कि क्या करना है. अरेना में, आगे बढ़ने, बाएं या दाएं मुड़ने या रेनबो फेंकने की सुविधा होती है. रेनबो, खिलाड़ी की ओर वाली दिशा में तीन स्पेस तक जाएगा. अगर रेनबो किसी दूसरे खिलाड़ी को "हिट" करता है, तो उसे फेंकने वाले खिलाड़ी को एक पॉइंट मिलता है और हिट होने वाले खिलाड़ी का एक पॉइंट कम हो जाता है. खिलाड़ियों की मौजूदा संख्या के हिसाब से अरीना का साइज़ अपने-आप अडजस्ट हो जाता है.

यहां बताया गया है कि एक पुराना अरीना कैसा दिखता है:

20628e6bd442bd11.png

बैटल वन अरीना का उदाहरण

बदलते हुए विरोध

अरेना में, ऐसा हो सकता है कि एक से ज़्यादा खिलाड़ी एक ही समय पर एक-दूसरे से अलग कार्रवाई करने की कोशिश करें. उदाहरण के लिए, हो सकता है कि दो खिलाड़ी एक ही जगह पर जाने की कोशिश करें. अगर कोई विरोध होता है, तो जवाब देने में कम समय लेने वाला माइक्रोसर्विस काम आता है.

युद्ध देखना

यह देखने के लिए कि आपका माइक्रोसर्विस इस मुकाबले में कैसा परफ़ॉर्म कर रहा है, लाइव अरेना देखें!

बैटल एपीआई

हमारे अरीना मैनेजर के साथ काम करने के लिए, आपकी माइक्रोसर्विस को इस अरीना में हिस्सा लेने के लिए, एक खास एपीआई लागू करना होगा. अरीना मैनेजर, आपके दिए गए यूआरएल पर एचटीटीपी पीओएसटी में मौजूदा अरीना की जानकारी भेजेगा. इस पोस्ट में, 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
    }
  }
}

आपके एचटीटीपी रिस्पॉन्स का स्टेटस कोड 200 (OK) होना चाहिए. साथ ही, रिस्पॉन्स बॉडी में आपकी अगली चाल होनी चाहिए. इसे इनमें से किसी एक बड़े अक्षर के तौर पर एन्कोड किया जाना चाहिए:

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

बस इतना ही! आइए, Cloud Run पर माइक्रोसर्विस को डिप्लॉय करने के बारे में जानें. यह Google Cloud की ऐसी सेवा है जो माइक्रोसर्विस और अन्य ऐप्लिकेशन चलाने के लिए उपलब्ध है.

2. Google Cloud में लॉगिन करें

Cloud Run पर अपनी माइक्रोसेवा डिप्लॉय करने के लिए, आपको Google Cloud में लॉगिन करना होगा. हम आपके खाते में क्रेडिट लागू कर देंगे. इसके लिए, आपको क्रेडिट कार्ड की जानकारी डालने की ज़रूरत नहीं होगी. आम तौर पर, GSuite खाते के बजाय निजी खाते (जैसे, gmail.com) का इस्तेमाल करने में कम समस्याएं आती हैं. ऐसा इसलिए है, क्योंकि कभी-कभी GSuite एडमिन अपने उपयोगकर्ताओं को Google Cloud की कुछ सुविधाओं का इस्तेमाल करने से रोकते हैं. साथ ही, हम जिस वेब कंसोल का इस्तेमाल करेंगे वह Chrome या Firefox पर बेहतर तरीके से काम करेगा. हालांकि, Safari में समस्याएं आ सकती हैं.

3. अपनी माइक्रोसर्विस को डिप्लॉय करना

माइक्रोसर्विस को किसी भी टेक्नोलॉजी की मदद से बनाया जा सकता है और उसे कहीं भी डिप्लॉय किया जा सकता है. हालांकि, इसके लिए ज़रूरी है कि वह सार्वजनिक तौर पर ऐक्सेस की जा सके और Battle API के मुताबिक हो. हालांकि, हम आपको सैंपल सेवा से शुरू करने और उसे Cloud Run पर डिप्लॉय करने में मदद करेंगे.

शुरू करने के लिए कोई सैंपल चुनना

कई ऐसे माइक्रोसर्विस सैंपल हैं जिनसे आपको शुरुआत करने में मदद मिल सकती है:

Kotlin और Spring Boot

सोर्स

Kotlin और माइक्रोनॉट

सोर्स

Kotlin और Quarkus

सोर्स

Java और Spring Boot

सोर्स

Java और क्वार्कस

सोर्स

शुरू करें

सोर्स

Node.js और एक्सप्रेस

सोर्स

Python और फ़्लास्क

सोर्स

यह तय करने के बाद कि किस सैंपल से शुरुआत करनी है, ऊपर दिए गए "Cloud Run पर डिप्लॉय करें" बटन पर क्लिक करें. इससे Cloud Shell (क्लाउड में वर्चुअल मशीन के लिए वेब आधारित कंसोल) लॉन्च हो जाएगा, जहां सोर्स को क्लोन किया जाएगा और फिर डिप्लॉय किए जा सकने वाले पैकेज (डॉकर कंटेनर इमेज) में बनाया जाएगा. इसके बाद, उसे Google कंटेनर रजिस्ट्री में अपलोड किया जाएगा और फिर Cloud Run पर डिप्लॉय किया जाएगा.

जब कहा जाए, तो us-central1 क्षेत्र के बारे में बताएं.

यहां दिए गए स्क्रीनशॉट में, माइक्रोसर्विस के बिल्ड और डिप्लॉयमेंट के लिए Cloud Shell का आउटपुट दिखाया गया है

d88e40430706a32b.png

माइक्रोसर्विस के काम करने की पुष्टि करना

Cloud Shell में, डिप्लॉय की गई नई माइक्रोसर्विस को अनुरोध किया जा सकता है. इसमें YOUR_SERVICE_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 की रिस्पॉन्स स्ट्रिंग दिखेगी.

4. अरेना में शामिल होने का अनुरोध करना

रेनबो रंम्पस में शामिल होने के लिए, आपको किसी अरेना में शामिल होना होगा. rainbowrumpus.dev खोलें. इसके बाद, उस अरेना पर 'शामिल हों' पर क्लिक करें जहां आपको अपना माइक्रोसर्विस यूआरएल देना है.

5. बदलाव करना और उन्हें डिप्लॉय करना

बदलाव करने से पहले, आपको 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=kotlin-micronaut
export SAMPLE=kotlin-quarkus
export SAMPLE=kotlin-springboot
export SAMPLE=java-quarkus
export SAMPLE=java-springboot
export SAMPLE=go
export SAMPLE=nodejs
export SAMPLE=python

अब Cloud Shell में जाकर, माइक्रोसर्विस के सोर्स में बदलाव किया जा सकता है. Cloud Shell का वेब-आधारित एडिटर खोलने के लिए, यह कमांड चलाएं:

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

इसके बाद, आपको बदलाव करने के लिए ज़्यादा निर्देश दिखेंगे.

f910c9ef7b51c406.png

Cloud Shell में एडिटर और सैंपल प्रोजेक्ट खुला हुआ है

अपने बदलावों को सेव करने के बाद, README.md फ़ाइल से मिले निर्देश का इस्तेमाल करके, क्लाउड शेल में ऐप्लिकेशन चालू करें. हालांकि, पहले यह पक्का करें कि आप Cloud Shell में सही सैंपल डायरेक्ट्री में हैं:

cd cloudbowl-microservice-game/samples/$SAMPLE

ऐप्लिकेशन चलने के बाद, नया 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" \
  http://localhost:8080

जब आप अपने बदलावों को डिप्लॉय करने के लिए तैयार हों, तो pack कमांड का इस्तेमाल करके Cloud Shell में अपना प्रोजेक्ट बनाएं. यह कमांड, प्रोजेक्ट टाइप का पता लगाने, उसे कंपाइल करने, और डिप्लॉय किए जा सकने वाले आर्टफ़ैक्ट (डॉकर कंटेनर इमेज) बनाने के लिए, Buildpack का इस्तेमाल करता है.

# Make sure you are in a Cloud Shell tab where you set the PROJECT_ID
# and SAMPLE env vars. Otherwise, set them again.
pack build gcr.io/$PROJECT_ID/$SAMPLE \
  --path ~/cloudbowl-microservice-game/samples/$SAMPLE \
  --builder gcr.io/buildpacks/builder

अब जब आपकी कंटेनर इमेज बन गई है, तो कंटेनर इमेज को Google Container Registry में पुश करने के लिए, Cloud Shell में docker कमांड का इस्तेमाल करें. इससे, 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 \
          --allow-unauthenticated

अब अरेना आपके नए वर्शन का इस्तेमाल करेगा!

6. स्थानीय तौर पर डेवलप करें (ज़रूरी नहीं)

अपने प्रोजेक्ट पर स्थानीय आईडीई का इस्तेमाल करके काम करने के लिए, यह तरीका अपनाएं:

  1. [Cloud Shell में] सैंपल की ज़िप फ़ाइल बनाना:
# Make sure the SAMPLE env var is still set. If not, re-set it.
cd ~/cloudbowl-microservice-game/samples
zip -r cloudbowl-sample.zip $SAMPLE
  1. [Cloud Shell में] अपनी मशीन में ZIP फ़ाइल डाउनलोड करें:
cloudshell download-file cloudbowl-sample.zip
  1. [अपनी मशीन पर] फ़ाइल को अनज़िप करें और फिर & अपने बदलावों की जांच करें
  2. [अपनी मशीन पर] gcloud सीएलआई इंस्टॉल करें
  3. [अपनी मशीन पर] Google Cloud में लॉगिन करें:
gcloud auth login
  1. [अपनी मशीन पर] एनवायरमेंट वैरिएबल PROJECT_ID और SAMPLE को Cloud Shell में दी गई वैल्यू पर सेट करें.
  2. [अपनी मशीन पर] रूट प्रोजेक्ट डायरेक्ट्री से कंटेनर बनाने के लिए, Cloud Build का इस्तेमाल करें:
gcloud alpha builds submit . \
  --pack=image=gcr.io/$PROJECT_ID/$SAMPLE \
  --project=$PROJECT_ID
  1. [अपनी मशीन पर] नया कंटेनर डिप्लॉय करें:
gcloud run deploy $SAMPLE \
  --project=$PROJECT_ID \
  --platform=managed \
  --region=us-central1 \
  --image=gcr.io/$PROJECT_ID/$SAMPLE \
  --allow-unauthenticated

7. लगातार डिलीवरी

SCM सेटअप करना

GitHub सेटअप करें, ताकि आप अपनी टीम के साथ मिलकर अपनी माइक्रोसर्विस पर काम कर सकें:

  1. GitHub में लॉगिन करें
  2. नया रिपॉज़िटरी बनाना
  3. अगर आपकी लोकल मशीन पर काम किया जा रहा है, तो git कमांड लाइन इंटरफ़ेस (सीएलआई) या GitHub डेस्कटॉप जीयूआई ऐप्लिकेशन (Windows या Mac) का इस्तेमाल किया जा सकता है. अगर Cloud Shell का इस्तेमाल किया जा रहा है, तो आपको git CLI का इस्तेमाल करना होगा. GitHub पर अपने माइक्रोसर्विस का कोड पाने के लिए, सीएलआई या GitHub डेस्कटॉप के निर्देशों का पालन करें.

git सीएलआई का इस्तेमाल करके अपना कोड पुश करना

  1. निजी ऐक्सेस टोकन से जुड़े निर्देशों के साथ git over https का पालन करें
  2. "रेपो" चुनें दायरा
  3. Git सेटअप करना:
git config --global credential.helper \
  'cache --timeout=172800'
git config --global push.default current
git config --global user.email "YOUR@EMAIL"
git config --global user.name "YOUR NAME"
  1. GitHub संगठन और डेटा स्टोर करने की जगह (https://github.com/ORG/REPO) के लिए, एनवायरमेंट वैरिएबल सेट करना
export GITHUB_ORG=YOUR_GITHUB_ORG
export GITHUB_REPO=YOUR_GITHUB_REPO
  1. अपने कोड को नए रिपॉज़िटरी में पुश करना
# Make sure the SAMPLE env var is still set. If not, re-set it.
cd ~/cloudbowl-microservice-game/samples/$SAMPLE
git init
git add .
git commit -m init
git remote add origin https://github.com/$GITHUB_ORG/$GITHUB_REPO.git
git branch -M main

# This will now ask for your GitHub username & password
# for the password use the personal access token
git push -u origin main
  1. कोई भी बदलाव करने के बाद, उन बदलावों को GitHub में डालें:
git add .
git status
git diff --staged
git commit -am "my changes"
git push

GitHub डेस्कटॉप की मदद से अपना कोड पुश करना

  1. पिछले "स्थानीय रूप से डेवलप करें" के निर्देशों का इस्तेमाल करके अपना कोड डाउनलोड करें लैब
  2. GitHub डेस्कटॉप इंस्टॉल करें, इसे लॉन्च करें, और लॉगिन करें
  3. अपने नए रेस्टोरेंट का क्लोन बनाएं

cf7f38c7c86a91cd.png

  1. फ़ाइल एक्सप्लोरर खोलें और अपने प्रोजेक्ट को नए डेटा स्टोर करने की जगह में कॉपी करें
  2. किए गए बदलावों को कमिट करना

5f3c1552e30ad7c5.png

  1. GitHub पर अपनी मुख्य शाखा पब्लिश करना

Cloud Run की लगातार डिप्लॉयमेंट सुविधा सेट अप करना

GitHub पर SCM सेटअप करने के बाद, अब लगातार डिलीवरी की सुविधा सेटअप की जा सकती है. इससे, जब भी main ब्रांच में नई कॉपी बनाई जाएंगी, तब Cloud Build अपने-आप बदलाव बनाकर डिप्लॉय कर देगा. आपके पास कंटिन्यूअस इंटिग्रेशन को जोड़ने की सुविधा भी होती है जो डिप्लॉय करने से पहले, आपके टेस्ट करता है. हालांकि, उस चरण को आपके लिए एक कसरत के तौर पर छोड़ दिया गया है, क्योंकि आउट-ऑफ़-द-आउट सैंपल में कोई टेस्ट शामिल नहीं होता.

  1. Cloud Console में, Cloud Run सेवा पर जाएं
  2. "लगातार प्रोग्राम सेट अप करें" पर क्लिक करें बटन
  3. GitHub से पुष्टि करें और अपनी माइक्रोसर्विस का डेटा स्टोर करने की जगह चुनें

a3b5692f178869bc.png

  1. GitHub रेपो चुनें और ब्रांच को इस पर सेट करें: ^main$

338f1c00f33d2f65.png

  1. Buildpack इस्तेमाल करने के लिए, बिल्ड टाइप सेट करना
  2. 'लगातार डिप्लॉयमेंट' को सेटअप करने के लिए, 'सेव करें' पर क्लिक करें.

8. जांचने की क्षमता

चीज़ें टूट जाती हैं. निगरानी की सुविधा से हमें यह पता चलता है कि ऐसा कब होता है और उसकी वजह क्या है. मेट्रिक से हमें अपनी सेवा की परफ़ॉर्मेंस और उसके इस्तेमाल से जुड़ा डेटा मिलता है. लॉग हमें हमारी सेवा से उत्सर्जित की गई मैन्युअल रूप से इंस्ट्रुमेंट की गई जानकारी दिखाता है. सूचनाओं की मदद से, कुछ गलत होने पर हमें इसकी सूचना दी जाती है. आइए, इनके बारे में ज़्यादा जानें.

मेट्रिक

  1. Cloud Run सेवाओं की सूची में अपनी सेवा ढूंढें
  2. अपनी सेवा के मेट्रिक डैशबोर्ड पर जाने के लिए, सेवा के नाम पर क्लिक करें

8491b8ec6bc5b4db.png

  1. किसी मेट्रिक के मेन्यू पर क्लिक करें. इसके बाद, "मेट्रिक एक्सप्लोरर में देखें" चुनें
  2. अब आपके पास संसाधन की मेट्रिक, फ़िल्टर, ग्रुपिंग, और अन्य विकल्पों को बदलने का विकल्प है. उदाहरण के लिए, सभी सेवाओं के लिए सेवा के इंतज़ार का औसत समय देखा जा सकता है:

f0d666d8f4221d45.png

लॉग

सेवाओं से STDOUT आउटपुट, Google Cloud के लॉगिंग सिस्टम को भेजा जाता है. Cloud Run सेवा के एडमिन पेज से, लॉग का बुनियादी व्यू ऐक्सेस किया जा सकता है. जैसे:

40058a82c9299cff.png

Cloud Run के लॉग में, गंभीरता के हिसाब से और लॉग को फ़िल्टर किया जा सकता है. ज़्यादा विकल्प पाने के लिए, यहां क्लिक करें: 186fdb0e6d39a6ca.png

चेतावनियां

  1. अपनी सेवा के लिए हीथचेक यूआरएल बनाएं.
  2. Spring Boot के लिए, सिर्फ़ यह डिपेंडेंसी जोड़ें:
org.springframework.boot:spring-boot-starter-actuator
  1. src/main/resources/application.properties बनाएं या अपडेट करें और डिस्कस्पेस जांच बंद करें:
management.health.diskspace.enabled=false
  1. अपना प्रोटोकॉल, होस्टनेम, और पाथ बताने के लिए एक अपटाइम अलर्ट बनाएं. Spring Boot के लिए पाथ यह है: /actuator/health
  2. चेतावनी की जांच करना

6948d13b263bf573.png

  1. सूचना बनाना

9. बधाई हो

बधाई हो, आपने एक ऐसा माइक्रोसर्विस बनाया और डिप्लॉय किया है जो अन्य माइक्रोसर्विस से मुकाबला कर सकता है! शुभकामनाएं!

पहचान फ़ाइलें