মাইক্রোপরিষেবা

মাইক্রোপরিষেবা (Microservices) একটি সফ্টওয়্যার ডেভলপমেন্ট টেকনিক এবং পরিষেবা ভিত্তিক স্থাপত্য (এসওএ) স্টাইলের একটি বৈকল্পিক যা কোনও অ্যাপ্লিকেশনকে আলগাভাবে যুগল পরিষেবাগুলির সংগ্রহ হিসাবে কাঠামো করে। একটি মাইক্রোসার্ভেসেস আর্কিটেকচারে, পরিষেবাদিগুলি বিস্তৃতযুক্ত এবং প্রোটোকলগুলি হালকা হয়। বিভিন্ন ছোট পরিষেবাগুলিতে একটি অ্যাপ্লিকেশন পচানোর সুবিধা হ'ল এটি পরিমিতি উন্নত করে। এটি অ্যাপ্লিকেশনটিকে বোঝা, বিকাশ, পরীক্ষা করা এবং আর্কিটেকচার ক্ষয়ের ক্ষেত্রে আরও স্থিতিশীল হয়ে ওঠে এটি ক্ষুদ্র স্বায়ত্তশাসিত সদস্য গুলিকে তাদের নিজ নিজ পরিষেবাদিগুলি স্বাধীনভাবে বিকাশ, মোতায়েন এবং স্কেল করে সক্ষম করে উন্নয়নের সাথে সমান্তরাল করে তোলে। এটি ক্রমাগত রিফ্যাক্টরিংয়ের মাধ্যমে কোনও পৃথক পরিষেবার আর্কিটেকচারকে উত্থিত করার অনুমতি দেয় মাইক্রোসারওয়াস-ভিত্তিক স্থাপত্যগুলি অবিচ্ছিন্ন বিতরণ এবং স্থাপনার সুবিধার্থে। 
২০১১ সালের মে মাসে ইতালীর ভেনিস শহরে সফটওয়্যার বিষয়ক সম্মেলনে এর প্রথম প্রকাশ বলে মনে করা হয়। যদিও আজ অব্দি এর কোনো সংজ্ঞা নথি নেই।
নিচে উভয়ের একটি তুল্যমূল্য তালিকা দেয়া হলো গ্রাহক হতে পরিসেবক ক্রমে :
এই ক্ষেত্রে স্প্রিং বুট এপ্লিকেশন এ স্প্রিং ক্লাউড প্রোপারটিস যুক্ত করতে হবে :
application.properties ফাইলে এপ্লিকেশন এর নাম ও পোর্ট নির্দিষ্ট হবে নিম্ন রূপ :
অটো কনফিগারেশনে আন্তঃ পরিষেবা সংহতকরণ ক্ষেত্রে ব্যবহৃত হয়। ফেইন একটি এপিআই, জ্যাকস-আরএস, জ্যাকসন, জিএসএন, স্যাক্স, জ্যাকস-বি, ওকএইচটিপি, রিবন, হাইস্ট্রিক্স, এসএলএফ 4 জে এবং আরও অনেক কিছু যেমন, API এর জন্য একটি সমৃদ্ধ ইন্টিগ্রেশন সরবরাহ করে, পরিষেবার চুক্তিগুলি ইন্টারফেস এবং টীকাগুলি ব্যবহার করে নির্দিষ্ট করা হয়। স্প্রিং ক্লাউড সহজেই ফিগেন এবং রিবনকে সংহত করতে সহায়তা করে । রেস্টছাঁচ এর তুলনায় এটি অনেক সহজ। এর জন্য করতে হবে :
গ্রাহকের pom.xml এ :
গ্রাহকের প্রধান ক্লাস এ :
যেখানে ফেইগন গ্রাহক সক্রিয় করা হয়েছে সেখানের সামগ্রিক নিয়ন্ত্রণ পেতে উক্ত গ্রাহকেই একটি ইন্টারফেসের মাধ্যমে করতে হবে যার ওপর ফেইগন গ্রাহক টিকা থাকবে। ইন্টারফেস তৈরিতে :
নেটফ্লিক্স রিবন গ্রাহক প্রান্ত লোড ব্যালেন্সার সুবিধা দিয়ে থাকে। গ্রাহকের pom.xml এ :
মূল গ্রাহকে একটি ফেইগন গ্রাহক ইন্টারফেস তৈরিতে :
যে গ্রাহক ভারসাম্যতার পরিষেবা নেবে তার appplication .properties এ :
নেটফ্লিক্স ইউরেকা সমস্ত সুলভ পরিষেবার তালিকা রাখে এবং প্রয়োজন অনুযায়ী তা সরবরাহ করে । এটি সম্পূর্ণ আলাদা একটি পরিষেবা তৈরী করে তার pom.xml এ :
মূল মেথডে :
অন্য পরিষেবাগুলোকে ইউরেকায় নথিভুক্ত করতে তাদের pom.xml এ :
শিশু পরিষেবার প্রধান মেথডে :
শিশু পরিষেবার appplication .properties এ :
এই ক্ষেত্রে আর ফেইগন এর প্রয়োজন পড়বে না। রিবন ইউরেকার মাধ্যমে সরাসরি অন্য পরিষেবার সাথে যোগাযোগ করবে।
যদি কোনো পরিষেবা ইউরেকা ভুক্ত না হতে চায় তবে 
মাইক্রোপরিষেবার বাইরের জগতের জন্য কোনো মাইক্রোপরিষেবা বাস্তুতন্ত্রে প্রবেশের পথ হিসেবে থাকে এপিআই গেটওয়ে। নেটফ্লিক্স জুওল এই সুবিধা অর্জনে সহায়তা করে । এ ক্ষেত্রে একটি সম্পূর্ণ আলাদা একটি পরিষেবা তৈরী করা হয় যেটি বাকি সমস্ত এপ্লিকেশন এর সঙ্গে সমন্বয় করবে এবং প্রান্তিক ব্যবহারকারীর সাথে যোগাযোগ থাকবে। তার pom.xml এ :
মূল মেথডে :
জুওল এর সাহায্যে ফিল্টার প্রয়োগ। প্রধান জাভা ক্লাস এর সাথে একটি জুওলফিল্টার ক্লাস তৈরী হবে। 
যদি এমনটি দরকার হয় যে কোনো পরিষেবা ওপর পরিষেবার সাথে সরাসরি যোগাযোগ না করে জুওল এর মাধ্যমে সংযোগ স্থাপন করতে চায় তবে সেক্ষেত্রে জুওল এপ্লিকেশন নামটি ফেইগন এ ব্যবহার করতে হবে।
সকেট টাইমআউটগুলি কনফিগার করতে হয় এবং জুহুলের মাধ্যমে প্রক্স করা অনুরোধগুলির জন্য টাইমআউটগুলি পড়তে হয় তবে কনফিগারেশনের উপর ভিত্তি করে দুটি বিকল্প রয়েছে:
স্প্রিং ক্লাউড স্লুথ হচ্ছে জিপকিন, এইচরাস এবং লগ-ভিত্তিক ট্রেসিংয়ের সাথে সামঞ্জস্যপূর্ণ স্প্রিং ক্লাউড অ্যাপ্লিকেশনগুলির জন্য বিতরণ করা ট্রেসিং। সাধারণ বিতরণযোগ্য ট্রেসিং ডেটা মডেলগুলির উপর বিমূর্ততা সরবরাহ করে। এটি অভিন্ন আইডি প্রদান করে থাকে। স্লুথ প্রতিটি রিকোয়েস্টের জন্য ২ ধরনের আইডি দিয়ে থাকে 
স্লুথ নিবেশ করতে প্রতিটি পরিষেবার pom.xml এ :
কনসোলে প্রিন্ট হবে নিম্নরূপ : [ "এপ্লিকেশন নাম", "ট্রেস আইডি","স্প্যান আইডি" ]
জিপকিন একটি কেন্দ্রীভূত ট্রেসিং সিস্টেম । জিপকিন তার নিজস্সো পাতায় সেগুলোকে দেখতে ও পর্যালোচনা করতে সাহায্য করে। কোনও পরিষেবাতে ব্যয় করা সময়ের শতাংশ, এবং অপারেশনগুলি ব্যর্থ হয়েছে কি না তা সংক্ষেপিতভাবে প্রকাশ করা হবে। জিপকিন নিবেশ করতে একটি পরিষেবা তৈরী করে তার pom.xml এ :
মূল মেথডে :
জিপকিন-এ লগ পাঠাতে শিশু পরিষেবার pom.xml এ :
শিশু পরিষেবার প্রধান মেথডে :
কনসোলে প্রিন্ট হবে নিম্নরূপ : ["এপ্লিকেশন নাম", "ট্রেস আইডি","স্প্যান আইডি","true" ]
pom.xml এ :
পরিষেবা মেথডে :
প্রধান মেথডে :
গিট্ রিপোসিটোরি সংযুক্ত করতে application.properties এ :
কোনো ডিফল্ট ভ্যালুর জন্য পরিষেবার application.properties এ :
একটি ক্লাসে ডিফল্ট ভ্যালুর গেটার -সেটার তৈরী করতে হবে @ConfigurationProperties এর মাধ্যমে
অ্যাকিউউটর মূলত চলমান অ্যাপ্লিকেশন সম্পর্কে পরিচালিত তথ্য প্রকাশের জন্য ব্যবহৃত হয়
স্ব-প্রনোদিত ভাবে এপ্লিকেশন রিস্টার্ট না করে প্রোপারটিস তুলতে application.properties এ :
স্ব-প্রনোদিত ভাবে এপ্লিকেশন রিস্টার্ট না করে প্রোপারটিস তুলতে এক্ষেত্রে রাবিট MQ ব্যবহার হচ্ছে। pom.xml এ :
ডিফল্ট url রাবিট MQ র জন্য :
এম্পটি রিফ্রেশ লিঙ্ক হবে 
এক্ষেত্রে সমস্ত পরিষেবায় রিফ্রেশ করতে হচ্ছে না।
বেশ কিছু ক্ষেত্রে এই স্থাপত্য নিয়ে বিতর্ক সৃষ্টি হয়েছে :
এই স্থাপত্ত্যে অপারেশনাল জটিলতা তৈরী হয়। এছাড়া অধিক সংখ্যায় সংযোগক্ষেত্র থাকলে সেটা স্থাপত্য জটিলতা সৃষ্টি করে।