এইচটিএমএল ওয়েবস্কটগুলি কি প্রতিটি ক্লায়েন্টের জন্য একটি মুক্ত সংযোগ বজায় রাখে? এই স্কেল না?


159

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


1
এইচটিএমএল ওয়েবসকেটের মতো জিনিস নেই। আপনার অর্থ HTTP ওয়েবস্কট।
লার্নের মারকুইস

উত্তর:


209

বেশিরভাগ উপায়ে ওয়েবসকেট সম্ভবত এজেএক্স / এইচটিএমএল অনুরোধগুলির চেয়ে আরও ভাল স্কেল করবে। তবে এর অর্থ এই নয় যে ওয়েবসকেটস এজেএক্স / এইচটিএমএল এর সমস্ত ব্যবহারের জন্য প্রতিস্থাপন।

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

হাজার হাজার যুগোপযোগী এএএএক্সএক্স ক্লায়েন্টকে সমর্থন করার জন্য কি কখনও ওয়েব সার্ভার কনফিগার করার চেষ্টা করেছেন? সেই ক্লায়েন্টগুলিকে ওয়েবসকেট ক্লায়েন্টে পরিবর্তন করুন এবং এটি সম্ভবত সম্ভব হবে।

এইচটিটিপি সংযোগগুলি, যদিও তারা দীর্ঘ সময় ধরে ওপেন ফাইল তৈরি করে না বা বন্দর নম্বর ব্যবহার করে না, তবে অন্য প্রতিটি উপায়ে আরও ব্যয়বহুল:

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

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

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

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

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

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

আপডেট :

দরকারী লিঙ্ক: নোড.জেএস ব্যবহার করে এডাব্লুএসে 600k সমবর্তী ওয়েবসকেট সংযোগ


4
অসাধারণ anser। সাড়া দেওয়ার জন্য সময় দেওয়ার জন্য আপনাকে ধন্যবাদ।
রায়ান মন্টগোমেরি

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

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

2
একটি সংশোধন - একটি টিসিপি সংযোগ গন্তব্য আইপি ও গন্তব্য বন্দর নিয়ে গঠিত। এর অর্থ হ'ল single 64k পোর্টস সীমাটি কেবলমাত্র একক ক্লায়েন্টের জন্য। তাত্ত্বিকভাবে, সার্ভারের কেবলমাত্র নিজের হার্ডওয়ার দ্বারা সীমাবদ্ধ যে কোনও সংখ্যক মুক্ত সংযোগ থাকতে পারে।
রিজন

@ রিজান, এটি সত্য। আমি উত্তরটি আপডেট করেছি এবং খোলা বন্দরের সীমাবদ্ধতা পরিবর্তন করেছি এবং পরিবর্তে ফাইল বর্ণনাকারীর সীমাবদ্ধতার উল্লেখ করেছি যা লোকেরা প্রায়শই প্রথমে চালিত হয়।
কনক

36

কেবল একটি স্পষ্টতা: কোনও সার্ভার সমর্থন করতে পারে এমন ক্লায়েন্ট সংযোগগুলির এই দৃশ্যের পোর্টগুলির সাথে কোনও সম্পর্ক নেই, যেহেতু সার্ভারটি [সাধারণত] কেবল একটি একক বন্দরে ডাব্লুএস / ডাব্লুএসএস সংযোগের জন্য শুনছে। আমি মনে করি অন্য মন্তব্যকারীরা যা বোঝাতে চেয়েছিলেন তা হ'ল ফাইল বর্ণনাকারী। আপনি সর্বাধিক সংখ্যক ফাইল বর্ণনাকারী নির্ধারণ করতে পারবেন যথেষ্ট উচ্চ, তবে তারপরে আপনাকে প্রতিটি খোলা টিসিপি / আইপি সকেটের জন্য সকেট বাফার আকারগুলি যুক্ত করতে হবে। এখানে কিছু অতিরিক্ত তথ্য দেওয়া হয়েছে: /server/48717/practical-maximum-open-file-descripttors-ulimit-n-for-a-high-volume-s systemm

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


