13 מסגרות Java למיקרו-שירותים סלעיים

זה היה טיול ארוך עבור ג'אווה, שפה שהתחילה כשפת השפה עבור התיבה על גבי מכשיר הטלוויזיה בימים שבהם הטלוויזיות לא הגיעו עם Roku או Chromecast מובנה. ואז ג'אווה התכוונה להיות הבעלים של הרשת העולמית על ידי אנימציה של הדפדפן לפני ש- JavaScript יגיע וירפק אותו מהדרך.

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

בינתיים, JavaScript באופן כללי ו- Node.js בפרט תיגרו על ג'אווה בשרת, תוך שימוש בתפוקה הגבוהה שלהם ובמהירות ללא חוטים כדי להשתלט על נתח עצום מהתנועה באינטרנט. Node תפס את דמיונם של המתכנתים החדשים ביותר בצד השרת בכך שהוא מציע לא רק מהירות ויעילות משאבים אלא גם את הפשטות של הקוד המופעל הן על הלקוח והן על השרת.

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

סיבה נוספת חייבת להיות המשך האבולוציה של השפה. Java 8 מציע תמיכה מוצקה בשפות הפונקציונליות כמו Scala ו- Kotlin. ה- JVM מהווה כעת בסיס לרבים מהניסויים הטובים ביותר בפיתוח שפות מחשב. עשרות שפות חדשות יכולות להצטבר לקוד בתים ג'אווה ולהתחבר זו לזו כדי לגרום לפרויקטים מורכבים לעבוד יחד. רבים מהערימות הפועלות בצורה חלקה ב- JVM עשויות להיבנות על ידי תערובת של Java ומספר שפות אחרות.

הסיבה הגדולה ביותר, עם זאת, חייבת להיות אינרציה מוחלטת. בזמן שאני כותב, 371 משרות עבור מתכנתים של COBOL רשומות על קוביות. יש הרבה-הרבה יותר משרות עם המילה Java. האם זה מפתיע שצוותים חכמים מסתכלים על ערימות ענקיות של קוד ג'אווה מזדקן וחושבים שהפתרון הפשוט ביותר הוא רק להוסיף דלת צדדית שיורקת את הנתונים כמבני נתונים JSON? וואלה. הקוד הישן ממשיך לפעול, אך הוא פועל כמו שירות מיקרו מודרני בדלתות הצדדיות הללו.

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

להלן רשימה של 13 אפשרויות קוד פתוח שמשתמשי ג'אווה משתמשים בהן כדי לפתור פתרונות המהווים את הבסיס לאדריכלות מיקרו-שירות בכל מקום.

מגף אביב

עולם ג'אווה בונה יישומי אביב מזה זמן רב. Spring Boot הוא גרסה מסוימת של Spring שמקלה על התהליך בהרבה על ידי טיפול בפרטי התצורה הרבים עבורך. Spring Boot נוצר בכדי להפוך את הפרויקטים לאביב אוטומטיים מכל סוג שהוא, ולא רק שירותי מיקרו. כדי להפוך את הדברים לפשוטים עוד יותר, לאחר שתסיים עם היישום, Spring Boot מתערבב בשרת אינטרנט ויורק קובץ JAR יחיד שהוא פחות או יותר כל מה שאתה צריך פרט ל- JVM. חשוב על זה כעל מיכל ה- Docker המקורי.

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

שירותי המיקרו שפותחו עם Spring עוקבים אחר אותה פילוסופיית MVC כמו יישומי האינטרנט המאקרו שבנינו במשך שנים. המסגרת נהנית מכל החיבורים העמוקים שנבנו לאורך שנים של פיתוח ג'אווה, כולל אינטגרציה עם כל מאגרי הנתונים הגדולים והקטנים, שרתי LDAP וכלי העברת הודעות כמו Apache Kafka. יש גם עשרות תכונות קטנות ולא מעטות לשמירה על אוסף שרתים פועל, תכונות כמו Spring Vault, כלי לשמירה על הסודות, הסיסמאות והאישורים הדרושים לשרתים בייצור. כל היתרונות הללו מראים מדוע מתכנתים של Java מצטרפים לעגלה מזה שנים רבות.

