আসলামে অ্যারাবিক এডটেক অ্যাপ তৈরি ও চালানোর সহজ উপায়
4 মিনিটের পাঠMohammad Shaker

আসলামে অ্যারাবিক এডটেক অ্যাপ তৈরি ও চালানোর সহজ উপায়

Alphazed অ্যাপস AWS Lambda ব্যবহার করে ৯৫,০০০+ শিক্ষার্থীর জন্য আরবী এডটেক সার্ভিস চালায়।

Engineering

দ্রুত উত্তর

Alphazed অ্যাপস AWS Lambda ব্যবহার করে ৯৫,০০০+ শিক্ষার্থীর জন্য আরবী এডটেক সার্ভিস চালায়।

Alphazed তার সমস্ত ব্যাকএন্ড চালায় AWS Lambda ও Serverless Framework দিয়ে, যেটি ৫০+ দেশে ৯৫,০০০+ শিক্ষার্থীকে সেবা দেয়। এই আর্কিটেকচারে Flask ব্যবহার করা হয়েছে Lambda এর পিছনে API Gateway দিয়ে, MySQL 8 RDS তে, S3 তে কন্টেন্ট ডেলিভারি এবং একটি কাস্টম অ্যানালিটিক্স লেক (SQS → Kinesis Firehose → S3 → Glue → Athena) ব্যবহার করা হয়। থিন Lambda হ্যান্ডলারগুলো ঠান্ডা শুরু সময় কমায় এবং একই কোডবেস থেকে ৭টি অ্যাপ একসাথে পরিচালিত হয় রনটাইম কনফিগারেশন পরিবর্তনের মাধ্যমে।

কেন EdTech এর জন্য Serverless?

শিক্ষামূলক অ্যাপের ব্যবহার অপ্রত্যাশিত ও বিভিন্ন সময়ে ওঠানামা করে:

  • সাপ্তাহিক কর্মদিবসের সকাল: অভিভাবক স্কুলে পাঠানোর আগে অ্যাপ ডাউনলোড করেন (ট্রাফিক স্পাইক)
  • সন্ধ্যা: স্কুল পরে অনুশীলন সেশন (স্থিতিশীল লোড)
  • সপ্তাহান্ত: মারাথন সেশন (২-৩ গুণ বেশি লোড)
  • রমজান মাসে: সন্ধ্যার কোরআন সেশন দিয়ে ব্যবহার বৃদ্ধি
  • বিদ্যালয় ছুটিতে: পুরো ভিন্ন ব্যবহার প্যাটার্ন

Serverless সুবিধাসমূহ:

  • প্রতি অনুরোধ ভিত্তিক মূল্য: সত্যিকারের ব্যবহারের জন্যই মূল্য দিতে হয়।
  • জলদি শুরু হয় উচ্চ তীব্রতার এন্ডপয়েন্টগুলোর জন্যঃ 'সদা গরম' Lambda লেয়ার ব্যবহার করা হয়।
  • স্বয়ংক্রিয় স্কেলিং: ১০ থেকে ১০০০০ concurrent ব্যবহারকারি নির্বিঘ্নে পরিচালনা।
  • সার্ভার রক্ষণাবেক্ষণ নেই: টিম শুধু কারিকুলাম ও AI এ মনোযোগ দেয়, সার্ভার কনফিগারেশন নয়।

আর্কিটেকচারের বিস্তারিত বর্ণনা

API Gateway → Lambda → RDS

[ক্লায়েন্ট অ্যাপ] (iOS, Android, Web)
    ↓
[API Gateway] (HTTP রাউটিং, রেট লিমিটিং)
    ↓
