এইচটিটিপি বিপরীত প্রক্সিগুলি কি সাধারণত প্রক্সী সংযোগের ক্লায়েন্টের দিকে HTTP কিপ-অ্যালাইভ সক্ষম করে এবং সার্ভারের পাশে নয়?


30

এইচপিপ্রক্সিতে ক্লায়েন্টের পক্ষের (ক্লায়েন্ট <-> এইচপি প্রক্সি) এইচটিটিপি রাখার ক্ষমতা রাখার ক্ষমতা রয়েছে তবে এটি সার্ভার সাইডে অক্ষম করুন (HAProxy <-> সার্ভার)।

আমাদের কিছু ক্লায়েন্ট স্যাটেলাইটের মাধ্যমে আমাদের ওয়েব সেবার সাথে সংযোগ স্থাপন করে যাতে বিলম্বটি ~ 600ms এবং আমি মনে করি যে চালিয়ে যেতে সক্ষম করার মাধ্যমে এটি কিছুটা গতি বাড়িয়ে তুলবে। আমি কি সঠিক?

এটি কি এনগিনেক্স দ্বারা সমর্থিত? অন্যান্য সফ্টওয়্যার এবং হার্ডওয়্যার লোড ব্যালান্সারগুলিতে এটি কি বহুল প্রয়োগিত বৈশিষ্ট্য? HAProxy ছাড়া আর কি?

উত্তর:


43

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

সঠিক। এইচটিটিপি ক্লায়েন্টের পাশে রাখুন, তবে সার্ভারের পাশে নেই।

কেন?

আপনি যদি কিছু বিশদ বিভক্ত করেন তবে আপনি কেন তা সুবিধা হচ্ছেন তাড়াতাড়ি দেখতে পাবেন। এই উদাহরণের জন্য, চলুন আমরা ভেবে দেখি যে আমরা একটি পৃষ্ঠা www.example.com লোড করছি এবং সেই পৃষ্ঠাতে 3 টি চিত্র রয়েছে, img [1-3] .jpg।

ব্রাউজার কোনও কীপ-অ্যালাইভ ছাড়াই কোনও পৃষ্ঠা লোড করছে

  1. ক্লায়েন্ট 80 পোর্টে www.example.com- এ একটি টিসিপি সংযোগ স্থাপন করে
  2. ক্লায়েন্ট "/" এর জন্য একটি HTTP জিইটি অনুরোধ করে
  3. সার্ভার ইউআরআই "/" এর HTML সামগ্রী প্রেরণ করে (এতে 3 টি চিত্রের রেফারেন্সে এইচটিএমএল ট্যাগ অন্তর্ভুক্ত রয়েছে)
  4. সার্ভার টিসিপি সংযোগটি বন্ধ করে দেয়
  5. ক্লায়েন্ট 80 পোর্টে www.example.com- এ একটি টিসিপি সংযোগ স্থাপন করে
  6. ক্লায়েন্ট "/img1.jpg" এর জন্য একটি HTTP জিইটি অনুরোধ করে
  7. সার্ভার চিত্রটি প্রেরণ করে
  8. সার্ভার টিসিপি সংযোগটি বন্ধ করে দেয়
  9. ক্লায়েন্ট 80 পোর্টে www.example.com- এ একটি টিসিপি সংযোগ স্থাপন করে
  10. ক্লায়েন্ট "/img2.jpg" এর জন্য একটি HTTP জিইটি অনুরোধ করে
  11. সার্ভার চিত্রটি প্রেরণ করে
  12. সার্ভার টিসিপি সংযোগটি বন্ধ করে দেয়
  13. ক্লায়েন্ট 80 পোর্টে www.example.com- এ একটি টিসিপি সংযোগ স্থাপন করে
  14. ক্লায়েন্ট "/img3.jpg" এর জন্য একটি HTTP জিইটি অনুরোধ করে
  15. সার্ভার চিত্রটি প্রেরণ করে
  16. সার্ভার টিসিপি সংযোগটি বন্ধ করে দেয়

লক্ষ্য করুন যে সেখানে 4 টি পৃথক টিসিপি সেশন স্থাপন করা হয়েছে এবং তারপরে এটি বন্ধ রয়েছে।

ব্রাউজার কীপ-অ্যালাইভ সহ একটি পৃষ্ঠা লোড করছে