আফির এখানে একটি আগত বন্দর রয়েছে তবে সর্বদা প্রতিটি সংযোগের জন্য একটি বহির্গমন বন্দর খোলা থাকে। এটি সি 10 কে সমস্যার একমাত্র অংশে রয়েছে ।
অর্ণাড বোচেজ

14

যে কোনও আধুনিক একক সার্ভার একবারে কয়েক হাজার ক্লায়েন্টকে সার্ভার করতে সক্ষম । এর এইচটিটিপি সার্ভার সফটওয়্যারটি হ'ল ইভেন্ট-চালিত (আইওসিপি) ওরিয়েন্টেড (আমরা আর পুরানো অ্যাপাচিতে একটি সংযোগ = একটি থ্রেড / প্রক্রিয়া সমীকরণ নেই)। এমনকি উইন্ডোজে নির্মিত HTTP সার্ভারটি (http.sys) আইওসিপি ওরিয়েন্টেড এবং খুব দক্ষ (কার্নেল মোডে চলমান)। এই দৃষ্টিকোণ থেকে, ওয়েবসকেট এবং নিয়মিত এইচটিটিপি সংযোগের মধ্যে স্কেলিংয়ে খুব বেশি পার্থক্য হবে না। একটি টিসিপি / আইপি সংযোগ একটি সামান্য রিসোর্স (একটি থ্রেডের তুলনায় অনেক কম) ব্যবহার করে এবং আধুনিক ওএস প্রচুর সাম্প্রতিক সংযোগগুলি পরিচালনা করার জন্য অনুকূলিত হয়: ওয়েবসকেট এবং এইচটিটিপি এই টিসিপি / আইপি স্পেসিফিকেশন থেকে উত্তরাধিকার সূত্রে কেবল ওএসআই 7 অ্যাপ্লিকেশন স্তর প্রোটোকল are

তবে, পরীক্ষা থেকে, আমি ওয়েবসকেটগুলির সাথে দুটি প্রধান সমস্যা দেখেছি:

  1. তারা সিডিএন সমর্থন করে না;
  2. তাদের সম্ভাব্য সুরক্ষা সমস্যা রয়েছে।

সুতরাং আমি কোনও প্রকল্পের জন্য নিম্নলিখিতগুলি সুপারিশ করব:

  • কেবলমাত্র ক্লায়েন্টের বিজ্ঞপ্তিগুলির জন্য ওয়েবসকেটগুলি ব্যবহার করুন (দীর্ঘ ভোটদানের ফ্যালব্যাক প্রক্রিয়া সহ - প্রায় প্রচুর গ্রন্থাগার রয়েছে);
  • ক্যাশে জন্য সিডিএন বা প্রক্সি ব্যবহার করে অন্যান্য সমস্ত ডেটার জন্য RESTful / JSON ব্যবহার করুন।

অনুশীলনে, সম্পূর্ণ ওয়েবসকেট অ্যাপ্লিকেশনগুলি ভাল স্কেল করে না। সেগুলির জন্য যা ডিজাইন করা হয়েছিল কেবল তার জন্য কেবল ওয়েবসকেটগুলি ব্যবহার করুন: সার্ভার থেকে ক্লায়েন্টের জন্য বিজ্ঞপ্তিগুলি ধাক্কা।

ওয়েবসকেট ব্যবহারের সম্ভাব্য সমস্যা সম্পর্কে:

1. একটি সিডিএন ব্যবহার বিবেচনা করুন

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

অবশ্যই, আপনি আপনার সমস্ত ডেটা আপনার সিডিএন ক্যাশে রাখবেন না, তবে অনুশীলনে, প্রচুর প্রচলিত সামগ্রী প্রায়শই পরিবর্তন হয় না। আমার সন্দেহ হয় যে আপনার রিস্ট্রেড রিসোর্সগুলির 80% ক্যাশে হতে পারে ... এমনকি এক মিনিট (বা 30 সেকেন্ড) সিডিএন মেয়াদোত্তীর্ণ সময়সীমা আপনার কেন্দ্রীয় সার্ভারকে নতুন লাইভ দিতে এবং অ্যাপ্লিকেশন প্রতিক্রিয়াটি অনেক বাড়িয়ে দিতে পারে, যেহেতু সিডিএন পারে ভৌগলিকভাবে সুর করা ...

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

