de_DEen_USes_ESfa_IRfr_FRhi_INid_IDjapl_PLpt_PTru_RUvizh_CNzh_TW

C4 कंटेनर डायग्राम को समझना: तकनीकी चयनों, जिम्मेदारियों और संचार पर ध्यान केंद्रित करना (PlantUML उदाहरणों के साथ)

C4 कंटेनर डायग्राम क्या है?

कंटेनर डायग्राम है स्तर 2 साइमन ब्राउन के C4 मॉडल में। यह एकल सॉफ्टवेयर सिस्टम (स्तर 1 – सिस्टम संदर्भ में परिभाषित) में जूम करता है ताकि दिखाया जा सके:

The Ultimate Guide to C4 Model Visualization with Visual Paradigm's AI  Tools - ArchiMetric

  • उच्च स्तर का आकार आपकी सिस्टम सीमा के अंदर आर्किटेक्चर का।

  • मुख्य स्थापित/चलाने योग्य इकाइयाँ कहलाते हैं कंटेनर.

  • तकनीकी चयन प्रत्येक कंटेनर के लिए।

  • कंटेनर कैसे बातचीत करते हैं एक दूसरे और बाहरी एक्टर/सिस्टम के साथ।

महत्वपूर्ण स्पष्टीकरण: C4 में एक “कंटेनर” नहीं है जरूरी नहीं कि डॉकर कंटेनर हो। यह कोई भी अलग से स्थापित/चलाने योग्य इकाई है जो कोड निष्पादित करती है या डेटा स्टोर करती है। उदाहरण:

  • वेब एप्लिकेशन / सिंगल-पेज एप्लिकेशन (SPA)

  • मोबाइल एप्लिकेशन

  • सर्वर-साइड API / माइक्रोसर्विस

  • डेटाबेस (स्कीमा)

  • फाइल स्टोरेज (S3 बैग, फाइल सिस्टम फोल्डर)

  • संदेश ब्रोकर / कतार (जब स्पष्ट रूप से मॉडल किया जाता है)

  • डेस्कटॉप / CLI एप्लिकेशन

  • बैच प्रोसेस / समय सारणीबद्ध कार्य

डायग्राम बना रहता है उच्च स्तर का — आंतरिक क्लास या कोड विवरण नहीं (वह स्तर 3 घटक या स्तर 4 कोड है)।

कंटेनर डायग्राम बनाने का समय

जब आप एक कंटेनर डायग्राम बनाएं (और बनाए रखें):

  • आपने पूरा कर लिया है (या कम से कम एक रेखाचित्र बनाया है) सिस्टम संदर्भ डायग्राम और उत्तर देने की आवश्यकता है: “हमारे सिस्टम के अंदर प्रमुख निर्माण ब्लॉक क्या हैं?”

  • नए डेवलपर्स, आर्किटेक्ट्स या ऑपरेशंस स्टाफ के ऑनबोर्डिंग के लिए — उन्हें तकनीकी स्टैक और उच्च स्तर की जिम्मेदारियों को तेजी से समझने की आवश्यकता होती है।

  • महत्वपूर्ण तकनीकी या आर्किटेक्चरल निर्णय लेना (मोनोलिथ → माइक्रोसर्विसेज, मोबाइल ऐप जोड़ना, डेटाबेस चुनना, मैसेज क्यूज शुरू करना, क्लाउड माइग्रेशन)।

  • ऑडिट, संगतता, सुरक्षा समीक्षा या घटना प्रतिक्रिया के लिए दस्तावेजीकरण (हमले के क्षेत्र, डेटा प्रवाह दिखाने में मदद करता है)।

  • आपको “आर्किटेक्चर एज कोड” चाहिए जो रिपोजिटरी में रहता है और सिस्टम के साथ विकसित होता है।

  • अधिकांश टीमें यहीं रुकें — साइमन ब्राउन ने स्वयं नोट किया है कि सिस्टम संदर्भ + कंटेनर डायग्राम अधिकांश सॉफ्टवेयर टीमों के लिए पर्याप्त हैं। केवल तभी गहराई में जाएं (घटक/कोड) जब कंटेनर के अंदर की जटिलता इसके लिए तर्कसंगत हो।

छोड़ें या स्थगित करें यदि:

  • सिस्टम बहुत सरल है (एक प्रक्रिया + डेटाबेस)।

  • आप बहुत शुरुआती विचार प्रक्रिया कर रहे हैं और केवल बड़े चित्र का संदर्भ चाहते हैं।

