এমন অনেকগুলি সমাধান রয়েছে যেগুলি থেকে আমি স্বাচ্ছন্দ্য বোধ করি না তার চেয়ে বেশি আপস করে। মঞ্জুরিপ্রাপ্ত, যদি আপনার ব্যবহারের বিষয়টি জটিল হয় যেমন বিভিন্ন ব্যাংকের মধ্যে অর্থ সঞ্চার করা, তবে আরও মনোজ্ঞ বিকল্পগুলি অসম্ভব হতে পারে। তবে আসুন আমরা সাধারণ দৃশ্যে কী করতে পারি তা দেখুন, যেখানে মাইক্রোসার্ভেসিস ব্যবহার আমাদের ডাটাবেস লেনদেনের ক্ষেত্রে হস্তক্ষেপ করে।
বিকল্প 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
নেটওয়ার্ক-ভিত্তিক, প্রতিটি মাইক্রোসারওয়াইস প্রতিটি ডাটাবেস অ্যাক্সেস করতে সক্ষম হওয়া প্রয়োজন। ভবিষ্যতের স্কেলিংয়ের ক্ষেত্রেও এটি মনে রাখবেন।
লেনদেনের সাথে জড়িত ডাটাবেসগুলি যদি একই সার্ভারে থাকে তবে এটি নিয়মিত লেনদেন হবে। যদি তারা বিভিন্ন সার্ভারে থাকে তবে এটি একটি বিতরণ লেনদেন হবে। কোডটি নির্বিশেষে একই।
আমরা এর সংযোগের ধরণ, এর পরামিতি এবং এর সংযোগের স্ট্রিং সহ ক্যোরিটি পাই। আমরা এটিকে প্রবাহকে পঠনযোগ্য রাখার জন্য একটি ঝরঝরে এক্সিকিউটেবল কমান্ড ক্লাসে গুটিয়ে রাখতে পারি: আমাদের লেনদেনের অংশ হিসাবে মাইক্রোসার্চিস কলের ফলে একটি কমান্ড কার্যকর হয় যা আমরা কার্যকর করি।
সংযোগের স্ট্রিংটি উত্সাহিত মাইক্রোসার্ভিস আমাদের যা দেয় তাই সমস্ত অভিপ্রায় এবং উদ্দেশ্যগুলির জন্য, কোয়েরিটি এখনও সেই মাইক্রোসারওয়াইস দ্বারা সম্পাদিত বলে মনে করা হয়। আমরা ক্লায়েন্টের মাইক্রোসার্ভিস মাধ্যমে এটি কেবল শারীরিকভাবে চালাচ্ছি। এটা কি কোন পার্থক্য তৈরি করবে? ঠিক আছে, এটি আমাদের অন্য ক্যোয়ারির সাথে একই লেনদেনে রাখতে দেয়।
যদি আপসটি গ্রহণযোগ্য হয় তবে এই পদ্ধতির সাহায্যে একটি মাইক্রোসারাইস আর্কিটেকচারে একটি একক প্রয়োগের সহজবোধ্য লেনদেনের সুযোগ দেয়।