[Lambda হ্যান্ডলার] (Flask অ্যাপ, ৫১২MB মেমরি, ২৮ সেকেন্ড টাইমআউট)
    ├── অ্যাপ রুট: /app/* (মোবাইল এন্ডপয়েন্ট)
    ├── ব্যবহারকারী রুট: /user/* (অথেন্টিকেটেড এন্ডপয়েন্ট)
    └── অ্যাডমিন রুট: /boss/* (অ্যাডমিন ড্যাশবোর্ড)
    ↓
[MySQL 8 on RDS] (ধারাবাহিক ডেটা)
    ↓
[রেসপন্স] (JSON ক্লায়েন্টকে ফেরত)

দ্রুততার জন্য থিন Lambdas

বেশিরভাগ Lambdas ইরাদাকৃতভাবে কমপ্যাক্ট:

# থিন হ্যান্ডলার (~১০০KB)
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 বা মিডলওয়্যার নেই। ফলে ঠান্ডা শুরু সময় প্রায় ৫০০ms হয়, যা পূর্ণ Flask অ্যাপের ৫-১০ সেকেন্ডের তুলনায় দ্রুত।

যেখানে ভারী কাজ লাগে (কন্টেন্ট তৈরী, অ্যানালিটিক্স) সেখানে সম্পূর্ণ Flask ব্যবহার করা হয় যার ফলে দীর্ঘ নির্মাণ সময়, তবে কম ব্যবহৃত এন্ডপয়েন্টে এটা গ্রহণযোগ্য।

অ্যাপ ভিত্তিক টেবিল নামের প্রিফিক্স

একটি RDS ইনস্ট্যান্স ৭+ অ্যাপ পরিচালনা করে আলাদা ডেটাবেস স্তরে আলাদা করে:

-- 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', ইত্যাদি

কুয়েরি গুলো ডাইনামিক প্রিফিক্স ব্যবহার করে

table_name = f'{app_name}_users' cursor.execute(f'SELECT * FROM {table_name} WHERE id = %s', (user_id,))

অ্যানালিটিক্স লেক

সমস্যা: সরাসরি ডেটাবেজ কুয়েরি অ্যানালিটিক্সের জন্য ধীরগতির এবং প্রোডাকশনকে লক করে।

সমাধান: অ্যাসিঙ্ক্রোনাস অ্যানালিটিক্স পাইপলাইন:

[মোবাইল অ্যাপ]
    ↓ (ইভেন্ট পাঠায়)
[API Endpoint] → [SQS Queue] (অ্যাসিঙ্ক্রোনাস)
    ↓ (তৎক্ষণাৎ রেসপন্স প্রদান)
    ↓ (অ্যানালিটিক্সের জন্য অপেক্ষা করে না)
[Kinesis Firehose] (৫ মিনিট অন্তর বা ১০০MB হলে ব্যাচ)
    ↓
[S3] (পার্টিশন: s3://analytics-lake/amal/2026/03/28/events.parquet)
    ↓
[AWS Glue] (S3 স্ক্যান করে স্কিমা নির্ধারণ)
    ↓
[Athena] (Presto দ্বারা SQL কুয়েরি)
    ↓
[ড্যাশবোর্ড] (রিয়েল-টাইম তথ্য প্রদর্শন)

ডেড লেটার কিউ (DLQ) প্যাটার্ন: অ্যানালিটিক্স ব্যর্থ হলে, বার্তাগুলো DLQ তে জমা হয় এবং অপারেশন টিমকে সতর্ক করা হয়। এর ফলে ব্যবহারকারিরা স্বাভাবিকভাবে অ্যাপ চালিয়ে যেতে পারে।

কস্ট অপ্টিমাইজেশন কৌশল

  • থিন Lambdas: প্রতি সেশনে ১০-২০ API কল, দিনে ৪.২৭৫ মিলিয়ন কল, কম কোল্ড স্টার্ট সময় অর্থ বাঁচায়।
  • RDS রিজার্ভড ইনস্ট্যান্স: ৩ বছরের কমিটমেন্টে ৬০% পর্যন্ত ডিসকাউন্ট, মাসিক সাশ্রয় প্রায় $৫০০০০ বার্ষিক।
  • ক্যাশিং: ElastiCache (Redis) ব্যবহার করে RDS কুয়েরি ৭০% কমানো।

এক কোডবেস থেকে ৭+ অ্যাপ সার্ভিং

অ্যাপপ্রিফিক্সডেটাবেজ টেবিলLambda স্ট্যাকঅবস্থা
Amalamal_৪০+ টেবিলশেয়ার্ডপ্রোডাকশন
Thurayyathurayya_৪০+ টেবিলশেয়ার্ডপ্রোডাকশন
Qaisqais_৩৫+ টেবিলশেয়ার্ডবেটা
KidElitekidelite_৪০+ টেবিলশেয়ার্ডপ্রোডাকশন
Alphazed Schoolschool_৫০+ টেবিলশেয়ার্ডবেটা
Alphazed Montessorimontessori_৪৫+ টেবিলশেয়ার্ডইন্টারনাল

একটি ব্যাকএন্ড, এক ডেপ্লয়মেন্ট পাইপলাইন, ৬টি অ্যাপ একসাথে। নতুন অ্যাপের জন্য অপেক্ষার সময় সপ্তাহের মধ্যে।

প্রশ্নোত্তর

Q: Lambda এর ১৫ মিনিট টাইমআউট লিমিট আছে, কী করে বড় কাজ হয়?
A: ভারী কাজগুলো (কন্টেন্ট তৈরি, বড় এক্সপোর্ট) জন্য SQS ও Step Functions দিয়ে অ্যাসিঙ্ক্রোনাস জব ব্যবহার করা হয়।

Q: ডেটাবেজ ডাউন হলে কী হয়?
A: RDS মাল্টি-AZ ফেইলওভার ব্যবহার করে, যা স্বয়ংক্রিয় এবং ~৬০ সেকেন্ডে পুনরুদ্ধার হয়।

Q: Stateless Lambda তে ডাটাবেজ কানেকশন পুলিং কিভাবে করা হয়?
A: প্রতিটি Lambda instance নিজস্ব কানেকশন পুল ধরে, ট্রিগার এর মধ্যে পুনরায় ব্যবহার হয়। RDS Proxy ব্যবহৃত হয় কানেকশন সীমা পরিচালনার জন্য।

শেয়ারTwitterLinkedInWhatsApp

সম্পর্কিত নিবন্ধ