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

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 (ठीक है) होना चाहिए. इसमें रिस्पॉन्स के मुख्य हिस्से में आपकी अगली मूव शामिल होना चाहिए. इसे इनमें से किसी एक के अपरकेस वर्ण से कोड में बदला जाता है:

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

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

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

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

3. आपकी माइक्रोसेवा को डिप्लॉय किया जा रहा है

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

शुरुआत करने के लिए अपना सैंपल चुनें

यहां युद्ध से जुड़ी माइक्रोसर्विस के कई सैंपल दिए गए हैं, जिनसे शुरुआत की जा सकती है:

Kotlin और स्प्रिंग बूट

सोर्स

Kotlin और Micronaut

सोर्स

Kotlin और क्वार्कस

सोर्स

Java और स्प्रिंग बूट

सोर्स

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

क्लाउड शेल, एडिटर के साथ सैंपल प्रोजेक्ट खुला हुआ है

अपने बदलावों को सेव करने के बाद, 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 में अपना प्रोजेक्ट बनाएं. यह निर्देश, प्रोजेक्ट टाइप का पता लगाने, उसे कंपाइल करने, और डिप्लॉय किया जा सकने वाला आर्टफ़ैक्ट (डॉकर कंटेनर इमेज) बनाने के लिए, Buildpacks का इस्तेमाल करता है.

# 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 में भेजने के लिए, 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 \
          --allow-unauthenticated

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

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

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

  1. [क्लाउड शेल में] सैंपल की ज़िप फ़ाइल बनाएं:
# 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 क्लाउड में लॉगिन करें:
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 डेस्कटॉप GUI ऐप्लिकेशन (Windows या Mac) का इस्तेमाल किया जा सकता है. अगर Cloud Shell का इस्तेमाल किया जा रहा है, तो आपको git सीएलआई का इस्तेमाल करना होगा. GitHub पर अपने माइक्रोसर्विस का कोड पाने के लिए, सीएलआई या GitHub डेस्कटॉप के निर्देशों का पालन करें.

git CLI के साथ अपना कोड पुश करें

  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 संगठन और रेपो के लिए env vars सेट करें (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 की मदद से पुष्टि करें और अपने Microsofterivce के रिपॉज़िटरी (डेटा स्टोर करने की जगह) को चुनें

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

6948d13b263bf573.png

  1. अलर्ट बनाएं

9. बधाई हो

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

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