মাইক্রোসার্চেসের জন্য সর্বাধিক গৃহীত লেনদেন কৌশল কী


80

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

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

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


কেবল নিশ্চিত হতেই, সেই সমস্ত মাইক্রোসার্চগুলি একই সাথে অনেক ক্লায়েন্ট দ্বারা ব্যবহৃত হয়, বা একবারে কেবল একটি করে?
মার্সেল

2
আমি এই প্রশ্নটি জিজ্ঞাসা করার চেষ্টা করছিলাম, মার্সেল। তবে ধরা যাক আমরা উভয়টিই করার জন্য যথেষ্ট বড় একটি সিস্টেম ব্যবহার করছি এবং আমরা এমন একটি আর্কিটেকচার রাখতে চাই যা উভয়কেই সমর্থন করে।
ক্রিস্টফ

4
এটি একটি খারাপ শব্দযুক্ত, তবে খুব গুরুত্বপূর্ণ প্রশ্ন। যখন বেশিরভাগ লোকেরা "লেনদেন" সম্পর্কে চিন্তা করেন তারা প্রায় একচেটিয়াতা সম্পর্কে চিন্তা করেন এবং লেনদেনের পারমাণবিকতা, বিচ্ছিন্নতা বা স্থায়িত্বের দিকগুলি নিয়ে নয়। প্রশ্নটি আসলে বলা উচিত "আপনি কীভাবে একটি মাইক্রোসার্চেস আর্কিটেকচার দিয়ে একটি এসিডি-কমপ্লায়েন্ট সিস্টেম তৈরি করেন Only কেবলমাত্র ধারাবাহিকতা প্রয়োগ করা হবে এবং বাকি এসিডি সত্যই কার্যকর নয় you যদি আপনি খারাপ ডেটা পছন্দ না করেন
জেফ ফিশার

10
আপনি আমার প্রশ্নটিকে "খারাপ শব্দযুক্ত", জেফ ফিশারকে কম করার জন্য সর্বদা পরিবর্তন করার চেষ্টা করতে পারেন।
ক্রিস্টফ

এই প্রশ্ন এবং আলোচনা এসও সম্পর্কিত এই অন্যান্য প্রশ্নের সাথে নিবিড়ভাবে সম্পর্কিত ।
পাওলো মেরসন

উত্তর:


42

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

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

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


5
আপনি ধরে নিচ্ছেন যে ফেরত কখনই ব্যর্থ হতে পারে না।
সঞ্জীব কুমার ডাঙ্গী

9
@ সঞ্জীবকুমারডাঙ্গী এটির সম্ভাবনা কম এবং এটি যদি ব্যর্থ হয় তবে এটি হোল্ডিং অ্যাকাউন্ট এবং প্রকৃত অ্যাকাউন্ট ব্যাংকের নিয়ন্ত্রণে থাকায় এটি সহজেই পরিচালনা করা যায়।
gldraphael

30

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

এটি এমন একটি কারণ যা কোনও সিস্টেমকে পুরোপুরি ডিজাইন না করা পর্যন্ত পরিষেবাগুলিতে বিভক্ত করা খুব কঠিন। আধুনিক বিশ্বে যার অর্থ সম্ভবত এটি লেখা ...


37
এই জাতীয় পদ্ধতির ফলে খুব ভালভাবে সমস্ত মাইক্রোসার্ফেসিকে শেষ পর্যন্ত একক একক অ্যাপ্লিকেশনটিতে মার্জ করা যায়।
স্লাভা ফমিন দ্বিতীয়

