মাল্টি-সার্ভার আর্কিটেকচার: উদ্বেগের পৃথকীকরণ
এই নিবন্ধটি ব্যাখ্যা করে কিভাবে আমাদের অবকাঠামো বিশেষায়িত সার্ভার ব্যবহার করে উদ্বেগের পৃথকীকরণের মাধ্যমে স্কেলযোগ্যতা, নির্ভরযোগ্যতা এবং কর্মক্ষমতা অর্জন করে।
সমস্যা: মনোলিথিক সার্ভারের সীমাবদ্ধতা
একটি সার্ভারে সবকিছু চালানো নিম্নলিখিত সমস্যা সৃষ্টি করে:
-
সম্পদ প্রতিযোগিতা: ওয়েব সার্ভার CPU/মেমরির জন্য সার্চ সার্ভিসের সাথে প্রতিযোগিতা করে
-
স্কেলিং কঠিনতা: উপাদানগুলো স্বাধীনভাবে স্কেল করা যায় না
-
একক ব্যর্থতার বিন্দু: একটি সার্ভার ডাউন = পুরো সিস্টেম ডাউন
-
খরচ অদক্ষতা: ওয়ার্কলোড অনুযায়ী ইনস্ট্যান্স টাইপ অপ্টিমাইজ করা যায় না
-
ডেপ্লয়মেন্ট ঝুঁকি: একটি উপাদান ডেপ্লয় করা অন্যান্য সবকিছুকে প্রভাবিত করে
আমাদের একাধিক সার্ভারে উদ্বেগের পৃথকীকরণ প্রয়োজন।
সমাধান: বিশেষায়িত সার্ভার রোল
আমরা বিশেষায়িত সার্ভার চালাই, প্রতিটি তার ওয়ার্কলোডের জন্য অপ্টিমাইজড:
graph TB
subgraph prod[প্রোডাকশন ERP সার্ভার]
erp[অভ্যন্তরীণ ব্যবস্থাপনা
এইচআর, ফাইন্যান্স, ম্যানুফ্যাকচারিং
২৪/৭ আপটাইম
শেয়ার্ড স্টোরেজ ও ইমেল]
end
subgraph web[পাবলিক ওয়েবসাইট সার্ভার]
www[পাবলিক ওয়েবসাইট
প্রোডাক্ট ক্যাটালগ, ব্লগ
২৪/৭ আপটাইম
CDN এর পিছনে]
end
subgraph dev[ডেভেলপমেন্ট/স্টেজিং সার্ভার]
devenv[ডেভ ও স্টেজিং
ইমেল ক্যাম্পেইন
রাত ও সপ্তাহান্তে বন্ধ থাকে]
end
subgraph search[সার্চ সার্ভিস সার্ভার]
searchsvc[ভেক্টর সার্চ
ফিল্টার এক্সট্রাকশন
সম্পর্কিত সার্চ
২৪/৭ আপটাইম]
end
subgraph cache[ক্যাশে সার্ভার - ভ্যালকি]
valkey[RediSearch ইনডেক্স
কোয়েরি এমবেডিং
অটোকমপ্লিট
২৪/৭ আপটাইম]
end
www --> searchsvc
searchsvc --> valkeyকেন আলাদা সার্ভার?
১. সম্পদ বিচ্ছিন্নতা
প্রতিটি সার্ভার এক ধরনের ওয়ার্কলোড চালায়:
ওয়েব সার্ভার: HTTP রিকোয়েস্ট হ্যান্ডলিংয়ের জন্য অপ্টিমাইজড
-
উচ্চ নেটওয়ার্ক ব্যান্ডউইথ
-
মাঝারি CPU
-
মাঝারি মেমরি
-
ক্যাশিংয়ের জন্য দ্রুত ডিস্ক
সার্চ সার্ভিস: ভেক্টর অপারেশনের জন্য অপ্টিমাইজড
-
উচ্চ CPU (কোসাইন সাদৃশ্য)
-
উচ্চ মেমরি (এমবেডিং ক্যাশে)
-
কম ডিস্ক I/O
ক্যাশে সার্ভার: মেমরি অ্যাক্সেসের জন্য অপ্টিমাইজড
-
অত্যন্ত উচ্চ মেমরি
-
কম CPU
-
দ্রুত নেটওয়ার্ক
সুবিধা: ওয়ার্কলোডগুলোর মধ্যে কোন সম্পদ প্রতিযোগিতা নেই।
২. স্বাধীন স্কেলিং
আমরা প্রতিটি উপাদান স্বাধীনভাবে স্কেল করতে পারি:
-
হাই ট্রাফিক? লোড ব্যালেন্সারের পিছনে আরও ওয়েব সার্ভার যোগ করুন।
-
স্লো সার্চ? সার্চ সার্ভার CPU আপগ্রেড করুন বা রেপ্লিকা যোগ করুন।
-
ক্যাশে মিস? ক্যাশে সার্ভার মেমরি বাড়ান।
-
সুবিধা: শুধুমাত্র যা স্কেলিং প্রয়োজন তা স্কেল করুন, সবকিছু নয়।
৩. ত্রুটি বিচ্ছিন্নতা
ব্যর্থতাগুলো সীমাবদ্ধ থাকে:
সার্চ সার্ভিস ডাউন? ওয়েবসাইট এখনও ক্যাশে করা ফলাফল পরিবেশন করে।
ক্যাশে সার্ভার ডাউন? সার্চ সার্ভিস ক্যাশে ছাড়াই গণনা করে (ধীর কিন্তু কার্যকর)।
ওয়েব সার্ভার ডাউন? অভ্যন্তরীণ ERP অপ্রভাবিত থাকে।
সুবিধা: আংশিক ব্যর্থতা পুরো সিস্টেমে ধারাবাহিকভাবে ছড়ায় না।
৪. ডেপ্লয়মেন্ট নিরাপত্তা
আমরা পরিবেশের মাধ্যমে ডেপ্লয় করি:
ডেভেলপমেন্ট → ডিবাগ টুলস দিয়ে পরিবর্তন পরীক্ষা করুন
স্টেজিং → প্রোডাকশন-সদৃশ পরিবেশে পরীক্ষা করুন
প্রোডাকশন → আত্মবিশ্বাস নিয়ে ডেপ্লয় করুন
সুবিধা: ব্যবহারকারীদের কাছে পৌঁছানোর আগেই সমস্যাগুলো শনাক্ত করুন।
৫. খরচ অপ্টিমাইজেশন
আমরা সার্ভার প্রতি খরচ অপ্টিমাইজ করি:
-
ডেভেলপমেন্ট সার্ভার: রাত ও সপ্তাহান্তে বন্ধ থাকে (৫০% খরচ হ্রাস)
-
IPv6-শুধু সার্ভার: ইলাস্টিক IP খরচ নেই (প্রতি ইনস্ট্যান্সে $৫/মাস সাশ্রয়)
-
সঠিক আকারের ইনস্ট্যান্স: ওয়ার্কলোড প্রতি প্রয়োজনীয় সম্পদের জন্য শুধুমাত্র অর্থ প্রদান করুন
-
সুবিধা: কর্মক্ষমতা বিসর্জন না দিয়ে কম অবকাঠামো খরচ।
সার্ভারগুলোর মধ্যে ডেটা প্রবাহ
ডেটা কিভাবে প্রবাহিত হয় তা বোঝা পৃথকীকরণ কেন গুরুত্বপূর্ণ তা ব্যাখ্যা করতে সাহায্য করে:
ব্যবহারকারী অনুরোধ প্রবাহ
প্রোডাক্ট পেজ রিকোয়েস্ট:
sequenceDiagram
participant User
participant CDN
participant Web as Web Server
participant Search as Search Service
participant Cache as Cache Server
User->>CDN: Request product page
CDN->>CDN: Check cache
alt Cache hit
CDN->>User: Serve cached page
else Cache miss
CDN->>Web: Forward request
Web->>Search: Get related products
Search->>Cache: Query embeddings
Cache->>Search: Return results
Search->>Web: Related products
Web->>CDN: Rendered page
CDN->>CDN: Cache response
CDN->>User: Serve page
endসার্চ কোয়েরি প্রবাহ:
sequenceDiagram
participant User
participant Web as Web Server
participant Search as Search Service
participant Cache as Cache Server
User->>Web: Submit search query
Web->>Search: Forward query
Search->>Search: Extract filters
Search->>Search: Compute embedding
Search->>Cache: Vector search
Cache->>Search: Ranked results
Search->>Web: Product matches
Web->>User: Render resultsসুবিধা: প্রতিটি সার্ভার যা করার জন্য অপ্টিমাইজড তা করে।
সার্ভার প্রতি স্টোরেজ কৌশল
বিভিন্ন সার্ভার বিভিন্ন স্টোরেজ কৌশল ব্যবহার করে:
ওয়েব সার্ভার
S3-ব্যাকড স্ট্যাটিক ফাইল: ছবি, CSS, JS S3 থেকে পরিবেশিত
-
উচ্চ প্রাপ্যতা
-
কোন লোকাল ডিস্ক ব্যবহার নেই
-
CDN-বন্ধুত্বপূর্ণ
লোকাল ক্যাশে: Nginx রেন্ডার করা পেজ ক্যাশে করে
-
দ্রুত পুনরাবৃত্ত অ্যাক্সেস
-
স্বয়ংক্রিয় অবৈধকরণ
সার্চ সার্ভিস
NumPy অ্যারে: প্রোডাক্ট এমবেডিং বাইনারি অ্যারে হিসেবে সংরক্ষিত
-
দ্রুত ভেক্টর অপারেশন
-
দক্ষতার জন্য মেমরি-ম্যাপড
-
৬৫K প্রোডাক্ট × ৭৬৮ ডাইমেনশন = ~১৯০ MB
JSON ফাইল: ফিল্টার ম্যাপিং, ফ্রেজ টেবিল
-
মানুষের পাঠযোগ্য
-
আপডেট করা সহজ
-
ছোট আকার (<১০ MB)
ক্যাশে সার্ভার
ভ্যালকি (রেডিস): কোয়েরি এমবেডিং, জনপ্রিয় কোয়েরি, অটোকমপ্লিট
-
গতির জন্য মেমরিতে
-
ভেক্টর ইনডেক্সের জন্য RediSearch
-
স্থায়িত্বের জন্য পারসিস্টেন্স
কেন ভিন্ন স্টোরেজ?
-
NumPy: ভেক্টর গণিতের জন্য অপ্টিমাইজড (কোসাইন সাদৃশ্য)
-
JSON: মানুষের সম্পাদনার জন্য অপ্টিমাইজড (ফিল্টার নিয়ম)
-
ভ্যালকি: কী-মান লুকআপের জন্য অপ্টিমাইজড (কোয়েরি ক্যাশে)
CDN আর্কিটেকচার
পাবলিক ওয়েবসাইট একটি কন্টেন্ট ডেলিভারি নেটওয়ার্কের পিছনে অবস্থিত:
কী ক্যাশে করা হয়
স্ট্যাটিক অ্যাসেট (দীর্ঘ TTL):
-
ছবি, CSS, জাভাস্ক্রিপ্ট
-
ফন্ট, আইকন
-
১ বছরের জন্য ক্যাশে করা
প্রোডাক্ট পেজ (মাঝারি TTL):
-
প্রোডাক্ট বিবরণ
-
স্পেসিফিকেশন
-
১ ঘন্টার জন্য ক্যাশে করা
কোয়েরি পেজ (সংক্ষিপ্ত TTL):
-
সার্চ ফলাফল
-
ফিল্টার কম্বিনেশন
-
৫ মিনিটের জন্য ক্যাশে করা
ক্যাশে করা হয় না:
-
ব্যবহারকারী-নির্দিষ্ট কন্টেন্ট
-
API এন্ডপয়েন্ট
-
ডাইনামিক সার্চ
কেন CDN গুরুত্বপূর্ণ
-
গ্লোবাল লেটেন্সি: এজ লোকেশন ব্যবহারকারীদের কাছাকাছি কন্টেন্ট পরিবেশন করে
-
অরিজিন সুরক্ষা: CDN ট্রাফিক স্পাইক শোষণ করে, অরিজিন সার্ভারকে রক্ষা করে
-
DDoS প্রশমন: CDN অরিজিনে পৌঁছানোর আগেই দূষিত ট্রাফিক ফিল্টার করে
-
খরচ হ্রাস: কম অরিজিন রিকোয়েস্ট = কম কম্পিউট খরচ
ডেপ্লয়মেন্ট পাইপলাইন
আমরা সমস্যা শুরুতেই শনাক্ত করতে পরিবেশের মাধ্যমে ডেপ্লয় করি:
ডেভেলপমেন্ট এনভায়রনমেন্ট
উদ্দেশ্য: ডিবাগ টুলস দিয়ে দ্রুত পুনরাবৃত্তি বৈশিষ্ট্য:
-
কোড পরিবর্তনে স্বয়ংক্রিয় রিলোড
-
বিস্তারিত ত্রুটি পৃষ্ঠা
-
ডিবাগ টুলবার
-
কোন ক্যাশিং নেই
সুবিধা: ডেভেলপারদের জন্য দ্রুত প্রতিক্রিয়া লুপ।
স্টেজিং এনভায়রনমেন্ট
উদ্দেশ্য: প্রোডাকশন-সদৃশ পরীক্ষা বৈশিষ্ট্য:
-
প্রোডাকশনের মতো একই কনফিগারেশন
-
একই সার্ভার সেটআপ (Gunicorn, Nginx)
-
একই ক্যাশিং আচরণ
-
প্রোডাকশন ডেটা থেকে বিচ্ছিন্ন
সুবিধা: ডেপ্লয়মেন্টের আগে প্রোডাকশন-নির্দিষ্ট সমস্যা শনাক্ত করুন।
প্রোডাকশন এনভায়রনমেন্ট
উদ্দেশ্য: আসল ব্যবহারকারীদের সেবা দেওয়া বৈশিষ্ট্য:
-
কর্মক্ষমতার জন্য অপ্টিমাইজড
-
সম্পূর্ণ ক্যাশিং সক্রিয়
-
মনিটরিং এবং অ্যালার্টিং
-
ক্র্যাশে স্বয়ংক্রিয় রিস্টার্ট
সুবিধা: স্থিতিশীল, নির্ভরযোগ্য সেবা।
রেফারেন্স
প্রযুক্তিগত ধারণা
-
উদ্বেগের পৃথকীকরণ - উইকিপিডিয়া
-
কন্টেন্ট ডেলিভারি নেটওয়ার্ক (CDN) - উইকিপিডিয়া
-
অনুভূমিক স্কেলিং - উইকিপিডিয়া
-
কোসাইন সাদৃশ্য - উইকিপিডিয়া
AWS সার্ভিস
-
CloudFront - AWS CDN ডকুমেন্টেশন
-
S3 - AWS অবজেক্ট স্টোরেজ ডকুমেন্টেশন
-
DynamoDB - AWS NoSQL ডাটাবেস ডকুমেন্টেশন
সম্পর্কিত নিবন্ধ
-
সার্চ সার্ভিস আর্কিটেকচার - স্ট্যান্ডঅ্যালোন সার্চ সার্ভিস বিবরণ
-
SEO এমবেডিং কৌশল - কেন আমরা all-mpnet-base-v2 ব্যবহার করি
-
SEO প্রোডাক্ট ম্যাচিং - কিভাবে ভেক্টর সার্চ কাজ করে
-
ট্রান্সলেশন সিস্টেম - বহুভাষা সমর্থন আর্কিটেকচার
সারাংশ
আমাদের মাল্টি-সার্ভার আর্কিটেকচার বিশেষায়িত সার্ভার জুড়ে উদ্বেগের পৃথকীকরণ করে:
প্রোডাকশন ERP সার্ভার:
-
অভ্যন্তরীণ ব্যবস্থাপনা সিস্টেম
-
২৪/৭ আপটাইম
-
শেয়ার্ড স্টোরেজ এবং ইমেল
পাবলিক ওয়েবসাইট সার্ভার:
-
গ্রাহক-মুখী ওয়েবসাইট
-
২৪/৭ আপটাইম
-
S3-ব্যাকড স্ট্যাটিক ফাইল সহ CDN এর পিছনে
ডেভেলপমেন্ট/স্টেজিং সার্ভার:
-
নিরাপদ পরীক্ষার পরিবেশ
-
ইমেল ক্যাম্পেইন প্রক্রিয়াকরণ
-
খরচ-অপ্টিমাইজড (রাত ও সপ্তাহান্তে বন্ধ থাকে)
সার্চ সার্ভিস সার্ভার:
-
ভেক্টর সাদৃশ্য সার্চ
-
ফিল্টার এক্সট্রাকশন
-
NumPy-ব্যাকড এমবেডিং
ক্যাশে সার্ভার (ভ্যালকি):
-
কোয়েরি এমবেডিং ক্যাশে
-
RediSearch ভেক্টর ইনডেক্স
-
জনপ্রিয় কোয়েরি র্যাঙ্কিং
মূল সুবিধা:
- ✅ সম্পদ বিচ্ছিন্নতা: ওয়ার্কলোডগুলোর মধ্যে কোন প্রতিযোগিতা