3.0 পর্ব ৩-এর ভূমিকা: সিস্টেম
স্থাপত্য হলো সেই সিদ্ধান্তগুলোর সমষ্টি, যা উল্টানো ব্যয়বহুল। একটি সিস্টেমকে অংশে কীভাবে ভাগ করবেন? সেই অংশগুলো একে অন্যের সঙ্গে কীভাবে কথা বলে? ডেটা কীভাবে মডেল করা হয়? আর পুরো জিনিসটি লোড ও ব্যর্থতার মুখে কেমন আচরণ করে? পর্ব ৩ এই সিদ্ধান্তগুলো ইচ্ছাকৃতভাবে নেওয়া নিয়ে। একটি ছোট দলে স্থাপত্য কয়েকজনের মাথায় বাস করতে পারে এবং চলতে চলতে বিবর্তিত হতে পারে। একটি বড় প্রতিষ্ঠানে (শত শত ইঞ্জিনিয়ার, ডজন ডজন দল, এমন সিস্টেম যা তাদের বানানো মানুষদের কর্মজীবনকে ছাড়িয়ে যাবে), স্থাপত্য হয়ে ওঠে সেই জিনিস, যা সবাইকে সমন্বিত রাখে। তা স্পষ্ট হলে দলগুলো সংঘর্ষ ছাড়াই স্বাধীনভাবে এগোয়। তা অস্পষ্ট হলে প্রতিটি দল-জোড়া নির্ভরতা একটি দর-কষাকষি এবং প্রতিটি ঘটনা একটি প্রত্নতত্ত্ব প্রকল্প হয়ে ওঠে।
এন্টারপ্রাইজ ও সরকারে ঝুঁকি সবচেয়ে বেশি। একটি কর ইঞ্জিন, একটি সুবিধা প্ল্যাটফর্ম, একটি জাতীয় স্বাস্থ্য রেকর্ড বা একটি ব্যাংকের মূল খতিয়ান দীর্ঘজীবী, ভারীভাবে নিয়ন্ত্রিত, বিভাগ জুড়ে ভাগ করা এবং জনগণের কাছে জবাবদিহিযোগ্য। সংযুক্তি, ডেটার মালিকানা ও গুণমান বৈশিষ্ট্য নিয়ে আজ আপনি যে সিদ্ধান্ত নেন, তা এক দশক বা তার বেশি সময় ধরে কী সম্ভব তাকে সীমিত করবে। নিয়ন্ত্রক ও নিরীক্ষকরা ক্রমশ নথিবদ্ধ, রক্ষণযোগ্য স্থাপত্য আশা করেন, প্রকৃত প্রমাণসহ যে নির্ভরযোগ্যতা, নিরাপত্তা, গোপনীয়তা ও স্থায়িত্ব নকশায় ছিল, পরে জুড়ে দেওয়া নয়। শিরোনাম হওয়া ব্যর্থতাগুলো স্থাপত্যগত ব্যর্থতা: চালুর দিনে ভেঙে পড়া পোর্টাল, সময়সীমার দিনে টাইমআউট করা দাখিল সিস্টেম, রেকর্ড হারানো বা দুবার গোনা স্থানান্তর।
এই পর্ব শুরু হয় টেকসই মৌলিক বিষয় দিয়ে, এগোয় সুনির্দিষ্ট কাঠামোগত পছন্দের মধ্য দিয়ে, তারপর বিতরণ, ডেটা ও পরিসরের বাস্তবতায়, এবং শেষ হয় সবচেয়ে কঠিন সমস্যা দিয়ে, যার মুখোমুখি বেশিরভাগ বড় প্রতিষ্ঠান আসলে হয়: তারা ইতিমধ্যে যা চালায় সেই সিস্টেমের আধুনিকীকরণ। যে সুতো সবকিছু বাঁধে: ভালো স্থাপত্য সচেতন বিনিময়ের একটি ধারা, কোনো ফ্যাশনেবল ডিফল্ট নয়।
এই পর্বের অধ্যায়সমূহ
3.1 স্থাপত্যের মৌলিক বিষয়: প্রযুক্তির ফ্যাশন টিকে থাকা টেকসই হাতিয়ার: গুণমান বৈশিষ্ট্য (“-ilities”), স্থাপত্যগতভাবে তাৎপর্যপূর্ণ প্রয়োজন, ফিটনেস ফাংশন (একটি বেছে নেওয়া স্থাপত্য গুণ পাহারা দেওয়া স্বয়ংক্রিয় টেস্ট) ও বিবর্তনশীল স্থাপত্য, C4 মডেল (চার জুম স্তরে নেস্টেড স্থাপত্য চিত্র) ও arc42 (একটি স্থাপত্য নথিবদ্ধকরণ টেমপ্লেট) দিয়ে হালকা ডকুমেন্টেশন, এবং কাঠামোবদ্ধ বিনিময় বিশ্লেষণ।
3.2 স্থাপত্য শৈলী ও প্যাটার্ন: মনোলিথ থেকে মাইক্রোসার্ভিস, CQRS (Command Query Responsibility Segregation, যা পড়ার মডেল ও লেখার মডেল আলাদা করে) ও ইভেন্ট সোর্সিং (অবস্থাকে ইভেন্টের কেবল-যোগ-করা লগ হিসেবে সংরক্ষণ) সহ ইভেন্ট-চালিত স্থাপত্য, সার্ভিস মেশ (সার্ভিস-থেকে-সার্ভিস যোগাযোগের নিবেদিত অবকাঠামো স্তর) ও গেটওয়ে, সার্ভারলেস, এবং হেক্সাগোনাল ও ক্লিন আর্কিটেকচার পর্যন্ত প্রধান সিস্টেম আকারের জরিপ, প্রতিটি কখন মানায় তার নির্দেশনাসহ, কনওয়ের সূত্র (সিস্টেম তাকে বানানো প্রতিষ্ঠানের যোগাযোগ কাঠামো প্রতিফলিত করে) দিয়ে ফ্রেম করা।
3.3 বিতরিত সিস্টেম: নেটওয়ার্ক সীমানা পেরোনোর মুহূর্তে যে কঠিন সত্য দেখা দেয় (অনির্ভরযোগ্য নেটওয়ার্ক, আংশিক ব্যর্থতা, ভাগ করা ঘড়ির অভাব), এবং প্রমিত প্রতিরক্ষা: সামঞ্জস্য নিয়ে যুক্তি, আইডেমপোটেন্সি (একটি অপারেশনকে পুনরাবৃত্তি করা নিরাপদ করা), ব্যাকঅফসহ রিট্রাই, সার্কিট ব্রেকার (যা ব্যর্থ নির্ভরতাকে ডাকা বন্ধ করে), স্যাগা (ক্ষতিপূরণমূলক পূর্বাবস্থায়-ফেরানো ধাপসহ স্থানীয় লেনদেনের ক্রম), এবং বিতরিত অবজার্ভেবিলিটি।
3.4 ডেটা স্থাপত্য ও সংরক্ষণ: পরিসরে ডেটা কীভাবে মডেল, সংরক্ষিত, সামঞ্জস্যপূর্ণ রাখা ও দ্রুত সেবা দেওয়া হয়: প্রধান সংরক্ষণ দৃষ্টান্ত ও প্রতিটি কখন ব্যবহার করবেন, পলিগ্লট পারসিস্টেন্স (একটি সিস্টেমে বেশ কয়েকটি বিশেষায়িত ডেটা স্টোর ব্যবহার), স্কিমা বিবর্তন ও স্থানান্তর, ক্যাশিং ও CDN (কন্টেন্ট ডেলিভারি নেটওয়ার্ক), এবং লোডের অধীনে লেনদেন ও কনকারেন্সি।
3.5 স্কেলেবিলিটি, পারফরম্যান্স ও স্থিতিস্থাপকতা: পরে জুড়ে দেওয়ার বদলে নকশায় ঢোকানো তিনটি আলাদা গুণ: অনুভূমিক ও উল্লম্ব স্কেলিং, স্টেটলেসনেস ও শার্ডিং (একটি কী দিয়ে ডেটা মেশিন জুড়ে ভাগ করা), লোড ব্যালান্সিং ও অটোস্কেলিং, পারফরম্যান্স বাজেট, স্থিতিস্থাপকতা প্যাটার্ন ও কেয়স ইঞ্জিনিয়ারিং, এবং RTO (পুনরুদ্ধার সময় উদ্দেশ্য) ও RPO (পুনরুদ্ধার বিন্দু উদ্দেশ্য) দিয়ে ফ্রেম করা বহু-অঞ্চল দুর্যোগ পুনরুদ্ধার।
3.6 লিগ্যাসি আধুনিকীকরণ: যে ক্রমবর্ধমান প্যাটার্ন আসলে কাজ করে, স্ট্র্যাংলার ফিগ (পুরোনোটির চারপাশে নতুন সিস্টেম বাড়ানো যতক্ষণ না পুরোনোটি অবসর নিতে পারে) ও ব্রাঞ্চ-বাই-অ্যাবস্ট্র্যাকশন (উন্নয়নের মূল ধারায় একটি ইন্টারফেসের পেছনে উপাদান প্রতিস্থাপন), সঙ্গে লিগ্যাসি ঝুঁকি মূল্যায়ন, মেইনফ্রেম ও COBOL (Common Business-Oriented Language) দায়িত্বশীলতা, ডেটা স্থানান্তর ও দ্বৈত-চালনা, এবং এই ক্ষেত্রের সবচেয়ে ব্যয়বহুল ব্যর্থতা সৃষ্টিকারী বড়-পুনর্লিখনের প্রলোভন প্রতিরোধ।
3.7 সফটওয়্যার রক্ষণাবেক্ষণ: সফটওয়্যার জীবনকালের প্রভাবশালী পর্যায়: সংশোধনমূলক, অভিযোজনমূলক, পরিপূর্ণতামূলক ও প্রতিরোধমূলক রক্ষণাবেক্ষণ, প্রোগ্রাম বোধ ও পুনঃপ্রকৌশল, এবং রক্ষণাবেক্ষণযোগ্যতার জন্য নকশা, যাতে দীর্ঘজীবী সিস্টেম বদলানো সাশ্রয়ী থাকে।
3.8 আন্তঃকার্যক্ষমতা ও মুক্ত মান: বিশেষায়িত ইন্টিগ্রেশনের বদলে মুক্ত মানের মাধ্যমে আন্তঃক্রিয়া করার জন্য সিস্টেম নকশা: প্রযুক্তিগত, সিনট্যাক্টিক ও সেমান্টিক আন্তঃকার্যক্ষমতা, স্বাস্থ্যসেবায় FHIR-এর মতো ডোমেইন মান, এবং মালিকানাধীন লক-ইনের খরচ।
3.9 সিস্টেমস ইঞ্জিনিয়ারিং: জটিল সিস্টেম শুরু থেকে শেষ পর্যন্ত প্রকৌশল করা, প্রায়ই সফটওয়্যার, হার্ডওয়্যার, মানুষ ও প্রক্রিয়া মিলিয়ে: জীবনচক্র, প্রয়োজন বণ্টন ও অনুসরণযোগ্যতা, ইন্টারফেস, ইন্টিগ্রেশন, এবং যাচাই ও বৈধকরণ।
3.10 এমবেডেড ও রিয়েল-টাইম সিস্টেম: কঠোর সীমাবদ্ধতার অধীন ডিভাইসের জন্য সফটওয়্যার: রিয়েল-টাইম আচরণ ও নির্ধারিততা, একটি RTOS বা বেয়ার-মেটাল ফার্মওয়্যার, সীমিত মেমরি ও বিদ্যুৎ, হার্ডওয়্যার ক্রিয়া, এবং নিরাপত্তা-গুরুত্বপূর্ণ মান।
3.11 ক্লাউড স্থাপত্য: একটি ডেটা সেন্টার লিফট-অ্যান্ড-শিফট করার বদলে ক্লাউডের জন্য নকশা: সেবা মডেল ও সার্ভারলেস, ব্যর্থতা ডোমেইন হিসেবে অঞ্চল ও উপলব্ধতা জোন, ভাগ করা দায়িত্ব মডেল, ম্যানেজড-সেবা ও লক-ইন বিনিময়, মাল্টি-ক্লাউড ও হাইব্রিড যখন তারা জটিলতা অর্জন করে, এবং খরচ-সচেতন, ভালো-স্থাপত্যযুক্ত নকশা।
3.12 ইভেন্ট-চালিত স্থাপত্য ও মেসেজিং: ইভেন্ট তৈরি ও তাতে সাড়া দিয়ে যোগাযোগ করা সিস্টেম গড়া: কিউ বনাম টেকসই স্ট্রিম, কোরিওগ্রাফি বনাম অর্কেস্ট্রেশন, ইভেন্ট সোর্সিং ও CQRS যেখানে তারা নিজের জায়গা উপার্জন করে, বিতরিত লেনদেনের জন্য স্যাগা, ডেলিভারি নিশ্চয়তা ও আইডেমপোটেন্স, এবং অ্যাসিনক্রোনাস প্রবাহ নির্ভরযোগ্য রাখা প্যাটার্ন।
3.13 নেটওয়ার্কিং ও সংযোগ: অ্যাপ্লিকেশন ইঞ্জিনিয়ার আসলে যে নেটওয়ার্কিংয়ের মুখোমুখি হন: DNS, TCP ও HTTP-র বিবর্তন, TLS টার্মিনেশন, লোড ব্যালান্সিং ও রিভার্স প্রক্সি, কন্টেন্ট ডেলিভারি ও এজ, সার্ভিস আবিষ্কার ও সার্ভিস মেশ, এবং নেটওয়ার্কের অনির্ভরযোগ্যতা টিকে থাকার মতো করা টাইমআউট, রিট্রাই ও সার্কিট ব্রেকার।
3.14 মাল্টি-টেন্যান্সি ও SaaS স্থাপত্য: একটি সফটওয়্যার ইনস্ট্যান্স থেকে অনেক গ্রাহককে সেবা দেওয়া, তাদের একে অন্যকে দেখতে বা অনাহারে রাখতে না দিয়ে: বিচ্ছিন্নতা-বনাম-দক্ষতা বর্ণালী, ডেটা বিভাজন, কোলাহলপূর্ণ প্রতিবেশীর বিরুদ্ধে প্রতি-টেন্যান্ট কোটা, টেন্যান্ট জীবনচক্র, এবং খরচ আরোপ।
3.15 ক্যাশিং ও কন্টেন্ট ডেলিভারি: ক্যাশ শ্রেণিবিন্যাস (ক্লায়েন্ট, এজ ও CDN, রিভার্স প্রক্সি, অ্যাপ্লিকেশন ও ডেটা স্টোর) জুড়ে লেটেন্সি, লোড ও খরচে বড় লাভের বিনিময়ে সামান্য বাসিভাব দেওয়া, ক্যাশ অকার্যকরকরণ ও স্ট্যাম্পিড সুরক্ষাকে প্রথম-শ্রেণির নকশা গণ্য করে।
3.16 API গেটওয়ে ও সার্ভিস মেশ: একটি API গেটওয়েতে উত্তর-দক্ষিণ ট্রাফিক সামলানো (রাউটিং, প্রমাণীকরণ, হার সীমাবদ্ধকরণ, সংযোজন) এবং একটি সার্ভিস মেশের মাধ্যমে পূর্ব-পশ্চিম ট্রাফিক (পারস্পরিক TLS, ট্রাফিক স্থানান্তর, রিট্রাই, অবজার্ভেবিলিটি), এবং একটি মেশ কখন জটিলতা অর্জন করে তা ঠিক করা।
3.17 অনুসন্ধান ও তথ্য পুনরুদ্ধার: অনুসন্ধানকে প্রথম-শ্রেণির সিস্টেম গণ্য করা, ইনভার্টেড ইনডেক্স ও প্রাসঙ্গিকতা র্যাঙ্কিং থেকে কোয়েরি বোঝা, ফ্যাসেটিং এবং ভেক্টর ও হাইব্রিড পুনরুদ্ধার পর্যন্ত, অনুমানের বদলে প্রকৃত প্রাসঙ্গিকতা মূল্যায়নসহ।
এই অধ্যায়গুলো কীভাবে পরস্পর যুক্ত
অধ্যায়গুলো ক্রমে একে অন্যের ওপর গড়ে ওঠে। অধ্যায় 3.1 সেই শব্দভাণ্ডার (গুণমান বৈশিষ্ট্য ও বিনিময় বিশ্লেষণ) দেয় যা প্রতিটি পরবর্তী অধ্যায় ব্যবহার করে; এটি যে “-ilities” নাম দেয় সেগুলোই অধ্যায় 3.4 ও 3.5 সুনির্দিষ্ট করে। অধ্যায় 3.2 সেই মৌলিক বিষয়গুলোকে কাঠামোগত পছন্দে পরিণত করে, এবং এটি যে আরও বিতরিত শৈলী সমর্থন করে (মাইক্রোসার্ভিস, ইভেন্ট-চালিত, সার্ভিস মেশ) তারা সেই খরচ আনে, যা অধ্যায় 3.3 আপনাকে সামলাতে শেখায়। অধ্যায় 3.3, 3.4 ও 3.5 একে অন্যের ওপর ভারীভাবে ভর করে: বিতরণ ডেটা স্থাপত্যের সামঞ্জস্য ও স্থায়িত্ব সিদ্ধান্ত বাধ্য করে, এবং বিতরণ ও ডেটা একসঙ্গে ঠিক করে আপনি আসলে কোন স্কেলেবিলিটি ও স্থিতিস্থাপকতায় পৌঁছাতে পারেন। অধ্যায় 3.6 বৃত্ত সম্পূর্ণ করে, কারণ বেশিরভাগ বড় প্রতিষ্ঠান একটি ফাঁকা পাতায় গড়ছে না: তারা এমন রেকর্ডের সিস্টেম বিবর্তিত করছে, যা আগের অধ্যায়গুলোর বর্ণিত প্রতিটি পছন্দকে সীমিত করে।
পর্ব ৩ বাইরের দিকেও পৌঁছায়। অধ্যায় 3.2 ভালো সার্ভিস সীমানা খুঁজতে অধ্যায় 2.2-এর নকশা নীতি ও ডোমেইন-ড্রিভেন ডিজাইনের ওপর ভর করে। এই সিস্টেম চালু রাখা পরিচালনগত শৃঙ্খলা বাস করে পর্ব ৯-এ: সাইট রিলায়েবিলিটি ইঞ্জিনিয়ারিং (অধ্যায় 9.1) ও অবজার্ভেবিলিটি (অধ্যায় 9.2) হলো যেখানে স্থাপত্যগত স্থিতিস্থাপকতা প্রোডাকশনে প্রমাণিত হয়। নিয়ন্ত্রকদের দাবি করা নিরাপত্তা ও গোপনীয়তা বৈশিষ্ট্য এখানে নকশা করা হয় কিন্তু পর্ব ৪-এ বিস্তারিত বলা হয়েছে, এবং পর্ব ৮-এর প্ল্যাটফর্ম ও সরবরাহ চর্চা ঠিক করে একটি স্থাপত্য আসলে অনেক দল একসঙ্গে পাঠাতে ও চালাতে পারে কি না।