פונקציות קצה ללא שרת: בנייה ופריסה עם Cloudflare

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

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

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
פונקציות קצה ללא שרת: בנייה ופריסה עם Cloudflare
בינוני
~2-3 ימים

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

שאלות נפוצות

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

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

בסביבת ייצור, אנו נתקלים לעיתים קרובות במצב: שרת רגיל אינו יכול להתמודד עם עומסי שיא, והקמת קלאסטר עבור כמה נקודות קצה היא כמו לירות בדרור בתותח. Cloudflare Workers פותרים בעיה זו: הקוד רץ על V8 isolates עם זמן התחלה קר של פחות מ-1 אלפית השנייה על פני יותר מ-300 צמתי קצה. לפי תיעוד Cloudflare Workers, זמן ההתחלה הקר הוא מתחת ל-1 אלפית השנייה. המסלול החינמי מכסה 100,000 בקשות ביום — מספיק עבור רוב הפרויקטים. הניסיון שלנו בשילוב Workers על עשרות אתרים מראה: הסבילות לתקלות עולה, ועלויות התשתית יורדות ב-40-60% בהשוואה לפתרונות מסורתיים. עבור פרויקט עם 500 אלף בקשות בחודש, זה חוסך עד 200 דולר בחודש. התמחור של Worker מתחיל ב-5 דולר לחודש עבור 10 מיליון בקשות, מה שהופך אותו לנגיש עבור סטארטאפים.

Cloudflare Workers משיגים זמן התחלה קר של פחות מ-1 אלפית השנייה

Workers רצים על טכנולוגיית Cloudflare Workers עם בידוד V8, כאשר כל Worker רץ בהקשר V8 נפרד. בניגוד לקונטיינרים, V8 isolates אינם דורשים טעינת מערכת הפעלה או ראנטיים — הקוד מורכב ומופעל באופן מיידי. זה נותן זמן התחלה קר <1 אלפית השנייה, בעוד AWS Lambda לוקחת 500-2000 אלפיות השנייה עקב אתחול קונטיינר. זמן ההתחלה הקר של Cloudflare Workers מהיר עד פי 2000 מ-AWS Lambda. לדוגמה, Workers מטפלים בבקשות פי 100 מהר יותר בהפעלה הראשונה, מה שחיוני עבור API עם זמן השהיה נמוך. עם הניסיון שלנו של 5 שנים ויותר מ-100 פרויקטים, אנו מבטיחים יישום אמין.

השוואה עם AWS Lambda ו-Vercel Functions

Workers רצים בכל PoP של Cloudflare — משתמש ממוסקבה מקבל תשובה מהצומת הקרוב ביותר, לא מ-us-east-1. זה יסודי עבור משימות רגישות לזמן השהיה. מגבלה: Workers משתמשים ב-Web API, לא ב-Node.js API — fs, child_process, מודולים מקוריים אינם זמינים. אבל אין זמן התחלה קר כמו ב-Lambda (שם הוא יכול להגיע לכמה שניות עם הגדרות ברירת מחדל). גם ל-Vercel Functions יש עיכובים — הם מסתמכים על קונטיינרים. Workers על V8 isolates מנצחים במהירות האתחול.

מתי להשתמש ב-Workers לעומת Backend מסורתי

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

Worker בסיסי
// src/index.ts
export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const url = new URL(request.url);
    if (url.pathname === "/api/contact" && request.method === "POST") {
      return handleContact(request, env);
    }
    if (url.pathname === "/api/geo") {
      return handleGeo(request);
    }
    return new Response("Not found", { status: 404 });
  },
};

