মনোলিথিক এবং মাইক্রোসার্ভিস আর্কিটেকচার কি?

in মাইক্রোসার্ভিস,

সফ্টওয়্যার বা ওয়েব এ্যাপ্লিকেশন ডেভেলপমেন্টের সবচেয়ে স্মার্ট আর্কিটেকচার, মাইক্রোসার্ভিস নিয়ে এই পোস্ট এ বিশদ আলোচনা করব । পাশাপাশি মনোলিথিক আর্কিটেকচারের সাথে এর মুল পার্থকগুলো তুলে ধরার চেষ্টা করব ।

মনোলিথিক আর্কিটেকচার

চাহিদার সাথে সাথে প্রতিনিয়ত সফ্টওয়্যার এবং ওয়েব এপ্লিকেশনের সাইজ বেড়েই চলেছে ।  প্রতিদিনই আমাদের সিস্টেমে যোগ হচ্ছে নতুন চাহিদা, নতুন রিকয়্যারমেন্ট, নতুন কম্পোনেন্ট। এতে যে শুধু সাইজ বাড়ে তা না, সাথে সাথে সিস্টেমের কমপ্লেক্সিটি বাড়ে এবং সেই সাথে বাড়ে সিস্টেম ডিপেন্ডেন্সি । সমগ্র সিস্টেমটিকে যখন আমরা একটি ইউনিটে সার্ভারে ডেপ্লয় করি তখন তাকে আমরা মনোলিথিক বলি। মনোলিথিক আর্কিটেকচার হল, সিস্টেমের যত ফাংশনালিটি আছে (ডাটা ইনপুট, আউটপুট, ইরর হ্যান্ডেলিং, ইউজার ইন্টারফেস, প্রসেস ম্যানেজমেন্ট) সব কিছু একত্রে একটি কম্পোনেন্ট, অনেকটা নিচের চিত্রের ট্রাকের মত । আমরা সাধারনত যে ধরনের এ্যাপ্লিকেশন ডেভেলপ করে থাকি তা আসলে একটি মনোলিথ, কোন নিয়ম ছাড়াই আমরা একই সিস্টেমে দিনের পর দিন সংযোজন-বিয়োজন করে থাকি ।

মাইক্রোসার্ভিস

মনোলিথ হলো সব মডিউল বা ফিচার সহ একটি বড় সিস্টেম

মনোলিথিক এ্যাপ্লিকেশন একটি মাত্র ইউনিট বা সার্ভিস হিসেবে ডেভেলপ করা হয় । এতে কোন প্রকার পরিবর্তন আনলে সিস্টেমে নতুন একটি ভার্সন ডেপ্লয় করার প্রয়োজন পড়ে।

মাইক্রোসার্ভিস আর্কিটেকচার

মাইক্রোসার্ভিস হল, একটি সিস্টেমের কম্পোনেন্টগুলোকে ছোট ছোট সতন্ত্র মডিউলে রান করা। মাইক্রোসার্ভিস আর্কিটেকচার মনোলিথিক আর্কিটেকচারের সম্পূর্ন বিপরীত । এখানে প্রতিটি সিস্টেম একটি সিঙ্গেল ইউনিট হিসেবে ডেভেলপ এবং ডেপ্লয় করা হয় । একটি ইউনিট বা সার্ভিস আরেকটি সার্ভিসের সাথে তাদের নিজস্ব এপিআই এর মাধ্যমে যোগাযোগ করবে

মাইক্রোসার্ভিস

মাইক্রোসার্ভিস হল একটি বড় ট্রাকের পরিবর্তে অনেকগুলো ছোট ছোট কার

মাইক্রোসার্ভিস নিয়ে বিখ্যাত লেখক Sam newman এর মতে মাইক্রোসার্ভিস হল: 

A small independently releasable services that work together, modelled around a business domain.

Martin Fowler এবং James Lewis একটি আর্টিকেলে মাইক্রোসার্ভিস নিয়ে বলেন :

In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API […] There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.

