Нагрузка на ЦПУ при этом пике 30-40%это че за нагрузка при 3рпс? Профилирование нагрузки - первый шаг, балансер и горизонтальное расширение это шаг стопитьсот, когда вы упираетесь в потолок того что может вытянуть сервак. 90% что проблемы в количестве (и качестве) запросов к бд, крайне маловероятно что код у вас настолько сложный, что не вытягивает...
обращается к основной БД через коннект по приватному IP адресу в сети серверов Амазон.Тестом запустите подряд 20-30 разных запросов с разным размером ответа, каждый замерьте, подозреваю что будете не очень приятно удивлены...
запросы на дополнительном сервере начинают отрабатывать по 5, 15 а иногда и 50 секунд.А на основном все остается норм? В любом случае - профайлинг наше все, + под нагрузочным тестированием хоть как-то.
1 <1 мс <1 мс <1 мс lmlicenses.wip4.adobe.com [127.0.0.1]
Подскажите, что не так
1. Сервер я представляю как бэкенд разработку.Это она и есть в чистом виде.
Метаюсь между JS (node.js), GO, и Java.Странные метания, языки не сказать чтобы были сопоставимы. ИМХО:
имею поверхностные знания по написанию кода на C, C++,Тогда можно еще глянуть в сторону RUST, но опять же, оно молодое и дороговатое.
3. Стоит ли разбивать подобные проекты на микросервисы? То есть использовать брокер сообщений, который будет раскидывать сообщения от клиентов разным сервисам.Зависит, для микросервисов архитектура создает еще один дополнительный уровень сложности, а при предполагаемом небольшом (до сотен тысяч) клиентов особой нагрузки вроде быть не должно. Проще построить монолит и, если возникает нагрузка на определенный внутренний функционал, выносить его в сервис, там есть нюансы и порог с которого все это имеет смысл, так что начинать достаточно типовой проект стоит с монолита в любом случае.
рассылка приходит только 1000 пользователям.Если прям ровно 1000, очевидно это ограничение ТГ.
ТГ никаких ошибок не выдает.Как это проверяется?
$res = $this->app->forwardMessage(...)
очевидно что-то возвращает, подозреваю ответ в виде саксесс/фэйл, но вы его нигде не используете.$response->getMessageId();
для определения удачного запроса. .search__form {
border: solid 1px;
width: 622px;
height: 48px;
gap: 24px;
margin-top: 16px;
}
и при загрузке страницы мне сразу выводится "4"Логично, так как пост пустой, а не нулл, а в остальных случаях срабатывают проверки на метод пост(вызванные через гет) и непустые пост поля, которые как бы пустые при методе гет.
но скрипт php как будто работает один раз при загрузке страницы и все,Скрипт пхп ВСЕГДА работает 1 раз. При каждом обращении вы создаете запрос, скрипт его отрабатывает и умирает.
как сделать чтобы при отправке данных скрипт php отслеживал это ?Так он отслеживает, просто вы с этим отслеживанием ничего не делаете. Посмотрите ответ сервера в запросе к message.php, ну и сделайте в js обработку ответа фетч запроса какую-то... То что метод называется буквально "взять" вас не на какие мысли не наталкивает? ))
в куках храню токен и вот задался я таким вопросом, а как запретить использовать этот токен на других устройствах? То есть, что я имею ввиду. Вот есть скажем 2 пк, на одном Вы авторизовались, открыли cookies, скопировали токен и на другом пк его вставили и таким образом вы зашли в аккаунт без авторизации.В чем проблема? Так работает вся система куки-зависимых данных (например сессии). Так как куки является приватной информацией в рамках сессии, данные в ней так же считаются приватными и по умолчанию недоступными третьим лицам. По этому все страдания на тему "ой, можно же что-то вытащить и вставить это не безопасно" и прочие страдания юных специалистов по безопасности можно смело взять и выкинуть в психологическую мусорку.
if($query = $db->query("SELECT `login`, `password` FROM `admin`")){
Не стоит выбирать все записи из таблицы, если вам нужна одна, та где логины совпадают. Это в целом плохая практика, но еще хуже когда такой подход будет применен к большой таблице. SQL для этого и придуман чтобы так не делать. Так же, если у вас есть таблица пользователи, не нужно дублировать функционал, перенесите админов туда же, указав им уровень доступа или роль.$message = $_session['message']??'';
; и $_session['message'] очищаем. Тоже самое делаем с $old, не забывая что там обычно массив;