আপনি কীভাবে আপনার সফ্টওয়্যারটি ডিজাইন করেন যা বেশ কয়েকটি মাইক্রোসার্ভিসেস আপডেট করে, যদি সেগুলির মধ্যে একটি ব্যর্থ হয়?


12

নীচে বা নিচে চলে যাওয়া পরিষেবাগুলিতে সহায়তা করতে আমি কি কোনও নকশার প্যাটার্ন বা অনুশীলন ব্যবহার করতে পারি, অন্যরা স্থিতিশীল থাকে?

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

আমি কীভাবে এটির জন্য ডিজাইন করব? আমি বিভিন্ন ডাটাবেসে অনাথ তথ্য চাই না।


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

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

"কিউ ম্যানেজার" এর মতো কিছু ব্যবহার করবেন না যা আমার ধারণা রেডিস কোনও বাধা সৃষ্টি করবে? বা কমপক্ষে উচ্চ সম্ভাবনা আছে? আপনি বর্ণিত ছাড়া অন্য কোনও উপায় আমি জানি না।
জননি

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

এটি কি খরগোশের মতো কিছু?
জননি

উত্তর:


9

কিছু বিকল্প।

একটি অবিরাম যোগাযোগ চ্যানেল ব্যবহার করুন

HTTP এর পরিবর্তে, একটি কাতারে এমন বার্তাগুলি ফেলে দিন যা অত্যন্ত উপলভ্য এবং অধ্যবসায়ী। যেমন কাফকা। যতক্ষণ টার্গেট সার্ভারটি কোনও পর্যায়ে উপলভ্য হবে ততক্ষণ এটি বার্তাটি পাবে।

আপনার কাছে এখন একটি জটিল সাবসিস্টেম (সারি) সরবরাহ এবং পরিচালনা করার ট্রেড অফ রয়েছে। সুতরাং নিশ্চিত হয়ে নিন যে আপনি এটি কার্যকর কিনা তা বিশ্লেষণ করেছেন।

ব্যাকঅফ এবং পুনরায় চেষ্টা করুন

ফোনকারীকে ব্যর্থ অনুরোধটি (সম্ভবত ডিস্কে চালিয়ে যাওয়া) রাখুন এবং পর্যায়ক্রমে আবার চেষ্টা করুন। এক্ষেত্রে আপনার অনুরোধের মধ্যে পার্থক্য করা গুরুত্বপূর্ণ যে পরিষেবাটি কেবল ডাউন হয়ে যাওয়ার কারণে ক্র্যাশ ঘটায় causing পূর্ববর্তীটি সম্ভবত কোনও ত্রুটির কারণে এবং লগ হওয়া উচিত ... একটি সমাধান না হওয়া পর্যন্ত পুনরায় চেষ্টা করা সম্ভবত কোনও তাত্পর্য বোধ করবে না।

সনাক্ত এবং ক্ষতিপূরণ

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

নকশার বিকল্পগুলি বিবেচনা করুন

এর মতো কেস সম্ভবত ক্ষতিগ্রস্থ মাইক্রোসার্চেসিতে কল পরিচালনা করার জন্য একটি API গেটওয়ে কল করে। এই সমস্যাটি প্রশমিত করতে কোন কৌশলগুলি ব্যবহৃত হয় তা আপনি নিয়ন্ত্রণ করেন। আপনি সম্ভবত এইগুলি প্রয়োগের বিবরণ দিয়ে ক্লায়েন্টদের বোঝা চাপতে চান না। দেখুন সার্কিট ব্রেকার প্যাটার্ন

যেহেতু মাইক্রোসার্ভিসেসগুলি স্বতন্ত্র, সেখানে সর্বদা কিছু ব্যর্থতার কেস উপস্থিত থাকে যা পরিণতিতে অসঙ্গতি হতে পারে। এগুলি উঠলে আপনাকে ম্যানুয়াল ফিক্সগুলি প্রস্তুত করতে হবে।

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

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


এটিই কি রেবিটএমকিউর জন্য?
জনি

র্যাবিটএমকিউ আপনার প্রশ্নের উত্তর? না। এটি এমন একটি সমাধানের অংশ হতে পারে যা আপনার চাহিদা পূরণ করে, তবে এটি কেবল আপনার সমস্যার সমাধান করতে পারে না।
ক্যাসি স্পিকম্যান

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

2

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

http://the-paper-trail.org/blog/consensus-protocols-two-phase-commit/

http://the-paper-trail.org/blog/consensus-protocols-three-phase-commit/

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