আইএমটি ডিভাইসগুলির সংক্ষিপ্ত, ঘন ঘন বার্তা প্রেরণের জন্য কি এক্সএমপিপির একটি বড় ওভারহেড রয়েছে?


10

আইওটি ডিভাইসগুলির জন্য সম্ভাব্য যোগাযোগ প্রোটোকল হিসাবে আমি এক্সএমপিপি সম্পর্কে পড়ছি তবে, একটি উত্স পড়ে, আমি নিশ্চিত নই যে আপনি যদি প্রতিটি বার্তার জন্য ওভারহেড সম্পর্কে উদ্বিগ্ন হন তবে এটি কোনও উপযুক্ত প্রোটোকল কিনা really

এই উত্সটি বলে:

তবে এক্সএমপিপিতে বেশ কয়েকটি সমস্যা রয়েছে যা এটি ইএমবেডেড আইট প্রোটোকলসের জন্য কিছুটা অবাঞ্ছিত করে তোলে। এক্সএমএল-ভিত্তিক প্রোটোকল হিসাবে, এক্সএমপিপি খুব ভার্বোজ, এটি এইচটিটিপি এর চেয়েও বেশি এবং ভারী ডেটা ওভারহেড রয়েছে has আইওটি সংযুক্ত ডিভাইস থেকে সার্ভারের কাছে এক বাইট ডেটা প্রেরণের জন্য একটি একক অনুরোধ / প্রতিক্রিয়া বিনিময়টি 0.5 কেবি এর বেশি।

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

যাইহোক, এক্সএমপিপি নিজেকে আইওটি অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত হিসাবে প্রচার করে (যদিও এটি নির্দিষ্টভাবে এটি লো-ওভারহেড বলে না) তবে এটি অদ্ভুত বলে মনে হয় যে এত বড়, আপাতদৃষ্টিতে ভার্বোজ প্রোটোকল আইওটি ডিভাইসগুলির জন্য প্রস্তাবিত / প্রচারিত হবে।

XMPP এর ওভারহেডটি কি উত্সটি অল্প পরিমাণ ডেটার জন্য প্রস্তাবিত হিসাবে সত্যই বড়? উদাহরণস্বরূপ, 8-বাইট বার্তা পাঠানোর সময় সেখানে কত ওভারহেড থাকবে?

এছাড়াও, যদি এক্সআই সংক্ষেপণ ব্যবহৃত হয় (উত্সে উল্লিখিত) তবে ওভারহেডটি কি দুর্দান্ত ? এটিও কি কিছু সমস্যা নিয়ে আসবে?


4
আকর্ষণীয় প্রশ্ন। আমি এক্সএমপিপি-র সাথে অপরিচিত থাকাকালীন এটি লক্ষ্য করা গুরুত্বপূর্ণ যে EXI- র উভয় প্রান্ত পয়েন্টের জন্য একটি স্কিমা থাকা দরকার যা সিঙ্ক্রোনাইজ করে। এছাড়াও আইওটি ডিভাইসটি সেই এক্সএমএলটিকে এন-ডিকোড করতে হবে যা 8-বাইট বার্তা প্রেরণের জন্য নিজেকে অত্যন্ত ভয়ঙ্কর জটিল বলে মনে হয়।
হেলমার

1
@ হেলমার, এক্সএমপিপি দিয়ে দেখতে প্যাকেটের আকারে আপনি যা অর্জন করেছেন তা দেখে মনে হচ্ছে, আপনি গণনার জটিলতায় হেরে গেছেন।
Aurora0001

1
আমি মনে করি এই প্রশ্নটি সাধারণত ঠিক আছে তবে: "উদাহরণস্বরূপ, প্রতি 2 মিনিটে 8-বাইট বার্তা পাঠানোর সময় সেখানে কতটা ওভারহেড থাকবে?" -> "দুই মিনিট" স্পর্শকাতর এবং বিপথগামী জিনিসগুলিকে প্ররোচিত করার প্রবণ। আপনি যা সত্যিই জিজ্ঞাসা করছেন তা হ'ল একটি 8 বাইট মেসেজটি কতটা ওভারহেড করবে (আমি অনুমান করব, যদি এটি কেবলমাত্র এক টুকরো ডেটা হয় তবে 1 বাইট মেসেজের মতো)। একটি সময়ের উপাদানগুলির সাথে সম্পর্কিত এটি কেবল ব্যান্ডউইথ এবং যে কোনও প্রোটোকল ব্যবহারের বিষয়ে বিবেচনা করে যা অবশ্যই মৃত সহজ গণিত হতে পারে dependent
স্বর্ণলোকস