2. সুরক্ষা সমস্যা

ওয়েবসকেটে সম্ভাব্য সুরক্ষার সমস্যা রয়েছে, বিশেষত ডস আক্রমণগুলি। নতুন সুরক্ষা দুর্বলতার বিষয়ে চিত্রের জন্য, স্লাইডগুলির এই সেট এবং এই ওয়েবকিট টিকিটটি দেখুন

ওয়েবসকেটগুলি ওএসআই application অ্যাপ্লিকেশন স্তর স্তরের প্যাকেট পরিদর্শন করার কোনও সম্ভাবনা এড়িয়ে চলে, যে কোনও ব্যবসায়ের সুরক্ষায় আজকাল এটি বেশ মানক হয়ে আসে। প্রকৃতপক্ষে, ওয়েবসকেটগুলি সংক্রমণকে অচল করে দেয়, তাই সুরক্ষা ফাঁসের একটি বড় লঙ্ঘন হতে পারে।


2
@ আরনাউডবাচেজ - সিডিএন-তে সুন্দর প্রদর্শনীর জন্য +1। দ্রুত অনুসরণের প্রশ্ন - ইভেন্ট ডেলিভারি নেটওয়ার্কগুলির সম্ভাব্যতা সম্পর্কে আপনি কী ভাবেন? সিডিএন এর পরে প্যাটার্নযুক্ত তবে ওয়েবকোকেট বা অন্য কোনও এখনও অদৃশ্য প্রযুক্তি হিসাবে স্ট্রিমিং ডেটা সরবরাহ করার দিকে প্রস্তুত।
কুইসভার

8

এটি এইভাবে চিন্তা করুন: কী সস্তা, কোনও উন্মুক্ত সংযোগ রাখা, বা প্রতিটি অনুরোধের জন্য একটি নতুন সংযোগ খোলার (তা করার আগে আলোচনার উপর দিয়ে, এটি টিসিপি মনে রাখবেন))

অবশ্যই এটি অ্যাপ্লিকেশনটির উপর নির্ভর করে তবে দীর্ঘমেয়াদী রিয়েলটাইম সংযোগগুলির জন্য (যেমন একটি এজেএক্স চ্যাট) সংযোগটি উন্মুক্ত রাখা আরও ভাল।

সকেটগুলির জন্য সর্বাধিক সংখ্যক বিনামূল্যে পোর্টের সংযোগগুলি সংযুক্ত করা হবে।


ওয়েবস্কট ব্যবহার না করেই আপনি সংযোগটি উন্মুক্ত রাখতে পারেন (HTTP / 1.1 এর বেঁচে থাকার বিকল্পটির জন্য ধন্যবাদ)। আমি নিশ্চিত না যে আমি এখানে আপনার বক্তব্য বুঝতে পেরেছি।
আরনাড বাউচেজ

1
+1 টি। লোকেরা টিসিপি সংযোগ স্থাপনে ভুলে যাওয়ার প্রবণতাতে একটি সিএন / এসি / এসি জড়িত থাকে এবং কী এক্সচেঞ্জের জন্য টিএলএসকে আরও বৃত্তাকার ভ্রমণের প্রয়োজন হয়।
কুইসভার

1
পরীক্ষা @ArnaudBouchez en.wikipedia.org/wiki/HTTP_persistent_connection#HTTP_1.1 ওয়েবসকেট দীর্ঘ চান এবং hackish (দীর্ঘ পোলিং এবং অন্যান্য বিকল্প মত) নয় যতটা খোলা থাকে।
কাওড

-5

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

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