async function handleContact(request: Request, env: Env): Promise<Response> {
  const data = await request.json<{ name: string; email: string; message: string }>();
  // Отправка через Resend API
  const emailResponse = await fetch("https://api.resend.com/emails", {
    method: "POST",
    headers: {
      Authorization: `Bearer ${env.RESEND_API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      from: "[email protected]",
      to: ["[email protected]"],
      subject: `Сообщение от ${data.name}`,
      text: `${data.name} (${data.email}): ${data.message}`,
    }),
  });
  if (!emailResponse.ok) {
    return Response.json({ error: "Email send failed" }, { status: 500 });
  }
  return Response.json({ ok: true });
}

// Геолокация из заголовков Cloudflare
function handleGeo(request: Request): Response {
  const cf = (request as any).cf;
  return Response.json({
    country: cf?.country,
    city: cf?.city,
    timezone: cf?.timezone,
    latitude: cf?.latitude,
    longitude: cf?.longitude,
  });
}

Wrangler ופריסה

שלבי הפריסה:

  1. התקן את Wrangler CLI: // src/index.ts export default { async fetch(request: Request, env: Env): Promise<Response> { const url = new URL(request.url); if (url.pathname === "/api/contact" && request.method === "POST") { return handleContact(request, env); } if (url.pathname === "/api/geo") { return handleGeo(request); } return new Response("Not found", { status: 404 }); }, }; async function handleContact(request: Request, env: Env): Promise<Response> { const data = await request.json<{ name: string; email: string; message: string }>(); // Отправка через Resend API const emailResponse = await fetch("https://api.resend.com/emails", { method: "POST", headers: { Authorization: `Bearer ${env.RESEND_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ from: "[email protected]", to: ["[email protected]"], subject: `Сообщение от ${data.name}`, text: `${data.name} (${data.email}): ${data.message}`, }), }); if (!emailResponse.ok) { return Response.json({ error: "Email send failed" }, { status: 500 }); } return Response.json({ ok: true }); } // Геолокация из заголовков Cloudflare function handleGeo(request: Request): Response { const cf = (request as any).cf; return Response.json({ country: cf?.country, city: cf?.city, timezone: cf?.timezone, latitude: cf?.latitude, longitude: cf?.longitude, }); }
  2. התחבר: # wrangler.toml name = "my-site-api" main = "src/index.ts" compatibility_date = "2024-11-01" [vars] ENVIRONMENT = "production" [[routes]] pattern = "yourdomain.com/api/*" zone_name = "yourdomain.com"
  3. כתוב את קוד ה-Worker שלך ב-npm install -g wrangler wrangler login wrangler dev # локальная разработка wrangler deploy # деплой
  4. הגדר את wrangler secret put RESEND_API_KEY wrangler secret put DATABASE_URL עם ההגדרות שלך
  5. פריסה: // Привязка в wrangler.toml // [[kv_namespaces]] // binding = "CACHE" // id = "abc123..." export default { async fetch(request: Request, env: Env & { CACHE: KVNamespace }) { const cacheKey = new URL(request.url).pathname; const cached = await env.CACHE.get(cacheKey); if (cached) { return new Response(cached, { headers: { "Content-Type": "application/json", "X-Cache": "HIT" } }); } const data = await fetchFreshData(request); await env.CACHE.put(cacheKey, JSON.stringify(data), { expirationTtl: 300 }); return Response.json(data); } };
דוגמה להגדרת Wrangler
# wrangler.toml
name = "my-site-api"
main = "src/index.ts"
compatibility_date = "2024-11-01"

[vars]
ENVIRONMENT = "production"

[[routes]]
pattern = "yourdomain.com/api/*"
zone_name = "yourdomain.com"
npm install -g wrangler wrangler login wrangler dev # локальная разработка wrangler deploy # деплой 

סודות:

wrangler secret put RESEND_API_KEY wrangler secret put DATABASE_URL 

Workers KV ו-D1: אחסון נתונים בקצה

KV הוא מאגר מפתח-ערך, עקבי בסופו של דבר. מתאים לקאש, סשנים, קונפיגורציה. Workers KV מספק האצת קצה לגישת נתונים.

דוגמת KV
// Привязка в wrangler.toml
// [[kv_namespaces]]
// binding = "CACHE"
// id = "abc123..."