মাইক্রোসার্ভিস আর্কিটেকচারের মাধ্যমে,  ডেভেলপাররা একটি বড় এ্যাপকে ভেঙ্গে অনেকগুলো ছোট ছোট এ্যাপ তৈরী করে, যেমন লোকেশন নির্নয়, সেভ, ম্যাপ ভিউ ইত্যাদির জন্য লোকেশন সার্ভিস, ফাইল আপলোড, রিসাইজ, সেভ, ডাউনলোড হ্যান্ডেলিং এর জন্য আরেকটি সার্ভিস কিংবা ফেসবুক বা টুইটারে কিছু শেয়ার করার জন্য একটি ভিন্ন সার্ভিস তৈরী করা হয়। এবং এই সার্ভিসগুলো এপিআই এর মাধ্যমে একে অপরের সাথে কানেক্টেড থাকে

মনোলিথিক VS মাইক্রোসার্ভিস

একটি বড় সিস্টেম ডেভেলপের জন্য মনোলিথিক একটি ন্যাচারাল  মেথড । কিন্তু যখনই একটি বড় সিস্টেম মেইনটেইনের কথা আসে তখনই সবারই হতাশ হতে হয়। পুরো সিস্টেমের মাঝে কেবল ছোট একটু পরিবর্তন আনতে হলেও পুরো সিস্টেমটি আবার রি-বিল্ড করে ডেপ্লয় করতে হয়। শুধু তাই নয়, অনেক সময় সিস্টেমটি মডিউলারাইজ রাখতে যেমন সমস্যা হয় তেমনি এক মডিউলের কোন ক্ষুদ্র পরিবর্তন অন্য মডিউলে অনাকাংক্ষিত সমস্যা তৈরী করতে পারে। মনোলিথিকে কোন নির্দিষ্ট মডিউলের জন্য স্ক্যালিং সম্ভব হয় না, সম্পূর্ন সিস্টেমের জন্য একত্রে করতে হয়।

মনোলিথিক VS মাইক্রোসার্ভিস

মনোলিথের তিনটি সন্ত্রত্র মডিউলকে তিনটি ভিন্ন মাইক্রোসার্ভিস বা তিনটি ভিন্ন এ্যাপ এ বিভক্ত করা হয়েছে ।

মাইক্রো সার্ভিসগুলো আসলে কি করছে ? একটি বড় সমস্যাকে কিছু ছোট ছোট অংশে পরিনত করছে এবং সেগুলো সম্পূর্ন আলাদা একটি এ্যাপ এর মত করে বানানো হচ্ছে । একটি সার্ভিস আরেকটি সার্ভিসের ডেভেলপমেন্ট টিম, টেকনোলজি স্ট্যাক সম্পূর্ন ভিন্ন হলেও কোন সমস্যা নেই । একটি সার্ভিস পাইথন টিম বানালো, আরেকটি হয়তো নোড জেএস, অন্যটি পি.এইচ.পি । যদি পুরো ইকোসিস্টেমের কোন একটি ফেইল করে তবে অন্যটি বসে থাকেবে না।  এপিআই ম্যানেজমেন্ট কম্পানি Mashape এর CEO বলেন

Imagine you’re driving a car. Even if the brakes go out, which is really bad, it doesn’t break the whole car. At least your engine is still working, right?

অনেকটা প্লাগিন এর মত । কোর একটি মডিউলের সাথে শুধু প্লাগিনটি জুড়ে দিলেই কাজ হয়ে গেল।

মাইক্রোসার্ভিস কখন প্রয়োজন ?