4
এটি সঠিক পদ্ধতির। এটি আসলেই সহজ: আপনার যদি পরিষেবাগুলিতে কোনও লেনদেনের প্রয়োজন হয় তবে আপনার পরিষেবাগুলি ভুল them সেগুলি আবার ডিজাইন করুন! @ স্লাভাফোমিনআই আপনি যা বলছেন তা কেবলমাত্র সত্য যদি আপনি কোনও মাইক্রোসারাইস সিস্টেম ডিজাইন করতে না জানেন। আপনি যদি নিজেকে মাইক্রোসার্চেসের পদ্ধতির সাথে লড়াই করতে দেখেন তবে এটি করবেন না, আপনার এককথায় কোনও খারাপ মাইক্রোসার্চ ডিজাইনের চেয়ে ভাল হবে। আপনি যখন সঠিক পরিষেবার গণ্ডি খুঁজে পান কেবল তখনই যখন আপনাকে পরিষেবাগুলিতে একপালটি বিভক্ত করা উচিত। অন্যথায় মাইক্রোসার্ভিসেস ব্যবহার করা সঠিক স্থাপত্য পছন্দ নয়, এটি কেবল হাইপ অনুসরণ করছে।
ফ্রান্সেস্ক ক্যাসেলস

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

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

আমি আপনার বক্তব্য পাচ্ছি না, এমন কোনও সুযোগ আছে যা আমরা কোনও আড্ডায় এটি আলোচনা করতে পারি?
বিল্বো ব্যাগিনস

17

আমি মনে করি আপনার অ্যাপ্লিকেশনটিতে যদি ধারাবাহিকতা একটি দৃ requirement় প্রয়োজন হয় তবে আপনার নিজের থেকে জিজ্ঞাসা করা উচিত যে মাইক্রোসার্ভেসেসগুলি আরও ভাল পদ্ধতির কিনা। মার্টিন ফোলার যেমন বলেছেন :

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

তবে সম্ভবত আপনার ক্ষেত্রে, আপনি উপলব্ধতার পোস্টে ধারাবাহিকতা ত্যাগ করতে পারেন

ব্যবসায়িক প্রক্রিয়াগুলি আপনার বিবেচনার তুলনায় প্রায়শই অসঙ্গতিগুলির প্রতি সহনশীল হয় কারণ ব্যবসায়গুলি প্রায়শই প্রাপ্যতার অধিক মূল্য দেয়।

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


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

আপনি সামঞ্জস্যতা
FWIW

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

16

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

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

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

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

সেখানে এমন পণ্য রয়েছে যা আপনার সিস্টেমে বোল্ট করা যেতে পারে যা ধারাবাহিকতার যত্ন নেয়। একটি ব্যবসায়িক প্রক্রিয়া ইঞ্জিন একটি ভাল উদাহরণ এবং তারা সাধারণত অবশেষে এবং ক্ষতিপূরণ ব্যবহার করে ধারাবাহিকতা পরিচালনা করে। অন্যান্য পণ্য একইভাবে কাজ করে। আপনি সাধারণত ক্লায়েন্ট (গুলি) এর নিকটবর্তী সফ্টওয়্যারটির একটি স্তর সহ শেষ করেন যা প্রকৃত ব্যবসায়ের প্রসেসিংয়ের জন্য ধারাবাহিকতা এবং লেনদেন এবং কল (মাইক্রো) পরিষেবাগুলির সাথে সম্পর্কিত হয় । এরকম একটি পণ্য জেনেরিক জেসিএ সংযোগকারী যা জাভা ইই সমাধানগুলির সাথে ব্যবহার করা যেতে পারে (স্বচ্ছতার জন্য: আমি লেখক)। এখানে আরও উত্থাপিত বিষয়ে আরও বিশদ এবং গভীর আলোচনার জন্য http://blog.maxant.co.uk/pebble/2015/08/04/1438716480000.html দেখুন ।

লেনদেন এবং ধারাবাহিকতা পরিচালনা করার আরেকটি উপায় হ'ল একটি মাইক্রোসার্চিসে একটি কলকে একটি বার্তার সারিগুলির মতো লেনদেনের মতো কোনও কলকে মোড়ানো। উপরের থেকে বিক্রয় রেকর্ড / অর্ডার রেকর্ডের উদাহরণটি ধরুন - আপনি কেবল বিক্রয় মাইক্রোসার্ভিসকে অর্ডার সিস্টেমে একটি বার্তা পাঠাতে দিতে পারেন, এটি একই লেনদেনে প্রতিশ্রুতিবদ্ধ যা ডেটাবেজে বিক্রয় লিখে writes ফলাফলটি একটি অ্যাসিনক্রোনাস সমাধান যা খুব ভাল স্কেল করে । ওয়েব সকেটের মতো প্রযুক্তি ব্যবহার করে আপনি এমনকি ব্লকিংয়ের সমস্যাটি প্রায়শই পেতে পারেন যা প্রায়শই অ্যাসিনক্রোনাস সমাধানগুলি স্কেলিংয়ের সাথে সম্পর্কিত। এর মতো নিদর্শন সম্পর্কে আরও ধারণার জন্য, আমার আর একটি নিবন্ধ দেখুন: http://blog.maxant.co.uk/pebble/2015/08/11/1439322480000.html

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


