Будучи разработчиком среднего уровня, который пришел из ИТ -фона, мне всегда нравилось возможность разобрать приложение в рельсах, а затем быстро развернуть на моем собственном сервере. Существует множество отличных уроков о том, как публиковать приложение Rails для производства на одном сервере. Но когда я впервые читал эти учебники, у меня всегда оставался один вопрос. Как я узнаю, что у меня есть все, чтобы справиться с ростом?
В конечном счете, этот вопрос заставил меня просеивать документацию для Phusion Passenger в течение нескольких дней моей жизни, только чтобы открыть для себя смутные советы по оптимизации. Формулы оптимизации были хорошими, но не великими. После того, как я взял мой первый проект с одного сервера с использованием всего 3000 посетителей в день и практически без использования базы данных, до сбалансированного нагрузки стека из 3 серверов приложений, отдельного сервера базы данных, который серверы более 8000 посетителей в день, в которых общие среды имеют общие среды. На всех серверах, и теперь есть критически важные для бизнеса приложения, я решил, что пришло время поделиться некоторыми советами и рекомендациями.
Ну, как и все в разработке, это зависит Анкет Гауф, я ненавижу эту неопределенность. Итак, вот несколько вещей, которые помогут понять определение размера сервера.
Примечание Я делаю некоторые предположения здесь. Во-первых, вы используете Phusion Passenger или аналогичный не Multithreaded Application Server (я смотрю на вас, пользователей Unicorn). Если вы используете PUMA, NGINX UNIT или аналогичный многопоточный сервер приложений, вы можете увидеть лучшую производительность с меньшими запасными границами для высокого спроса.
Сколько памяти вам понадобится?
Я ненавидел пытаться понять это. Это очень разочаровывает, когда вы впервые начинаете работать с собственным сервером, потому что вы на самом деле не знаете. Я также обнаружил, что из -за множества проб и (болезненных) ошибок, что определенные услуги в рельсах раскручивают всю копию приложения (я смотрю на вас действие).
Итак, вот некоторая информация о размерах, которую я нашел чрезвычайно полезной.
Одно приложение Rails, выполняющее базовые функции CRUD, обычно занимает 100-150 МБ памяти, за экземпляр. Я видел, что они поднимаются до 500 МБ, когда они находятся под тяжелыми нагрузками (например, скребки веб -сайтов, делающие сотни или тысячи запросов в секунду).
ActionCable разворачивает весь экземпляр применения рельсов, который в дополнение к вашему основному приложению. Использование ActionCable? Это означает, что одно приложение с ActionCable займет 200 МБ-300 МБ памяти, чтобы запустить «единственный» экземпляр вашего приложения. Пассажир по умолчанию запускает 3 экземпляра вашего приложения. Так что это легко 600 МБ-900 МБ памяти о минимальном использовании.
Типичный экземпляр Rails может обрабатывать сотни или даже несколько тысяч запросов в секунду. Я бросаю эту лакомство информации, потому что, увидев цифры выше, вы можете быть похожи на меня и у вас есть паника Что, если у меня закончится память, потому что я получаю всплеск трафика? Не напрягайся об этом слишком много.
Формула для определения общей памяти сервера необходима.
Теперь, когда вы знаете грубые значения, возьмите эту удобную формулу и примените ее на каждую стадию вашего приложения, который вы хотите на своем сервере.
TotalApplicationInstances *
В вышеупомянутой формуле TotalApplicationInstances
должно быть количество услуг Rails, которые будут выполняться, включая каждый экземпляр ActionCable.
Например: Типичное пассажирское приложение будет иметь 3 основных экземпляра, плюс 3 дополнительных сервиса для ActionCable. Так что наша формула теперь была бы: 6 *
Это означает, что мы должны предположить, что Rails нуждается в 1350 МБ памяти, чтобы функционировать, когда при тяжелой нагрузке равномерно во всех случаях на каждом отдельном сервере. Это около 1000 запросов в минуту с базовым рендерингом CRUD и View со средним приложением, оптимизированным производительностью.
Обычно мне нравится иметь в 2 раза память приложения Rails, доступную для всех системных процессов. Так что это означает, что я обычно стремлюсь к цифровой капельке с цифровым океаном 4 ГБ, которая имеет 2 виртуальных процессора примерно за 20 долларов в месяц. Неплохо!
Теперь, если я делаю кластер для фактического производственного сайта, у меня будет это распространение на 3 серверах, доведя ежемесячную стоимость примерно до 60 долларов за мои серверы.
На самом деле, именно так я настроил свой последний проект. 1 Цифровой океан управлял балансировщиком нагрузки, этот круглый робин распространяет трафик на мои веб-серверы (15 долларов в месяц, это не сложно). У меня есть 3 сервера приложений, которые находятся прямо на 30% или менее использовании процессора и использование памяти менее 40% в часы пик дня (это примерно с сотнями активных пользователей на нашем сайте за раз), а затем у нас есть один управляемый База данных Postgres, к которой подключаются все серверы приложений. База данных радикально негабаритная, работающая примерно в 60 долларов в месяц.
Таким образом, примерно за 150 долларов в месяц, мое заявление обслуживает более 180 000 посетителей веб -сайта, а мои серверы включают как производственные, так и постановтные среды на одном кластере (конечно, разделенный). Неплохо! Это не мое дело, но я могу сказать вам, что в нем работают 10 штатных сотрудников с еще одним дюжиной подрядчиков, почти полных времени.
Для тех, кто пытается обернуть свою голову по затратам и масштабированию инфраструктуры, я надеюсь, что это действительно поможет осветить, насколько мощным может быть небольшой серверный кластер! Не бойтесь своей инфраструктуры, примите ее:)
Оригинал: «https://dev.to/seesethcode/how-many-servers-do-you-need-devops-for-beginners-3dgb»