कंटेनर डायग्राम का उपयोग क्यों करें? (मुख्य लाभ)

  • विभिन्न दर्शकों के लिए स्पष्टता
    डेवलपर्स तकनीकों और एकीकरण बिंदुओं को देखते हैं।
    ऑप्स/इंफ्रा टीमें डिप्लॉय करने योग्य इकाइयों और संचार मार्गों को देखती हैं।
    आर्किटेक्ट्स जिम्मेदारी की सीमाओं और तकनीकी देनदारी के जोखिम को देखते हैं।
    प्रबंधकों को एक पर्याप्त तकनीकी तटस्थ लेकिन वास्तविक दृष्टिकोण दिखाई देता है।

  • “एक बड़ा डायग्राम” समस्या से बचता है
    सभी चीजों (उपयोगकर्ता + इंफ्रा + क्लासेज + क्लाउड आइकन) को एक ही ओवरलोडेड चित्र में डालने से रोकता है।

  • महत्वपूर्ण निर्णयों को उजागर करता है
    स्पष्ट रूप से चयनों को उजागर करता है जैसे SPA + API + संबंधित डेटाबेस बनाम सर्वर-साइड रेंडरिंग + नॉन-एसक्यूएल, या सिंक्रोनस बनाम इवेंट-ड्राइवन।

  • संचार और सहयोग
    डिज़ाइन सत्रों, घटना पोस्ट-मॉर्टम, खतरा मॉडलिंग और रोडमैपिंग के दौरान एक साझा नक्शा के रूप में काम करता है।

  • जीवंत दस्तावेज़ीकरण
    जब PlantUML / Structurizr DSL / समान रूप से लिखा जाता है → Git में संस्करण बनाया जाता है, CI पर स्वचालित रूप से पुनर्जनित किया जाता है, हमेशा अद्यतन रहता है।

एक उत्कृष्ट कंटेनर आरेख बनाने का तरीका (चरण-दर-चरण + शीर्ष व्यवहार)

  1. स्तर 1 से शुरू करें
    संदर्भ आरेख से लोगों + बाहरी सॉफ्टवेयर प्रणालियों को कॉपी करें — वे आपके कंटेनरों के साथ बातचीत करने वाले एक्टर बन जाते हैं।

  2. प्रणाली सीमा खींचें
    उपयोग करें प्रणाली_सीमा PlantUML में “हमारी प्रणाली के अंदर” को स्पष्ट रूप से सीमित करने के लिए।

  3. कंटेनर पहचानें
    पूछें: वे कौन सी अलग-अलग चलाने/डेप्लॉय करने योग्य चीजें हैं जो प्रणाली के कार्यक्षमता को प्रदान करती हैं?
    आम पैटर्न:

    • वेब एसपीए ↔ एपीआई बैकएंड ↔ डेटाबेस

    • मोबाइल ऐप ↔ फ्रंटएंड के लिए बैकएंड (बीएफएफ) ↔ साझा सेवाएं

    • संदेश ब्रोकर के साथ माइक्रोसर्विसेज

    • पुराना मोनोलिथ + नई एपीआई परत

  4. तकनीक और संक्षिप्त विवरण जोड़ें
    प्रत्येक कंटेनर में दिखाना चाहिए: नाम, तकनीक, संक्षिप्त उद्देश्य।
    विवरण < 15 शब्दों तक रखें।

  5. इंटरैक्शन परिभाषित करें (संबंध)
    दिशा + प्रोटोकॉल + इरादा दिखाएं (उदाहरण के लिए, “JSON/HTTPS”, “से पढ़ता है और लिखता है”, “प्रकाशित करता है”, “से उपभोग करता है”)।
    संबंधों पर क्रिया शब्दों का उपयोग करें।

  6. शीर्ष व्यवहार

    • पठनीय रखें — < 10–12 कंटेनरों के लिए लक्ष्य निर्धारित करें। यदि अधिक हैं → एकाधिकृत दृश्य बनाएं (उदाहरण के लिए, “एपीआई सबसिस्टम कंटेनर”)।

    • संगत रहें — समान लेआउट दिशा (ऊपर से नीचे/बाएं से दाएं), समान विवरण स्तर।

    • आइकन/स्प्राइट्स का उपयोग करें — दृश्य आकर्षण जोड़ें (PlantUML डेविकॉन्स, फॉन्ट-एवर, आदि का समर्थन करता है)।

    • प्रतीक और कुंजी — PlantUML में स्वचालित प्रतीक सक्षम करें।

    • अव्यवस्था से बचें — यदि वे मूल्य नहीं जोड़ते हैं, तो भंडारण/विषयों को छोड़ दें; बजाय उनके तीरों पर प्रोटोकॉल लेबल करें।

    • संस्करण और कोड के रूप में संग्रहीत करें — .puml फ़ाइलों को रिपो में कमिट करें।

    • दर्शक अनुकूलन — डेवलपर्स के लिए एक संस्करण (विस्तृत तकनीक), स्टेकहोल्डर्स के लिए हल्का संस्करण।

