אינטגרציה של Alchemy API: נקודות תורפה בעומסי שיא
אפליקציה שקוראת יתרות, אירועים ומצב חוזים דרך צומת אחד מחזיקה מעמד עד הפרץ הראשון. כל עוד מדובר בעשרות בקשות בדקה, הכול צפוי; בעומס שיא — בעת השקת קמפיין או חלוקת טוקנים — התור לצומת גדל, והממשק מתחיל להחזיר נתונים מיושנים. המשתמש רואה יתרה אפס או פעולה בלי אישור ועובר למקום שבו הממשק מגיב.
מגבלות הבקשות לצומת בנויות בצורה נוקשה: בנקודות גישה ציבוריות הסף למספר הקריאות בשנייה נמוך מאשר בצמתים ייעודיים, ובחריגה ממנו מתקבלת שגיאה במקום נתונים. אם קריאות המצב יוצאות בלי ניסיונות חוזרים ובלי הגבלת מקביליות, האפליקציה עצמה יוצרת סערת בקשות.
כשלי קריאת המצב משלימים את התמונה: מתודות כבדות מחזיקות את החיבור זמן רב יותר מאחרות והראשונות להיקטע — יחד איתן נופלות היסטוריית הפעולות והיתרות.
צוואר הבקבוק של RPC כמעט תמיד זהה — נקודת פנייה אחת ומפתח אחד לכל האפליקציה. ברגע שהיא נחלשת, הכול נופל: הארנק, ההיסטוריה, קריאת מצב החוזה, ואין לאן לעבור. להלן נבחן כיצד זה נסגר באמצעות אינטגרציה של Alchemy API — לא "עוד צומת", אלא שכבת גישה.
כמה מקורות תחת מפתח אחד עם מעבר אוטומטי לגיבוי, ניסיונות חוזרים עם השהיה גדלה, מטמון לקריאות תכופות, בקשות מרוכזות במקום מאה קריאות נפרדות. פרץ הקריאות מפסיק לחסום כתיבת טרנזקציות, ושיעור קריאות המצב המוצלחות בשיא נשמר. בהמשך — כיצד הגדרה כזו נראית ומה יש לבדוק לפני העלאה לאוויר.
מה נותנת אינטגרציה של Alchemy API לפרויקט על הבלוקצ'יין
פניות ישירות לצמתים ציבוריים הופכות את התנהגות האפליקציה לבן ערובה של תשתית זרה: בשיאים הבקשות נקטעות, הטרנזקציות נתקעות בהמתנה, והמשתמש רואה שגיאה במקום אישור.
חיבור דרך Alchemy מחליף את הערוץ הזה באחד מנוהל — חלק מהכשלים פשוט נעלמים מהסטטיסטיקה, במקום "לעבור טיפול" בממשק.
שיעור הבקשות הכושלות. קטיעות חיבור בודדות ותשובות שגיאה נתנו קודם לכן אחוזי כשל, כשהם נפלו בדיוק בשעות הפעילות. ניתוב דרך כמה צמתים עם ניסיון חוזר אוטומטי ובדיקת תוצאה מתרגם את האבדות לשברי אחוז: כשל של צומת אחד לא מגיע למשתמש.
השהיית התגובה. המשמעותית היא לא הממוצעת אלא הזנבית — היא זו שקובעת אם הטרנזקציה תיכנס לבלוק או תיתקע. מטמון של קריאות תכופות וקרבה של הצומת לנקודת הבקשה מחזיקים את ההשהיה במסדרון צר גם בפרצים: הממשק מפסיק "לנוע" מדקה לדקה.
עמידות לעומס והסרת מחלקת כשלים. קטגוריה נפרדת היא שליחה כפולה של אותה פעולה: המשתמש לא חיכה לתשובה, לחץ פעם שנייה, וזה חויב פעמיים. הגנה מכפילויות והתחשבות במצב מסירות את המחלקה הזו כולה, ולא מסוות אותה בהודעת שגיאה.
נראות הקריאות. כל בקשה מותירה עקבות: מתודה, זמן, תוצאה, צומת מקור. לפי הנתונים האלה רואים איזו מתודה נחלשת ראשונה, וספי ההתראות מוגדרים לפני שהבעיה הופכת לגלויה למשתמשים.
מצבי חיבור: צומת ציבורי, עצמאי או מנוהל
מתחברים לרשת באחת משלוש דרכים, והבחירה קובעת את השהיית התגובה, זמינות השירות והיקף העבודה בתמיכה. צומת ציבורי זמין מיד ואינו דורש תחזוקה, אך הוא משותף לכולם: תחת עומס הוא מגיב בצורה לא יציבה, אינו מספק היסטוריית אירועים ואינו מבטיח מגבלות בקשות.
צומת עצמאי נותן שליטה מלאה בנתונים ובתעבורה, אך מדובר בשרת, סנכרון מלא, עדכוני לקוח ותורנות. כל עוד הצומת מדביק את הרשת, השירות אינו זמין, ועצירת התהליך היא השבתה של המוצר, לא של בקשה אחת.
| אפשרות | מתי מתאימה | מגבלות |
|---|---|---|
| צומת ציבורי | אב-טיפוס, קריאות נדירות, בדיקת רעיון | מגבלות בקשות משותפות, אין היסטוריית אירועים, השבתה של אחרים הופכת לשלכם |
| צומת עצמאי | דרישות פרטיות, בקשות לא סטנדרטיות למצב | הסנכרון אורך ימים, נדרש שרת ותורנות, כשל הצומת = כשל השירות |
| ספק מנוהל | פרודקשן עם עומס, ארכיונים, מנויים לאירועים | תלות בספק אחד, מגבלות תעריף, נדרש מסלול גיבוי |
| שילוב | דרישות גבוהות לזמינות | מורכב יותר בהגדרה: שני מסלולים, איזון עומסים, פורמטי תשובה שונים |
לפרודקשן הולכים לרוב לספק מנוהל — Alchemy — בתוספת מסלול גיבוי: ספק שני או צומת עצמאי, וביניהם מעבר אוטומטי לפי אי-זמינות ופסקי זמן. בהמשך בוחנים את תדירות הקריאות, עומק ההיסטוריה ודרישות הפרטיות ומרכיבים שילוב בהתאם להם.
סדר ההטמעה: מביקורת בקשות ועד מסירת סכמות
לפני אינטגרציה של Alchemy API איננו נוגעים בקוד העובד עד שנבין כיצד האפליקציה מתקשרת עם הרשת. ביקורת הקריאות נותנת תמונה אמיתית: אילו מתודות יוצאות לצמתים ציבוריים, כמה מהן, היכן מנויים לאירועים מוכפלים, ואילו בקשות נופלות בפסק זמן. בלי מלאי כזה ההגדרה נעשית בעיוורון — מחצית מהתעבורה ממשיכה ללכת מחוץ למסלול החדש.
- מלאי הקריאות. אוספים את כל נקודות הפנייה לרשת בקוד הלקוח ובקוד השרת: קריאת יתרות, שליחת טרנזקציות, המתנה לאישורים, מנויים. מתעדים תדירות, מקור וקריטיות של כל מתודה.
- סכמת ניתוב. מפיצים את המתודות בין הערוצים: אלו הרגישות להשהיה עוברות בזרם נפרד, הקריאות ההמוניות בזרם משלהן, ומסלול הגיבוי מופעל אוטומטית עם הידרדרות הראשי.
- הגדרת גישות. מפרידים הרשאות בין סביבות, מגבילים את מעגל מקורות הבקשות, מציבים התראות על התקרבות למגבלות — כדי שמיצוי מכסה לא יפתיע בשיא.
- תיקון קוד ומעטפות. החלפת פניות ישירות בשכבה אחת עם ניסיונות חוזרים ומעבר לגיבוי; לוגיקת האפליקציה מפסיקה לדעת דרך איזה צומת יצאה הבקשה.
- בדיקת עומס. מריצים תרחישים על פרופיל הקרוב לשיא: בוחנים שיעור תשובות מוצלחות, זמן עד אישור והתנהגות המערכת בכשלים חלקיים.
- מסירת תיעוד. מוסרים לצוות את סכמת המסלולים, מדיניות הניסיונות החוזרים, סדר רוטציית המפתחות וניתוח שגיאות אופייניות עם תגובות מוכנות.
מה נשאר בידי הצוות: קונפיגורציות, סכמות, נהלים
הפרויקט נמסר לא כ"שירות בתמיכה שלנו", אלא כמערכת של חפצי עבודה שלפיהם הצוות שלכם יריץ בעצמו את הסביבה, יחזור על הבנייה וינתח תקלה. להלן — מה בפועל נמצא במאגר ובמעגל הסגור ביום המסירה.
- קונפיגורציות חיבור — קבצים לרשת הבדיקות ולרשת הייצור: כתובות צמתים, מפתחות גישה, מגבלות ניסיונות חוזרים, פסקי זמן. הסודות מוצאים לכספת, ובקוד ובקונפיגורציות — רק הפניות למשתני סביבה.
- סכמת זרימות — כיצד בקשה עוברת מהממשק לרשת: היכן התשובות נשמרות במטמון, היכן פועלים ניסיונות חוזרים, מה קורה בכשל של צומת חיצוני. מתוארת גם ענף הנסיגה, לא רק התרחיש המוצלח.
- מדיניות גישה — מטריצת תפקידים למפתחות ולפאנלים: מי מפיק, מי רק קורא, כיצד מפתח מבוטל. הרוטציה מעוצבת כנוהל עם תדירות ואחראי.
- נהל תחזוקה — מה בודקים מדי יום, מה מדי שבוע, באילו תנאים מפעילים תורן. ערכי הסף לשיעור השגיאות ולהשהיית התגובה מוגדרים מראש.
- תיעוד — סדר ההרצה המקומית, ייעוד המשתנים, היסטוריית שינויי קונפיגורציה וקטלוג תקלות אופייניות עם סימנים וטיפול.
- מערכת בדיקות — בדיקות לקטיעת חיבור, למיצוי מגבלת בקשות ולשליחה חוזרת של טרנזקציה. מכסות מסלולי כשל, ולא רק מהלך תקין.
- מסירת גישות — הבעלות על החשבונות והמפתחות מוצמדת לחשבונות שלכם, וההרשאות שלנו מוסרות לפי פרוטוקול.
חבילה כזו מאפשרת להחליף צמתים, מפתחות ומגבלות בלי לחזור לקבלן על כל שינוי.
מקרה בוחן: כיצד בורסת נכסים דיגיטליים הסירה מחלקת כשלים
בורסת נכסים דיגיטליים החזיקה את כל פעולות קריאת היתרות ושליחת הטרנזקציות דרך נקודת גישה אחת לרשת: ספק צמתים אחד, מפתח אחד, אזור אחסון אחד.
כל עוד העומס היה אחיד, הסכמה לא עוררה שאלות, אך בפרצי פעילות היא הפכה לנקודת כשל אחת — הפעולות נתקעו בסטטוס המתנה, התמיכה טבעה בפניות, ומהנדס התורנות הפעיל מחדש ידנית את שירות הקריאה וטיפל בתור הבקשות התקועות.
מה הראו המדדים לפני
שבועיים של מדידות נתנו תמונה כנה: שיעור הבקשות הכושלות לרשת החזיק סביב 4–6% ביממה והגיע עד 17% בשעות שיא, כאשר זרם הבקשות עלה פי שלושה. ההתאוששות לאחר נפילת צומת ארכה 25 עד 40 דקות — על התקלה נודע לפניות לקוחות, ולא ממערכת הניטור, והספירה התחילה מרגע התלונה, לא מרגע הכשל.
בעיה נפרדת — ניסיונות חוזרים בצד הלקוח: חלק מהפעולות יצאו לרשת פעמיים, והתאמת היתרות לא הסתדרה בלי תיקון ידני.
מה שינו ומה נהיה
העברנו את הגישה ל-Alchemy, והפרדנו קריאה משליחה לערוצים עצמאיים, והוספנו מעבר אוטומטי בין כמה אזורים בעת הידרדרות התגובה. הניסיונות החוזרים נעשו אידמפוטנטיים, ומדדי הצומת הוצאו לניטור יחד עם התראה לתורן.
שיעור הבקשות הכושלות ירד ל-0.2–0.4%, המעבר לצומת הגיבוי אורך 2–4 שניות בלי מעורבות אדם. תחת שיא משולש זמן התגובה גדל בשליש — בתוך מרווח עבודה, במקום פסקי זמן ופעולות תקועות כבעבר. ההתערבויות הידניות בלוח התורנויות לשירות הזה פסקו.
במה נבדל צומת מנוהל משרת עצמאי?
ההבדל אינו במי שמחזיק את החומרה, אלא היכן עובר אזור האחריות. צומת מנוהל הוא גישה לרשת כשירות: הספק אחראי לסנכרון, לזמינות הממשק, להרחבה תחת עומס ולשמירת ההיסטוריה. שרת עצמאי משמעו שכל האמור הופך למשימה פנימית שלכם.
בעלות על צומת אינה התקנה חד-פעמית, אלא עלות עבודה מתמשכת בתחזוקה. לקוח הרשת מתעדכן בכל שינוי בכללי הרשת, אחרת הוא יוצא מסנכרון ויתחיל להחזיר נתונים שגויים. הדיסק גדל יחד עם היסטוריית הבלוקים, וסנכרון מחדש לאחר כשל אורך שעות, שבמהלכן התרחישים התלויים בצומת עומדים. ניטור, גיבוי מצב, טיפול בנסיגות שרשרת והגנה על הממשק ממיצוי מגבלות — כל אלה הם תפקיד נפרד בצוות.
צומת מנוהל מעביר את החלק התשתיתי לספק, למשל Alchemy: הוא מחזיק נקודות מבוזרות גיאוגרפית, מעדכן בעצמו את לקוח הרשת ומוסיף רוחב פס לשיאים. עליכם נשאר מה שמבדיל את המוצר: לוגיקת החוזים, המפתחות, בחירת הרשת ומדיניות האישורים. מהירות ההעלאה לפעולה נמדדת בשעות — גישה ובקשה ראשונה במקום שבועות של פריסת תשתית.
השוואת הגישות מצטמצת לצפיות. שרת עצמאי נותן שליטה מלאה בגרסת הלקוח ובנתונים, אך דורש תורנות וגדל בעלויות עבודה עם כל רשת חדשה. צומת מנוהל מסיר את המשתנה הזה, אך מכניס תלות בספק ובמגבלותיו.
לכן לתרחישים קריטיים אנחנו מרכיבים היברידי: הזרם הראשי עובר דרך שירות מנוהל, והצומת העצמאי נשאר מסלול גיבוי ומקור בלתי תלוי לאימות נתונים.
ספקות טכניים לפני העברת תעבורה
לפני החלפת סכמת החיבור, המנהל הטכני בודק לא הבטחות אלא את התנהגות המערכת בכשלים. להלן — חמש שאלות שאנחנו מנתחים לפני העברת התעבורה, ומה נשאר בידי הצוות לגבי כל אחת.
האם יהיה צורך לשכתב את קריאות האפליקציה?
תחילה בודקים תאימות קריאות: מתודות ופורמט תשובות לפי תרחישים — יתרות, אירועים, שליחת טרנזקציות. היכן שהחתימות תואמות, אינטגרציה של Alchemy API נסגרת במתאם בלי שינוי בקוד האפליקציה.
כיצד להגן על המפתחות בעת החלפת הסכמה?
המפתחות חיים בכספת סודות ואינם מגיעים לקוד הלקוח, והבקשות עוברות דרך פרוקסי. בשער — הגבלות לפי מקור הבקשה ומכסות לכל מתודה. הרוטציה מתוכננת, בלי עצירת השירות.
כיצד העברת התעבורה עוברת בלי השבתה?
בחלקים, לא בבת אחת. בכל שלב בוחנים את שיעור התשובות המוצלחות, ההשהיה והשגיאות לפי מתודות — ההידרדרות נראית לפני שהמשתמשים מבחינים בה.
מה לעשות אם הספק נחלש?
את מסלול הגיבוי מרימים באותה לוגיקת קריאות. health-check מחליף תעבורה לפי שיעור שגיאות והשהיה, ומתג ידני נשאר בידי מהנדס התורנות.
כיצד נראית תוכנית הנסיגה?
שומרים את קונפיגורציית הסכמה הקודמת ואת סדר החזרה: שיעור התעבורה, נקודת הכניסה, סימן המוכנות. הנסיגה אורכת דקות, לא שעות.
נדון במשימה: ננתח ניתוב ומגבלות בקשות
כדי לחזור עם הערכה ותוכנית העברה, אנחנו צריכים לא סיפור כללי על המוצר, אלא פרוסה של סכמת הקריאות הנוכחית. ביקורת הסכמה עוברת מהר יותר כשמיד נראה אילו מתודות ובאיזו תדירות יוצאות לרשת, היכן יושב המטמון וכיצד מטופל כשל צומת. להלן — רשימה קצרה: לפיה ברור מה כבר יש לנו ומה צריך לאסוף מצדכם.
- רשימת מתודות ותדירות קריאות — לפיהן מחושב פרופיל העומס והנקודות שבהן נדרשת קיבוץ בקשות או מטמון.
- סכמת עמידות לכשלים: כמה ספקים מחוברים, כיצד מוחלפת התעבורה, האם יש ניסיונות חוזרים ופסקי זמן.
- מפתחות ומגבלות: היכן נשמרים, מי הבעלים, האם מופרדים לפי סביבות, כיצד מוגדרות המגבלות לפי תדירות.
- לוגים ומדדים: תוך כמה זמן נראה שיעור השגיאות וזמן התגובה, והאם אפשר להרים אותם לפני תחילת העבודות.
- חלונות שינויים: מתי אסור לעצור את המוצר ואיזו רמת הידרדרות מותרת בזמן ההעברה.
- סדרי עדיפויות של הצוות: מה חשוב יותר — השהיית תגובה מינימלית או צפיות העומס על המגבלות.
עם מערכת זו אנחנו מבצעים ביקורת של הסכמה, מחשבים הערכת עבודה ומרכיבים תוכנית להעברת הקריאות ל-Alchemy בשלבים: בדיקה במעגל בדיקות, העברה הדרגתית של שיעור התעבורה, נקודת נסיגה בכל שלב. תארו את המשימה — נחזור עם הערכה ותוכנית.







