বিকেন্দ্রীভূত ডেটা ম্যানেজমেন্ট - মাইক্রোসার্ভেসিসে ডেটাবেসগুলি আবদ্ধ [বন্ধ]


23

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

একটি অংশ যা উল্লেখ করা হয়েছিল তা হ'ল সমস্ত মাইক্রোসার্চেসিসের সাথে কথা বলে এমন একটি একক ডাটাবেস থাকার প্রায়শই দেখা মডেল অনুসরণ করার পরিবর্তে আপনার প্রতিটি মাইক্রোসার্ভেসের জন্য পৃথক ডাটাবেস চলবে।

এর আরও ভাল শব্দযুক্ত এবং আরও বিশদ বিবরণটি এখানে পাওয়া যাবে: বিকেন্দ্রীভূত ডেটা ম্যানেজমেন্ট বিভাগের অধীনে http://martinfowler.com/articles/microservices.html

সবচেয়ে স্পষ্ট অংশ এটি বলছে:

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

চিত্র 4এখানে চিত্র বর্ণনা লিখুন

আমি এই ধারণাটি পছন্দ করি এবং অন্যান্য অনেক কিছুর মধ্যেও দেখি যে তাদের রক্ষণাবেক্ষণ এবং একাধিক লোকের সাথে কাজ করার প্রকল্প রয়েছে a এটি বলেছিল, আমি কোনওভাবেই কোনও অভিজ্ঞ সফটওয়্যার আর্কিটেক্ট নই। কেউ কি কখনও এটি বাস্তবায়নের চেষ্টা করেছে? আপনি কোন সুবিধা এবং বাধা পেয়েছিলেন?


6
আমি নিশ্চিত নই কীভাবে এই প্রশ্নটি প্রোগ্রামার্স.স্ট্যাকেক্সচেঞ্জের সুযোগের বাইরে। এটি কোনও নির্দিষ্ট কৌশল এবং এর কৌশলগুলি সম্পর্কে একটি প্রশ্ন এবং কখন এই কৌশলটি ব্যবহারের যোগ্যতা অর্জন করা যায় তা নির্ধারণ করা। আমি ট্যুর এবং মেটা সাইটের দিকে নজর রেখেছি ( meta.stackexchange.com/questions/68384/… )। আপনি দয়া করে পরিষ্কার করতে পারেন যে আমার কীভাবে প্রশ্নটির উন্নতি করা উচিত?
থিঙ্কবোনো

উত্তর:


35

আসুন মাইক্রোসার্চ পদ্ধতির ইতিবাচক এবং নেতিবাচক কথা বলি।

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

আমাকে একটি বাস্তব নেপথ্য চিত্রিত করুন। একটি পৃষ্ঠা উত্পন্ন করার সময় আপনার কাছে 100 টি মাইক্রোসার্ভেসিস কল করার ক্ষেত্রে অনুমানের বিষয়টিকে বিবেচনা করুন, যার মধ্যে প্রতিটি সময় 99.9% সঠিক কাজ করে। তবে 0.05% সময় তারা ভুল ফলাফল দেয়। এবং সময়টির 0.05% ধীরে সংযোগের অনুরোধ রয়েছে যেখানে বলুন, সংযোগের জন্য একটি টিসিপি / আইপি সময়সীমা প্রয়োজন এবং এটিতে 5 সেকেন্ড সময় লাগে। আপনার অনুরোধটি প্রায় 90.5% সময় পুরোপুরি কার্যকর করে। তবে প্রায় 5% সময় আপনার ভুল ফলাফল এবং প্রায় 5% সময় আপনার পৃষ্ঠা ধীর হয়। এবং প্রতিটি অ প্রজননযোগ্য ব্যর্থতার আলাদা কারণ রয়েছে।

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

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

সুতরাং যে একতরফা পদ্ধতি সম্পর্কে কি?

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

ঠিক আছে, তবে সংস্থাগুলি কেন মাইক্রোসারিসেসের পদ্ধতির দিকে যান?

উত্তরটি হ'ল কারণ আপনি স্কেল করার সাথে সাথে এককৃত প্রয়োগের সাথে আপনি কী করতে পারেন তার একটি সীমা রয়েছে। এতগুলি ব্যবহারকারী, অনেকগুলি অনুরোধ এবং এর পরে, আপনি এমন একটি পয়েন্টে পৌঁছেছেন যেখানে ডেটাবেসগুলি স্কেল করে না, ওয়েবসার্সগুলি আপনার কোডটিকে মেমরিতে রাখতে পারে না এবং আরও অনেক কিছু। তদ্ব্যতীত মাইক্রোসারওয়াস পদ্ধতির সাহায্যে আপনার অ্যাপ্লিকেশনটির স্বাধীন এবং বর্ধিত আপগ্রেড করা যায়। সুতরাং একটি মাইক্রোসারাইস আর্কিটেকচার হ'ল আপনার অ্যাপ্লিকেশনকে স্কেল করার সমাধান।

