2015-12-09 2 views
4

Привет, я создал функцию AWS Lambda для потока Kinesis для размера партии 100 & Я пытаюсь выполнить ее в многопоточной среде, но проблема в том, что в многопоточной среде она работает очень медленно по сравнению с однопоточными .. Как я могу поделиться вам номерами: для 512 МБ с тайм-аутом 60 секунд функция Lambda выполняет 955 записей в 684 мс & 1031 записей в 435 мс & Для многопоточных он выполняет 430 записей в 878808 мс & 433 записи в 893862 мс для той же памяти (т.е. 512 МБ & 60 секундный тайм-аут)AWS Lambda Java Многопоточность

Ниже приведен мой код функции Lambda, который выполняется в многопоточном режиме:

public String myHandler(final KinesisEvent kinesisEvent, final Context context) { 
     Thread thread = new Thread(new Runnable(){ 

      //@Override 
      public void run() { 
       int singleRecord=0; 
       long starttime=System.currentTimeMillis(); 
       //LambdaLogger lambdaLogger=context.getLogger(); 
       for(KinesisEventRecord rec : kinesisEvent.getRecords()) 
       { 
        singleRecord=0; 
        System.out.println("Kinesis Record inside is:"+new String(rec.getKinesis().getData().array())); 
        //count++; 
        singleRecord++; 
        // System.out.println(new String(rec.getKinesis().getData().array())); 
       } 
       count=count+singleRecord; 
       long endtime=System.currentTimeMillis(); 
       long totaltime = endtime-starttime; 
       time=time+totaltime; 
       System.out.println("Time required to execute single Lambda function for "+singleRecord+" records is"+" :: "+totaltime+" milliseconds"); 
       System.out.println("Total time required to execute Lambda function for "+count+" records is"+" :: "+time+" milliseconds"); 
      } 
     }); 
     thread.start(); 
     return null; 
    } //end of handler method 

Выполняет ли функция лямбда медленно в многопоточной среде? Я хочу знать, что может быть причиной медленной обработки этой многопоточной функции Лямбды? Если я хочу, чтобы эта функция работала быстрее, чем однопоточная функция, то какие изменения я должен делать в этом коде?

+1

Очистить сейчас, спасибо. Но все же - где преимущество запуска нового потока на элемент выполнения? – Jan

+1

@Jan http://docs.aws.amazon.com/lambda/latest/dg/java-gs.html! = Java 8 лямбда-функция, аналогичная концепции, так как вы определяете функцию для запуска в облаке. – zapl

+0

@Akshay: вы можете поделиться одним и тем же кодом, чтобы сравнить? Где определяется 'count'? – Jan

ответ

1

Еще два варианта:

  1. Есть ваш первоначальный Lambda использовать SDK для асинхронного запуска дополнительных лямбд, которые фактически делают работу (веер)
  2. Использование Lambda планирование с планированием смещений и длинными перерывами, так что вы одновременно работают несколько ягнят.