У меня есть 3 экземпляра приложения на основе codeigniter на двух отдельных серверах.
Сервер 1.
Первый экземпляр - приложение, второй - API отдыха, оба используют одну и ту же базу данных. (Я знаю, что нет смысла иметь два экземпляра на одной машине, кроме чистоты, и именно поэтому у меня это так).
Сервер 2.
Этот сервер содержит только API остальных с целым набором функций обработки данных php. Я называю этого работника сервера, потому что это то, что он только делает.
Этот сервер работает как конечная точка для многих служб API, с которыми я соединяюсь.
Таким образом, все, что делает этот сервер в качестве первой функции - получает запросы от приложения, иногда он обрабатывает эти запросы раньше всего.
Затем отправляет запросы в службу API. Процесс завершен, этот сеанс окончен.
Вскоре служба API отвечает результатами, когда этот сервер принимает и обрабатывает данные, а затем отправляет результат в приложение.
Приложение порой сильно загружено большим количеством очень простых SQL-запросов, по большей части вставка / обновление для одной таблицы. Количество отправленных запросов также сведено к минимуму, просто потому, что по большей части я отправляю данные как можно больше запросов в одном. Я называю этот массовый запрос.
То, что очень тяжело, так это количество ответов, которые я получаю, я могу получить до 1000 ответов на один запрос в течение нескольких секунд (я не могу минимизировать это, потому что мне нужен каждый), а затем каждый ответ, который я за get также следуют еще два идентичных ответа, просто чтобы удостовериться, что я его получил, и которые я пригрозил как дубликат, как только смогу, и остановил этот процесс.
Затем я обрабатываю каждый ответ с помощью php (не слишком тяжелый, просто сопоставляя массивы результатов) и отправляю его в мой оставшийся API на сервере приложений для обновления таблиц приложений.
Теперь, когда я запускаю, скажем, 1 запрос, который возвращает 1000 ответов, приложение обрабатывает данные нормально с правильными результатами, но сервер в настоящее время практически недоступен для других пользователей.
Все работает на (LAMP) Ubuntu 16.04 с mysql и apache.
Фреймворк - новейший кодовый указатель.
В настоящее время мои настройки ...
... для сервера приложений
2 виртуальных ЦП
4 ГБ ОЗУ
... для рабочего API сервера
1 виртуальных ЦП
1 ГБ ОЗУ
Я знаю, что настройка сервера очень слабая, и это точно узкие места. Но это было только на стадии разработки.
Сейчас я перехожу к производству и хотел бы услышать мнения о том, как лучше всего к этому подойти.
Сначала я программист, затем администратор сервера.
Так что я обсуждал вопрос о переходе на NGINX, думаю, я определенно пойду с php-fpm, может быть, MariaDB, но я читаю об управлении потоками, это важно. Это приложение не будет работать тяжело все время, вероятно, 50/50, поэтому я думаю, что из-за этого я все равно не смогу установить его оптимальным для всех времен, и в итоге может привести к снижению производительности.
Тогда, вероятно, придется умножить серверы и настроить балансировку нагрузки, а также высокую доступность.
Не уверен во всем этом.
Я не думаю, что простое обновление серверов до максимума поможет. Я могу использовать до 64 ГБ ОЗУ и 32 виртуальных ЦП на сервер.
Могу ли я услышать ваше мнение, пожалуйста?
Может поделиться опытом?
Ссылки на ресурсы, если есть хорошие?
Большое спасибо. Я надеюсь, что вы можете мне помочь.
Спасибо.