1
@delicateLatticeworkFever আমি যদি আপনি এটি প্রাসঙ্গিক মনে করি না এটা সম্পাদনা পাবেন (আমি সম্পূর্ণরূপে বিশ্বাস করা হয় নি কিন্তু আমি আরো ভাবলাম বিস্তারিত কম বেশী ভালো)
Aurora0001

2
এটি একটি পরামর্শ, হ্যাঁ। আমি যেভাবে গিয়েছিলাম কেবল তা পড়ে, "এটি কোনও নির্ভর করে না বাইটের নির্ধারিত সংখ্যাটি প্রেরণ করতে সম্পূর্ণ অনির্দিষ্ট ডিভাইসটি কত সময় নেয় তার উপর নির্ভর করে না?" উদাহরণস্বরূপ, যদি উত্তরটি হয় যে বার্তাটি ~ 0.5 কেবি, ইউনিটগুলিতে সময়ের কোনও উপাদান নেই;) এটি অনির্ধারিত ডিভাইসের ব্যান্ডউইদথে রয়েছে in
স্বর্ণলোকস

উত্তর:


8

এক্সএমএলটি ভার্বোজ, এটি যথাযথভাবে বলা হলেও, এই সচেতনতার সাথে আরও সচেতন হওয়া উচিত যে এই শব্দভাণ্ডারের বিষয়বস্তু সম্পর্কিত সমস্ত "ওভারহেড" নয়, কারণ এটি শব্দার্থকে আবদ্ধ করে; এটি ওভারহেড যা স্থির কাঠামোর বিপরীতে ডায়নামিককে জোর দেয় এমন কোনও প্রোটোকলের লক্ষণাত্মক। উদাহরণস্বরূপ, এইচটিএমএল আসলে এক্সএমএল এর একটি স্বাচ্ছন্দ্যময় রূপ যা গতিশীল কাঠামো, কাঠামোর সাথে সামগ্রীকে সরবরাহ করে যা সামগ্রীর একটি দিক হিসাবে বিবেচনা করা যেতে পারে। আপনি টেবিলের টেবিল থেকে নিজেই আলাদা করতে পারেন, তবে বিষয়বস্তুটি নির্দিষ্ট সম্পর্কের সাথে টেবুলার ডেটা বিষয়বস্তুর সাথে অবিচ্ছেদ্য; যদি আমি কেবল প্রতিটি কক্ষটি নিয়েছি এবং এটি সমস্তকে একটি দীর্ঘ স্ট্রিং হিসাবে সঞ্চারিত করি, সেই কাঠামো এবং সেই সম্পর্কগুলি চলে গেছে, এবং তাই আমি তথ্য হারিয়ে ফেলেছি এবং সেই সামগ্রীটি না?

আসুন একটি 8 বাইট বার্তা বিবেচনা করুন যা কিছু ট্যাবলুয়ার ডেটা গঠন করতে পারে। যদি আমি খুব স্থিতিশীল প্রোটোকল ব্যবহার করি তবে আমি এ জাতীয় প্রোটোকলটি কেবল সংজ্ঞায়িত করে অতিরিক্ত কোনও ওভারহেড ছাড়াই ন্যূনতমভাবে প্রেরণ করতে পারতাম:

  • প্রতিটি বার্তা হ'ল 8 বাইট, সুতরাং আমাদের দৈর্ঘ্য নির্দেশ করতে বা কোনও সমাপ্তি ক্রম অন্তর্ভুক্ত করার দরকার নেই।
  • আটটি বাইট সর্বদা 2 x 2 গ্রিডের জন্য নেওয়া হয় যেখানে প্রতিটি ঘরে একটি 16-বিট মান থাকে।

