Медленное соединение API AWS WebSocket - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь повысить производительность своего решения AWS для серверной части мобильного приложения.

Я использую API WebSocket, который интегрирован с лямбдами для маршрутов $ connect, $ disconnect и $ default. Первоначально лямбда-данные брали данные из DynamoDB, но затем я решил использовать ElastiCache с Redis (EC) для некоторого набора таких данных, и я также решил хранить идентификаторы соединений WebSocket в этом EC.

Первая ловушка, с которой я столкнулся, это то, что EC находится в VPC, и мне нужно было подключить свои Lambdas к этому VPC. Затем я назначил VPC для лямбд и добавил использование Redis-клиента из этих лямбд. Здесь я столкнулся с проблемой, что эти лямбды (с назначенным VPC) не могут использовать ApiGatewayManagementApi#postToConnection - такие вызовы начали возвращать Forbidden.

Я думаю, это потому, что мои вызовы стали походить на вызовы внешнего API и, следовательно, стали требовать аутентификации (в моем случае IAM), или этот API стал недоступным из VPC. В обоих случаях я понял, что решение этой проблемы потребует слишком много дополнительных усилий, и я решил использовать дополнительную лямбду.

enter image description here

Итак, я создал отдельную лямбду, назначенную тому же VPC с EC. А для лямбда-API - я удалил связь VPC и добавил вызовы для лямбда-EC, как это:

    LAMBDA.invoke({
            FunctionName: 'dataCache',
            Payload: JSON.stringify(data)
        }, 
        (e,d)=>{
            if (e) {
                callback(e);
            }
            else {
                callback(null, JSON.parse(d.Payload));
            }
        }
    ); 

Таким образом, таким образом, у меня есть лямбды конечных точек API, которых нет в VPC, и я делаю вызовы в EC через лямбду, которая находится в том же VPC с EC.

Системы работают, но я сталкиваюсь с очень большой задержкой при первом подключении клиента - это более 15-20 секунд !! Появляется не всегда, но через некоторое время, если ни один клиент не подключен.

Я думаю, что создал здесь несколько громоздкую архитектуру и понимаю, что проблемы возникают из-за использования VPC. Мне просто не нравилось задействовать дополнительную функциональность, такую ​​как NAT, или вообще перенести API в VPC.

Все части системы находятся в одном регионе AWS us-east-1, хотя я нахожусь в Украине.

Кто-нибудь может подсказать, как разрешить это дело?

...