Лямбда холодный старт - скопировать файл с S3 - PullRequest
1 голос
/ 24 марта 2019

У меня есть лямбда-код Java, который в настоящее время копирует файл из S3 в / tmp. Это занимает 6-10 секунд в зависимости от размера экземпляра Lambda. Файл повторно используется при новых вызовах, которые используют тот же экземпляр Lambda. Тем не менее, трафик очень резкий, и я мог видеть 50+ одновременных запросов и копия с холодного запуска из S3 недопустима ...

Есть ли лучший способ "предварительной загрузки" данных в экземпляр Lambda, чем копирование из S3? Как насчет HTTP-запроса для извлечения кэшированной копии из Cloudfront. Любые другие «приемы» для ускорения холодных запусков при наличии начальных требований к данным запуска?

Ответ: ДА См. Ниже

1 Ответ

0 голосов
/ 24 марта 2019

Ответ: ДА

Быстрее вытащить из хостинга S3, запущенного CloudFront и использующего GZip. В файле размером 1,5 МБ производительность повысилась с 12 до 4 секунд. Вот код, который я написал для этой цели:

void getFile(String remoteUrl) throws Exception {

    URL url = new URL(remoteUrl); 
    HttpsURLConnection con = (HttpsURLConnection)url.openConnection();

    con.setRequestProperty("Accept-Encoding", "gzip");

    BufferedInputStream bis;
    if ("gzip".equals(con.getContentEncoding())) {
        bis = new BufferedInputStream(new GZIPInputStream(con.getInputStream()));
    }
    else {
        bis = new BufferedInputStream(con.getInputStream());
    }

    String getPath = url.getPath();
    String fileName = "/tmp/"+getPath.substring(getPath.lastIndexOf('/') + 1);

    BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(fileName));
    byte[] buff = new byte[16 * 1024];
    int len;
    while ((len = bis.read(buff)) > 0)
        out.write(buff, 0, len);
    bis.close();
    out.close();
}

Надеюсь, это поможет кому-то еще.

Cliff

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...