Eclipse MicroProfile

בשנת 2016, חלק ממעריצי קהילת Java Enterprise הסתכלו סביבם והחליטו לנקות את כל הגרוטאות ממהדורת Java Enterprise כדי שאנשים יוכלו לבנות מיקרו-שירותים פשוטים עם החלקים הקלאסיים. הם העיפו מספר מפתיע של ספריות, אך שמרו קוד לעיבוד בקשות REST, ניתוח JSON וניהול הזרקת תלות. מה שהם בסופו של דבר, שכונה Eclipse MicroProfile, היה מהיר ופשוט.

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

אשף דרופ

כאשר Dropwizard הופיע בשנת 2011, הוא פתח את עיניהם של מפתחי Java Enterprise למידת הצורך בקוד. מסגרת Dropwizard העבירה מודל פשוט מאוד לפיתוח עם הרבה מההחלטות החשובות שהתקבלו עבורך, והיא המשיכה ללכת בדרך זו. אתה מוסיף קצת היגיון עסקי ואז כמעט כל דבר אחר מוגדר עבורך על פי המוסכמה. התוצאה היא קבצי JAR דקיקים שמשתמשים מהללים על כך שהם מתחילים במהירות.

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

זנב הקוץ של WildFly

אנשי רד האט בנו גרסה משלהם ל- MicroProfile עם כלי תצורה חלקלק. המסגרת נקראה במקור WildFly Swarm, אך אז שונה שמה ל- Thorntail. אתר Thorntail עוזר לך ליצור קובץ Maven משלך רק על ידי ציון התכונות הדרושות לך. לאחר מכן מייבן דואג להרכיב הכל.

Thorntail יאתר גם את הרכיבים העיקריים שתזדקק להם על ידי סריקת הקוד שלך, אך תוכל לעקוף זאת באמצעות קובץ BOM (שטר חומרים). כשכל זה פועל, Thorntail יפשיט את החלקים של מהדורת Java Enterprise שלא ישמשו וליצור קובץ JAR קטן ומוכן לפרוס עם פקודה אחת - תכונה חלקה המאפשרת לפרויקט Thorntail לקרוא לו Uber -קַנקַן. זו גישה נוספת לעקוב אחר המסורת של מהדורת Java Enterprise מבלי לשמור על כל המטען הכבד.

הלידון

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

האדריכלים של הלידון עקבו אחר הרבה מאותם נושאים שחוזרים על עצמם בפרויקטים האחרים כאן. קרע את גרסת ה- Java Enterprise Edition ושמור על הליבה הקלה, מבוססת servlet, שזיכתה את אמון העולם. במקרה של הלידון, המפתחים התחילו עם Netty והוסיפו מספיק קוד מספיק כדי לבצע ניתוב וטיפול בשגיאות. כדי להפוך את הדברים למעניינים, הם אימצו שני מודלים בסיסיים לקוד, מה שמכונה גרסאות SE ו- MP.

הלידון SE ייראה מוכר מאוד למתכנתים של Node.js עם השרשראות הארוכות של שיחות הפונקציה המצטרפות לתקופות. Helidon MP ייראה מוכר יותר עבור מתכנתי Java המשתמשים ב- JAX-RS. ישנם גם כמה כלים שימושיים ומוערכים היטב לבדיקת תקינות השרתים או למעקב אחר זרימת הנתונים דרך יער מיקרו-שירותים. אלו סיבות משכנעות לבחון את הפוטנציאל, גם ללא תמיכת אורקל.  

קרִיקֶט

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

ג'רזי

