|
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
|
|
Не падающий сервер14.01.2015, 14:40. Показов 4788. Ответов 84
Метки нет (Все метки)
Собираюсь писать сервер, который должен выдерживать ~100 запросов в секунду
Каждый запрос будет обращаться к бд раза 3-4, писать в файл и отдавать небольшой(пару строк) ответ. Писал однажды маленький чатик по технологии comet, когда скрипт висел в памяти, пока в бд не произойдет изменение. И получалось, если больше 2 человек пользовались этим чатом, то сайт падал. Он у меня был на бесплатном хосте radyx, но меня все равно это насторожило. Прошу объяснить технологию, как написать не падающий сервер. И несколько вопросов Возможно ли хранить массив в памяти, который будет доступен каждый раз, при выполнении скрипта? Что бы уменьшить количество обращений в бд. Какие примерно нужны параметры у хостинга, под мои запросы? и сколько такой хостинг может стоить? обращаться к серверу будут только из СПб. Есть ли смысл искать хостинг, расположенный в СПб, чтобы ускорить процесс доступа?
0
|
|
| 14.01.2015, 14:40 | |
|
Ответы с готовыми решениями:
84
падающий снег Падающий снег падающий мяч |
|
Native x86
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
||||
| 14.01.2015, 14:57 | ||||
|
1
|
||||
|
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
|
||||
| 14.01.2015, 16:36 | ||||
Сообщение было отмечено spydark91 как решение
РешениеВы пишите сервер. Он всегда запущен. Вы можете хранить в памяти всё что угодно и всегда сможете к этой памяти обратится, однако PHP не обладает нормальной мультипоточностью, поэтому все усложняется и тут есть несколько вариантов: 1. Писать всё в один поток. Затея на самом деле неплохая, если сам запрос обрабатывается достаточно быстро и более 1 ядра для работы не требуется (100 запросов/сек, следовательно 1 запрос должен обрабатываться быстрее чем 0.01 сек, что вполне реалистично). Но нужно следить за кодом, - вводить буферизацию ввода/вывода, во избежание подвисания скрипта на чтении запроса или выдаче ответа. При этом следует держать в уме, что с масштабированием этого возникнут проблемы. 2. Запускать несколько процессов, используя например pcntl_fork, - тогда мы можем обрабатывать данные в несколько потоков, однако т.к. у нас несколько процессов то и память у них разная. В этом случае чем хранить в памяти, - лучше кэшировать в memcached. Это наиболее популярный и стабильный подход в таких задачах. Еще лучше, - в качестве балансера использовать какой-нибудь haproxy и просто запускать несколько экземпляров сервера. 3. Использовать http://php.net/pthreads , подвох в том, что проект еще сыроват, несмотря на то, что уже не первый год разрабатывается. Лично у меня не удалось с его помощью написать стабильное приложение: оно вечно вылетало с сегфолтами, возможно даже не из-за сырости расширения, а из-за неправильной работы с блокировками в коде. Соответственно это наиболее сложный подход, но в перспективе он дает наиболее эффективное решение за счет честного трединга. Однако если учитывать падение курса рубля, то скорее всего русские сервисы будут дешевле. Однако я не очень доверяю нашим русским коллегам, - как правило количество раздолбайства просто поражает. Например какой-нибудь процесс запустит у тебя на сервере форк-бомбу (ну подумаешь кто-то ошибся когда выпускал обновление, бывает..), - тогда придется злая штука OOM Killer (если вы его не выключите, чего лучше не делать), которая может заодно прихлопнуть и ваш скрипт. Соответственно могут быть разные ситуации из-за которых скрипт завершит свою работу несколько неожиданно и с этим нужно жить и корректно обрабатывать, для решения этой проблемы рекомендую поставить supervisord для запуска демона сервера. Второе, чем нужно заморочится - это архитектура самого сервера принимающего и обрабатывающего запросы. Основные варианты я перечислил выше. На самом деле, скорее всего, - гораздо дешевле будет использовать nginx и работать с HTTP-запросами, однако если присутствует интерес академический - пишите свой сервер обязательно.
1
|
||||
|
Native x86
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
||
| 14.01.2015, 17:32 | ||
|
0
|
||
| 14.01.2015, 17:38 | |
|
Не по теме: quwy, это только на этом форуме почти тысяча.. =) Причем половина из них написана за пару дней и при этом в них нет откровенного флуда, все по теме.
0
|
|
|
Native x86
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
|||||
| 14.01.2015, 18:14 | |||||
|
Давайте теперь пройдемся по вашим вариантам. Решение задачи есть. Создать сервис, который запускается вместе с web-сервером и предоставляет некий API для работы с разделяемой памятью. Потом создать расширение PHP, которое пробросит этот API в пространство имен PHP-скрипта. И все, пользуйся на здоровье. Теперь вопрос: кто будет это делать?
0
|
|||||
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
|||||||||
| 14.01.2015, 20:00 | |||||||||
![]() ![]() Зависит от ДЦ и интернет провайдеров пользователейхм, кажется я понял что хочет сказать quwy, но не нужно ограничиваться возможностями апача ![]() Если это будет тот самый comet о котором писал ТС, то апач тут явно не нужен А следовательно потоки тут как раз выход. Но я бы вообще не делал этого на php. Хотя бы node.js брать нужно, вот вам и память одна, и на впс прекрасно запуститься, и запросы оч быстро обрабатывает от клиента.
1
|
|||||||||
|
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
|
|||||
| 15.01.2015, 14:33 | |||||
|
Ваши навыки настолько невелики, что вы даже не поняли заданный в теме вопрос. Так что прошу вон из этой темы. На весь остальной бред отвечать не имеет смысла, т.к. он лишь следствие непонимания вопроса. Вообще, касаемо скорости интерпретатора, - она зачастую не имеет сколь-либо весомого значения. В большинстве случаев 99.9% времени обработки запроса - это ожидание данных из сторонних источников. Следовательно если какой-то интерпретатор быстрее другого аж в десять (!) раз, то выигрыш составит лишь 1% от времени запроса, а не 1000% как любят изображать на графиках. Вопрос исключительно в том, кто что умеет готовить. Со своей стороны я бы предложил Go с его горутинами, - асинхронность получается прозрачным образом, написать синхронный код довольно затруднительно, по скорости не сильно отстает от Си. О-кей.
0
|
|||||
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
||||||||||||||||||||||||||
| 15.01.2015, 15:00 | ||||||||||||||||||||||||||
|
Давайте определимся что конкретно мы сравниваем? Нам же нежна ещё кросбраузерность я думаю. Очень хочется увидеть сколько кода будет, какие библиотеки понадобятся, сколько времени, и на сколько в результате это всё обгонит node.js. Небольшой тестик test.php
microtime вернёт время в секундах а now в милисекундах. так вот я перевел в секунды для сравнения. по три запуска теста
Добавлено через 4 минуты я даже не буду на быстродейтсвие писать, я использую сокет ио Условие: кросбраузерность, восстановление сессий при дисконекте. Сравнив количество строк кода, читаемость, время на разработку, бытсродействие. Можно даже с запросами к бд! Не по теме: Время у меня уйдет думаю не больше 30 минут на простой чатик.
0
|
||||||||||||||||||||||||||
|
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
|
|
| 15.01.2015, 15:24 | |
|
DrobyshevAlex, а теперь еще раз - синтетические тесты бесполезны.
Я могу очень долго и упорно называть по-очереди все пхп-шные функции утверждая что она-то явно шустрее чем в node.js и за счет этого идет огромный выигрыш, а вы будете писать тесты и сранивать (и иногда, кстати, будете удивляться). Спорим вам надоест раньше, чем мне? Что вы пытаетесь доказать?
0
|
|
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
||||
| 15.01.2015, 15:28 | ||||
|
Эти тесты были на фразу
Я предложил node - вы сказали он не чем не лучше) Добавлено через 2 минуты ну аи да, раз у уж такая пьянка, то по ссылке - не хороший код, если оно ен поравдано, особенно с числом типа инт
0
|
||||
|
F́́́́́́́ŕ́́́́́́́é́́́ ́ak
260 / 224 / 109
Регистрация: 07.07.2014
Сообщений: 965
|
|||
| 15.01.2015, 15:30 | |||
|
О-кей, поехали. В PHP запросы к серверу MySQL выполняются критично быстрее, чем в NodeJS. Хотите написать бенчмарк и проверить? Добавлено через 1 минуту
0
|
|||
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
||
| 15.01.2015, 15:39 | ||
|
Добавлено через 31 секунду А потом мы поговорим про передачу по ссылке, как она рабоатет и на сокк она быстрей и какие траблы могут быть при перечачи числа)(
0
|
||
|
Native x86
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
||
| 15.01.2015, 16:18 | ||
|
0
|
||
|
Заблокирован
|
||
| 15.01.2015, 17:57 | ||
|
Добавлено через 58 секунд статейку 10 летней давности если найду - подгоню
0
|
||
|
1178 / 1128 / 94
Регистрация: 31.05.2012
Сообщений: 3,060
|
||||||||||||
| 15.01.2015, 18:02 | ||||||||||||
1
|
||||||||||||
|
Native x86
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
||
| 15.01.2015, 18:10 | ||
|
0
|
||
|
Заблокирован
|
||
| 15.01.2015, 19:46 | ||
|
DrobyshevAlex, а зачем искать виндовые решения? тем не менее спасибо Добавлено через 2 минуты я же про то что общая память в пыхе существует... даже не успел и поспорить..
0
|
||
|
Native x86
6857 / 3790 / 1025
Регистрация: 13.02.2013
Сообщений: 11,861
|
||
| 15.01.2015, 19:54 | ||
|
0
|
||
|
Заблокирован
|
||
| 15.01.2015, 19:57 | ||
|
0
|
||
| 15.01.2015, 19:57 | |
|
Помогаю со студенческими работами здесь
20
Падающий снег
Падающий текст падающий квадрат
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога
SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
|