মাঝামাঝি সময়ে, আমি বলব যে প্রক্রিয়াটিকে অ্যাসিক্রোনাস হিসাবে রূপান্তরিত করা উচিত, যেখানে প্রক্রিয়াটির প্রতিটি পদক্ষেপ সম্পূর্ণ লেনদেন হয়। বিশদ জানতে এখানে দেখুন: blog.maxant.co.uk/pebble/2018/02/18/1518974314273.html
পিঁপড়া

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

@ স্যাকটিউ নিশ্চিত নন যে আমার দুটি ধাপের প্রতিশ্রুতি মনে থাকতে পারে কিনা তবে আমি এখনই এড়াতে চাইব এবং আমার ব্যবসায়িক ডেটা লিখব এবং আমার মাইক্রো সার্ভিস ডিবিতে একটি লেনদেনে একটি বার্তা কাতারে যুক্ত করা দরকার তা এই সত্যটি এড়িয়ে যাব । "ফ্যাক্ট" ওরফে একটি "কমান্ড" লেনদেনটি করার পরে অ্যাসিঙ্ক প্রক্রিয়া করা হয়, একটি স্বয়ংক্রিয় পুনরায় চেষ্টা করার পদ্ধতি ব্যবহার করে। উদাহরণের জন্য 2018-03-10 থেকে ব্লগ নিবন্ধটি দেখুন। যদি প্রয়োগ করা সহজ হয় তবে অগ্রণী কৌশলগুলির পক্ষে রোলব্যাক বা ক্ষতিপূরণ এড়িয়ে চলুন।
পিপীলিকা কুটসচের

1

মাইক্রোসার্ভেসিসে ডিফের মধ্যে ধারাবাহিকতা অর্জনের জন্য তিনটি উপায় রয়েছে। সেবা:

  1. অর্কেস্ট্রেশন - একটি প্রক্রিয়া যা পরিষেবাগুলিতে লেনদেন এবং রোলব্যাক পরিচালনা করে।

  2. কোরিওগ্রাফি - পরিষেবা একে অপরের মধ্যে বার্তা পাস করে এবং শেষ পর্যন্ত একটি সামঞ্জস্যপূর্ণ অবস্থায় পৌঁছায়।

  3. হাইব্রিড - উপরের দুটি মিশ্রণ করা।

সম্পূর্ণ পাঠের জন্য লিঙ্কটিতে যান: https://medium.com/capital-one-developers/microservices- যখন- to-react- vs-orchestrate-c6b18308a14c


1

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

বিকল্প 1: যদি সম্ভব হয় তবে লেনদেনের প্রয়োজনীয়তা এড়িয়ে চলুন

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

বিকল্প 2: একটি সারি ব্যবহার করুন

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

উদাহরণস্বরূপ, বলুন যে আমরা একটি সত্তা sertোকাতে এবং একটি ইমেল প্রেরণ করতে চাই, একক লেনদেন হিসাবে। মেল সার্ভারটি কল করার পরিবর্তে, আমরা একটি টেবিলের মধ্যে ইমেলটি সারিবদ্ধ করি।

Begin transaction
Insert entity
Insert e-mail
Commit transaction

একটি স্পষ্ট ত্রুটি হ'ল একাধিক মাইক্রোসার্ফেসিকে একই টেবিলে অ্যাক্সেসের প্রয়োজন হবে।

বিকল্প 3: লেনদেন শেষ করার ঠিক আগে বাহ্যিক কাজ শেষ করুন