PlantUML उदाहरण – पारंपरिक इंटरनेट बैंकिंग प्रणाली (बिग बैंक plc शैली)

यहाँ आधिकारिक C4-PlantUML लाइब्रेरी का उपयोग करके एक साफ, उत्पादन-ग्रेड उदाहरण है।

@startuml
!include https://raw.githubusercontent.com/plantuml-stdlib/C4-PlantUML/master/C4_Container.puml

' वैकल्पिक: सुंदर आइकन जोड़ें (tupadr3 स्प्राइट्स से)
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/angular.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/java.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/postgresql.puml
!include https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons/android.puml

title कंटेनर आरेख: इंटरनेट बैंकिंग प्रणाली

Person(customer, "व्यक्तिगत बैंकिंग ग्राहक", "बिग बैंक plc का ग्राहक")

System_Boundary(c1, "इंटरनेट बैंकिंग प्रणाली") {
    Container(spa, "सिंगल-पेज ऐप", "जावास्क्रिप्ट और एंगुलर", "ग्राहकों को उनके वेब ब्राउज़र के माध्यम से सभी इंटरनेट बैंकिंग कार्यक्षमता प्रदान करता है", $sprite="angular")
    Container(mobile, "मोबाइल ऐप", "एंड्रॉइड/आईओएस (रिएक्ट नेटिव)", "सीमित इंटरनेट बैंकिंग कार्यक्षमता", $sprite="android")
    Container(api, "एपीआई ऐप्लिकेशन", "जावा और स्प्रिंग बूट", "एपीआई के माध्यम से इंटरनेट बैंकिंग कार्यक्षमता प्रदान करता है", $sprite="java")
    ContainerDb_Ext(db, "बैंकिंग डेटाबेस", "पोस्टग्रेसक्वल", "उपयोगकर्ता प्राथमिकताएं, कैश्ड डेटा, सत्रों को संग्रहीत करता है (मुख्य खातों/लेनदेन मुख्यफ्रेम में बने रहते हैं)", $sprite="postgresql")
}

System_Ext(core, "कोर बैंकिंग प्रणाली", "मेनफ्रेम सिस्टम – मौजूदा")
System_Ext(email, "ईमेल प्रणाली", "ईमेल भेजती है (उदाहरण के लिए AWS SES)")

Rel(customer, spa, "उपयोग करता है", "HTTPS")
Rel(customer, mobile, "उपयोग करता है", "HTTPS")

Rel(spa, api, "कॉल करता है", "JSON/HTTPS")
Rel(mobile, api, "कॉल करता है", "JSON/HTTPS")

Rel(api, db, "पढ़ता है और लिखता है", "JDBC/SQL")
Rel(api, core, "उपयोग करता है", "JSON/HTTPS")
Rel(api, email, "ईमेल भेजता है", "HTTPS")

LAYOUT_WITH_LEGEND()
LAYOUT_TOP_DOWN()

@enduml

यह एक साफ आरेख दिखाता है जिसमें है:

  • प्रणाली सीमा

  • तकनीक लेबल

  • स्प्राइट्स/आइकन

  • स्पष्ट संबंध

  • प्रतीक

आप इसे सीधे PlantUML ऑनलाइन सर्वर या किसी भी संगत IDE/संपादक में पेस्ट कर सकते हैं।

इस संरचना को एक टेम्पलेट के रूप में उपयोग करें — अपनी प्रणाली के नाम, तकनीकों और प्रवाह के साथ तत्वों को बदलें। अधिक उन्नत शैली (थीम, कस्टम रंग), C4-PlantUML GitHub उदाहरणों की जांच करें।

खुशी से आरेख बनाएं — और याद रखें: लक्ष्य है प्रभावी संचार, UML पूर्णता नहीं!

C4 कंटेनर आरेख संसाधन

यह पोस्ट Deutsch, English, Español, فارسی, Français, Bahasa Indonesia, 日本語, Polski, Portuguese, Ру́сский, Việt Nam, 简体中文 और 繁體中文 में भी उपलब्ध है।