יצירת שירות אינטרנט

בדף הזה מוסבר איך ליצור שירות אינטרנט במכונה הווירטואלית באמצעות Gin, מסגרת אינטרנט שנכתבה ב-Golang. אתם יכולים לבחור ליצור את שירות האינטרנט בכל מסגרת אחרת שבה אתם רוצים להשתמש.

  1. כדי להוריד את חבילת Go במכונת ה-VM, מריצים את הפקודה הבאה במכונת ה-VM:
    wget https://go.dev/dl/go1.22.5.linux-amd64.tar.gz
      
  2. מתקינים את Go במכונה הווירטואלית. מידע נוסף מופיע במאמר התקנת Go.
  3. כדי ליצור ספרייה חדשה לשירות האינטרנט, מריצים את הפקודה הבאה:
    mkdir SERVICE_REPO
      cd SERVICE_REPO
      

שיקולים נוספים

כשיוצרים שירות אינטרנט, חשוב לשים לב לשיקולים הבאים:

  • הנתונים שנדרשים במהלך יצירת המכונה הווירטואלית זמינים כמשתני סביבה, והם מתחילים בקידומת הבאה: CONNECTOR_ENV_.
  • כשמגדירים את שירות האינטרנט, משתמשים במשתני הסביבה כדי לקרוא את הערכים האלה.
  • במהלך יצירת המכונה הווירטואלית, צריך להזין רק את הערכים שנדרשים להגדרת שירות האינטרנט.
  • היציאה של השירות צריכה להתקבל כקלט מהמשתנה CONNECTOR_ENV_PORT.
  • משתמשים במשתני סביבה אחרים לקלט אופציונלי.
  • אפשר גם לקבל קלט במהלך יצירת החיבור. אפשר להגדיר את השדות האלה כשיוצרים את המחבר המותאם אישית ולהעביר אותם כנתיב, כשאילתה או ככותרות בכל קריאה ל-API.
  • מוודאים שהשרת פועל ב-localhost.

רישום ביומן

רושמים ביומן את המידע הנדרש ושולחים את היומנים אל Cloud Logging. כך צרכני המחברים יכולים לעקוב אחרי כשלים ולנפות באגים. כדי לפרסם יומנים ב-Cloud Logging, אפשר להשתמש בלקוח Cloud Logging הבא שזמין ב-Go: ‏ https://pkg.go.dev/cloud.google.com/go/logging#NewClient

צריך לאתחל את כלי הרישום ב-main ולהוסיף תוכנת ביניים ב-Gin כדי לעקוב אחרי כל הבקשות הנכנסות. אתם צריכים לעקוב אחרי השיטה, הנתיב, הסטטוס והחביון של בקשה. כדי לסנן את היומנים, משתמשים ברמת החומרה המתאימה בזמן הרישום ביומן. בשירות האינטרנט, קוראים את רמת היומן ממשתנה הסביבה. רמת היומן נלקחת כקלט אופציונלי במהלך יצירת המכונה הווירטואלית. כברירת מחדל, אפשר להשתמש ביומני מידע. אלה רמות היומן:

  • DEBUG: מתעד כל חלק בבקשה, כולל עקבות של בקשות/תגובות HTTP.
  • מידע: רישום של הפעלת השירות, סגירת השירות, בקשות ומידע אחר.
  • שגיאה: נרשם כשל בבקשת יומנים, חריגים בפורמט ושגיאות אחרות.

כיבוי מבוקר

מגדירים את השרת כך שיכבה בצורה מסודרת ויטפל בבקשות שנמצאות בתהליך. מידע על הפעלה מחדש או עצירה של השרת בצורה מסודרת זמין במאמר הפעלה מחדש או עצירה בצורה מסודרת.

בו-זמניות (concurrency)

שרתי Gin תומכים באופן מובנה בבקשות בו-זמניות באמצעות Go routines. כברירת מחדל, מותר לעבד מספר לא מוגדר של בקשות באמצעות Go routines. עם זאת, במקרים מסוימים, כשצפוי שיהיו בקשות שידרשו הרבה משאבים, כדאי להשתמש במאגרי עובדים כדי להגביל את הבקשות בשרת ולשמור אותן במאגר זמני. מידע נוסף זמין במאמר דוגמה למאגרי עובדים.

בדיקה ויצירה של הקובץ הבינארי

  1. מגדירים את היציאה ומריצים את השרת באמצעות הפקודות הבאות:
  2. EXPORT CONNECTOR_ENV_PORT = 8081
    go get .
    go run .

    הפקודות האלה מאגדות את הספריות הנדרשות ומריצות את השרת.

  3. כדי לאמת את השרת, מריצים את פקודת ה-curl הבאה במכונה הווירטואלית:
    curl -X POST -H "Content-Type: application/json" -H "X-Custom-Header: MyValue" -d '{"name": "Alice", "address": "123 Main St", "gender": "F"}' http://localhost:8081/postData/456
    curl -v http://localhost:8081/getData -H "TestKey: MyValue"
  4. יוצרים את הקובץ הבינארי ומשתמשים בו כאימג' של המכונה הווירטואלית באמצעות הפקודה הבאה:
    go build -o SERVICE_NAME
  5. מעבירים את הקובץ הבינארי לתיקיית הבסיס באמצעות הפקודה הבאה:
    sudo cp SERVICE_NAME /opt
  6. מריצים שוב את השירות כדי לוודא שהקובץ הבינארי פועל כצפוי באמצעות הפקודה הבאה:
    sudo chmod +x SERVICE_NAME
    ./SERVICE_NAME

העברת האפליקציה לקונטיינר

  1. מתקינים את Docker. מידע נוסף מופיע במאמר התקנת Docker.
  2. יוצרים קובץ Docker כדי להפעיל קבצים בינאריים.
    FROM alpine:latest
    WORKDIR /opt
    COPY . .
    CMD ["./SERVICE_NAME"]
  3. מריצים את הפקודה הבאה כדי לבנות את קונטיינר המחבר:
    sudo docker build -t connector-container .
  4. מריצים את מאגר ה-Docker. מגדירים את --restart=unless-stopped כדי להפעיל מחדש את השירות במקרה של כשל לא צפוי.

משימה ברמת מאגר התגים

אפשר להפנות את כל היומנים ב-stdout אל Cloud Logging באמצעות מנהל היומנים gcplogs בזמן הפעלת מאגר Docker. כך אפשר לעקוב אחרי הפעלה, כשל לא צפוי או כיבוי של השירות.

כדי לנתב את היומנים אל Cloud Logging, מריצים את הפקודה הבאה:
  sudo docker run --name connector-service -e
  CONNECTOR_ENV_PORT=$CONNECTOR_ENV_PORT -p
  $CONNECTOR_ENV_PORT:$CONNECTOR_ENV_PORT --restart=unless-stopped ----log-driver=gcplogs connector-container

המאמרים הבאים