מיקרוסרוויסים וקונטיינרים מהפכים את דרך בניית, פרסום, וניהול אפליקציות מודרניות בענן. אולם, פיתוח והפעלה של מיקרוסרוויסים עשויים להביא לקריטיות משמעותית, דורשים לפעמים ממפתחים לבלות זמן יקר בנושאים כמו גילוי שירות, ניהול מצב, וניתוח.
Dapr, או סביבת הריצה לאפליקציות מבוזרות, היא סביבת ריצה קוד פתוחה לבניית מיקרוסרוויסים בעננים וסביבות Edge. היא מספקת לבלוקים בנייה פלטפורמה-לא תלויתית כמו גילוי שירות, ניהול מצב, פרסום/הרשמה, וניתוח מראש. Dapr העבירה לרמת השכיחות הגבוהה של CNCF (מוסד המחשוב הענן הנייטיבי) וכיום בשימוש בעסקים רבים.
בשילוב עם שירות Amazon Elastic Kubernetes (Amazon EKS), שירות Kubernetes ניהולי מופעל מהענן של AWS, Dapr עשוי להאיץ את המעבר למיקרוסרוויסים וקונטיינרים, מאפשר למפתחים להתמקד בכתיבת הלוגיקה העסקית בלי לדאוג לתשתיות. Amazon EKS עושה את ניהול אשכולות Kubernetes קל, מאפשר סילוק נפשי עם שינויים בעומסי עבודה.
בפוסט הבלוג הזה, נבחן כיצד Dapr מפשט את פיתוח המיקרוסרוויסים על Amazon EKS. נתחיל על ידי חקירת שני בלוקים בנייה חיוניים:שיחות לשירות וניהול מצב.
קריאת שירות
תקשורת חלקה ואמינה בין מיקרו-שירותים היא חשובה מאוד. עם זאת, מפתחים לעיתים קרובות מתקשים במשימות מורכבות כמו גילוי שירותים, סטנדרטיזציה של APIs, אבטחת ערוצי תקשורת, טיפול בכשלים בצורה אלגנטית, ויישום מעקב.
עם קריאת השירות של Dapr, בעיות אלו הופכות להיות חלק מהעבר. השירותים שלכם יכולים לתקשר בקלות זה עם זה באמצעות פרוטוקולים סטנדרטיים בתעשייה כמו gRPC ו-HTTP/HTTPS. קריאת השירות מטפלת בכל העומס, החל מרישום וגילוי שירותים ועד חזרת בקשות, הצפנה, בקרת גישה, ומעקב מפוזר.
ניהול מצב
בלוק הבנייה של ניהול המצב של Dapr מפשט את הדרך שבה מפתחים עובדים עם המצב באפליקציות שלהם. הוא מספק API עקבי לאחסון ושליפת נתוני מצב, ללא קשר לאחסון המצב הבסיסי (למשל, Redis, AWS DynamoDB, Azure Cosmos DB).
ההפשטה הזו מאפשרת למפתחים לבנות אפליקציות עם מצב מבלי לדאוג למורכבות של ניהול והסבת אחסוני מצב.
דרישות מוקדמות
כדי לעקוב אחרי הפוסט הזה, עליך להיות בעל:
- חשבון AWS. אם אין לך אחד, תוכל להירשם לאחד.
- משתמש IAM עם הרשאות תקינות. הפרינסיפל בטיחות IAM שאתה משתמש חייב לקבל הרשאה לעבוד עם תפקידי IAM של Amazon EKS, תפקידים מקושרים לשירות, AWS CloudFormation, VPC ומשאבים קשורים. למידע נוסף, ראה פעולות, משאבים ומפתחות תנאי עבור שירות Amazon Elastic Container Service for Kubernetes ו- שימוש בתפקידים מקושרים לשירות במדריך למשתמש של ניהול גישה וזיהוי של AWS.
ארכיטקטורת אפליקציה
בתרשים שמתחת לכתבה, יש לנו שני שירותים מיקרו: אפליקציית Python ואפליקציית Node.js. אפליקציית ה-Python יוצרת נתוני הזמנה וקוראת לקצה ה-/neworder
שנחשף על ידי אפליקציית ה-Node.js. אפליקציית ה-Node.js כותבת את נתוני ההזמנה הנכנסים לאחסון מצב (במקרה זה, Amazon ElastiCache) ומחזירה מזהה הזמנה לאפליקציית ה-Python כתשובה.
על ידי השתמשות בבנקאי הקריאה לשירות של Dapr, אפליקציית ה-Python יכולה לתקשר בצורה חלקה עם אפליקציית ה-Node.js מבלי לדאוג לגילוי שירות, תקן API, אבטחת ערוץ תקשורת, טיפול בתקלות או תצפיתות. היא מממשת mTLS כדי לספק תקשורת מאובטחת בין שירותים.
Dapr עוסקת באלה הצרכים הצותמים, מאפשרת למפתחים להתמקד בכתיבת הלוגיקה העסקית המרכזית.
בנוסף, לבלוק בנייה לניהול מצב של Dapr מקל על אינטראקציית האפליקציה של Node.js עם חנות המצב (Amazon ElastiCache). Dapr מספק API עקבי עבור אחסון ואחזור נתוני מצב, מסייע בהסתרת המורכבויות של ניהול והתפלגות של חנות המצב הבסיסית. ההסתרה הזו מאפשרת למפתחים לבנות אפליקציות מצביות בלי לדאוג לפרטי הניהול של חנות המצב.
קבוצת Amazon EKS מארחת מרחב שמוכנה בשם dapr-system
, המכילה את רכיבי פלטפורמת השליטה של Dapr. ה-dapr-sidecar-injector
מטמיע באופן אוטומטי ריצת Dapr לתוך הקפצות השירותים הקטנים שמאופשרים על ידי Dapr.
שלבי קריאת השירות
- שירות יוצר הזמנות (יישומון Python) קורא לשיטת האפליקציה של ה-Node,
/neworder
. בקשה זו נשלחת לצד Dapr המקומי, הפועל באותו קפץ כמו היישומון Python. - Dapr מפתיר את היישומון היעד באמצעות ספק ה-DNS של קבוצת Amazon EKS ושולח את הבקשה לצד ה-Node של היישומון.
- צד ה-Node של היישומון משלח אז הבקשה למיקרוסרוויס של היישומון ה-Node.
- היישומון ה-Node כתב את זיהוי ההזמנה שקיבל מהיישומון Python ל-Amazon ElasticCache.
- היישומון ה-Node שולח את התגובה לצד Dapr המקומי שלו.
- צד ה-Node של היישומון מעביר את התגובה לצד Dapr של היישומון ה-Python.
- צד ה-קרון של היישומון Python מחזיר את התגובה ליישומון ה-Python, שהתחיל את הבקשה לשיטת האפליקציה של ה-Node
/neworder
.
שלבי ההתקנה
צור ואשר את אשף EKS
כדי להקים אשף Amazon EKS (שירות Kubernetes אלסטי) תצטרך למעקב אחר מספר שלבים. הנה סקירה גובהנית של התהליך:
דרישות מוקדמות
- התקן והגדר את AWS CLI
- התקן את
eksctl
,kubectl
, ו- AWS IAM Authenticator
1. צור אשף EKS. השתמש ב־eksctl
כדי ליצור אשף בסיסי באמצעות פקודה דומה לזו:
eksctl create cluster --name my-cluster --region us-west-2 --node-type t3.medium --nodes 3
2. הגדר את kubectl. עדכן את kubeconfig
שלך כדי להתחבר לאשף החדש:
aws eks update-kubeconfig --name my-cluster --region us-west-2
3. אמת את האשף. בדוק האם הצמתים שלך מוכנים:
kubectl get nodes
התקן DAPR על האשף EKS שלך
1. התקן את DAPR CLI:
wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash
2. אמת את ההתקנה:
dapr -h
3. התקן את DAPR ואמת:
dapr init -k --dev
dapr status -k
רכיבי Dapr statestore
ו־pubsub
נוצרים בקירוב הברירת מחדל. תוכל לבדוק זאת על ידי השימוש בפקודה הבאה:
dapr components -k
הגדר את Amazon ElastiCache כציר המצב שלך ב-Dapr
צור את Amazon ElastiCache כדי לאחסן את המצב של המיקרוסרוויס. בדוגמא זו, אנו משתמשים ב-ElastiCache בריצה עצמית, שמייצרת במהירות מטמון שמתאים באופן אוטומטי לדרישות תעבורת היישום ללא שרתים לניהול.
קבע את קבוצת האבטחה של ה-ElastiCache כך שתאפשר חיבורים מהאשכול שלך ב-EKS. לצורך פשטות, השאר אותו ב-VPC כמו האשכול שלך. שים לב לכתובת האינטרנט של המטמון, שנזדקך בשלבים הבאים.
הפעלת אפליקציה לדוגמה
1. שכפל את המאגר של ה-Git של האפליקציה לדוגמה:
git clone https://github.com/dapr/quickstarts.git
2. צור את redis-state.yaml
וספק את כתובת ה-Amazon ElasticCache עבור redisHost
:
apiVersion dapr.io/v1alpha1
kind Component
metadata
name statestore
namespace default
spec
type state.redis
version v1
metadata
name redisHost
value redisdaprd-7rr0vd.serverless.use1.cache.amazonaws.com6379
name enableTLS
value true
החל yaml
תצורה עבור רכיב אחסון מצב באמצעות kubectl
.
kubectl apply -f redis-state.yaml
3. העלה שירותים קטנים עם ה-sidecar.
עבור אפליקציית הצומת של השירות הקטן, נווט אל קובץ ה-/quickstarts/tutorials/hello-kubernetes/deploy/node.yaml
ותראה את ההערות הבאות. זה מודיע לפלטפורמת השליטה של Dapr להכניס תוסף צד וגם להקצות שם לאפליקציית Dapr.
annotations
dapr.io/enabled"true"
dapr.io/app-id"nodeapp"
dapr.io/app-port"3000"
הוסף הערת שירות service.beta.kubernetes.io/aws-load-balancer-scheme: "internet-facing" ב-node.yaml
כדי ליצור AWS ELB.
kind Service
apiVersion v1
metadata
name nodeapp
annotations
service.beta.kubernetes.io/aws-load-balancer-scheme"internet-facing"
labels
app node
spec
selector
app node
ports
protocol TCP
port80
targetPort3000
type LoadBalancer
השג את אפליקציית הצומת באמצעות kubectl
. נווט אל התיקייה /quickstarts/tutorials/hello-kubernetes/deploy
ובצע את הפקודה הבאה.
kubectl apply -f node.yaml
קבל את ה-AWS NLB, שמופיע תחת כתובת ה-IP החיצונית, בפלט של הפקודה הבאה.
kubectl get svc nodeapp http://k8s-default-nodeapp-3a173e0d55-f7b14bedf0c4dd8.elb.us-east-1.amazonaws.com
נווט אל התיקייה /quickstarts/tutorials/hello-kubernetes
, שיש בה את קובץ ה-sample.json
כדי לבצע את השלב הבא.
curl --request POST --data "@sample.json" --header Content-Type:application/json http://k8s-default-nodeapp-3a173e0d55-f14bedff0c4dd8.elb.us-east-1.amazonaws.com/neworder
ניתן לאמת את הפלט על ידי גישה לנקודת הקצה /order
באמצעות המאזין בדפדפן.
http://k8s-default-nodeapp-3a173e0d55-f7b14bedff0c4dd8.elb.us-east-1.amazonaws.com/order
תראו את הפלט כך: {“OrderId”:“42”}
לאחר מכן, הפעילו את אפליקציית פייתון של השירות המיקרו השני, שיש בו לוגיקת עסק ליצירת מזהה הזמנה חדש בכל שנייה ולקרוא לשיטת האפליקציה הנודית /neworder
.
נווטו אל תיקיית /quickstarts/tutorials/hello-kubernetes/deploy
ובצעו את הפקודה הבאה.
kubectl apply -f python.yaml
4. אימות ובדיקת ההפצה של האפליקציה שלך.
עכשיו שיש לנו את שני שירותי המיקרו המופעלים. האפליקציה של פייתון יוצרת הזמנות ומקראת ל/neworder
כפי שמוצג בלוגים למטה.
kubectl logs --selector=app=python -c daprd --tail=-1
time"2024-03-07T12:43:11.556356346Z" levelinfo msg"HTTP API Called" app_idpythonapp instancepythonapp974db9877dljtw method"POST /neworder" scopedapr.runtime.httpinfo typelog useragentpythonrequests2.31.0 ver1.12.5
time"2024-03-07T12:43:12.563193147Z" levelinfo msg"HTTP API Called" app_idpythonapp instancepythonapp974db9877dljtw method"POST /neworder" scopedapr.runtime.httpinfo typelog useragentpythonrequests2.31.0 ver1.12.5
ניתן לראות שאפליקציית הנוד מקבלת את הבקשות וכותבת למאגר המצב Amazon ElasticCache בדוגמתינו.
kubectl logs —selector=app=node -c node —tail=-1
Got a new order Order ID: 367
Successfully persisted state for Order ID: 367
Got a new order Order ID: 368
Successfully persisted state for Order ID: 368
Got a new order Order ID: 369
Successfully persisted state for Order ID: 369
על מנת לאשר אם הנתונים נשמרים ב-Amazon ElasticCache אנו ניגשים לנקודת הקצה /order
למטה. מחזירה את מזהה ההזמנה האחרון, שנוצר על ידי אפליקציית הפייתון.
http://k8s-default-nodeapp-3a173e0d55-f7b14beff0c4dd8.elb.us-east-1.amazonaws.com/order
תראו פלט עם הזמנה האחרונה כך: {“OrderId”:“370”}
.
ניקוי
הריצו את הפקודה הבאה כדי למחוק את ההפצות של אפליקציית הנוד והפייתון יחד עם רכיב מאגר המצב.
נווטו אל תיקיית /quickstarts/tutorials/hello-kubernetes/deploy
כדי לבצע את הפקודה הבאה.
kubectl delete -f node.yaml
kubectl delete -f python.yaml
ניתן להשליך את אשכול ה-EKS שלך באמצעות הפקודה eksctl
ולמחוק את Amazon ElastiCache.
נווטו אל התיקייה שיש בה את קובץ ה-cluster.yaml
המשמש ליצירת האשכול בשלב הראשון.
eksctl delete cluster -f cluster.yaml
סיכום
Dapr ו-Amazon EKS יוצרים ברית עוצמתית עבור פיתוח שירותי מיקרו. Dapr מפשט דאגות חותכות, בעוד ש-EKS ניהלת את תשתיות ה-Kubernetes, מאפשרת למפתחים להתמקד בלוגיקת עסקית עיקרית ולשפר את היציבות.
שילוב זה מאיץ את יצירת היישומים הקטנים, העמידים והמתפקדים, ומפחית באופן משמעותי את העומס התפעולי. זהו בסיס אידיאלי למסע שלך עם שירותי המיקרו. צפו בפוסטים הבאים שמבחנים את יכולותיהם של Dapr ו-EKS בעקרונות מעקב ותצפית מבוזרים, המציעים תובנות עמוקות ושיטות מומלצות.
Source:
https://dzone.com/articles/streamline-microservices-development-with-dapr-amazon-eks