01 كيف نعمل

أكثر أيامكم ازدحامًا يجب أن يكون أفضل أيامكم.

من المفترض أن يكون النمو خبرًا سارًّا. لكنه بالنسبة إلى معظم الأنظمة هو ما يكسرها — الإطلاق، الحملة، ذروة الموسم. لا داعي أن يبقى الأمر كذلك.

ابدأ مشروعك

ما تعنيه قابلية التوسّع فعليًا

قابلية التوسّع لا تعني السرعة. فالنظام البطيء الذي يبقى بطيئًا تحت الحِمل يُعد قابلًا للتوسّع، أما النظام السريع الذي ينهار عند عشرة أضعاف حركته المعتادة فلا. المقصود هو أن تبقى العلاقة بين عدد مستخدمي برمجيتكم وتكلفة خدمتهم علاقة يمكن التنبؤ بها.

تُبنى معظم الأنظمة على مقاس الحركة التي تشهدها يوم إطلاقها. ويستمر هذا إلى أن يتوقف — واليوم الذي يتوقف فيه هو غالبًا اليوم الذي كنتم في أمسّ الحاجة فيه إلى أن يصمد النظام: حملة تسويقية، إطلاق منتج، عطلة رسمية، أو ذكر إعلامي. فتتحوّل الحركة التي كنتم تحتفلون بها إلى سبب رؤية عملائكم صفحة خطأ.

الجانب غير المريح في الأمر أن قابلية التوسّع تُحسم مبكرًا. فهي نتاج طريقة توزيع العمل، وكيفية نمذجة البيانات، والموضع الذي يُمتص فيه الحِمل — قرارات تُتَّخذ في الأسابيع الأولى. وإضافتها لاحقًا تعني عادة إعادة بناء كاملة، ولهذا كثيرًا ما يصل الإصلاح على شكل عرض سعر لم يخطّط له أحد.

AT ITS LIMITROOM TO GROW

كيف تعرف أن هذه مشكلتك

كل مشروع يبدأ بمكالمة تحديد نطاق
  • أوقات الاستجابة تتدهور بشكل ملحوظ في ساعات الذروة
  • أضفتم خوادم ولم يُحدث ذلك الفرق المتوقّع
  • قاعدة البيانات هي ما يلومه الجميع، وما لا يريد أحد الاقتراب منه
  • تتجنبون الحملات التسويقية لعدم يقينكم من قدرة النظام على الصمود
  • فاتورة الحوسبة السحابية لديكم تنمو أسرع من عدد مستخدميكم
  • التقارير والتصديرات تُجمّد التطبيق أمام بقية المستخدمين

كيف نحقق ذلك

REQUESTSEDGE — ANSWERS MOST OF THEMYOUR SERVERS — BARELY TOUCHED
الواجهة الخلفية المناسبة لكل مهمة
نستخدم Elixir حين يحتاج النظام لتحمّل آلاف المستخدمين المتزامنين أو اتصالات فورية كثيرة، وNode أو Go حين لا يحتاج ذلك. نختار حسب كل مشروع، لا بحكم العادة.
شبكة CDN في المقدمة، دائمًا
تُقدَّم الصفحات والصور والملفات الثابتة من شبكة قريبة من مستخدميكم — طبقة مستقلة تمتص معظم الحركة قبل أن تصل إلى تطبيقكم أصلًا.
Postgres، مُصمَّمة بشكل صحيح
فهارس وأنماط وصول مصمَّمة لحجم الاستعلامات الذي تتجهون نحوه. هنا تكمن معظم مشاكل التوسّع فعليًا، أيًّا كانت اللغة المستخدمة فوقها.

ثمن تجاهل المشكلة

01

النمو يتحوّل إلى عبء

حين لا يقدر النظام على استيعاب النجاح، يتحوّل كل إنجاز تسويقي إلى عطل. فتبدأ الفرق بكبح نمو أعمالها هي نفسها حتى تحمي البرمجية — وهذا عكس ما ينبغي أن يحدث تمامًا.

02

إعادة البناء تأتي خارج الميزانية

