মনোলিথিক এবং মাইক্রোসার্ভিস আর্কিটেকচারের মধ্যে পার্থক্য কী?(What is the difference between monolithic and Microservices architecture?)
মাইক্রোসার্ভিস আর্কিটেকচার মনোলিথিক আর্কিটেকচারের সম্পূর্ন বিপরীত।
একটি বড় এ্যাপ্লিকেশন সিস্টেমকে ভেঙ্গে ডিস্ট্রিবিউট আর্কিটেকচারে ডিজাইন করার একটি চমৎকার কৌশল হল মাইক্রোসার্ভিস।
মনোলিথিক আর্কিটেকচার:
সমগ্র সিস্টেমটিকে যখন আমরা একটি ইউনিটে সার্ভারে ডেপ্লয় করি তখন তাকে আমরা মনোলিথিক বলি। এক কথায়,মনোলিথ হলো সব মডিউল বা ফিচার সহ একটি বড় সিস্টেম।
মনোলিথিক এ্যাপ্লিকেশন একটি মাত্র সার্ভিস হিসেবে ডেভেলপ করা হয় । এতে কোন প্রকার পরিবর্তন আনলে সিস্টেমে নতুন একটি ভার্সন ডেপ্লয় করার প্রয়োজন পড়ে।
মনোলিথিক আর্কিটেকচারের সমস্যা কোথায় সেই কথা বলতে গেলে সময় ফুরিয়ে যাবে। যাই হোক, মোদ্দাকথা একটা ব্যাকএন্ড সার্ভিস দ্বারা সব কাজ করার বিপরীতে কাজগুলোকে ছোট ছোট সার্ভিসে ভেঙ্গে দেয়াটাই অনেক সময়ে শ্রেয়।
মাইক্রোসার্ভিস আর্কিটেকচার:
একটি বড় এ্যাপ্লিকেশন সিস্টেমকে ভেঙ্গে ডিস্ট্রিবিউট আর্কিটেকচারে ডিজাইন করার একটি চমৎকার কৌশল হল মাইক্রোসার্ভিস।
একটি সার্ভিস আরেকটি সার্ভিসের সাথে তাদের নিজস্ব এপিআই এর মাধ্যমে যোগাযোগ করবে।
মাইক্রোসার্ভিস আর্কিটেকচারের মাধ্যমে, ডেভেলপাররা একটি বড় এ্যাপকে ভেঙ্গে অনেকগুলো ছোট ছোট এ্যাপ তৈরী করে, যেমন লোকেশন নির্নয়, সেভ, ম্যাপ ভিউ ইত্যাদির জন্য লোকেশন সার্ভিস, ফাইল আপলোড, রিসাইজ, সেভ, ডাউনলোড হ্যান্ডেলিং এর জন্য আরেকটি সার্ভিস কিংবা ফেসবুক বা টুইটারে কিছু শেয়ার করার জন্য একটি ভিন্ন সার্ভিস তৈরী করা হয়। এবং এই সার্ভিসগুলো এপিআই এর মাধ্যমে একে অপরের সাথে কানেক্টেড থাকে।
মাইক্রো সার্ভিসগুলো আসলে কি করছে ? একটি বড় সমস্যাকে কিছু ছোট ছোট অংশে পরিনত করছে এবং সেগুলো সম্পূর্ন আলাদা একটি এ্যাপ এর মত করে বানানো হচ্ছে । একটি সার্ভিস আরেকটি সার্ভিসের ডেভেলপমেন্ট টিম, টেকনোলজি স্ট্যাক সম্পূর্ন ভিন্ন হলেও কোন সমস্যা নেই । একটি সার্ভিস পাইথন টিম বানালো, আরেকটি হয়তো নোড জেএস, অন্যটি পি.এইচ.পি । যদি পুরো ইকোসিস্টেমের কোন একটি ফেইল করে তবে অন্যটি বসে থাকেবে না।
মাইক্রোসার্ভিস কেন প্রয়োজন:
১। একটি বড় সিস্টেমকে ভেঙ্গে ছোট ছোট কম্পোনেন্ট হিসেবে তৈরী করা হলে এটি ডেভেলপ, আপডেট, মেইনটেইন করা অনেক সহজ হয়ে যায় ।
ক্লাউড আর্কিটেকচার বিশেষজ্ঞ এবং স্টর্ম ভেনচারের ম্যানেজিং ডাইরেক্টর রায়ান ফ্লয়েড এর মতে
“The more you break that down, the easier it is to build and modify an application.”
২। মনোলিথিক সিস্টেমের তুলনায় মাইক্রোসার্ভিসের স্কেলিং অনেক সহজ । কারন,মনোলিথিকে কোন নির্দিষ্ট মডিউলের জন্য স্ক্যালিং সম্ভব হয় না, সম্পূর্ন সিস্টেমের জন্য একত্রে করতে হয়।
ধরুন কোন একটা মডিউল রান করাতে আপনার RAM বা CPU পাওয়ার বা স্টোরেজ বেশি প্রয়োজন ।মনোলিথিক সিস্টেমের জন্য আপনি কোন একটা মডিউলের জন্য একটা নির্দিষ্ট হার্ডওয়্যার বরাদ্দ করতে পারবেন না,সম্পূর্ন সিস্টেমের জন্য একত্রে করতে হবে।
কিন্তু মাইক্রোসার্ভিসের ক্ষেত্রে আপনার মডিউলটি একটি ভিন্ন সার্ভারে তার প্রয়োজনীয় হার্ডওয়্যার দিয়ে সহজেই স্কেলিং করতে পারেন । আরো বেশি পাওয়ার দরকার হলে তার সাথে আরেকটি সার্ভার বা হার্ডওয়্যার কম্পোনেন্ট যোগ করে দিলেই হল।
৩। মনোলিথিক সার্ভারের ক্ষেত্রে আপনার আর্কিটেকচার, প্রোগ্রামিং ল্যাঙ্গুয়েজ, টুলস্ সবই মোটামুটি ফিক্সড । অন্যদিকে, মাইক্রোসার্ভিসে একটি সার্ভিস আরেকটি সার্ভিসের ডেভেলপমেন্ট টিম, টেকনোলজি স্ট্যাক সম্পূর্ন ভিন্ন হলেও কোন সমস্যা নেই ।
একটি সার্ভিস পাইথন টিম বানালো, আরেকটি হয়তো নোড জেএস, অন্যটি পি.এইচ.পি । একটি সার্ভিসের জন্য হয়তো MySQL ব্যবহার করলেন, আরেকটির জন্য MongoDB।যদি পুরো ইকোসিস্টেমের কোন একটি ফেইল করে তবে অন্যটি বসে থাকেবে না।
৪। সমগ্র সিস্টেমের তুলনায় সার্ভিস গুলো অনেক ছোট হওয়া পুরো সিস্টেমটা বুঝা তুলনামুলক অনেক সহজ।প্রজেক্ট ফাস্ট এক্সিকিউট হবে, IDEগুলো দ্রুত লোড নিবে, ডিপেন্ডেবল লাইব্রেরী কম থাকবে, সার্ভার সহজে মেইনটেইন করা যাবে।
৫। ছোট প্রজেক্ট ডেপ্লয় করা তুলনামুলক অনেক সহজ হয়।