|
86 / 86 / 13
Регистрация: 03.03.2011
Сообщений: 1,873
|
|
Не падающий сервер14.01.2015, 14:40. Показов 4816. Ответов 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
Падающий снег
Падающий текст падающий квадрат
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|