بڑی سطح پر سرور لیس: AWS Lambda پر عربی تعلیمی ٹیک چلانا
Alphazed اپنا مکمل بیک اینڈ — جو 50+ ممالک میں 95,000 سے زائد طلباء کو خدمات فراہم کرتا ہے — AWS Lambda پر Serverless Framework کے ذریعے چلاتا ہے۔ اس آرکیٹیکچر میں API Gateway کے پیچھے Lambda پر Flask استعمال ہوتا ہے، MySQL 8 RDS پر، S3 مواد کی ترسیل کے لیے، اور ایک کسٹم اینالیٹکس لیک (SQS → Kinesis Firehose → S3 → Glue → Athena) جو سیکھنے کے نتائج ٹریک کرتا ہے۔ پتلے Lambda ہینڈلرز کولڈ-اسٹارٹ کو بہتر بناتے ہیں اور نظام ایک ہی کوڈبیس سے 7+ ایپس چلاتا ہے جس میں رن ٹائم کنفیگریشن سوئچنگ ہوتی ہے۔
تعلیمی ٹیکنالوجی کے لیے سرور لیس کیوں؟
- تعلیمی ایپس کی غیر متوقع استعمال کی پیٹرنز:
- ہفتے کے دن صبحیں: والدین اسکول جانے سے پہلے ایپ ڈاؤن لوڈ کرتے ہیں (ٹریفک spike)
- ہفتے کے دن دوپہر: اسکول کے بعد پریکٹس سیشنز (مستقل بوجھ)
- ہفتہ اور اتوار: شدید ماراتھن سیشنز (عام بوجھ سے 2-3 گنا)
- رمضان میں: شام کا استعمال بڑھ جاتا ہے (خاندانی قرآنی سیشنز)
- تعطیلات اسکول کی: بالکل مختلف پیٹرن
- سرور لیس کے فوائد:
- ادائیگی فی درخواست کے حساب سے: آپ صرف اصل استعمال کی ادائیگی کرتے ہیں۔ اگر 10 صارفین API کو کال کریں تو آپ 10 انوکیشنز کے لیے ادائیگی کریں گے، اور اگر 100,000 دوران وائرل لمحات کال کریں تو فوراً اسکیل ہوجائے گا۔
- زیرو کولڈ اسٹارٹ ہائی فریکوئنسی اینڈپوائنٹس کے لیے: ہم اکثر کال ہونے والے اینڈپوائنٹس کے لیے "ہمیشہ گرم" Lambda layers استعمال کرتے ہیں۔
- خودکار اسکیلنگ: 10 سے لے کر 10,000 صارفین بیک وقت کی سہولت، بغیر کسی انفراسٹرکچر تبدیلی کے۔
- زیرو سرور مینٹیننس: ٹیم نصاب اور AI پر توجہ دیتی ہے، نہ کہ Kubernetes کلسترز یا لوڈ بیلنسروں پر۔
آرکیٹیکچر کی تفصیل
API Gateway → Lambda → RDS
[Client App] (iOS, Android, Web)
↓
[API Gateway] (HTTP routing, rate limiting)
↓
[Lambda Handlers] (Flask app, 512MB memory, 28s timeout)
├── App routes: /app/* (mobile endpoints)
├── User routes: /user/* (authenticated endpoints)
└── Admin routes: /boss/* (admin dashboard)
↓
[MySQL 8 on RDS] (Persistent data)
↓
[Response] (JSON back to client)
رفتار کے لیے پتلے Lambdas
زیادہ تر Lambdas جان بوجھ کر انتہائی چھوٹے ہیں:
# پتلا ہینڈلر (~100KB)
import json
import pymysql
def get_user_progress(event, context):
user_id = event['pathParameters']['user_id']
# براہ راست ڈیٹابیس کنکشن (ORM نہیں)
conn = pymysql.connect(host='rds.aws.com', user='app', password='...', database='amal')
cursor = conn.cursor()
cursor.execute(
'SELECT concept_id, accuracy FROM user_memory WHERE user_id = %s',
(user_id,)
)
rows = cursor.fetchall()
conn.close()
return {
'statusCode': 200,
'body': json.dumps([{'concept': r[0], 'accuracy': r[1]} for r in rows])
}
کوئی Flask امپورٹ، SQLAlchemy ORM یا مڈل ویئر نہیں۔ نتیجہ: تقریباً 500ms کولڈ اسٹارٹ بمقابلہ 5-10 سیکنڈ مکمل Flask ایپ کے۔
بھاری اینڈپوائنٹس (مواد بنانا، اینالیٹکس پروسیسنگ) مکمل Flask استعمال کرتے ہیں:
# بھاری ہینڈلر (~30MB Flask، SQLAlchemy، numpy کے ساتھ)
from flask import Flask, jsonify
from models import UserMemory
import numpy as np
app = Flask(name)
@app.route('/content_duo/generate', methods=['POST'])
def generate_content_duo():
# پیچیدہ منطق جسے ORM کی ضرورت ہے
user = UserMemory.query.filter_by(user_id=request.json['user_id']).first()
# ... ذاتی نوعیت کا سیشن بنائیں ...
return jsonify(session_data)
موازنہ: کولڈ اسٹارٹ سست لیکن کم بار کال ہونے والے۔
اپلیکیشن کے مطابق ٹیبل کے پری فکس
ایک RDS انسٹینس 7+ ایپس کو ڈیٹابیس لیول آئسولیشن کے ساتھ سروس دیتا ہے:
-- Amal ایپ
CREATE TABLE amal_users (...)
CREATE TABLE amal_content_bytes (...)
CREATE TABLE amal_user_memory (...)
-- Thurayya ایپ
CREATE TABLE thurayya_users (...)
CREATE TABLE thurayya_content_bytes (...)
CREATE TABLE thurayya_user_memory (...)
-- دوسری ایپس: qais_, kidelite_, وغیرہ
ڈیپلائمنٹ کے وقت، APP_NAME انوائرنمنٹ ویریبل پری فکس منتخب کرتا ہے:
app_name = os.getenv('APP_NAME', 'amal') # 'amal', 'thurayya', 'qais', وغیرہ
کیوریز prefix کے ساتھ متحرک
table_name = f'{app_name}_users'
cursor.execute(f'SELECT * FROM {table_name} WHERE id = %s', (user_id,))
اینالیٹکس لیک
مسئلہ: ڈیٹابیس کو براہ راست اینالیٹکس کے لیے استعمال کرنے سے پروڈکشن سست ہوجاتی ہے، رپورٹس ضروری ٹیبلز کو لاک کر دیتی ہیں۔
حل: غیر ہنگامی اینالیٹکس پائپ لائن
[Mobile App]
↓ (ایونٹ بھیجتا ہے)
[API Endpoint] → [SQS Queue] (غیر ہم وقت)
↓ (فوری ردعمل)
↓ (اینالیٹکس کا انتظار نہیں کرتا)
[Kinesis Firehose] (5 منٹ یا 100MB تک ایونٹس کی بیچنگ)
↓
[S3] (پارٹیشنڈ: s3://analytics-lake/amal/2026/03/28/events.parquet)
↓
[AWS Glue] (S3 کو کرال کرتا ہے، اسکیمہ سمجھتا ہے)
↓
[Athena] (Presto انجن سے SQL کوئریز)
↓
[Dashboard] (اصل وقت بصیرت دکھاتا ہے)
ڈیڈ لیٹر کیو (DLQ) پیٹرن
اگر اینالیٹکس فیل ہوجائے:
SQS → [Firehose fails]
↓
[DLQ فیل شدہ پیغامات وصول کرتا ہے]
↓
[آپریشنز کو الرٹ بھیجا جاتا ہے]
↓
[پروڈکشن API متاثر نہیں ہوتا]
اینالیٹکس صارفین کی درخواستوں کو روک نہیں پاتی۔ بچے سیکھتے رہ سکتے ہیں چاہے اینالیٹکس پائپ لائن بند ہو۔
لاگت کی بچت کی حکمت عملی
- حکمت عملی 1: پتلے Lambdas ہائی فریکوئنسی اینڈپوائنٹس کے لیے
- عام موبائل ایپ سیشن میں 10-20 API کالز کرتا ہے
- 95,000 فعال صارفین × 3 سیشن/دن × 15 کالز/سیشن = 4.275 ملین کالز/دن
- ہر کال کی قیمت تقریباً $0.0000002 (Lambda پرائسنگ)، کل ≈ $0.86/دن
- کولڈ اسٹارٹ وقت کم کر کے ماہانہ $500 بچت ممکن ہے
- حکمت عملی 2: RDS ریزروڈ انسٹینسز
- 3 سال کی کمٹمنٹ پر 60٪ تک رعایت
- db.r6i.xlarge (4 vCPU، 32GB RAM): $2,800/ماہ ریزروڈ بمقابلہ $6,500/ماہ آن ڈیمانڈ
- سالانہ بچت تقریباً $50,000
- حکمت عملی 3: کیشنگ
- بار بار استعمال ہونے والی ڈیٹا (نصاب، مواد) ElastiCache (Redis) میں کیش کی جاتی ہے
- RDS کیوئریز 70٪ کم ہوجاتی ہیں
- کیش کا خرچ: $800/ماہ، RDS میں $2,000/ماہ کی بچت
ایک کوڈبیس سے 7+ ایپس کی خدمت
| ایپ | پریفکس | ڈی بی ٹیبلز | Lambda اسٹیک | حیثیت |
|---|---|---|---|---|
| Amal | amal_ | 40+ ٹیبلز | شیئرڈ | پروڈکشن |
| Thurayya | thurayya_ | 40+ ٹیبلز | شیئرڈ | پروڈکشن |
| Qais | qais_ | 35+ ٹیبلز | شیئرڈ | بیٹا |
| KidElite | kidelite_ | 40+ ٹیبلز | شیئرڈ | پروڈکشن |
| Alphazed School | school_ | 50+ ٹیبلز | شیئرڈ | بیٹا |
| Alphazed Montessori | montessori_ | 45+ ٹیبلز | شیئرڈ | انٹرنل |
ایک بیک اینڈ، ایک ڈپلائمنٹ پائپ لائن، 6 بیک وقت ایپس۔ نئی ایپ کا اجرا مہینوں کی جگہ ہفتوں میں ہوتا ہے۔
اکثر پوچھے جانے والے سوالات (FAQ)
س: کیا Lambda کا 15 منٹ کا ٹائم آؤٹ نہیں ہوتا؟
ج: Lambda کا زیادہ سے زیادہ 15 منٹ کا ٹائم آؤٹ ہے، لیکن طویل ریکویسٹز کی ضرورت کم ہی پڑتی ہے۔ بھاری کام جیسے مواد کی جنریشن یا بڑے ایکسپورٹس ایس کیو ایس + Step Functions کے ساتھ غیر ہم وقت میں عمل کیے جاتے ہیں۔
س: اگر ڈیٹابیس ڈاؤن ہوجائے تو؟
ج: RDS میں Multi-AZ Failover ہوتا ہے (پرائمری اور اسٹینڈ بائی ریپلیکا)। failover خودکار ہے اور تقریباً 60 سیکنڈ لیتا ہے۔ کلائنٹس کو مختصر وقت آؤٹ کا سامنا ہوتا ہے لیکن بحالی تیز ہوتی ہے۔
س: Lambda کی بے ریاستی نوعیت میں ڈیٹابیس کنکشن پولنگ کیسے کرتے ہیں؟
ج: ہر Lambda مثال ایک کنکشن پول رکھتی ہے جو گرم انوکیشنز میں دوبارہ استعمال ہوتا ہے۔ کولڈ اسٹارٹ پر نئے کنکشنز بنائے جاتے ہیں۔ RDS Proxy Lambda اور RDS کے درمیان کنکشن حدود کو منظم کرتا ہے۔



