お知らせ
過去にQiitaに投稿した内容のアーカイブです。
すごいですQuarkus!!!!!! JavaのLambdaのコールドスタートがチョッパヤです!!
以下の公式サイトを参考に試しました。
https://quarkus.io/guides/amazon-lambda#tracing-with-aws-xray-and-graalvm
テスト対象
前回のAWS LambdaのJavaは遅い?とほぼ同じですが、以下が異なります。いずれもQuarkusの制限?制約?です。
- アノテーションが付いてる
- httpClientがUrlConnectionHttpClient
ソース全体
package example;
import javax.inject.Named;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import software.amazon.awssdk.services.s3.model.PutObjectResponse;
import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.regions.Region;
@Named("test")
public class TestLambda implements RequestHandler<Object, Object> {
@Override
public Object handleRequest(Object input, Context context) {
String ENV_BUCKET = System.getenv("BUCKET");
S3Client s3 = S3Client.builder()
.region(Region.AP_NORTHEAST_1)
.httpClient(software.amazon.awssdk.http.urlconnection.UrlConnectionHttpClient.builder().build())
.build();
PutObjectResponse result = s3.putObject(
PutObjectRequest.builder().bucket(ENV_BUCKET).key("filename.txt").build(),
RequestBody.fromString("contents"));
System.out.println(result);
return "";
}
}
検証結果
回数 | レイテンシ(ms) | 処理内容 |
---|---|---|
1 | 2700 | |
2 | 250 | |
3 | 305 | |
4 | 319 | |
5 | 187 |
前回はコールドスタートが6200msだったので、めちゃ早になりました!
検証結果(+Provisioned Concurrency)
こんなチョッパヤなQuarkusさんをProvisionedにしたらどうなるんでしょうね。ワクワクしますね。
回数 | レイテンシ(ms) | 処理内容 |
---|---|---|
1 | 417 | |
2 | 198 | |
3 | 206 | |
4 | 270 | |
5 | 147 |
期待を裏切らない速さ!すごいよ、Quarkus!
参考
https://quarkus.io/guides/amazon-lambda#tracing-with-aws-xray-and-graalvm https://aws.amazon.com/jp/blogs/architecture/field-notes-optimize-your-java-application-for-aws-lambda-with-quarkus/