मल्टी-सर्व्हर आर्किटेक्चर: चिंतेचे विभाजन

हा लेख आमची इन्फ्रास्ट्रक्चर चिंतेचे विभाजन या पद्धतीचा वापर करून विशेषीकृत सर्व्हर्सद्वारे स्केलेबिलिटी, रिलायबिलिटी आणि परफॉर्मन्स कशी प्राप्त करते हे स्पष्ट करतो.

समस्या: मोनोलिथिक सर्व्हरच्या मर्यादा

सर्व काही एकाच सर्व्हरवर चालवल्याने होते:

  • संसाधन स्पर्धा: वेब सर्व्हर सर्च सर्व्हिससोबत CPU/मेमरीसाठी स्पर्धा करतो

  • स्केलिंगची अडचण: घटक स्वतंत्रपणे स्केल करता येत नाहीत

  • एकल बिंदू अपयश: एक सर्व्हर डाउन = संपूर्ण सिस्टीम डाउन

  • खर्चाची अकार्यक्षमता: वर्कलोडनुसार इन्स्टन्स प्रकार ऑप्टिमाइझ करता येत नाहीत

  • डेप्लॉयमेंट जोखीम: एका घटकाचे डेप्लॉयमेंट इतर सर्वांवर परिणाम करते

आम्हाला अनेक सर्व्हर्सवर चिंतेचे विभाजन आवश्यक आहे.

उपाय: विशेषीकृत सर्व्हर भूमिका

आम्ही विशेषीकृत सर्व्हर्स चालवतो, प्रत्येक त्याच्या वर्कलोडसाठी ऑप्टिमाइझ केलेले:

graph TB
    subgraph prod[प्रोडक्शन ERP सर्व्हर]
        erp[अंतर्गत व्यवस्थापन
HR, वित्त, उत्पादन
24/7 अपटाइम
सामायिक स्टोरेज आणि ईमेल] end subgraph web[पब्लिक वेबसाइट सर्व्हर] www[पब्लिक वेबसाइट
उत्पादन कॅटलॉग, ब्लॉग
24/7 अपटाइम
CDN मागे] end subgraph dev[डेव्हलपमेंट/स्टेजिंग सर्व्हर] devenv[डेव्ह आणि स्टेजिंग
ईमेल मोहिमा
रात्री/आठवड्याच्या शेवटी बंद] end subgraph search[सर्च सर्व्हिस सर्व्हर] searchsvc[वेक्टर शोध
फिल्टर एक्सट्रॅक्शन
संबंधित शोध
24/7 अपटाइम] end subgraph cache[कॅश सर्व्हर - Valkey] valkey[RediSearch अनुक्रमणिका
क्वेरी एम्बेडिंग्ज
ऑटोकंप्लीट
24/7 अपटाइम] 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: उत्पादन पृष्ठाची विनंती
    CDN->>CDN: कॅश तपासा
    alt Cache hit
        CDN->>User: कॅश केलेले पृष्ठ द्या
    else Cache miss
        CDN->>Web: विनंती पुढे करा
        Web->>Search: संबंधित उत्पादने मिळवा
        Search->>Cache: क्वेरी एम्बेडिंग्ज
        Cache->>Search: निकाल परत करा
        Search->>Web: संबंधित उत्पादने
        Web->>CDN: रेंडर केलेले पृष्ठ
        CDN->>CDN: प्रतिसाद कॅश करा
        CDN->>User: पृष्ठ द्या
    end

शोध क्वेरी प्रवाह:

sequenceDiagram
    participant User
    participant Web as Web Server
    participant Search as Search Service
    participant Cache as Cache Server
    
    User->>Web: शोध क्वेरी सबमिट करा
    Web->>Search: क्वेरी पुढे करा
    Search->>Search: फिल्टर्स काढा
    Search->>Search: एम्बेडिंगची गणना करा
    Search->>Cache: वेक्टर शोध
    Cache->>Search: रँक केलेले निकाल
    Search->>Web: उत्पादन जुळणी
    Web->>User: निकाल रेंडर करा

फायदा: प्रत्येक सर्व्हर ज्यासाठी ऑप्टिमाइझ केलेले आहे ते करते.

प्रति सर्व्हर स्टोरेज धोरण

वेगवेगळ्या सर्व्हर्स वेगवेगळी स्टोरेज धोरणे वापरतात:

वेब सर्व्हर