আমার সমস্ত বার্তাগুলি যদি ঠিক এর মতো হয় তবে এক্সএমএল, এইচটিএমএল বা এক্সএমপিপি ব্যবহার করা নিরীহ হিসাবে বিবেচনা করা যেতে পারে - আমি স্ট্রাকচারাল উপাদানগুলির ব্যান্ডউইথকে নষ্ট করছি যা সর্বদা একই এবং পূর্ব নির্ধারিত হয় এবং এটি তৈরি এবং বিশ্লেষণ উভয় প্রান্তে সংশ্লিষ্ট গণনার সময় নষ্ট করে যাচ্ছি। একটি ন্যূনতম, যথাযথ এইচটিএমএল পৃষ্ঠা যা প্রতিটি কক্ষে কয়েকটি অক্ষরের সাথে মাত্র একটি 2 x 2 টেবিল ধারণ করে সম্ভবত ফর্ম্যাটিং এবং প্রোটোকল ওভারহেড সামঞ্জস্য করতে কমপক্ষে 100 বাইট হতে চলেছে।

তবে, যদি আমার সমস্ত বার্তাগুলি হুবহু না হয় তবে কী ধরণের বার্তা তা নির্দিষ্ট করে বলা যেতে পারে "পে-লোড" এর আক্ষরিক অংশ না হলেও এটি প্রয়োজনীয় উপাদান, বিষয়বস্তু অনুসারে wise আমি এটি কেবল দুটি অতিরিক্ত বাইট দিয়ে করতে পারি এবং আরও অনেক গতিশীলতার পরিচয় দিতে পারি:

  • বার্তাগুলি এখন পরিবর্তনশীল দৈর্ঘ্য, 0-255 বাইট এবং প্রথম বাইট দৈর্ঘ্য নির্দেশ করে।
  • বিভিন্ন পূর্বনির্ধারিত বার্তার প্রকারের জন্য (অবধি) 256 টি কোড রয়েছে যার মধ্যে একটি "2 x 2 টেবিল", এটি দ্বিতীয় বাইট।

এখন আমার 8 বাইটের টেবিলের সামগ্রীতে 2 বাইট ওভারহেডের প্রয়োজন, তবে এই কাস্টম প্রোটোকলের মাধ্যমে কী ধরণের বার্তা প্রেরণ করা যায় তার ক্ষেত্রে সম্ভাবনার অনেক বিস্তৃত পরিসর রয়েছে।

