Я будую пакет аналітики, і вимоги проекту вказують, що мені потрібно підтримувати 1 мільярд звернень на день. Так, "мільярд". Іншими словами, не менше 12 000 ударів за секунду витримано, і бажано, щоб щось лопнуло. Я знаю, що мені знадобиться кілька серверів для цього, але я намагаюся отримати максимальну продуктивність з кожного вузла, перш ніж "кидати на нього більше обладнання".
Зараз я завершив і оптимізовану частину відстеження звернень. Я майже просто зберігаю запити прямо в Redis (для подальшої обробки з Hadoop). Додаток - Python / Django з рушницею для шлюзу.
Мій сервер Rackspace 2,0 Гб Ubuntu 10,04 (не виробнича машина) може обслуговувати близько 1200 статичних файлів в секунду (орієнтований за допомогою Apache AB проти одного статичного активу). Для порівняння, якщо я поміняю статичне посилання на файл зі своїм відстеженням, я все одно отримую близько 600 запитів в секунду - я думаю, це означає, що мій трекер добре оптимізований, тому що це лише на 2 рази повільніше, ніж обслуговувати той же статичний актив неодноразово.
Однак, коли я орієнтуюся на мільйони звернень, я помічаю кілька речей -
- Ніякого використання диска - цього очікується, оскільки я вимкнув усі журнали Nginx, а мій спеціальний код не робить нічого, крім збереження деталей запиту в Redis.
- Постійне використання пам’яті - Імовірно, завдяки управлінню пам’яттю Редіса моє використання пам’яті поступово підніметься вгору, а потім відкинеться назад, але це ніколи не було моїм вузьким місцем.
- Навантаження системи коливається в межах 2-4, система все ще реагує навіть на моїх найважчих орієнтирах, і я все ще можу вручну переглядати http://mysite.com/tracking/pixel з невеликою видимою затримкою, поки мій (інший) сервер виконує 600 запитів на кожен другий.
- Якщо я проведу короткий тест, скажімо, 50 000 звернень (займає близько 2 м), я отримую стійкі надійні 600 запитів в секунду. Якщо я запускаю більш тривалий тест (пробував до 3,5 м), то мій р / с знижується до приблизно 250.
Мої запитання -
а. Схоже, я ще максимізував цей сервер? Чи є статичні файли nginx зі швидкістю 1200 / с порівнянні з результатами інших?
б. Чи є загальні налаштування nginx для таких додатків з великим обсягом? У мене на робочих нитках встановлено 64, а в робочих потоках - 8, але налаштування цих значень не дуже допомагає та не шкодить мені.
c. Чи є параметри рівня linux, які можуть обмежувати мої вхідні з'єднання?
г. Що може спричинити зниження моєї продуктивності до 250r / s при тривалих тестах? Знову ж, пам’ять не збільшується під час цих тестів, а використання жорсткого диска дорівнює нулю.
Дякую заздалегідь, всі :)
EDIT Ось моя конфігурація nginx - http://pastie.org/1450749 - це в основному ваніль, з очевидним жиром обробленим.