ওয়েব সকেটগুলি লোডবালেন্সিং


104

ভারসাম্য সকেটগুলি কীভাবে লোড করা যায় সে সম্পর্কে আমার একটি প্রশ্ন আছে।

আমার একটি সার্ভার রয়েছে যা ওয়েব সকেটগুলিকে সমর্থন করে। ব্রাউজারগুলি আমার সাইটে সংযুক্ত হয় এবং প্রত্যেকে এতে একটি ওয়েব সকেট খোলে www.mydomain.com। এইভাবে, আমার সামাজিক নেটওয়ার্ক অ্যাপ্লিকেশন ক্লায়েন্টদের কাছে বার্তাগুলি ঠেলাতে পারে।

Ditionতিহ্যগতভাবে, কেবলমাত্র HTTP অনুরোধগুলি ব্যবহার করে, আমি দুটি ওয়েব সার্ভারের সামনে একটি দ্বিতীয় সার্ভার এবং একটি লোড ব্যালেন্সার যুক্ত করে স্কেল করব।

ওয়েব সকেটের সাথে, সংযোগটি ওয়েব সার্ভারের সাথে সরাসরি হওয়া উচিত, লোড ব্যালান্সার নয়, কারণ যদি কোনও মেশিনের 64৪ কে খোলা পোর্টগুলির শারীরিক সীমা থাকে এবং ক্লায়েন্টরা লোড ব্যালান্সারের সাথে সংযোগ স্থাপন করে, তবে আমি সমর্থন করতে পারি না 64k এরও বেশি সমকালীন ব্যবহারকারী users

তাহলে আমি কীভাবে করব -

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

  2. একটি রিপল শুরু হ্যান্ডেল? ব্রাউজারটি লক্ষ্য করবে যে ওয়েব সার্ভারটি বন্ধ হয়ে যাওয়ায় সংযোগটি বন্ধ রয়েছে। সংযোগটি পুনরায় খোলার চেষ্টা করার জন্য আমি জাভাস্ক্রিপ্ট কোডটি লিখতে পারি তবে নোডটি কিছু সময়ের জন্য চলে যাবে। সুতরাং আমি অনুমান করি যে আমাকে ব্যবহার করার জন্য পরবর্তী নোডের ঠিকানা জিজ্ঞাসা করতে লোড ব্যালেন্সারে ফিরে যেতে হবে?

  3. প্রাথমিক অনুরোধে লোড ব্যালান্সাররা আপনাকে পুনঃনির্দেশ পাঠানোর বিষয়ে অবাক করেছিলাম, যাতে ব্রাউজারটি প্রাথমিকভাবে অনুরোধ করে www.mydomain.comএবং এতে পুনঃনির্দেশিত হয় www34.mydomain.com। নোড ডাউন না হওয়া পর্যন্ত এটি বেশ ভালভাবে কাজ করে - এবং ফেসবুকের মতো সাইটগুলি এটি করে না। তারা কিভাবে এটা করবেন?



1
এছাড়াও ডিএনএস ভিত্তিক লোডবালেন্সিং বা কোনও পোস্ট ভিত্তিক অর্কেস্টেশন সার্ভার ব্যবহার করার মতো বিকল্প পদ্ধতি রয়েছে। আমি up- এবং প্রতিটি পদ্ধতির মূল্যবান এ সংক্ষেপ করার চেষ্টা করেছি deepstream.io/blog/load-balancing-websocket-connections
wolframhempel

