170 похожих чатов

Такой вопрос. У меня мелкое приложение, конектится к бирже по

сокетам и постоянно получает большое количество данных, которые потом обрабатываются(куча операций над реально маленькими массивами). И видимо из-за блокирующих операций пропускная способность падает, мой сервер не успевает ответить бирже Понг и биржа меня отключает. Вообще печально что нода не справляется с таким объёмом инфы и вычислений, имхо, не так уж их много. Но что можно предпринять в этом случае?

Я вот думаю, раз одно приложение забивает себе ивент луп, то может на микросервисы разбить, пусть даже на одном и том же хосте? Первое приложение коннектится с биржей и передаёт данные другим двум, а те уже проводят вычисления, потом сливают данные в общак третьему. Таким образом появятся 2 вычислительные ноды без перегрузки ивентлупа. Но всё так же на одном сервере, процессорные мощности они же между собой поделят я так понимаю.
Но это как то грустно, получается standalone приложение уже склепать не получится чисто из-за того что нода не справляется. Плюс разбивать функционал на несколько приложений немного времязатратно будет, само-то приложение сейчас очень мелкое, строк 200 своего кода, как-то нелепо это ещё разбивать на другие приложения.
Можно ли сделать что-то ещё в моем случае для оптимизации? Вы бы что сделали с такой проблемой?

5 ответов

13 просмотров

Для начала можно не разбивать, но хотя бы "тяжёлые вычисления" отдавать воркеру, а не блочить эвентлуп. Больше асинхронгости

Код в студию. Кажется это на вашей стороне проблема.

Вы установили необязательные бинарные зависимости к модулю ws?

Opt-in for performance and spec compliance There are 2 optional modules that can be installed along side with the ws module. These modules are binary addons which improve certain operations. Prebuilt binaries are available for the most popular platforms so you don't necessarily need to have a C++ compiler installed on your machine. npm install --save-optional bufferutil: Allows to efficiently perform operations such as masking and unmasking the data payload of the WebSocket frames. npm install --save-optional utf-8-validate: Allows to efficiently check if a message contains valid UTF-8 as required by the spec.

1. Это делать максимально ассинхронно. 2. Если у тебя не нужно отдавать результат твоих вычислений, то сразу отвечай понг, а сами вычесления перенеси в воркер например. 3. Еще вариант поигратся с воркерами и месседж брокером (кафка, раббит). Лично я бы предпочтел 3 вариант. Так как в случае отказа или падений мы брокеры имеют возможность поаторно отправить данные на обработку, что, я подозреваю, в твоем случае критично. А еще при таком подходе будет проще распределять нагрузку

Похожие вопросы

Обсуждают сегодня

А чем вам питонисты не угодили?😂
.
79
Язык Си можно выучить за день? По книжке ANSI C на 230 страниц
Vincent Vegan
29
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
75
Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
18
Dim Dim, [02.07.2024 11:07] DB 0x62 Dim Dim, [02.07.2024 11:07] DB 0x66 Dim Dim, [02.07.2024 11:07] кто пояснит что это?
Dim Dim
14
Ошибка: segmentation fault (core dumped) Код: pastebin.com/BEsNNSSV Сообщение от компилятора: отсутствует ОС: Arch Linux Ядро: x86_64 Linux 6.9.7-arch1-1 Процессор: Intel Cele...
sec
4
Ещё такой вопрос. Мне необходимо хранить пароль пользователя локально. Для этого планирую использовать ini файл. Это для автозаполнения полей логин и пароль при авторизации. Е...
Евгений
19
Ребят, а за скок можно впарить анон чат с апишкой и веб админкой ?
Eugene Неелов
15
Кстати, я тут еще с одной темой столкнулся, вот учу я C++, на таком то ресурсе, а остальные постоянно советуют практиковаться, что то писать, проекты, но как писать если вот т...
aaswq1
7
А как лучше конвертировать физический адрес в виртуальный при маппинге? В случае ядра у меня, например, direct mapping, первые 768МБ я как есть мапплю в higher half, а остальн...
Evg Resh
26
Карта сайта