الأنظمة التي لم تُصمَّم أصلًا لتحمّل الحِمل نادرًا ما تُصلَح بترقيعها. الحل الصادق هو إعادة البناء، وفي أسوأ وقت ممكن: حين يكون لديك بالفعل عملاء يعتمدون عليها.

03

تدفع ثمن طاقة لا تستخدمها

الحل المعتاد لنظام لا يتحمّل التوسّع هو عتاد مبالغ في حجمه يعمل طوال السنة كي يصمد بضع ساعات ذروة فقط. والنتيجة أنك تدفع ثمن أكثر أسابيعك ازدحامًا في كل أسبوع من السنة.

04

المهندسون يقضون وقتهم في إطفاء الحرائق

كل ساعة تُصرف في إسعاف نظام أثناء ذروة الحركة هي ساعة لا تُصرف في بناء ما يطلبه عملاؤك. التكلفة غير ظاهرة في أي فاتورة، لكنها هائلة على مدى سنة كاملة.

WITHOUT ITWITH ITCOST OVER TIME

الأسئلة التي تُطرح علينا

كم من الحركة يجب أن نخطط لها فعلًا؟
أقل مما يتخيّله معظم الناس، وأكثر مما يخطّط له معظمهم. السؤال المفيد ليس رقمًا، بل صورة: كيف يبدو الوضع عند عشرة أضعاف استخدامكم الحالي، وأي جزء ينهار أولًا. نجيب عن هذا عبر اختبارات تحميل على أنماط الاستخدام الفعلية لديكم، لا بالتخمين.
هل يخص هذا الأمر الشركات الكبيرة فقط؟
لا — بل هي أكثر أهمية للشركات الصغيرة. فالشركة الكبيرة تقدر على تحمّل بعد ظهر سيّئ. أما منتج في بداياته ينهار خلال أسبوع إطلاقه، فقد لا تُتاح له فرصة ثانية مع هؤلاء المستخدمين.
هل يمكنكم جعل نظامنا الحالي قابلًا للتوسّع، أم أنه يحتاج إلى إعادة كتابة؟
غالبًا نعم، دون الحاجة إلى إعادة كتابة كاملة. معظم مشاكل التوسّع تعود إلى عدد محدود من الاختناقات المحدَّدة — استعلام بلا فهرسة، معالجة تُنفَّذ أثناء الطلب وكان ينبغي أن تُنفَّذ في الخلفية، أو طبقة تخزين مؤقت (cache) غائبة. نقيس أولًا، ثم نخبركم بصراحة إن كان الحل إصلاحًا أم إعادة بناء.
هل يعني التوسّع دائمًا تكاليف استضافة أعلى؟
غالبًا العكس هو الصحيح، متى أُنجز الأمر بشكل سليم. الأنظمة المصمَّمة لتحمّل الحِمل تستخدم العتاد بكفاءة، وتقلّص استهلاكها حين يقل الطلب. أما الإعدادات المكلفة فهي تلك التي تُبقي خوادم مبالغًا في حجمها تعمل بشكل دائم، لأن لا أحد يثق بقدرتها على استيعاب ذروة مفاجئة.
هل تبنون دائمًا باستخدام Elixir؟
لا. Elixir هو الخيار الصحيح حين يحتاج النظام إلى استيعاب أعداد كبيرة من المستخدمين المتزامنين، أو اتصالات آنية، أو متطلبات صارمة في زمن التشغيل — ففي هذه الحالات يُزيل فئة كاملة من الصعوبات. أما بالنسبة إلى API بسيط أو أداة داخلية، فهو يضيف تعقيدًا لسنا بحاجة إليه، وحينها نوصي باستخدام TypeScript على Node بدلًا منه. الاختيار يتبع مشروعكم وميزانيتكم ومن سيتولى الصيانة لاحقًا.

أكثر أيامكم ازدحامًا يجب أن يكون أفضل أيامكم.

أخبرونا أين تكمن المشكلة. مكالمة قصيرة، وجواب صريح حول ما إذا كنا الفريق المناسب، ونطاق عمل يمكنكم وضع ميزانية له.

ابدأ مشروعك hello@elixiria.ma
enfrar