ארכיטקטורה מונעת אירועים ללא שרת ב-AWS

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

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
ארכיטקטורה מונעת אירועים ללא שרת ב-AWS
מורכב
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1501
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1306
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

פרויקטים שבהם Lambda קוראת ל-Lambda ישירות דרך ה-SDK הם צמודים, שבירים וקשים לניפוי. כאשר מופיע צרכן חמישה-עשר לאותו אירוע, יש לעדכן כל מקור. ארכיטקטורה מונעת אירועים על Serverless פותרת זאת: רכיבים מתקשרים דרך אירועים, לא דרך קריאות ישירות. פונקציית Lambda לא יודעת מי עוד רשום לפלט שלה. זה מבטיח צימוד רופף, קנה מידה עצמאי ויכולת להוסיף צרכנים חדשים ללא שינוי במקור. הניסיון שלנו ביותר מ-50 פרויקטים מאשר שגישה זו מאיצה אימוץ שירותים חדשים פי 3–5 בהשוואה לצימוד מונוליטי, ועלויות התשתית יורדות ב-30–50%, וחוסכות בממוצע 10,000 דולר בשנה למערכת מסחר אלקטרוני בינונית. אנו מיישמים ארכיטקטורות מונעות אירועים על Serverless כבר למעלה מ-5 שנים, עם יותר מ-50 פרויקטים מוצלחים.

למה מונע אירועים במקום צימוד ישיר?

קריאות ישירות בין Lambda ל-Lambda (דרך SDK Invoke) יוצרות תלות קשיחה. אם תהליך התשלום קורא לשירות המשלוחים, וחודש לאחר מכן יש צורך במסנן הונאות, יש לשנות את קוד התשלום. במודל מונע האירועים, כל שירות מפרסם אירועים, וצרכנים חדשים נרשמים ללא שינוי במקור. זה מפשט באופן קיצוני את התפתחות המערכת ומאפשר פריסה עצמאית של רכיבים. מונע אירועים אמין פי 10 מקריאות ישירות, עם ניסיונות חוזרים מובנים ו-DLQ. זה גם מתרחב באופן עצמאי, מה שהופך הוספת תכונות חדשות למהירה פי 3.

לפי AWS, EventBridge מעבד למעלה מ-4 טריליון אירועים בחודש עם פחות מ-100 אלפיות שנייה של השהיה. זה מדגים את האמינות והביצועים של הפלטפורמה. השווה: עם קריאות ישירות, כשל בודד שובר את כל השרשרת. EventBridge עם SQS מבטיח מסירה וניסיונות חוזרים אוטומטיים — אמין פי 10 מטיפול ידני בשגיאות.

דוגמת ארכיטקטורה: מסחר אלקטרוני

עיבוד הזמנות ללא מונע אירועים: PlaceOrder → ValidateInventory → ProcessPayment → SendEmail → UpdateAnalytics — הכל רציף וצמוד.

עם מונע אירועים:

[Client] → PlaceOrder Lambda
↓ EventBridge: order.created
/ | \
ValidateInv SendEmail Analytics
↓ EventBridge: inventory.reserved
↓ ProcessPayment
↓ EventBridge: payment.processed
/ \
FulfillOrder SendReceipt

כל שירות מגיב לאירועים באופן עצמאי. שירות חדש (למשל, זיהוי הונאות) נרשם ל-[Client] → PlaceOrder Lambda ↓ EventBridge: order.created / | \ ValidateInv SendEmail Analytics ↓ EventBridge: inventory.reserved ↓ ProcessPayment ↓ EventBridge: payment.processed / \ FulfillOrder SendReceipt ללא שינויים בקוד הקיים.

איך זה עובד בפועל

AWS EventBridge: יישום

# Custom event bus + rule + target
resource "aws_cloudwatch_event_bus" "orders" {
  name = "orders-bus"
}

resource "aws_cloudwatch_event_rule" "order_created" {
  name = "order-created"
  event_bus_name = aws_cloudwatch_event_bus.orders.name
  event_pattern = jsonencode({
    "detail-type": ["OrderCreated"],
    "source": ["com.company.orders"]
  })
}

resource "aws_cloudwatch_event_target" "process_inventory" {
  rule = aws_cloudwatch_event_rule.order_created.name
  event_bus_name = aws_cloudwatch_event_bus.orders.name
  arn = aws_lambda_function.validate_inventory.arn
}

פרסום אירוע מ-Lambda:

import boto3
import json
from datetime import datetime

events = boto3.client('events')

def publish_order_created(order: dict):
    events.put_events(
        Entries=[{
            'EventBusName': 'orders-bus',
            'Source': 'com.company.orders',
            'DetailType': 'OrderCreated',
            'Detail': json.dumps({
                'orderId': order['id'],
                'customerId': order['customer_id'],
                'items': order['items'],
                'totalAmount': order['total'],
                'timestamp': datetime.utcnow().isoformat()
            }),
            'Time': datetime.utcnow()
        }]
    )

SQS למסירה אמינה

EventBridge + SQS נותן מסירה סובלנית לתקלות עם ניסיונות חוזרים ותור למות. אנו משתמשים ב-Terraform לתשתית כקוד:

resource "aws_sqs_queue" "inventory_updates" {
  name = "inventory-updates"
  visibility_timeout_seconds = 300
  redrive_policy = jsonencode({
    deadLetterTargetArn = aws_sqs_queue.inventory_dlq.arn
    maxReceiveCount = 3 # After 3 failures → DLQ
  })
}

resource "aws_lambda_event_source_mapping" "inventory_processor" {
  event_source_arn = aws_sqs_queue.inventory_updates.arn
  function_name = aws_lambda_function.process_inventory.arn
  batch_size = 10
  function_response_types = ["ReportBatchItemFailures"]
}

order.created — רק הודעות שנכשלו מוחזרות לתור; מוצלחות לא מקבלות ניסיון חוזר.

Handler עם כשל חלקי

def handler(event, context):
    failed_message_ids = []
    for record in event['Records']:
        try:
            process_message(json.loads(record['body']))
        except Exception as e:
            # Только этот record пойдёт в retry, остальные — ОК
            failed_message_ids.append({'itemIdentifier': record['messageId']})
    return {'batchItemFailures': failed_message_ids}

איך להבטיח אידמפוטנטיות?

במערכות מונעות אירועים, אירועים יכולים להימסר פעמיים (מסירה לפחות-פעם-אחת). כל handler חייב להיות אידמפוטנטי. אנו משתמשים ב-DynamoDB כטבלת עיבוד עם ConditionExpression:

import boto3
dynamodb = boto3.resource('dynamodb')
processed_events = dynamodb.Table('processed_events')

def handler(event, context):
    for record in event['Records']:
        event_id = record['messageId']
        # Проверить, не обработано ли событие уже
        try:
            processed_events.put_item(
                Item={'event_id': event_id, 'ttl': int(time.time()) + 86400},
                ConditionExpression='attribute_not_exists(event_id)'
            )
        except processed_events.meta.client.exceptions.ConditionalCheckFailedException:
            continue  # Already processed
        process_event(record)

תהליך היישום

יישום ארכיטקטורת מונע אירועים כולל את השלבים הבאים:

  1. עיצוב סכמת אירועים ו-bus (2–3 ימים)
  2. הקמת EventBridge וכללי ניתוב (2–3 ימים)
  3. הגדרת תורי SQS ו-DLQ (2–3 ימים)
  4. יישום אידמפוטנטיות של handler (2–4 ימים)
  5. הקמת ניטור ומעקב (2–3 ימים)
  6. בדיקות אינטגרציה (2–4 ימים)

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

השוואה: מונע אירועים מול מיקרוסרוויסים REST

הטבלה שלהלן משווה בין מונע אירועים למיקרוסרוויסים REST:

פרמטר מונע אירועים (AWS) מיקרוסרוויסים REST
צימוד רופף (דרך אירועים) קשיח (קריאות ישירות)
סובלנות לתקלות ניסיונות חוזרים מובנים, DLQ טיפול ידני, circuit breaker
קנה מידה עצמאי, לכל צרכן דורש סנכרון
הוספת שירות חדש הרשמה ללא שינויים לעתים קרובות דורש שינויים ב-API gateway
השהיה ~100 אלפיות שנייה (EventBridge) ~10 אלפיות שנייה (קריאה ישירה)

ניטור מערכת מונעת אירועים

מדדים מרכזיים:

  • השהיית אירועים (SQS # Custom event bus + rule + target resource "aws_cloudwatch_event_bus" "orders" { name = "orders-bus" } resource "aws_cloudwatch_event_rule" "order_created" { name = "order-created" event_bus_name = aws_cloudwatch_event_bus.orders.name event_pattern = jsonencode({ "detail-type": ["OrderCreated"], "source": ["com.company.orders"] }) } resource "aws_cloudwatch_event_target" "process_inventory" { rule = aws_cloudwatch_event_rule.order_created.name event_bus_name = aws_cloudwatch_event_bus.orders.name arn = aws_lambda_function.validate_inventory.arn } ) — עד כמה טריים האירועים המעובדים
  • עומק DLQ — מספר האירועים בתור למות (שונה מאפס = בעיה)
  • קצב עיבוד מול קצב ייצור — האם המערכת עומדת בקצב
  • השהיה מקצה לקצה — זמן מאירוע לתוצאה בכל השרשרת

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

כמה זמן לוקח היישום?

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

מה כלול בעבודה

תיעוד ארכיטקטורה וסכמת אירועים, קוד פונקציות Lambda ותשתית כקוד (Terraform), הקמת bus ותורים, יישום אידמפוטנטיות, ניטור והתראות, סקריפטים לבדיקות והדרכת צוות. אנו מבטיחים תפעוליות של הפתרון לחודש אחד לאחר הפריסה.

הזמינו יישום ארכיטקטורת מונע אירועים — המערכת שלכם תהפוך לגמישה וניתנת להרחבה. צרו קשר להערכת פרויקט, ונמצא את הפתרון האופטימלי. עם ניסיון של למעלה מ-5 שנים ו-50+ פרויקטים, אנו מומחים בארכיטקטורה מונעת אירועים. הפתרונות שלנו משיגים 99.9% זמינות ל-event bus.