আমার থাম্বের ব্যক্তিগত নিয়মটি হ'ল স্ক্রিপ্টিং ভাষায় কোড (উদাহরণস্বরূপ পাইথন) থেকে অপ্টিমাইজড সি ++ এ যাওয়া সাধারণত পারফরম্যান্স এবং মেমরির ব্যবহার উভয় ক্ষেত্রে 1-2 মাত্রার পরিমাণ বাড়িয়ে তোলে। বিতরণ করা আর্কিটেকচারের অন্য পথে যাওয়া রিসোর্স প্রয়োজনীয়তার সাথে একটি বিশালতা যুক্ত করে তবে আপনাকে অনির্দিষ্টকালের জন্য স্কেল করতে দেয়। আপনি একটি বিতরণ করা আর্কিটেকচার কাজ করতে পারেন, তবে এটি করা আরও কঠিন।

অতএব আমি বলব যে আপনি যদি কোনও ব্যক্তিগত প্রকল্প শুরু করেন তবে একচেটিয়া হন। কীভাবে এটি করতে হয় তা শিখুন। বিতরণ করবেন না কারণ (গুগল | ইবে | অ্যামাজন | ইত্যাদি)। যদি আপনি বিতরণকৃত কোনও বৃহত সংস্থায় অবতরণ করেন তবে তারা কীভাবে এটি কাজ করে এবং এটিকে ত্রুটিযুক্ত না করে সে সম্পর্কে খুব মনোযোগ দিন। এবং যদি আপনি রূপান্তরটি করতে না পেরে থাকেন তবে খুব, খুব সাবধান হন কারণ আপনি এমন কিছু কঠিন কাজ করছেন যা খুব সহজেই পাওয়া যায়, খুব ভুল।

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


3
একটি অত্যন্ত অন্তর্দৃষ্টিপূর্ণ উত্তর। এই জ্ঞান দেওয়ার জন্য আপনাকে ধন্যবাদ।
থিঙ্কবোনো

মার্টিন ফওলারের সাম্প্রতিক আলাপ এখানে রয়েছে (তৃতীয় একটি) যা এই কয়েকটি বিষয়কে স্পর্শ করে।
কেন

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

@ ডারিওল "আমরা সর্বত্র একটি বৃহত প্রচলিত কোড বেস লোড করি, তারপরে আমাদের যা প্রয়োজন তা ব্যবহার করুন" এর মাঝের গ্রাউন্ডের মাধ্যমে মনোলিথিক থেকে সম্পূর্ণ মাইক্রোসার্ভেসিসের কোনও ভাল আপগ্রেডের পথ নেই। তবে তাৎক্ষণিক প্রয়োজনের জন্য অস্থায়ী প্যাচ হিসাবে এটি করা যুক্তিসঙ্গত। এবং তারপরে মূল প্রতিস্থাপন না করা অবধি রিয়েল মাইক্রোসার্ভেসিকে বিভক্ত করা শুরু করুন। যে কারণে কঠিন তা নির্ভরতা পরিচালনার সাথে করা উচিত। আপনি আঘাত করতে থাকবেন, "আমার কেবল এটি দরকার, তবে এটি তার উপর নির্ভর করে, তার উপর নির্ভর করে ... এবং এখন আমার কাছে স্প্যাগেটির পুরো বল রয়েছে" "
btilly

এই বিষয়ে মার্টিন ফাউলারের আর একটি লিঙ্ক:
মনোোলিথ

5

আমি আন্তরিকভাবে ব্টিলির উত্তরের সাথে একমত হই, তবে কেবল মাইক্রোসার্ভেসিসের জন্য আরও একটি ইতিবাচক যুক্ত করতে চেয়েছিলাম, যা আমি মনে করি এর পিছনে একটি মূল অনুপ্রেরণা।

একটি মাইক্রোসার্ভেসেস বিশ্বে পরিষেবাগুলি ডোমেনে সংযুক্ত থাকে এবং পৃথক দল দ্বারা পরিচালিত হয় (একটি দল একাধিক পরিষেবা পরিচালনা করতে পারে)। এর অর্থ হ'ল প্রতিটি দল পরিষেবাগুলি সম্পূর্ণ আলাদা এবং অন্য যে কোনও পরিষেবার থেকে স্বাধীনভাবে মুক্তি দিতে পারে (সঠিক সংস্করণ ইত্যাদি অনুমান করে)।

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

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


ঐটা সত্য. বাকী নিবন্ধটি বিশেষত কীভাবে এটি 'ব্যবসায়িক দক্ষতা' দ্বারা বিভাজনকে উত্সাহ দেয়। এটি অবশ্যই একটি মূল সুবিধা।
থিঙ্কবোনো

2

আমি এমন জায়গায় কাজ করেছি যেখানে মোটামুটি স্বাধীন তথ্য উত্স ছিল। তারা এগুলি সমস্তকে একটি একক ডাটাবেসে রেখেছিল, কিন্তু ওয়েবস্কেসিস দ্বারা অ্যাক্সেস করা বিভিন্ন স্কিমায়। ধারণাটি ছিল যে প্রতিটি পরিষেবা কেবল তাদের কাজ সম্পাদনের জন্য প্রয়োজনীয় ন্যূনতম পরিমাণে অ্যাক্সেস করতে পারে।

মনোলিথিক ডাটাবেসের তুলনায় এটি খুব বেশি ওভারহেড ছিল না, তবে আমার ধারণা এটি ইতিমধ্যে বিচ্ছিন্ন গোষ্ঠীতে থাকা ডেটাগুলির প্রকৃতির কারণে হয়েছিল।

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

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.