এটি একটি ক্লাসিক প্রশ্ন যা সম্প্রতি আমাকে একটি সাক্ষাত্কারের সময় জিজ্ঞাসা করা হয়েছিল কীভাবে একাধিক ওয়েব পরিষেবাদি কল করা যায় এবং এখনও কাজের মাঝখানে কিছু ধরণের ত্রুটি সংরক্ষণ করা যায়। আজ, উচ্চ পারফরম্যান্স কম্পিউটিংয়ে আমরা দুটি ধাপের কমিট এড়িয়ে চলি। লেনদেনের জন্য "স্টারবাক মডেল" যাকে বলা হত সে সম্পর্কে আমি বহু বছর আগে একটি কাগজ পড়েছিলাম: স্টারবাকের আপনি যে কফি অর্ডার করেন সেটি অর্ডার, অর্থ প্রদান, প্রস্তুতকরণ এবং গ্রহণের প্রক্রিয়া সম্পর্কে চিন্তা করুন ... আমি বিষয়গুলিকে বড় করে দেখি তবে দুটি ধাপের কমিট মডেল হবে পরামর্শ দিন যে আপনি আপনার কফি না পাওয়া পর্যন্ত পুরো প্রক্রিয়াটি জড়িত সমস্ত পদক্ষেপের জন্য একক মোড়কের লেনদেন হবে। যাইহোক, এই মডেলটি দিয়ে, সমস্ত কর্মচারী অপেক্ষা করবেন এবং আপনার কফি না পাওয়া পর্যন্ত কাজ করা বন্ধ করবেন। আপনি ছবিটি দেখতে পাচ্ছেন?
পরিবর্তে, "সেরা প্রচেষ্টা" মডেল অনুসরণ করে এবং প্রক্রিয়াটিতে ত্রুটিগুলির ক্ষতিপূরণ দিয়ে "স্টারবাক মডেল" আরও উত্পাদনশীল। প্রথমত, তারা নিশ্চিত করে যে আপনি অর্থ প্রদান করেছেন! তারপরে, কাপের সাথে আপনার অর্ডার যুক্ত বার্তার সারি রয়েছে। যদি কোনও প্রক্রিয়ায় কোনও ভুল হয়ে যায়, যেমন আপনি নিজের কফি পান না, তবে আপনি যে আদেশ দিয়েছিলেন তা নয়, ইত্যাদি, আমরা ক্ষতিপূরণ প্রক্রিয়ায় প্রবেশ করি এবং আমরা নিশ্চিত করি যে আপনি যা চান তা পেয়েছেন বা আপনাকে ফেরত দিতে হবে, এটি সবচেয়ে দক্ষ মডেল is উত্পাদনশীলতা বৃদ্ধি জন্য।
কখনও কখনও, স্টারবাক একটি কফি নষ্ট করছে তবে সামগ্রিক প্রক্রিয়াটি দক্ষ। আপনি যখন নিজের ওয়েব পরিষেবাদিগুলি এমনভাবে ডিজাইন করার মতো তৈরি করেন তখন তাদের ভাবনার মতো অন্যান্য কৌশল রয়েছে যেগুলি যে কোনও সময় বলা যেতে পারে এবং এখনও একই পরিণতি প্রদান করে। সুতরাং, আমার সুপারিশটি হ'ল:
আপনার ওয়েব পরিষেবাদি সংজ্ঞায়িত করার সময় খুব সূক্ষ্ম হয়ে উঠবেন না (আজকাল ঘটে যাওয়া মাইক্রো-সার্ভিস হাইপ সম্পর্কে আমি নিশ্চিত নই: খুব বেশি দূরে যাওয়ার ঝুঁকি);
অ্যাসিঙ্ক কার্য সম্পাদন বৃদ্ধি করে তাই অ্যাসিঙ্ক হওয়া পছন্দ করুন, যখনই সম্ভব ইমেলের মাধ্যমে বিজ্ঞপ্তি প্রেরণ করুন।
যেকোন সংখ্যক বার "পুনরায়" পুনরুদ্ধারযোগ্য করে তুলতে আরও বুদ্ধিমান পরিষেবাগুলি তৈরি করুন, কোনও ইউআইডি বা টাস্কিডের সাথে প্রক্রিয়াজাতকরণ যা প্রতিটি পদক্ষেপে ব্যবসায়ের নিয়মকে বৈধতা দিয়ে শেষ অবধি অর্ডার বটম-টপ অনুসরণ করবে;
বার্তা সারি (জেএমএস বা অন্য) ব্যবহার করুন এবং ত্রুটি পরিচালনা করা প্রসেসরের দিকে ঝুঁকুন যা বিপরীত ক্রিয়াকলাপগুলি প্রয়োগ করে "রোলব্যাক" -তে অপারেশনগুলি প্রয়োগ করবে, উপায় দ্বারা, অ্যাসিঙ্ক অর্ডার দিয়ে কাজ করার জন্য প্রক্রিয়াটির বর্তমান অবস্থার বৈধতা পাওয়ার জন্য কিছু ধরণের কিউ প্রয়োজন হবে, সুতরাং বিবেচনা করুন;
শেষ অবলম্বনে, (যেহেতু এটি প্রায়শই না ঘটে), ম্যানুয়াল ত্রুটিগুলি প্রক্রিয়া করার জন্য এটি একটি সারিতে রাখুন।
পোস্ট করা প্রথম সমস্যাটি নিয়ে ফিরে আসি। একটি অ্যাকাউন্ট তৈরি করুন এবং একটি ওয়ালেট তৈরি করুন এবং নিশ্চিত হয়ে নিন যে সবকিছু শেষ হয়েছে।
ধরা যাক পুরো অপারেশনকে অর্কেস্ট্রেট করার জন্য একটি ওয়েব পরিষেবা ডাকা হয়েছে।
ওয়েব পরিষেবাদির সিউডো কোডটি দেখতে এই রকম হবে:
অ্যাকাউন্ট তৈরির মাইক্রোসার্চিসকে কল করুন, এটিকে কিছু তথ্য এবং কিছু অনন্য টাস্ক আইডি 1.1 দিন কোনও টাস্ক আইডি অ্যাকাউন্টের রেকর্ডের সাথে সম্পর্কিত। মাইক্রোসার্ভাইস সনাক্ত করে যে অ্যাকাউন্টটি বিদ্যমান নেই তাই এটি এটিকে তৈরি করে এবং টাস্ক আইডি সঞ্চয় করে। দ্রষ্টব্য: এই পরিষেবাটি 2000 বার কল করা যেতে পারে, এটি সর্বদা একই ফলাফল সম্পাদন করবে। পরিষেবাটি "" যদি প্রয়োজন হয় একটি পূর্বাবস্থায় ফিরে আসা অপারেশন সম্পাদনের জন্য ন্যূনতম তথ্য ধারণ করে এমন একটি রশিদ দিয়ে উত্তর দেয়।
এটিকে অ্যাকাউন্ট আইডি এবং টাস্ক আইডি দিয়ে ওয়ালেট তৈরির কল করুন। ধরা যাক একটি শর্ত বৈধ নয় এবং ওয়ালেট তৈরি করা যায় না। কলটি একটি ত্রুটি সহ ফিরে আসে তবে কিছুই তৈরি হয়নি।
অর্কেস্ট্রেটারকে ত্রুটি সম্পর্কে অবহিত করা হয়। এটি জানে যে অ্যাকাউন্ট তৈরি বাতিল করতে হবে তবে এটি এটি নিজে করবে না। এটি ওয়ালেট পরিষেবাটি প্রথম পদক্ষেপের শেষে প্রাপ্ত "ন্যূনতম পূর্বাবস্থা প্রাপ্তি" পাস করে এটি করতে বলবে।
অ্যাকাউন্ট পরিষেবা পূর্বাবস্থায় ফেরত প্রাপ্তি পড়ে এবং কীভাবে অপারেশনটি পূর্বাবস্থায় ফেলা যায় জানে; পূর্বাবস্থায় প্রাপ্তিটিতে এমনকি অন্য কোনও মাইক্রোসার্চিস সম্পর্কে তথ্য অন্তর্ভুক্ত থাকতে পারে যা এটি নিজেকে কাজের অংশ হিসাবে চিহ্নিত করতে পারে। এই পরিস্থিতিতে, পূর্বাবস্থায় ফিরিয়ে নেওয়া অ্যাকাউন্টের আইডি এবং সম্ভবত বিপরীত ক্রিয়াকলাপ সম্পাদনের জন্য প্রয়োজনীয় কিছু অতিরিক্ত তথ্য থাকতে পারে। আমাদের ক্ষেত্রে, জিনিসগুলি সরল করার জন্য, আসুন কেবল এটির অ্যাকাউন্ট আইডি ব্যবহার করে অ্যাকাউন্টটি মুছুন।
এখন, ধরা যাক যে ওয়েব সার্ভিস কখনও অ্যাকাউন্টে তৈরির পূর্বাবস্থায় সম্পাদিত হয়েছিল এমন সাফল্য বা ব্যর্থতা (এই ক্ষেত্রে) পায় নি। এটি কেবলমাত্র অ্যাকাউন্টটির পূর্বাবস্থায় ফিরে আসা পরিষেবাটিকে কল করবে। এবং এই পরিষেবাটি স্বাভাবিকভাবে কখনই ব্যর্থ হয় না কারণ এর লক্ষ্য অ্যাকাউন্টটির আর অস্তিত্ব নেই। সুতরাং এটি উপস্থিত আছে কিনা তা যাচাই করে এবং এটিকে পূর্বাবস্থায় ফেলার জন্য কিছুই করা যায় না দেখে। সুতরাং এটি ফিরে আসে যে অপারেশন একটি সাফল্য।
ওয়েব পরিষেবাটি ব্যবহারকারীর কাছে ফিরে আসে যে অ্যাকাউন্টটি তৈরি করা যায়নি।
এটি একটি সুসংগত উদাহরণ। আমরা এটি অন্যভাবে পরিচালনা করতে পারতাম এবং সিস্টেমটি ত্রুটিটি পুরোপুরি পুনরুদ্ধার করতে না চাইলে হেল্প ডেস্ককে লক্ষ্য করে একটি বার্তা কাতারে কেসটি স্থাপন করতে পারতাম। "আমি এমন একটি সংস্থায় এটি সম্পাদন করতে দেখেছি যেখানে যথেষ্ট নয় পরিস্থিতি সংশোধন করার জন্য পিছনের প্রান্তের সিস্টেমে হুক সরবরাহ করা যেতে পারে desk সহায়তা ডেস্কটি সফলভাবে সম্পাদিত যা রয়েছে তা সম্বলিত বার্তা পেয়েছিল এবং জিনিসগুলি ঠিক করার জন্য পর্যাপ্ত তথ্য রয়েছে যেমন আমাদের পূর্বাবস্থার প্রাপ্তি সম্পূর্ণ স্বয়ংক্রিয় পদ্ধতিতে ব্যবহার করা যেতে পারে।
আমি একটি অনুসন্ধান করেছি এবং মাইক্রোসফ্ট ওয়েব সাইটে এই পদ্ধতির জন্য একটি প্যাটার্ন বর্ণনা রয়েছে। একে ক্ষতিপূরণ লেনদেনের ধরণ বলা হয়:
ক্ষতিপূরণ লেনদেনের ধরণ