export default {
  async fetch(request: Request, env: Env & { CACHE: KVNamespace }) {
    const cacheKey = new URL(request.url).pathname;
    const cached = await env.CACHE.get(cacheKey);
    if (cached) {
      return new Response(cached, {
        headers: {
          "Content-Type": "application/json",
          "X-Cache": "HIT"
        }
      });
    }
    const data = await fetchFreshData(request);
    await env.CACHE.put(cacheKey, JSON.stringify(data), {
      expirationTtl: 300
    });
    return Response.json(data);
  }
};

D1 הוא מסד הנתונים serverless SQLite של Cloudflare. מתאים לנפחי נתונים קטנים (עד 10 GB). עם מחשוב serverless, D1 מתקנה אוטומטית ללא עלויות ניהול.

דוגמת D1
export default {
  async fetch(request: Request, env: Env & { DB: D1Database }) {
    const { results } = await env.DB.prepare(
      "SELECT * FROM products WHERE category = ? ORDER BY created_at DESC LIMIT 20"
    ).bind("electronics").all();
    return Response.json(results);
  }
};

עבודה עם נתונים ומגבלות

  • זמן CPU: 10 אלפיות השנייה (חינם), 30 שניות (בתשלום)
  • זיכרון: 128 MB
  • אין מודולים מובנים של Node.js (export default { async fetch(request: Request, env: Env & { DB: D1Database }) { const { results } = await env.DB.prepare( "SELECT * FROM products WHERE category = ? ORDER BY created_at DESC LIMIT 20" ).bind("electronics").all(); return Response.json(results); } }; , fs, path — רק Web Crypto API)
  • אין חיבורים ארוכים ל-PostgreSQL (השתמש ב-Hyperdrive או HTTP API)

Hyperdrive פותר את בעיית החיבור ל-PostgreSQL

Hyperdrive מתווך חיבורים למסד נתונים PostgreSQL חיצוני דרך מאגר חיבורים בצד של Cloudflare, ופותר את בעיית זמן ההשהיה של חיבור ל-DB מרוחק. זה מאפשר ל-Workers לעבוד עם מסדי נתונים יחסיים ללא עיכובים ביצירת חיבורים חדשים.

השוואת ביצועים: Workers לעומת AWS Lambda לעומת Vercel Functions

פרמטר Cloudflare Workers AWS Lambda Vercel Functions
זמן התחלה קר <1 אלפית השנייה 500-2000 אלפיות השנייה 100-500 אלפיות השנייה
פיזור גיאוגרפי 300+ PoP 30+ אזורים לפי אזור פריסה
CPU מקסימלי 30 שניות 15 דקות 60 שניות
מגבלת חינם 100 אלף בקשות/יום 1M בקשות/חודש 100 אלף בקשות/חודש

Workers מנצחים משמעותית בזמן התחלה קר ובזמינות גלובלית. בניית API על Cloudflare מבטיחה זמן השהיה נמוך ברחבי העולם.

השוואת אפשרויות אחסון

שירות סוג מקרה שימוש עקביות
Workers KV מפתח-ערך קאש, סשנים סופית
D1 SQLite נתונים יחסיים קטנים חזקה
Hyperdrive פרוקסי PostgreSQL חיצוני חזקה (דרך DB)

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

בהזמנת פיתוח Workers, אתה מקבל:

  • עיצוב ארכיטקטורה ובחירת שירותים אופטימליים (KV, D1, Hyperdrive)
  • יישום כל נקודות הקצה עם טיפול בשגיאות וזמני פסק זמן
  • CI/CD עם GitHub Actions ופריסה אוטומטית דרך Wrangler
  • תיעוד לתפעול ותיאור כל משתני הסביבה
  • בדיקות עומס עד 1000 RPS עם אופטימיזציה לאחר מכן
  • הדרכת צוות על Cloudflare Dashboard ו-Wrangler CLI

לוח זמנים

Worker בסיסי עם ניתוב ו-3-5 נקודות קצה — בין 2 ל-3 ימים. אינטגרציה של KV ו-D1, CI/CD דרך GitHub Actions — בתוספת יומיים. פתרון מלא עם Hyperdrive ודומיינים מותאמים אישית — עד שבוע. צור קשר להערכה מדויקת של הפרויקט שלך.