কোথায় এবং কি সংস্থান আছে?
আরএসইএসটি হ'ল রাষ্ট্রহীন, আবিষ্কারযোগ্য পদ্ধতিতে সংস্থানসমূহকে সম্বোধন করার। এটি HTTP- র মাধ্যমে প্রয়োগ করা হবে না বা জেএসওএন বা এক্সএমএল-এর উপর নির্ভর করতে হবে না, যদিও হাইপারমিডিয়া ডেটা ফর্ম্যাটটি ব্যবহার করার জন্য দৃ strongly়ভাবে সুপারিশ করা হয়েছে ( হেটিওএএস দেখুন লিঙ্ক এবং আইডিগুলি আকাঙ্ক্ষিত নীতিটি দেখুন) হয়।
সুতরাং, প্রশ্নটি হয়ে ওঠে: সংস্থার সংস্থান সম্পর্কে কেউ কীভাবে চিন্তা করে?
দ্বি-দিকনির্দেশক সিঙ্ক কী? **
দ্বি-দিকনির্দেশক সিঙ্ক হ'ল নোডের গ্রাফে উপস্থিত সংস্থানসমূহ আপডেট করার প্রক্রিয়া যাতে প্রক্রিয়া শেষে, সমস্ত নোডগুলি সেই সংস্থানগুলি নিয়ন্ত্রিত বিধি অনুসারে তাদের সংস্থানগুলি আপডেট করে। সাধারণত, এটি বোঝা যায় যে সমস্ত নোডের গ্রাফের মধ্যে উপস্থিত সংস্থানগুলির সর্বশেষতম সংস্করণ থাকবে। সাধারণ ক্ষেত্রে গ্রাফটি দুটি নোড নিয়ে গঠিত: স্থানীয় এবং দূরবর্তী। স্থানীয় সিঙ্ক সূচনা করে।
সুতরাং যে মূল উত্সটি সম্বোধন করা দরকার তা হ'ল একটি লেনদেন লগ এবং অতএব, একটি সিঙ্ক প্রক্রিয়া এইচটিটিপি-র অধীনে "আইটেমগুলি" সংগ্রহের জন্য দেখতে এই জাতীয় দেখাচ্ছে:
পদক্ষেপ 1 - স্থানীয় লেনদেনের লগ পুনরুদ্ধার করে
স্থানীয়: GET /remotehost/items/transactions?earliest=2000-01-01T12:34:56.789Z
রিমোট: 200 ঠিক আছে যাতে শরীরের সাথে লেনদেনের লগ থাকে এটির মতো ক্ষেত্রগুলি থাকে।
itemId
- একটি ইউআইডি একটি ভাগ করা প্রাথমিক কী সরবরাহ করার জন্য
updatedAt
- ডেটা সর্বশেষ আপডেট করার সময় একটি সমন্বিত বিন্দু সরবরাহ করার জন্য টাইমস্ট্যাম্প (ধরে নেওয়া উচিত যে পুনর্বিবেচনার ইতিহাসের প্রয়োজন নেই)
fingerprint
- updateAt
কয়েক সেকেন্ডের বাইরে থাকলে দ্রুত তুলনার জন্য ডেটার সামগ্রীর একটি SHA1 হ্যাশ
itemURI
- পরে পুনরুদ্ধারের অনুমতি দেওয়ার জন্য আইটেমটিতে একটি সম্পূর্ণ ইউআরআই
পদক্ষেপ 2 - স্থানীয় তার নিজের সাথে দূরবর্তী লেনদেনের লগের তুলনা করে
এটি কীভাবে সিঙ্ক করবেন তার ব্যবসায়ের নিয়মগুলির প্রয়োগ। সাধারণত, itemId
স্থানীয় লোকাল সংস্থান সনাক্ত করবে এবং তারপরে ফিঙ্গারপ্রিন্টের তুলনা করবে। যদি কোনও পার্থক্য থাকে তবে একটি তুলনা updatedAt
করা হয়। যদি এগুলি কল করার খুব কাছাকাছি থাকে তবে অন্য নোডের উপর ভিত্তি করে টানতে (সম্ভবত এটি আরও গুরুত্বপূর্ণ) বা অন্য নোডের দিকে ধাক্কা দেওয়ার জন্য (এই নোডটি আরও গুরুত্বপূর্ণ) সিদ্ধান্ত নেওয়া দরকার। যদি রিমোট রিসোর্স স্থানীয়ভাবে উপস্থিত না থাকে তবে একটি পুশ এন্ট্রি করা হয় (এতে সন্নিবেশ / আপডেটের জন্য প্রকৃত ডেটা রয়েছে)। দূরবর্তী লেনদেনের লগটিতে উপস্থিত না এমন কোনও স্থানীয় সংস্থান অপরিবর্তিত বলে ধরে নেওয়া হয়।
টান অনুরোধগুলি দূরবর্তী নোডের বিরুদ্ধে করা হয় যাতে ডেটা ব্যবহার করে স্থানীয়ভাবে উপস্থিত থাকে itemURI
। এগুলি স্থানীয়ভাবে পরে প্রয়োগ করা হয় না।
পদক্ষেপ 3 - রিমোটে স্থানীয় সিঙ্ক লেনদেনের লগ চাপুন
স্থানীয়: PUT /remotehost/items/transactions
স্থানীয় সিঙ্ক লেনদেন লগযুক্ত বডি সহ।
রিমোট নোড এটি সমকালীনভাবে প্রক্রিয়াজাত করতে পারে (এটি যদি ছোট এবং দ্রুত হয়) বা অ্যাসিনক্রোনাসলি ( 202 স্বীকৃত ভাবেন ) যদি এতে প্রচুর ওভারহেড লাগতে পারে। সিঙ্ক্রোনাস অপারেশন ধরে নিলে সাফল্য বা ব্যর্থতার উপর নির্ভর করে ফলাফলটি 200 ওকে বা 409 কনফ্লিক্ট হবে । 409 কনফ্লিক্টের ক্ষেত্রে , তারপরে প্রক্রিয়াটি আবার শুরু করতে হবে যেহেতু রিমোট নোডে একটি আশাবাদী লক ব্যর্থতা হয়েছে (সিঙ্কের সময় কেউ ডেটা পরিবর্তন করেছে)। রিমোট আপডেটগুলি তাদের নিজস্ব অ্যাপ্লিকেশন লেনদেনের আওতায় প্রক্রিয়া করা হয়।
পদক্ষেপ 4 - স্থানীয়ভাবে আপডেট করুন
পদক্ষেপ 2 এ টানা ডেটা স্থানীয়ভাবে প্রয়োগ লেনদেনের আওতায় প্রয়োগ করা হয়।
যদিও উপরেরটি নিখুঁত নয় (এমন বেশ কয়েকটি পরিস্থিতি রয়েছে যেখানে স্থানীয় এবং রিমোট সমস্যায় পড়তে পারে এবং স্থানীয় থেকে রিমোট পুলের ডেটা পাওয়া সম্ভবত এটি একটি বড় পুটিতে ভরাট করার চেয়ে বেশি দক্ষ) এটি এটি প্রমাণ করে যে দ্বি-দ্বি সময় কীভাবে রেস্ট ব্যবহার করা যায়? দিকনির্দেশক সিঙ্ক্রোনাইজেশন প্রক্রিয়া।