একটি সিস্টেম বানানোর সময় যখন সিদ্ধান্ত নেয়া হয় তখন মাইক্রোসার্ভিসের কথা অনেকেই চিন্তা করে না। কারন ছোট সিস্টেমের জন্য মাইক্রোসার্ভিস আসলেই কোন সমস্যা সমাধান করে না, কারন তখন এধরনের কোন সমস্যাই থাকে না। কিন্তু যখন সিস্টেমটি অনেক বড় হয়ে যায় এবং হরিজনটাল স্কেলিং এর প্রয়োজন পড়ে তখন নতুন করে মাইক্রোসার্ভিস ডেভেলপ করা অনেক খরচের ব্যাপার হয়ে দাড়ায় । ভবিষ্যতের চ্যালেন্জ আচ করতে পেরে অনেকেই শুরু থেকেই মাইক্রোসার্ভিস ডেভেলপ করতে উৎসাহিত করেন। Netflix, eBay এবং Amazon তাদের কয়েকটি মডিউল মাইক্রোসার্ভিসে রূপান্তরিত করে ভবিষ্যতে এটির প্রয়োজন অনুধাবন করতে পারে এবং ধীরে ধীরে পুরো সিস্টেমটাকে মাইক্রো সার্ভিসের একটি ইকোসিস্টেম ডেভেলপ করে। এবার এই পোস্টটি একটু পড়ে দেখতে পারেন। : How to prepare next-generation cloud applications

মাইক্রোসার্ভিস কেন প্রয়োজন

বর্তমান এবং ভবিষ্যৎ প্রজন্মের প্রযুক্তির সাথে তাল মিলিয়ে চলার জন্য মাইক্রোসার্ভিস এর প্রয়োজনীয়তা তুলনাহীন । বর্তমান ডেভেলপমেন্ট চক্রের বিভিন্ন সমস্যা থেকেই আসলে এই ইকোসিস্টেমের আবির্ভাব।  চলুন দেখা যাক এতে আমরা কিভাবে উপকৃত হতে পারি :

ডেভেলপমেন্ট

মাইক্রোসার্ভিস একটি সফ্টওয়্যার আর্কিটেকচার স্টাইল যা ডিস্ট্রিবিউটেড এ্যাপ্লিকেশন ডেভেলপমেন্টে একটি নতুন ধারা যোগ করেছে। একটি বড় সিস্টেমকে ভেঙ্গে ছোট ছোট কম্পোনেন্ট হিসেবে তৈরী করা হলে এটি ডেভেলপ, আপডেট, মেইনটেইন করা অনেক সহজ হয়ে যায় ।

ক্লাউড আর্কিটেকচার বিশেষজ্ঞ এবং স্টর্ম ভেনচারের ম্যানেজিং ডাইরেক্টর রায়ান ফ্লয়েড এর মতে

“The more you break that down, the easier it is to build and modify an application.”

মাইক্রোসার্ভিসের সুবিধা নিয়ে পেপালের সি.টি.ও James Bareese বলেন

“The benefit is that PayPal is moving faster than ever”

পেপালের “make a payment” বাটনটির ফাংশনালিটি আসলে একটি আলাদা ছোট এ্যাপ এবং এটি মেইনটেইন কিংবা আপডেট করার জন্য ডেডিকেটেড টিম রয়েছে। এমাজনের add to cart থেকে ইউজার রিভিউ পর্যন্ত ফাংশনালিটিগুলো একটি সতন্ত্র সার্ভিস দ্বারা নিয়ন্ত্রিত হয়। অনুরূপ ভাবে তৈরী করা হয় সিস্টেমের অন্যান্য সার্ভিসগুলো এবং এগুলো প্লাগিনের মত করে জুড়ে দেয়া হয় মুল সিস্টেমের সাথে । এসব মাইক্রো সার্ভিসগুলো সাধারনত সম্পূর্ন ভিন্ন ভিন্ন প্রোগ্রামার টিম দ্বারা নিয়ন্ত্রিত হয়। ফলে ঐ টিমটি তাদের মডিউল নিয়ে ডেডিকেটেড ভাবে কাজ করতে পারে। ঐ টিমের যদি কেউ একজন জন নাও থাকে বাকিরা সেটা খুব সহজেই কভার করতে পারে।

স্কেলিং

