gRPC
gRPC (ראשי תיבות של gRPC Remote Procedure Calls[1]) היא פלטפורמת תוכנה חוצת-פלטפורמות בקוד פתוח לRPC. שכבת התוכנה gRPC נוצרה בתחילה על ידי גוגל, שהשתמשה בתשתית RPC יחידה למטרות כלליות בשם Stubby כדי לחבר את ההיקף הגדול של ה-microservices הפועלים בתוך ולרוחב מרכזי הנתונים שלה משנת 2001 בערך[2] במרץ 2015, גוגל החליטה לבנות את הגרסה הבאה של Stubby ולהפוך אותה לקוד פתוח. התוצאה הייתה gRPC, שמשמשת כיום בארגונים רבים מלבד גוגל להעצים מקרי שימוש מע-microservices ועד ל"last mile" של מחשוב (ניידים, אינטרנט ואינטרנט של הדברים). הוא משתמש ב-HTTP/2 לתעבורת מידע, במאגרי פרוטוקול (Protocol Buffers) כשפת תיאור הממשק, ומספק תכונות כגון אימות, סטרימינג דו-כיווני ובקרת זרימה, חסימה או אי-חסימה של קישורים, וכן ביטול וחדלות-זמן (timeouts). הוא מייצר חיבורים בין פלטפורמות ללקוח ולשרת עבור שפות רבות. תרחישי השימוש הנפוצים ביותר כוללים חיבור שירותים בארכיטקטורה בסגנון מיקרו-שירותים, או חיבור לקוחות מכשירים ניידים לשירותי קצה.[3]
השימוש המורכב של gRPC ב-HTTP/2 לא מאפשר ליישם לקוח gRPC בדפדפן, אלא עם שימוש בפרוקסי.[4]
אימות
gRPC תומך בשימוש ב-TLS ובאימות מבוסס אסימון (token-based authentication). חיבור לשירותי גוגל חייב להשתמש ב-TLS. ישנם שני סוגים של אישורים: אישורי ערוץ ואישורי שיחה. להרשאה מבוססת אסימון, gRPC מספקת שרת מיירט[5] ויירוט לקוח.[6]
הצפנה
gRPC משתמש במאגרי פרוטוקול כדי לקודד נתונים. בניגוד לממשקי API של REST עם JSON, יש להם מפרט קפדני יותר. בשל מפרט אחוד, gRPC מבטל ויכוחים וחוסך זמן למפתחים מכיוון ש-gRPC עקבי בין פלטפורמות ויישומים.[7]
אימוץ
מספר ארגונים שונים אימצו את gRPC, כגון Uber,[8] Square, Netflix, IBM, CoreOS, Docker, CockroachDB, Cisco, Juniper Networks,[9] Spotify,[10] Zalando,[11] Dropbox,[12] ו-Google כמפתחת המקורית.
פרויקט הקוד הפתוח u-bmc משתמש ב-gRPC כדי להחליף ממשק ניהול פלטפורמה חכמה (IPMI).[13] ב-8 בינואר 2019, Dropbox הודיעה כי הגרסה הבאה של "Courier", מסגרת ה-RPC שלהם בליבת הארכיטקטורה מוכוונת השירות (SOA), תועבר להתבסס על gRPC, בעיקר בגלל שהיא תואמת היטב את המנהג הקיים שלהם. מסגרות RPC.[14]
חלופות ל-gRPC
- Cap'n Proto
- Apache Thrift
- Apache Avro
- JSON-RPC
- XML-RPC
קישורים חיצוניים
הערות שוליים
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"
- ^ בתהליכי בנייה "תבנית:Cite web"