S3-बॅक्ड स्टॅटिक फाइल्स: S3 वरून दिलेल्या प्रतिमा, CSS, JS

  • उच्च उपलब्धता

  • स्थानिक डिस्क वापर नाही

  • CDN-फ्रेंडली

स्थानिक कॅश: रेंडर केलेली पृष्ठे Nginx कॅश करते

  • वारंवार ॲक्सेससाठी जलद

  • स्वयंचलित अवैधता

सर्च सर्व्हिस

NumPy अॅरे: उत्पादन एम्बेडिंग्ज बायनरी अॅरे म्हणून स्टोअर केलेले

  • जलद वेक्टर ऑपरेशन्स

  • कार्यक्षमतेसाठी मेमरी-मॅप केलेले

  • ६५K उत्पादने × ७६८ परिमाणे = ~१९० MB

JSON फाइल्स: फिल्टर मॅपिंग्ज, फ्रेझ टेबल्स

  • मानवी-वाचनीय

  • अपडेट करणे सोपे

  • लहान आकार (<१० MB)

कॅश सर्व्हर

Valkey (Redis): क्वेरी एम्बेडिंग्ज, लोकप्रिय क्वेरीज, ऑटोकंप्लीट

  • गतीसाठी इन-मेमरी

  • वेक्टर अनुक्रमणिकांसाठी RediSearch

  • टिकाऊपणासाठी स्थायित्व

वेगवेगळे स्टोरेज का?

  • NumPy: वेक्टर मॅथसाठी ऑप्टिमाइझ केलेले (कोसाइन समानता)

  • JSON: मानवी संपादनासाठी ऑप्टिमाइझ केलेले (फिल्टर नियम)

  • Valkey: की-व्हॅल्यू लुकअपसाठी ऑप्टिमाइझ केलेले (क्वेरी कॅश)

CDN आर्किटेक्चर

पब्लिक वेबसाइट कंटेंट डिलिव्हरी नेटवर्क मागे बसते:

काय कॅश केले जाते

स्टॅटिक अॅसेट्स (लांब TTL):

  • प्रतिमा, CSS, जावास्क्रिप्ट

  • फॉन्ट्स, चिन्हे

  • १ वर्षासाठी कॅश केलेले

उत्पादन पृष्ठे (मध्यम TTL):

  • उत्पादन वर्णने

  • तपशील

  • १ तासासाठी कॅश केलेले

क्वेरी पृष्ठे (लहान TTL):

  • शोध निकाल

  • फिल्टर संयोजने

  • ५ मिनिटांसाठी कॅश केलेले

कॅश केलेले नाही:

  • वापरकर्ता-विशिष्ट मजकूर

  • API एंडपॉइंट्स

  • डायनॅमिक शोध

CDN का महत्त्वाचे आहे

  • ग्लोबल लेटन्सी: एज लोकेशन्स वापरकर्त्यांच्या जवळ मजकूर देतात

  • ओरिजिन संरक्षण: CDN ट्रॅफिक स्पाईक शोषून घेते, ओरिजिन सर्व्हरचे संरक्षण करते

  • DDoS शमन: CDN दुर्भावनापूर्ण ट्रॅफिक ओरिजिनपर्यंत पोहोचण्यापूर्वी फिल्टर करते

  • खर्च कपात: कमी ओरिजिन विनंती = कमी कॉम्प्युट खर्च

डेप्लॉयमेंट पाइपलाइन

आम्ही वातावरणांमधून डेप्लॉय करतो जेणेकरून समस्या लवकर शोधता येतील:

डेव्हलपमेंट वातावरण

उद्देश: डीबग टूल्ससह द्रुत पुनरावृत्ती वैशिष्ट्ये:

  • कोड बदलांवर स्वयं-रीलोड

  • तपशीलवार त्रुटी पृष्ठे

  • डीबग टूलबार

  • कॅशिंग नाही

फायदा: डेव्हलपर्ससाठी द्रुत फीडबॅक लूप.

स्टेजिंग वातावरण

उद्देश: प्रोडक्शन-सारखी चाचणी वैशिष्ट्ये:

  • प्रोडक्शन सारखेच कॉन्फिगरेशन

  • प्रोडक्शन सारखीच सर्व्हर सेटअप (Gunicorn, Nginx)

  • प्रोडक्शन सारखेच कॅशिंग वर्तन

  • प्र