মনোলিথিক সিস্টেমের তুলনায় মাইক্রোসার্ভিসের স্কেলিং অনেক সহজ । ধরুন কোন একটা মডিউল রান করাতে আপনার RAM বা CPU পাওয়ার বা স্টোরেজ বেশি প্রয়োজন । মনোলিথিক সিস্টেমের জন্য আপনি কোন একটা মডিউলের জন্য একটা নির্দিষ্ট হার্ডওয়্যার বরাদ্দ করতে পারবেন না। কিন্তু মাইক্রোসার্ভিসের ক্ষেত্রে আপনার মডিউলটি একটি ভিন্ন সার্ভারে তার প্রয়োজনীয় হার্ডওয়্যার দিয়ে সহজেই স্কেলিং করতে পারেন । আরো বেশি পাওয়ার দরকার হলে তার সাথে আরেকটি সার্ভার বা হার্ডওয়্যার কম্পোনেন্ট যোগ করে দিলেই হল।

চিন্তার স্বাধীনতা

মনোলিথিক সার্ভারের ক্ষেত্রে আপনার আর্কিটেকচার, প্রোগ্রামিং ল্যাঙ্গুয়েজ, টুলস্ সবই মোটামুটি ফিক্সড । এখানে ট্রায়ল এন্ড টেস্ট ডেভেলপমেন্ট অনেক বিপদজনক। প্রতিটি মাইক্রোসার্ভিস যেহেতু সতন্ত্র সেহেতু যে মডিউলের জন্য যেই টেকনোলজি বা প্রোগ্রামিং ল্যাঙ্গুয়েস্ট বেস্ট সেটাই আপনি ব্যবহার করতে পারেন। যেমন মেশিন লার্নিং বা সেন্টিমেন্ট এনালাইসিস কিংবা বিগ ডাটা হ্যান্ডেলিং এর জন্য পাইথন ব্যবহার করলেন আর রিয়েলটাইম মেজেজিং মডিউলের জন্য নোড + সকেট ব্যবহার করলেন, একটি সার্ভিসের জন্য হয়তো MySQL ব্যবহার করলেন, আরেকটির জন্য MongoDB। একটি মাইক্রোসার্ভিসে ডেভেলপমেন্ট টিম অনেক ধরনের এক্সপেরিমেন্ট চালাতে পারে যেটা মনোলিথিকে মোটামুটি অনেক জটিল ব্যাপার ।

সাইজ

সমগ্র সিস্টেমের তুলনায় সার্ভিস গুলো অনেক ছোট হওয়া পুরো সিস্টেমটা বুঝা তুলনামুলক অনেক সহজ। কোড অনেক কম থাকায় একজন ডেভেলপারের পুরো সিস্টেমের আংশিক ধারনা নিয়ে সে তার নিজের সার্ভিসে পুরোপুরি দক্ষতার সাথে কাজ করে যেতে পারে। প্রজেক্ট ফাস্ট এক্সিকিউট হবে, IDEগুলো দ্রুত লোড নিবে, ডিপেন্ডেবল লাইব্রেরী কম থাকবে, সার্ভার সহজে মেইনটেইন করা যাবে।

ডেপ্লয়মেন্ট

ছোট প্রজেক্ট ডেপ্লয় করা তুলনামুলক অনেক সহজ হয়। ডেভেলপমেন্ট একটি চলমান প্রসেস আর ছোট বড় আপডেট ডেপ্লয় করার ক্ষেত্রে বিপদাশংকা অনকে কম থাকে । আপনার নতুন ডেপ্লয় অন্য কোন সার্ভিস শাট ডাউন করে দিবে, এটা আপনি শতভাগ নিশ্চিত থাকতে পারেন। ডেপ্লয়মেন্ট এ কোন দুর্ঘটনা ঘটলেও সেটা সহজেই রোলব্যাক করে নিতে পারবেন।

আরেকটু গভীরভাবে বুঝার জন্য nginx এর অফিশিয়াল সাইট থেকে দুটি পোস্ট পড়ে আসতে পারেন :

  1. Introduction to Microservices
  2. Building Microservices

ইন্টারেসটিং মনে হচ্ছে ? চাঁদ দেখার চিন্তা করার আগে রোজা রাখাটা জরুরী । পরবর্তী পোষ্টে আমরা দেখব মাইক্রোসার্ভিসের জটিলতাগুলো কি কি।

পূর্ববর্তী পোস্ট   »  Microservice না, Monkey Service


মুক্ত জ্ঞান ছড়িয়ে দিন সবার মাঝে!