এইচটিটিপি কিপ-অ্যালাইভ একের পর এক একাধিক এইচটিটিপি অনুরোধ সরবরাহ করার জন্য একটি টিসিপি সংযোগের অনুমতি দেয়।

  1. ক্লায়েন্ট 80 পোর্টে www.example.com- এ একটি টিসিপি সংযোগ স্থাপন করে
  2. ক্লায়েন্ট "/" এর জন্য একটি HTTP জিইটি অনুরোধ করে এবং সার্ভারকে এটি একটি এইচটিটিপি কিপ-অ্যালাইভ সেশন করতে বলে make
  3. সার্ভার ইউআরআই "/" এর HTML সামগ্রী প্রেরণ করে (এতে 3 টি চিত্রের রেফারেন্সে এইচটিএমএল ট্যাগ অন্তর্ভুক্ত রয়েছে)
  4. সার্ভার টিসিপি সংযোগটি বন্ধ করে না
  5. ক্লায়েন্ট "/img1.jpg" এর জন্য এইচটিটিপি অনুরোধ জানায়
  6. সার্ভার চিত্রটি প্রেরণ করে
  7. ক্লায়েন্ট "/img2.jpg" এর জন্য এইচটিটিপি অনুরোধ জানায়
  8. সার্ভার চিত্রটি প্রেরণ করে
  9. ক্লায়েন্ট "/img3.jpg" এর জন্য এইচটিটিপি অনুরোধ জানায়
  10. সার্ভার চিত্রটি প্রেরণ করে
  11. সার্ভার টিটিসিপি সংযোগটি বন্ধ করে দেয় যদি তার এইচটিটিপি কিপ-অ্যালাইভ সময়সীমার মধ্যে আর কোনও HTTP অনুরোধ না আসে

খেয়াল করুন যে কিপ-অ্যালাইভের সাথে, কেবলমাত্র 1 টিসিপি সংযোগ স্থাপন করা হয়েছে এবং শেষ পর্যন্ত বন্ধ হয়ে গেছে।

কিপ-অ্যালাইভ আরও ভাল?

এর উত্তর দেওয়ার জন্য আপনাকে বুঝতে হবে ক্লায়েন্ট এবং সার্ভারের মধ্যে একটি টিসিপি সংযোগ স্থাপন করতে কী লাগে। একে টিসিপি 3-ওয়ে হ্যান্ডশেক বলে।

  1. ক্লায়েন্ট একটি এসওয়াইএন (ক্রোনাইজ) প্যাকেট প্রেরণ করে
  2. সার্ভার একটি এসওয়াইএন (ক্রোনাইজ) এসকে (নওগ্রেশন), এসওয়াইএন-এসিকে ফেরত পাঠায়
  3. ক্লায়েন্ট একটি এসকে (এখনকারমেন্ট) প্যাকেট প্রেরণ করে
  4. টিসিপি সংযোগ এখন ক্লায়েন্ট এবং সার্ভার উভয়ই সক্রিয় বিবেচনা করে

নেটওয়ার্কগুলিতে বিলম্ব রয়েছে, সুতরাং 3-উপায় হ্যান্ডশেকের প্রতিটি পদক্ষেপে একটি নির্দিষ্ট পরিমাণ সময় লাগে। বলুন যে ক্লায়েন্ট এবং সার্ভারের মধ্যে 30 মাইল রয়েছে, টিসিপি সংযোগ স্থাপনের জন্য প্রয়োজনীয় আইপি প্যাকেটগুলি পিছনে পিছনে প্রেরণের অর্থ একটি টিসিপি সংযোগ স্থাপনে 3 x 30ms = 90ms লাগে।

এটি খুব বেশি শোনাচ্ছে না, তবে আমরা যদি আমাদের মূল উদাহরণে বিবেচনা করি তবে আমাদের 4 টি পৃথক টিসিপি সংযোগ স্থাপন করতে হবে, এটি 360 মিমি হয়ে যায়। 30 মিনিটের পরিবর্তে ক্লায়েন্ট এবং সার্ভারের মধ্যে বিলম্ব যদি 100 মিমি হয়? তারপরে আমাদের 4 টি সংযোগ স্থাপনে 1200 মিমি নিচ্ছে।

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

  1. 1 টিসিপি সংযোগ স্থাপন করতে 3 x বিলম্বিততা, অর্থাৎ 3 x 100ms = 300ms লাগবে।
  2. আমাদের অবশ্যই এটি পৃষ্ঠাটির জন্য একবার 31 বার এবং পৃষ্ঠায় রেফারেন্স করা প্রতিটি ফাইলের জন্য আরও 30 বার করতে হবে। 31 x 300ms = 9.3 সেকেন্ড।