এই পদ্ধতির ধারণাটি এই লেনদেনের উপর নির্ভর করে যে লেনদেন সম্পাদন করা ব্যর্থ হওয়ার খুব কম সম্ভাবনা।

Begin transaction
Insert entity
Insert another entity
Make external call
Commit transaction

যদি প্রশ্নগুলি ব্যর্থ হয় তবে বাহ্যিক কলটি এখনও হয়নি। যদি বাহ্যিক কল ব্যর্থ হয় তবে লেনদেনটি কখনই প্রতিশ্রুতিবদ্ধ হয় না।

এই পদ্ধতির সীমাবদ্ধতার সাথে আসে যে আমরা কেবলমাত্র একটি বাহ্যিক কল করতে পারি এবং এটি অবশ্যই শেষ হওয়া উচিত (যেমন আমরা এর ফলাফলটি আমাদের অনুসন্ধানে ব্যবহার করতে পারি না)।

বিকল্প 4: একটি মুলতুবি অবস্থায় জিনিসগুলি তৈরি করুন

এখানে পোস্ট করা হিসাবে , আমাদের একাধিক মাইক্রোসার্ভিসেসগুলি লেনদেনহীনভাবে, মুলতুবি অবস্থায় থাকা প্রতিটি উপাদান তৈরি করতে পারে।

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

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

বিকল্প 5: মাইক্রোসার্ভিসকে এর ক্যোয়ারীটি ভাগ করে দিন

অন্য কোন বিকল্প এটি আপনার জন্য করে না? তাহলে আসুন অপ্রথাবাদী

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

একাধিক মাইক্রোসার্ভিসেস থেকে প্রশ্নগুলি একটি সাধারণ, একক ডাটাবেস লেনদেনে রূপান্তর করার একটি উপায় রয়েছে।

কোয়েরিটি সম্পাদন করার পরিবর্তে ফিরিয়ে দিন।

Begin transaction
Execute our own query
Make external call, receiving a query
Execute received query
Commit transaction

নেটওয়ার্ক-ভিত্তিক, প্রতিটি মাইক্রোসারওয়াইস প্রতিটি ডাটাবেস অ্যাক্সেস করতে সক্ষম হওয়া প্রয়োজন। ভবিষ্যতের স্কেলিংয়ের ক্ষেত্রেও এটি মনে রাখবেন।

লেনদেনের সাথে জড়িত ডাটাবেসগুলি যদি একই সার্ভারে থাকে তবে এটি নিয়মিত লেনদেন হবে। যদি তারা বিভিন্ন সার্ভারে থাকে তবে এটি একটি বিতরণ লেনদেন হবে। কোডটি নির্বিশেষে একই।

আমরা এর সংযোগের ধরণ, এর পরামিতি এবং এর সংযোগের স্ট্রিং সহ ক্যোরিটি পাই। আমরা এটিকে প্রবাহকে পঠনযোগ্য রাখার জন্য একটি ঝরঝরে এক্সিকিউটেবল কমান্ড ক্লাসে গুটিয়ে রাখতে পারি: আমাদের লেনদেনের অংশ হিসাবে মাইক্রোসার্চিস কলের ফলে একটি কমান্ড কার্যকর হয় যা আমরা কার্যকর করি।

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

যদি আপসটি গ্রহণযোগ্য হয় তবে এই পদ্ধতির সাহায্যে একটি মাইক্রোসারাইস আর্কিটেকচারে একটি একক প্রয়োগের সহজবোধ্য লেনদেনের সুযোগ দেয়।


0

আমি আপনার সমস্যার সীমা চিহ্নিতকরণ - সমস্যার জায়গার পচন দিয়ে শুরু করব । যখন সঠিকভাবে সম্পন্ন করা হয়, আপনার পরিষেবাগুলির সর্বদা লেনদেনের প্রয়োজন হবে না।

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

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

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

এখানে একটি বিতরণ সিস্টেম কীভাবে তৈরি করা যায় সে সম্পর্কে কিছু ব্যবহারিক পরামর্শ।

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