মাল্টি-সার্ভার আর্কিটেকচার: উদ্বেগের পৃথকীকরণ

এই নিবন্ধটি ব্যাখ্যা করে কিভাবে আমাদের অবকাঠামো বিশেষায়িত সার্ভার ব্যবহার করে উদ্বেগের পৃথকীকরণের মাধ্যমে স্কেলযোগ্যতা, নির্ভরযোগ্যতা এবং কর্মক্ষমতা অর্জন করে।

সমস্যা: মনোলিথিক সার্ভারের সীমাবদ্ধতা

একটি সার্ভারে সবকিছু চালানো নিম্নলিখিত সমস্যা সৃষ্টি করে:

  • সম্পদ প্রতিযোগিতা: ওয়েব সার্ভার 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)

  • একই ক্যাশিং আচরণ

  • প্রোডাকশন ডেটা থেকে বিচ্ছিন্ন

সুবিধা: ডেপ্লয়মেন্টের আগে প্রোডাকশন-নির্দিষ্ট সমস্যা শনাক্ত করুন।

প্রোডাকশন এনভায়রনমেন্ট

উদ্দেশ্য: আসল ব্যবহারকারীদের সেবা দেওয়া বৈশিষ্ট্য:

  • কর্মক্ষমতার জন্য অপ্টিমাইজড

  • সম্পূর্ণ ক্যাশিং সক্রিয়

  • মনিটরিং এবং অ্যালার্টিং

  • ক্র্যাশে স্বয়ংক্রিয় রিস্টার্ট

সুবিধা: স্থিতিশীল, নির্ভরযোগ্য সেবা।

রেফারেন্স

প্রযুক্তিগত ধারণা

AWS সার্ভিস

  • CloudFront - AWS CDN ডকুমেন্টেশন

  • S3 - AWS অবজেক্ট স্টোরেজ ডকুমেন্টেশন

  • DynamoDB - AWS NoSQL ডাটাবেস ডকুমেন্টেশন

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

সারাংশ

আমাদের মাল্টি-সার্ভার আর্কিটেকচার বিশেষায়িত সার্ভার জুড়ে উদ্বেগের পৃথকীকরণ করে:

প্রোডাকশন ERP সার্ভার:

  • অভ্যন্তরীণ ব্যবস্থাপনা সিস্টেম

  • ২৪/৭ আপটাইম

  • শেয়ার্ড স্টোরেজ এবং ইমেল

পাবলিক ওয়েবসাইট সার্ভার:

  • গ্রাহক-মুখী ওয়েবসাইট

  • ২৪/৭ আপটাইম

  • S3-ব্যাকড স্ট্যাটিক ফাইল সহ CDN এর পিছনে

ডেভেলপমেন্ট/স্টেজিং সার্ভার:

  • নিরাপদ পরীক্ষার পরিবেশ

  • ইমেল ক্যাম্পেইন প্রক্রিয়াকরণ

  • খরচ-অপ্টিমাইজড (রাত ও সপ্তাহান্তে বন্ধ থাকে)

সার্চ সার্ভিস সার্ভার:

  • ভেক্টর সাদৃশ্য সার্চ

  • ফিল্টার এক্সট্রাকশন

  • NumPy-ব্যাকড এমবেডিং

ক্যাশে সার্ভার (ভ্যালকি):

  • কোয়েরি এমবেডিং ক্যাশে

  • RediSearch ভেক্টর ইনডেক্স

  • জনপ্রিয় কোয়েরি র্যাঙ্কিং

মূল সুবিধা:

  • সম্পদ বিচ্ছিন্নতা: ওয়ার্কলোডগুলোর মধ্যে কোন প্রতিযোগিতা