হ্যাপ্রোক্সি: উচ্চ লোডের অধীনে বিদ্যমান সেশনগুলি বজায় রাখুন, নতুন আগতদেরকে '503' পরিবেশন করুন


12

শিরোনামে এটি যা বলে তা করার চেষ্টা করছে: উচ্চতর লোডের অধীনে বিদ্যমান সেশনগুলি ধরে রাখুন এবং সদ্য আগত দর্শনার্থীদের জন্য 503-বার্তা সরবরাহ করুন।

সমস্যা: এটি কাজ করে, তবে সেশনগুলি প্রায় 90 সেকেন্ডের বেশি স্থায়ী হয় না।

বর্তমান ফলাফলগুলি আমাকে ভাবছে যে কোনও সময়-নির্ধারিত সেটিংটি আমি অনুপস্থিত রয়েছি কিনা।

উদ্দেশ্য

আমি এখানে হাইপ্রক্সি পাওয়ার চেষ্টা করছি:

  • সীমান্তে সেশনের মোট সংখ্যা একটি নির্দিষ্ট প্রান্তিকের নীচে থাকলে নতুন সেশনের জন্য অনুরোধগুলি ব্যাকএন্ড -001 এ প্রেরণ করুন।
  • সীমান্তে সেশনগুলির সংখ্যা যখন প্রান্তিকের উপরে হয় তখন নতুন সেশনে 503 ত্রুটি সরবরাহ করে
  • সেশনের সংখ্যা প্রান্তিক ছাড়িয়ে গেলেও বিদ্যমান সেশনের জন্য অনুরোধগুলিকে অনুমতি দিন

এইভাবে, বহু-পদক্ষেপের ফর্ম পূরণের মাঝামাঝি দর্শনার্থীরা 503-ত্রুটি দ্বারা অবাক হবে না এবং নতুন দর্শকদের বলা যেতে পারে "দয়া করে পরে ফিরে আসুন কারণ আমরা এখনই সত্যই ব্যস্ত"।

সেটআপ

সেটআপটি নিম্নরূপ:

            {visitors}
                ↓ 
            [haproxy]
                ↓ 
[rails app on unicorn served by nginx]   (right now just one 
                                            backend: 'backend-001')

বর্তমান পদ্ধতির

উপরেরটি অর্জনের জন্য, আমি নীচে কনফিগারেশন ব্যবহার করছি।

পরীক্ষাটি সহজ করার জন্য এটি একটি খুব কম সীমা (প্রথম প্রান্তে 10 টি সংযোগ (fe_conn জিটি 10)) পরীক্ষার জন্য।

সার্ভারটিকে কিছু বোঝার নিচে রাখার জন্য, আমি নীচে httperf ব্যবহার করছি:

httpsf - হোগ - সার্ভার স্টেজিং.ম্যাচাইন.টल्ड --উরি / ডু সোম_থিংস - মূল্য = 500,10,30 - হার 2

global
    daemon
    maxconn 10000

defaults
    mode        http
    timeout connect 6s
    timeout client  60s
    timeout server  60s
    balance roundrobin
    option http-server-close

frontend http-in
    bind [PUBLIC_IP]:80

    default_backend backend-001

    acl too_many fe_conn gt 10
    use_backend b_too_many if too_many

backend backend-001
    fullconn 10
    appsession _session_id len 128 timeout 7200s

    cookie SERVERID insert maxidle 7200s
    server Server1 127.0.10.1:80 cookie backend-001 check

backend b_too_many
    errorfile 503 /var/www/50x.html

সমস্যা

উপরে উল্লিখিত হিসাবে, সমস্যাটি হ'ল: এটি প্রায় কাজ করে তবে সেশনগুলি প্রায় 90 সেকেন্ডের বেশি স্থায়ী হয় না।

আপনি যদি প্রায় ক্লিক করতে থাকেন তবে 10 সেশন ব্যস্ত থাকাকালীন আপনার সেশনটি রাখতে হবে।

অন্য কোনও ব্রাউজারের উদাহরণ সহ সার্ভারে একটি পৃষ্ঠা খোলার চেষ্টা করলে আপনি 503 ত্রুটি পাবেন।

সুতরাং, দেখে মনে হচ্ছে আমি প্রায় আছি। কারও কি ধারণা আছে যে সংক্ষিপ্ত অধিবেশনটির কারণ হতে পারে?

এবং বিশেষত আমি কীভাবে এটি ঠিক করতে পারি :)

(সম্পাদনা করুন: 'সার্ভার'-লাইন থেকে 'ওজন 1 ম্যাক্সকন 10' সরানো হয়েছে, প্রাসঙ্গিক নয় এবং বিভ্রান্ত হতে পারে) (দ্বিতীয়টি সম্পাদনা করুন: সামনের দিকে প্রান্তে '10 সেশনগুলি 'ফ্রন্ট-এন্ডে 10 সংযোগে')


একটি নির্বোধ প্রশ্ন হতে পারে - এনগিনেক্সে কিপ-লাইভ সেটিংটি কী? স্পষ্টতই এটি 75 এর ডিফল্ট - এটি কি সমস্যা হতে পারে?
আইডন কেনে

উত্তর:


4

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

আপনি যে 90 সেকেন্ড অবশ্যই পর্যবেক্ষণ করছেন তা হ'ল ব্রাউজারটি নিষ্ক্রিয় সংযোগের জন্য লাইভ টাইমআউট।

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

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


1
ধন্যবাদ ধন্যবাদ! এটি অনেকটা পরিষ্কার হয়েছে। আমি এখন এটি (অন্যান্য জিনিসের মধ্যে) hdr_sub (তাই, "এইচডিআর_সুব (কুকি) SERVERID = ব্যাকএন্ড -001") এর সাথে ব্যাকএন্ড-কুকি যাচাই করে কাজ করছি। কাজ শেষ হয়ে গেলে আমি একটি ওয়ার্কিং কনফিগারেশন পোস্ট করব।
অপেনুটজে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.