@ ওলফ্রামহেম্পেল লিঙ্কটি মারা গেছে। :-(
এমিল কর্মিয়ার

উত্তর:


94

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

এছাড়াও মনে রাখবেন যে একটি 64k হার্ড সীমা কেবল প্রদত্ত (উত্স) আইপি ঠিকানার জন্য কেবল বহির্গামী টিসিপি / আইপি প্রযোজ্য । এটি আগত টিসিপি / আইপি প্রয়োগ করে না। আমরা পরীক্ষা আছে মোটরসড়ক 2 কোর, 4 গিগাবাইট র্যাম VM- র উপর 200K সক্রিয় সংযোগ সঙ্গে (একটি উচ্চ ক্ষমতা সম্পন্ন WebSocket এর সার্ভার)।

এছাড়াও মনে রাখবেন যে প্রাথমিক ওয়েবস্কট হ্যান্ডশেকের সময় আপনি ঘোষিত HTTP পথে L7 লোড-ব্যালেন্সিং করতে পারেন। সেক্ষেত্রে লোড ব্যালেন্সারকে রাষ্ট্র বজায় রাখতে হবে (কোন সোর্স আইপি-পোর্ট পেয়ারটি কোন ব্যাকএন্ড নোডে যাচ্ছে)। এটি তবুও শালীন সেটআপে লক্ষ লক্ষ সংযোগে স্কেল হবে।

দাবি অস্বীকার: আমি অটোবাহনের মূল লেখক এবং টাভেন্ডোর পক্ষে কাজ করছি।


সুতরাং আমি জাভাস্ক্রিপ্টে আমার জাভাস্ক্রিপ্ট লাইব্রেরিটি লোড ব্যালেন্সার ইউআরএল থেকে লোড করব এবং জাভাস্ক্রিপ্টে ওয়েব সকেট তৈরি করার সময় লোড ব্যালেন্সার ইউআরএল দেব - আপনি ব্রাউজারের কাছে স্বচ্ছ? এটা চমৎকার!
জন স্মিথ

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

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

আমি যখন জাভা ওয়েবসকেটে আরও সংযোগগুলি 5000+ করি তখন এটি মেমরি ছেড়ে দেয় না .... কোনও সমাধান আছে কি?
পুনম প্যাটেল

3

নোট করুন যে আপনার ওয়েবসকেট সার্ভার লজিকটি যদি সকেট.ও সহ নোডেজগুলিতে চলে, আপনি সকেট.ইওকে সিঙ্ক্রোনাইজেশনের জন্য একটি ভাগ করা রেডিস কী / মান স্টোর ব্যবহার করতে বলতে পারেন। এইভাবে আপনাকে লোড ব্যালেন্সার সম্পর্কেও চিন্তা করতে হবে না, ইভেন্টগুলি সার্ভারের উদাহরণগুলির মধ্যে প্রচার করবে।

var io = require('socket.io')(3000);
var redis = require('socket.io-redis'); 
io.adapter(redis({ host: 'localhost', port: 6379 }));

দেখুন: http://sket.io/docs/used-m Multipleple-nodes/

তবে এক পর্যায়ে আমার ধারণা রেডিস আবার বাধা হয়ে দাঁড়াতে পারে ...


2

আপনি পরিদর্শন এবং "রাউটিং কার্যকারিতা" দিয়ে স্তর 7 লোড ভারসাম্য অর্জন করতে পারেন

"স্টিংরে ট্র্যাফিক ম্যানেজার ব্যবহার করে ওয়েবসকেট ট্র্যাফিক কীভাবে পরিদর্শন করা এবং ভারসাম্য বজায় রাখা যায় এবং যখন প্রয়োজন হয়, একই আইপি ঠিকানা এবং বন্দরে প্রাপ্ত ওয়েবস্কটস এবং এইচটিটিপি ট্র্যাফিক কীভাবে পরিচালনা করতে হয় তা দেখুন"। https://splash.riverbed.com/docs/DOC-1451


2
আপনার লিঙ্ক করা তথ্যটি খুঁজে পেতে আমাকে কিছু হতাশ করতে হয়েছিল। ওয়েবব্যাক মেশিনটি আমাকে সেই নিবন্ধটির লাইভ কপি সনাক্ত করতে সহায়তা করেছে: community.pulsesecure.net/t5/Pulse-Secure-vADC/…
উইক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.