Планиране на натоварването на сървъра
Ексклузивни ИТ новини, рецензии и интервюта
Планиране на натоварването на сървъра
Тестването на натоварване показа, че сървърът може да обработва 10 заявки в секунда. Означава ли това, че на практика сървърът ще издържи на такова натоварване в Интернет?
В повечето случаи отговорът на този въпрос е отрицателен. Нека разгледаме по-отблизо защо.
Привидно проста задача
Даден сървър, синхронно обработка на заявки от Интернет в една нишка. Тези. сървърът може или да обработва една заявка наведнъж, или да чака нови заявки. Заявките се поставят на опашка, ако сървърът в момента е зает с обработка на друга заявка. Времето за обработка на една заявка е 100 ms.
Как така? В крайна сметка е очевидно, че за една секунда сървърът може да обработи последователно 10 заявки. Откъде идва тогава безкрайността? Факт е, че средното и равномерно натоварване са „две големи разлики“. Средното натоварване на сървъра може да бъде представено като процес на Поасон. Това означава, че в началото на първата секунда могат да дойдат наведнъж 100 заявки, а през следващите 9 секунди - нито една.
В резултат на това има 10 заявки в секунда за интервал от 10 секунди със средна сума на времето за изчакване (1.99)/100 * 100 ms = 4,95 секунди. С увеличаване на разглеждания интервал се увеличава и средното време за изчакване. Ако разгледаме средното време за изчакване на безкраен интервал от време, то то също клони към безкрайност.
Нека разгледаме други опции. Очевидно е, че при средно натоварване над 10 заявки в секунда сървърът няма да може да обработва ненужни заявки, което ще доведе до безкрайно увеличаване на опашката за изчакване на заявките.
Какво се случва, ако натоварването е под максимално допустимото? Например каква би била средната латентност при 95% натоварване, т.е. за нашия случай 9,5 заявки в секунда? Мислите за 0ms или нещо близко до това? В края на краищата, при такова натоварване сървърът трябва да е на празен ход и да чака заявки 5% от времето си.
Бързам да ви разстроя отново - средното време за изчакване в този случай ще бъде равно на 950 ms, т.е. 9,5 пъти времето, необходимо за обработка на самата заявка! Продължавай. Нека се опитаме да познаем латентността при натоварване от 90%. Не, изобщо не 900 ms, а 450 ms. Интересно.
И при какъв товар средното време за изчакване ще бъде равно на времето, необходимо за обработка на заявката? С други думи, при какво средно натоварване ще бъде средното време за реакция от сървъра 200 ms (100 ms изчакване + 100 ms обработка)? Точният отговор е 66.666. %! Дори и с една заявка в секунда, средната латентност няма да бъде нула, а някъде около 5,56 ms.
Ние не ти вярваме. Откъде идват такива странни цифри?
Числата са получени експериментално, след което е изведена формулата.
Ето една много проста функция, написана на питон, което се използва за симулиране на натоварване на сървъра и изчисляване на средната латентност.
И тук можете да проверите автентичността на горните цифри и да видите как заявките_броят влияят на точността на изчисленията. По същото време питон практика.
След като бяха получени експерименталните данни, оставаше да отговаря на формулата.
С load_factor = 1, нашата функция клони към безкрайност. Това означава, че трябва да имаме дроб, в чийто знаменател има коефициент, стремящ се към нула при load_factor = 1. Тази роля е подходяща (1 - load_factor). Продължавай. С load_factor = 0, нашата функция е нула. Това означава, че числителят на фракцията трябва да има коефициент, равен на нула, когато load_factor = 0. Очевидно това е така load_factor.