ওয়েবপৃষ্ঠা লোড করতে টিসিপি সংযোগ স্থাপনে 9.3 সেকেন্ড ব্যয় করেছে যা 30 টি অন্যান্য ফাইল উল্লেখ করে। এবং এটি এইচটিটিপি অনুরোধগুলি প্রেরণ এবং প্রতিক্রিয়াগুলি পেতে ব্যয় করা সময়ও গণনা করে না।

এইচটিটিপি কিপ-অ্যালাইভ সহ, আমাদের কেবলমাত্র 1 টিসিপি সংযোগ স্থাপন করা দরকার, যা 300 মিমি লাগে।

যদি এইচটিটিপি কিপ-অ্যালাইভটি দুর্দান্ত হয় তবে সার্ভারের পাশাপাশি এটি ব্যবহার করবেন না কেন?

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

যদিও এটি শুধুমাত্র অর্ধেক কারণ। একটি HTTP সার্ভার প্রতিটি ক্লায়েন্ট সংযোগের জন্য একটি নির্দিষ্ট পরিমাণের মেমরি বরাদ্দ করে। কিপ-অ্যালাইভের সাহায্যে এটি সংযোগটি জীবিত রাখবে এবং এক্সটেনশনের মাধ্যমে সার্ভারে ক্যাপ-অ্যালাইভের সময়সীমা শেষ না হওয়া পর্যন্ত এটি একটি নির্দিষ্ট পরিমাণ মেমরি ব্যবহার করবে, যা সার্ভারের কনফিগারেশনের উপর নির্ভর করে 15 বছরের বেশি হতে পারে ।

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

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


5
গ্রেডের দুর্দান্ত ব্যাখ্যার জন্য কুডোস, যে আমাকে এই প্রশ্ন করেছে তার জবাবের জন্য আমি কখনই যথেষ্ট সময় ব্যয় করিনি, এবং আমি অবশ্যই এখন খুব স্পষ্ট প্রতিক্রিয়া হিসাবে এই পোস্টটির লিঙ্কটি
রাখব:

2
প্রক্সি এবং ব্যাকএন্ডের মধ্যে সংযোগটি https থাকলে সার্ভারের পাশে কিপলাইভের জন্য কোনও সুবিধা থাকতে পারে?
অ্যাভোহন 13

"একটি এইচটিটিপি সার্ভার প্রতিটি ক্লায়েন্ট সংযোগের জন্য একটি নির্দিষ্ট পরিমাণের মেমরি বরাদ্দ করে" হ্যাঁ, তবে লোড-ব্যালেন্সার প্রতি এই সংযোগগুলির (?) কয়েকজনই থাকবে? ইন্টারনেটে প্রতি ক্লায়েন্টের জন্য একটিও নয় (?)
রায়েডওয়াল্ড

@ রেয়েডওয়াল্ড, যদি আপনার লোড ব্যালান্সার প্রতিটি ব্যাকড সার্ভারের সাথে একক এইচটিটিপি সংযোগ তৈরি করতে সীমাবদ্ধ থাকে তবে আপনার খুব খারাপ সময় হবে। :-)
ThatGraemeGuy

7

Nginx উভয় পক্ষের বেঁচে থাকার সমর্থন করে।


আপনি কি বলবেন যে জীবিত রাখা ব্যাক-এন্ডের জন্য দরকারী, যদি প্রক্সি এবং ব্যাক-সেকেন্ডের মধ্যে বিলম্ব ছিল? এছাড়াও কোন সর্বোত্তম সংখ্যাকে জীবিত সংযোগের অনুমতি দেওয়া হবে?
সিএমসিডিগ্র্যাগনকাই

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

আমি এটি সমাধান করার একটি সমীকরণ খুঁজে পেতে আশা করি!
সিএমসিডিগ্রাগনকাই

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