আমি বলার পরে বলুন:
রেস্ট এবং অ্যাসিক্রোনাস ইভেন্টগুলি বিকল্প নয়। তারা পুরোপুরি অরথোগোনাল।
আপনার কাছে একটি, বা অন্যটি, বা উভয়ই থাকতে পারে বা নাও থাকতে পারে। সম্পূর্ণ ভিন্ন সমস্যা ডোমেনগুলির জন্য তারা সম্পূর্ণ আলাদা সরঞ্জাম। প্রকৃতপক্ষে, সাধারণ উদ্দেশ্যে অনুরোধ-প্রতিক্রিয়া যোগাযোগ একেবারে অ্যাসিনক্রোনাস, ইভেন্ট-চালিত এবং দোষ সহনশীল হতে সক্ষম ।
তুচ্ছ উদাহরণ হিসাবে, এএমকিউ প্রোটোকল টিসিপি সংযোগের মাধ্যমে বার্তা প্রেরণ করে। টিসিপিতে প্রতিটি প্যাকেট অবশ্যই প্রাপককে স্বীকার করতে হবে । যদি কোনও প্যাকেটের প্রেরক যদি সেই প্যাকেটের জন্য কোনও এসকে না পান, এটি প্যাকেটটি এসকে না করা অবধি বা অ্যাপ্লিকেশন স্তরটি "ছেড়ে না দেওয়া" এবং সংযোগটি ত্যাগ না করা অবধি পুনরায় বিক্রয় করতে থাকে। এটি স্পষ্টতই একটি অ দোষ-সহনীয় অনুরোধ-প্রতিক্রিয়া মডেল কারণ প্রতিটি "প্যাকেট প্রেরণ অনুরোধ" এর অবশ্যই একটি "প্যাকেট স্বীকৃতি প্রতিক্রিয়া" থাকতে হবে, এবং পুরো সংযোগে ফলাফল সাড়াতে ব্যর্থ হতে পারে। তবুও অ্যাসিক্রোনাস ফল্ট সহনশীল বার্তাপ্রেরণের জন্য একটি প্রমিত প্রোটোকল, এএমকিপি টিসিপির মাধ্যমে জানানো হয়েছে! কি দেয়?
এখানে খেলার সময়ে কোর ধারণা যে মাপযোগ্য ঢিলেঢালাভাবে-কাপল্ড ত্রুটি-সহিষ্ণু মেসেজিং দ্বারা সংজ্ঞায়িত করা হয় কি বার্তাগুলি পাঠাতে না কিভাবে তাদের পাঠাতে । অন্য কথায়, আলগা সংযুক্তিকে অ্যাপ্লিকেশন স্তরে সংজ্ঞায়িত করা হয় ।
আসুন দুটি পক্ষকে সরাসরি RESTful HTTP- র সাথে বা অপ্রত্যক্ষভাবে কোনও এএমকিউপি বার্তা ব্রোকারের সাথে যোগাযোগ করে দেখি। ধরা যাক পার্টি একটি জেপিইজি চিত্রটি পার্টি বিতে আপলোড করতে ইচ্ছুক যারা চিত্রটি তীক্ষ্ণ করবে, সংকোচিত করবে বা অন্যথায় চিত্রটিকে বাড়িয়ে তুলবে। পার্টি এগুলির তত্ক্ষণাত প্রসেসড চিত্রের প্রয়োজন নেই, তবে ভবিষ্যতের ব্যবহার এবং পুনরুদ্ধারের জন্য এর জন্য একটি রেফারেন্স প্রয়োজন। বিশ্রামে যেতে পারে এমন এক উপায় এখানে:
- পার্টি এ
POSTপার্টি বি এর সাথে একটি এইচটিটিপি অনুরোধ বার্তা প্রেরণ করেContent-Type: image/jpeg
- পার্টি বি ইমেজটি প্রসেস করে (এটি দীর্ঘকালীন বড় হলে) সম্ভবত পার্টি এ অপেক্ষা করে, সম্ভবত অন্যান্য কাজ করে
- পার্টি বি
201 Createdএকটি Content-Location: <url>হেডারের সাথে পার্টি এ একটি এইচটিটিপি প্রতিক্রিয়া বার্তা প্রেরণ করে যা প্রক্রিয়াযুক্ত চিত্রটির সাথে লিঙ্ক করে
- পার্টি এ এর কাজটি বিবেচনা করে যেহেতু এখন এটিতে প্রক্রিয়াযুক্ত চিত্রটির একটি উল্লেখ রয়েছে
- ভবিষ্যতে কিছু সময় যখন পার্টি এ-তে প্রক্রিয়াযুক্ত চিত্রের প্রয়োজন হয় তখন এটি পূর্বের
Content-Locationশিরোনামের লিঙ্কটি ব্যবহার করে এটি পায়
201 Createdপ্রতিক্রিয়া কোড একটি ক্লায়েন্ট যে না শুধুমাত্র তাদের অনুরোধ সফল হয়েছে বলে, এটি একটি নতুন রিসোর্স তৈরি করা হয়েছে। ২০১২ এর প্রতিক্রিয়ায় Content-Locationশিরোনামটি তৈরি হওয়া সংস্থার লিঙ্ক। এটি আরএফসি 7231 বিভাগ 6.3.2 এবং 3.1.4.2 এ নির্দিষ্ট করা আছে।
এখন, আসুন দেখি কীভাবে এই মিথস্ক্রিয়াটি এএমকিউপির শীর্ষে অনুমানমূলক আরপিসি প্রোটোকলের মাধ্যমে কাজ করে:
- পার্টি এ একটি এএমকিউপি বার্তা দালালকে (এটিকে ম্যাসেঞ্জার বলুন) প্রেরণ করার জন্য ইমেজ সম্বলিত বার্তা এবং এটিকে পার্টি বিতে প্রেরণের জন্য নির্দেশনা প্রেরণ করে, তারপরে ছবিটির জন্য কোনও প্রকারের ঠিকানা সহ পার্টি এ-তে প্রতিক্রিয়া জানান
- পার্টি এ অপেক্ষা করছে, সম্ভবত অন্যান্য কাজ করছে
- ম্যাসেঞ্জার পার্টি বি এর কাছে পার্টি এ এর মূল বার্তা প্রেরণ করে
- পার্টি বি বার্তা প্রসেস করে
- পার্টি বি প্রক্রিয়াকৃত চিত্রের জন্য একটি ঠিকানা সম্বলিত মেসেঞ্জারকে বার্তা প্রেরণ করে এবং সেই বার্তাটি পার্টি এ-তে প্রেরণের নির্দেশনা প্রেরণ করে
- ম্যাসেঞ্জার পার্টি বি থেকে প্রক্রিয়াকৃত চিত্রের ঠিকানা সহ বার্তা প্রেরণ করে
- পার্টি এ এর কাজটি বিবেচনা করে যেহেতু এখন এটিতে প্রক্রিয়াযুক্ত চিত্রটির একটি উল্লেখ রয়েছে
- ভবিষ্যতে পার্টি পার্টি যখন ছবিটির প্রয়োজন হয় তখন ঠিকানাটি ব্যবহার করে চিত্রটি পুনরুদ্ধার করে (সম্ভবত অন্য কোনও পক্ষকে বার্তা পাঠিয়ে)
আপনি কি এখানে দেখতে সমস্যা? উভয় ক্ষেত্রেই, পার্টির একজন পর্যন্ত একটি চিত্র ঠিকানা পেতে পারে না পরে পার্টির বি ইমেজ প্রক্রিয়াকরণ । তবু পার্টি এটিকে এখনই চিত্রটির দরকার নেই এবং সমস্ত অধিকার অনুসারে, প্রসেসিং শেষ হয়ে গেলে কম যত্ন নিতে পারে না!
আমরা এএমকিপি ক্ষেত্রে এটিকে খুব সহজেই ঠিক করতে পারি পার্টি বি কে বলে যে বি প্রসেসিংয়ের জন্য চিত্রটি গ্রহণ করেছে, প্রসেসিং সম্পূর্ণ হওয়ার পরে চিত্রটি কোথায় থাকবে তার একটি ঠিকানা দিয়ে । তারপরে পার্টি বি ভবিষ্যতে কিছু সময় কোনও বার্তা প্রেরণ করতে পারে যা ইমেজ প্রক্রিয়াজাতকরণ সমাপ্ত হয়েছে নির্দেশ করে। এএমকিউপি উদ্ধার বার্তা!
কি অনুমান ব্যতীত: আপনি একই জিনিসটি বিশ্রামের মাধ্যমে অর্জন করতে পারেন । AMQP উদাহরণে আমরা "চিত্রটি প্রক্রিয়াকরণ করছে, এটি" প্রক্রিয়াজাত চিত্রটি "বার্তাকে একটি" চিত্রটি প্রক্রিয়াজাত করছে, আপনি পরে এটি পেতে পারেন "বার্তা পরিবর্তন করেছেন। RESTful HTTP এ করতে, আমরা 202 Acceptedকোডটি Content-Locationআবার ব্যবহার করব :
- পার্টি এ
POSTপার্টি বি এর সাথে একটি এইচটিটিপি বার্তা প্রেরণ করেContent-Type: image/jpeg
- পার্টি বি তাত্ক্ষণিকভাবে একটি
202 Acceptedপ্রতিক্রিয়া প্রেরণ করবে যাতে এক ধরণের "অ্যাসিনক্রোনাস অপারেশন" সামগ্রী রয়েছে যা প্রসেসিং শেষ হয়েছে কিনা এবং চিত্রটি প্রসেসিংয়ের পরে কোথায় পাওয়া যাবে তা বর্ণনা করে। এছাড়াও অন্তর্ভুক্ত একটি Content-Location: <link>শিরোনাম যা একটি 202 Acceptedপ্রতিক্রিয়া হিসাবে, প্রতিক্রিয়া বডি যাই হোক না কেন প্রতিনিধিত্ব করে সংস্থানটির লিঙ্ক। এই ক্ষেত্রে, এর অর্থ এটি আমাদের অ্যাসিনক্রোনাস অপারেশনের একটি লিঙ্ক!
- পার্টি এ এর কাজটি বিবেচনা করে যেহেতু এখন এটিতে প্রক্রিয়াযুক্ত চিত্রটির একটি উল্লেখ রয়েছে
- ভবিষ্যতে কিছু সময়ের মধ্যে যখন পার্টি এ প্রসেসড চিত্রের প্রয়োজন হয়, এটি প্রথমে শিরোনামের সাথে সংযুক্ত অ্যাসিঙ্ক অপারেশন রিসোর্সটি
Content-Location প্রক্রিয়াকরণ শেষ হয়েছে কিনা তা নির্ধারণ করে। যদি তা হয়, তবে পার্টি এ তারপরে প্রক্রিয়াজাত চিত্রটি পাওয়ার জন্য এসিঙ্ক অপারেশনে লিঙ্কটি ব্যবহার করে uses
এখানে পার্থক্য কেবল এএমকিউপি মডেলটিতে, ইমেজ প্রসেসিং সম্পন্ন হওয়ার পরে পার্টি বি পার্টি এ-কে বলে। তবে আরআরইএসটি মডেলটিতে পার্টি এ পরীক্ষামূলকভাবে চিত্রটির প্রয়োজন হওয়ার ঠিক আগে সম্পন্ন হয়েছে কিনা তা পরীক্ষা করে। এই পন্থাগুলি সমতুল্য স্কেলেযোগ্য । সিস্টেমটি বড় হওয়ার সাথে সাথে, async AMQP এবং async REST কৌশল উভয়টিতে প্রেরিত বার্তার সংখ্যা সমমানের asympotic জটিলতার সাথে বৃদ্ধি পায়। পার্থক্যটি কেবলমাত্র ক্লায়েন্টটি সার্ভারের পরিবর্তে একটি অতিরিক্ত বার্তা প্রেরণ করছে।
তবে আরআরইএসটি পদ্ধতির আরও কিছু কৌশল রয়েছে যা হ'ল গতিশীল আবিষ্কার এবং প্রোটোকল আলোচনার জন্য । সিঙ্ক এবং async REST উভয় কথোপকথন কীভাবে শুরু হয়েছিল তা বিবেচনা করুন। পার্টি বি পার্টি বি-তে ঠিক একই অনুরোধ প্রেরণ করেছে , পার্থক্য কেবলমাত্র বিশেষ ধরণের সাফল্যের বার্তা যা পার্টি বি সাড়া করেছিল being যদি পার্টি এ ইমেজ প্রসেসিং সিঙ্ক্রোনাস বা অ্যাসিনক্রোনাস ছিল তা চয়ন করতে চায় ? পার্টি বি যদি অ্যাসিঙ্ক প্রক্রিয়াজাতকরণের পক্ষে সক্ষম হয় তবে পার্টি এ জানে না?
ঠিক আছে, এইচটিটিপি এর ইতিমধ্যে এর জন্য একটি প্রমিত প্রোটোকল রয়েছে! একে বলা হয় HTTP পছন্দসমূহ, বিশেষত respond-asyncআরএফসি 7240 বিভাগ 4.1 এর পছন্দ। পার্টি এ যদি একটি অ্যাসিক্রোনাস প্রতিক্রিয়া চায়, তবে Prefer: respond-asyncএটির প্রাথমিক POST অনুরোধ সহ একটি শিরোনাম অন্তর্ভুক্ত । পার্টি বি যদি এই অনুরোধটিকে সম্মান জানাতে সিদ্ধান্ত নেয়, তবে এটি 202 Acceptedএমন একটি প্রতিক্রিয়া ফেরত পাঠায় যাতে ক Preference-Applied: respond-async। অন্যথায়, পার্টি বি কেবল শিরোনামকে উপেক্ষা করে Preferএবং 201 Createdএটি সাধারণত পাঠায় ।
এটি পার্টি এটিকে সার্ভারের সাথে আলোচনার মঞ্জুরি দেয় , যা ইমেজ প্রসেসিং বাস্তবায়নের সাথে কথা বলার ঘটনা ঘটে তা গতিশীলরূপে গ্রহণ করে। তদুপরি, সুস্পষ্ট লিঙ্কগুলির ব্যবহারের অর্থ পার্টি এ-কে বি ছাড়া অন্য কোনও দল সম্পর্কে জানতে হবে না: কোনও এএমকিউ বার্তা ব্রোকার নেই, কোনও রহস্যময় পার্টি সি নেই যা জানে যে কীভাবে চিত্রের ঠিকানাটি চিত্রের ডেটাতে বাস্তবে রূপান্তর করতে হয়, দ্বিতীয় বি-অ্যাসিঙ্ক নেই পার্টি যদি উভয় সিঙ্ক্রোনাস এবং অ্যাসিক্রোনাস অনুরোধ করা দরকার হয়, ইত্যাদি। এটি কেবল যা প্রয়োজন তা বর্ণনা করে, এটি optionচ্ছিকভাবে কী পছন্দ করবে এবং তারপরে স্থিতি কোড, প্রতিক্রিয়া সামগ্রী এবং লিঙ্কগুলিতে প্রতিক্রিয়া জানায় party মধ্যে যোগ করুনCache-Controlডেটার স্থানীয় কপিগুলি কখন রাখবেন সে বিষয়ে স্পষ্ট নির্দেশনার জন্য শিরোনাম এবং এখন সার্ভারগুলি ক্লায়েন্টদের সাথে আলোচনা করতে পারে যা ক্লায়েন্টগুলি স্থানীয় (বা এমনকি অফলাইন!) এর অনুলিপিগুলিতে রাখতে পারে। এভাবেই আপনি আরইএসটি-তে স্বল্প-যুগল ত্রুটি-সহনশীল মাইক্রোসার্চগুলি তৈরি করেন।