এটি এখনও কোনও HTML পৃষ্ঠা বা এক্সএমএল নেমস্পেসের স্পেসিফিকেশন (বা এটির সেট, যা এক্সএমপিটি মূলত যা তা হ'ল ) এর সম্ভাবনার খুব কাছাকাছি নেই।

সুতরাং, এর ভিত্তিতে, বেশিরভাগ যদি আপনি যা করছেন তা সাধারণ 8 বাইট বার্তা প্রেরণ করছে, এক্সএমপিপি সম্ভবত ওভারকিল। যাইহোক, অগত্যা এতটা নয়। দাবিটি যে "আইওটি সংযুক্ত ডিভাইস থেকে সার্ভারের কাছে এক বাইট ডেটা প্রেরণের জন্য একটি একক অনুরোধ / প্রতিক্রিয়া বিনিময়টি 0.5 কেবি এরও বেশি" আমার কাছে প্রাসঙ্গিক আরএফসির দিকে ঝলকানি দেওয়া , একটি সম্ভাব্য অতিরঞ্জিত বলে মনে হয় (তবে এনবি, সমস্ত আমি এটিকে এক নজরে দেখি, আমি কখনই এক্সএমপিপি প্রয়োগ করি নি বা ব্যবহার করি না)। আপনি সন্দেহ নেই যে আপনি এর উদাহরণ তৈরি করতে পারেন, তবে এটি সম্ভবত কোনও ন্যূনতম উদাহরণ নয়।

যেহেতু প্রোটোকল টিসিপি ভিত্তিক, তাই "জ্যাবার: ক্লায়েন্ট 'নেমস্পেস দ্বারা যোগ্য একটি এক্সএমএল স্ট্রিম স্থাপন করা কেবলমাত্র বার্তাটির অংশ হিসাবে বিবেচনা করা দরকার যদি আমরা কোনও কাজ বন্ধ করে দিই - ডিভাইসটি একটি সার্ভারকে 8 বাইট প্রেরণ, প্রেরণে যোগাযোগ করে তথ্য, সংযোগ বিচ্ছিন্ন। যদি সম্পর্কটি আরও স্থির থাকে, যা এটি প্রায়শই আইওটি প্রসঙ্গে থাকে, তবে আমরা ধরে নিতে পারি যে ডিভাইসটির গন্তব্যের সাথে ইতিমধ্যে একটি সংযোগ রয়েছে। এই ক্ষেত্রে, যদি বার্তার চূড়ান্ত গন্তব্যটি সার্ভার হয় (অন্য ক্লায়েন্টের বিপরীতে সার্ভার বার্তাটি প্রেরণ করতে চলেছে), তবে প্রোটোকল ওভারহেড সম্ভাব্য পরিমাণে ন্যূনতম।

<message><body>8 bytes.</body></message>

"ওভারহেড" এর একটি পরিমিত 33 বাইট। এটি এখানে উল্লেখ করার মতো যে এক্সএমএলটি পাঠ্য, এবং তাই যদি আপনার বার্তাগুলি প্রায়শই বাইনারি হয়, তবে এটি অনেক কম উপযুক্ত হয়ে উঠবে, কারণ সেই ডেটা এনকোড করা দরকার (যেমন, বেস 64 ), যা আরও ওভারহেড এবং গণনা যুক্ত করে প্রয়োজনীয়তা।

সুতরাং, শেষ পর্যন্ত:

আইএমটি ডিভাইসগুলির সংক্ষিপ্ত, ঘন ঘন বার্তা প্রেরণের জন্য কি এক্সএমপিপির একটি বড় ওভারহেড রয়েছে?

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

সেই অনুসারে, যদি আমাদের এমন একটি প্রসঙ্গ থাকে যেখানে একক কেন্দ্রীয় সার্ভার বিভিন্ন ডিভাইসের মধ্যে বার্তা প্রক্রিয়াকরণ করে এবং / অথবা বার্তা নির্ভর করে, তবুও devices ডিভাইসগুলির মধ্যে যে কোনও একটি যা করছেন তা সর্বদা সহজ এবং সোজা হতে পারে, এমন একটি প্রোটোকল যা একটি এনক্যাপুলেট করতে পারে বিভিন্ন বার্তা এখনও দরকারী হবে। যদি কোনও ক্লায়েন্ট ডিভাইসের সীমিত সংস্থান থাকে, আমরা প্রোটোকলটির অনেকগুলি হার্ডকোড করতে পারি এবং প্রতিটি বার্তাটি সেই প্রান্ত থেকে মোড়ানো একটি খুব সহজ কাজ হয়ে যায়; আমি বিশ্বাস করি যে অনেক আইওটি ডিভাইস যা এইচটিটিপি সার্ভার স্থাপন করে (যা "সাধারণ ক্লায়েন্ট, জটিল সার্ভার" এর বিপরীত)। এই সার্ভারগুলি কোনও প্রকারের এইচটিটিপি অনুরোধ পরিচালনা করতে পারে না (প্রিফর্মেটেড প্রত্যাখ্যানের বাদে) এবং তারা খুব ভালভাবে সংজ্ঞায়িত, বিষয়যুক্ত জিনিসগুলির সেট করবে এবং তারা যে প্রতিক্রিয়া প্রেরণ করবে সেগুলি সেট করে, তবে যেহেতু তারা এইচটিটিপি সার্ভার হিসাবে সঠিকভাবে কাজ করে না,


3

প্রথমত, আমার বলা উচিত যে এক্সএমএল কিছু সাফল্যের সাথে রিয়েলটাইম বার্তাগুলি এনক্যাপুলেট করার জন্য এবং বড় আকারে বিশেষত আইএম যোগাযোগের জন্য এবং এক্সএমপিপিতে উপস্থিতির জন্য ব্যবহৃত হয়েছিল। এমন কিছু সংস্থা রয়েছে বলে মনে হচ্ছে যে এই ডেটা প্রতিনিধিত্বমূলক সিস্টেমের জন্য আরও একটি অ্যাপ্লিকেশন অঞ্চল সন্ধান করার জন্য তাদের এক্সএমএল জ্ঞানকে কাজে লাগাতে চাইছে।

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

এক্সএমএল কম্পিউটারগুলি পরিচালনা করতে একটি কঠিন উপস্থাপনা, কারণ এটির তুলনামূলকভাবে জটিল পাঠ্য পার্সার প্রয়োজন, এবং তারপরে কোনও প্রোগ্রামে এর ডেটা উত্তোলনের জন্য এক ধরণের শ্রেণিবিন্যাসিক উপস্থাপনা represent যেহেতু অনেকগুলি পাঠ্য জড়িত রয়েছে, আপনার এনকোডিং / ডিকোডিংয়ের জন্য বেশ কিছুটা স্মৃতি উপলব্ধ থাকতে হবে।

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

এক্সএমএল একইসাথে কম্পিউটারগুলির জন্য কঠোর পরিশ্রম করার সময় মানুষের পড়া (এবং ম্যানুয়ালি তৈরি করা) পক্ষে শক্ত; সুতরাং এটি এমন একটি সিস্টেম যা কম্পিউটারের জন্য উপযুক্ত নয় এবং এটি মানুষের জন্যও উপযুক্ত নয়।

গুরুত্বপূর্ণভাবে, আইওটির কয়েকটি বিশেষ বাধা রয়েছে যা এটি দক্ষ হওয়ার জন্য আকাঙ্ক্ষিত করে। আইওটি ডিভাইসগুলিতে সাধারণত সীমিত প্রক্রিয়াকরণ শক্তি এবং স্টোরেজ থাকে (সাধারণত বড় আকারের কোনও মাধ্যমিক স্টোরেজ থাকে না, কেবল কিছু র‌্যাম এবং ইপ্রোম থাকে)। আইওটি ডিভাইসে সহজতম যোগাযোগের লিঙ্ক থাকতে পারে, এমনকি কোনও টিসিপি / আইপি স্ট্যাকও নয়। বিভিন্ন ধরণের মাইক্রোকন্ট্রোলার ডিজাইন থাকবে, এমনকি পরিশীলনের স্তরে নয় যেখানে একটি স্ট্যান্ডার্ড অপারেটিং সিস্টেম (যেমন লিনাক্স, অ্যান্ড্রয়েড) ব্যবহৃত হবে; এটি অফ-শেল্ফ সরঞ্জামগুলির সংখ্যা সীমিত করে যা ব্যবহারের জন্য সহজ এক্সএমএল ইন্টারফেসের প্রস্তাব রাখে lying

সংক্ষেপে, আমি সন্দেহ করি যে আইওটি-র সাথে ডেটা উপস্থাপনা কেস-বাই-কেস ভিত্তিতে হার্ডওয়ারের সীমাবদ্ধতা, যোগাযোগের স্টাইল (যেমন ব্রডকাস্ট, ডেটাগ্রাম, নির্ভরযোগ্য ইত্যাদি), যোগাযোগের ফ্রিকোয়েন্সি এবং আরও নির্ভর করে better এক্সএমএল অবশ্যই আইওটির জন্য সাইন কো হিসাবে বিবেচনা করা উচিত নয় ।


3
  1. বহু বছর আগে আমি ব্যবহারের জন্য পার্থক্য বিশ্লেষণ করেছি

    Paymentতিহ্যবাহী সাথে তুলনা করে পেমেন্ট লেনদেনের প্রতিনিধিত্বের জন্য কার্ডের নেটওয়ার্কে XML (কার্ড_ নাম্বার, তারিখ, সময়, টার্মিনাল_আইডি এবং অতিরিক্ত উপাদানগুলির তালিকা)

    বিট-ম্যাপযুক্ত ISO8583

  2. এক্সএমএলের বিশাল ওভারহেড রয়েছে। আপনি যদি 10000+ নোডের সাথে নেটওয়ার্কগুলিতে প্রভাব বিবেচনা করেন তবে প্রত্যেকে কেন্দ্রীয় হোস্টে প্রতি ঘন্টা 10+ বার্তা প্রেরণ করেন তবে এক্সএমএল বেরিয়ে যায় এবং আপনার সত্যিকারের আরও দক্ষ কিছু প্রয়োজন।

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