אחת הגישות הסטנדרטיות לפיתוח שירות אתרים היא Java API עבור שירותי אינטרנט RESTful (aka JAX-RS), מפרט כללי שהוטמע במסגרת ג'רזי. הגישה תלויה במידה רבה בשימוש בהערות כדי לציין את מיפוי הנתיב ופרטי ההחזרה. כל השאר מניתוח הפרמטרים ואריזת ה- JSON מטופל על ידי ג'רזי.

היתרון העיקרי של ג'רזי הוא בכך שהיא מיישמת את תקן JAX-RS, תכונה שרצויה מספיק כדי שחלק מהמפתחים ישלבו את ג'רזי עם Spring Boot כדי ליהנות משניהם יחד. 

לְשַׂחֵק

אחת הדרכים הטובות ביותר לחוות את העוצמה השפתית של ה- JVM היא באמצעות מסגרת ה- Play, ערימה של קוד Scala המתחבר לג'אווה או לכל אחת משפות ה- JVM האחרות. הבסיס הוא מודרני מאוד, עם דגם אסינכרוני וחסר מדינה שאינו מעמיס על השרת חוטים אינסופיים שמנסים לעקוב אחר המשתמשים ונתוני ההפעלה שלהם. יש גם מספר תכונות נוספות שניתן להשתמש בהן כדי לפרט אתר כמו OpenID, אימות ותמיכה בהעלאת קבצים.

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

יְהִירוּת

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

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

Swagger היא מערכת אקולוגית עבור ממשקי API והיא אינה מוגבלת ל- Java. אם הצוות שלך עובר ל- Node.js או לאחת מכמה עשרות שפות אחרות, יש מודול של Swagger Codegen שמחכה להמיר את מפרט ה- OpenAPI שלך ליישום בשפה זו.

Restlet

אחד ההבדלים הגדולים יותר בין המסגרות השונות הוא מספר החיבורים לשירותים וספריות אחרים. פרויקט Restlet מציע את אחד האוספים הגדולים יותר של תכונות וחיבורים. הוא כבר משולב בספריות כמו JavaMail, למקרה שמיקרו-שירות שלך יצטרך לדבר POP, IMAP או SMTP לשרת דואר כלשהו ולוסין / סולר, למקרה שתרצה לבנות מדדים הניתנים לחיפוש של נתחי טקסט גדולים והמטא-נתונים עטופים מסביב. זה.

האפשרויות ב- Restlet פשוט ממשיכות כי ערימה זו בדרך כלל תומכת בכמה אפשרויות שונות לכל חלק. אינך צריך להשתמש ב- JSON, למשל, מכיוון שהקוד יטפל ב- XML, CSV, YAML ועוד כמה פורמטים של קבצים. אתה מקבל מספר אפשרויות שונות עבור התבניות לבניית התגובה שלך. אחת התכונות הנוספות המסודרות יותר היא לקוח Restlet, המאפשר לך לבדוק את ה- API שלך מדפדפן Chrome.

קישוא

ניפוי באגים בשירותי מיקרו הוא לעתים קרובות אתגר אמיתי מכיוון שהחלקים משולבים כל כך באופן רופף וקשה לעקוב אחר זרימת הנתונים דרך כל שכבות המערכת. סקווש מאפשר לך להגדיר נקודות שבירה בקוד שלך הפועל באשכול Kubernetes ואז לקבל את כל הנתונים בחזרה ב- IDE שלך כאילו היו קוד שרץ באופן מקומי. סקווש משתלב גם עם זמני הפעלה של Node.js ו- Python למקרה שאוסף המיקרו-שירותים שלך אינו Java בלבד.

נוכחות טלפונית

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

זיפקין

Zipkin הוא מנגנון לרישום אירועים במיקרו-שירותים שונים ואז לתאם את האירועים כך שניתן יהיה לבודד וללמוד בעיות תוך כדי אדווה דרך אוסף המכונות. יש יישום Zipkin עבור Java כמו גם לפחות שש שפות אחרות, כך שניתן להתמודד עם מערכות רב לשוניות. בחלק מהמסגרות המתוחכמות ביותר כמו Spring כבר השתלב Zipkin בצורה כלשהי.