swirl
Home Software Blog Wallpapers Webtools
AWS Lambda Performance
Sunday 10, April 2022   |   Post link
Logo

Overview

So you've decided to use AWS lambdas for your application. Lambdas have great integration with various AWS services like S3 and are a good choice for handling notifications generated by AWS services. Now that you've selected Lambdas for the tasks, which programming language are you considering to write your functions?

What's your usecase?

Though serverless has been a buzzword for sometime now, if you're serious about building a successful application, you must take these buzzwords with a pinch of salt. Just because a technology is new does not mean its the right one for you. I remember developing a video playing mobile application like YouTube purely based on AWS lambdas. Though the tech-stack looked good on paper, the performance was absymal. It's important to understand what your requirements are in terms of:

  • Responsiveness
  • Running time of the function logic
  • Frequency of invocations

Responsiveness

Like I mentioned earlier, we use lambda functions to respond to user actions made within the video mobile app. Obviously such an app has to have responsiveness as one of its top priorities. Lambdas unfortunately are not greate at this. The AWS lambda service has come a long way but nothing beats the performance of an application dealing with local memory access. Remember, lambdas have no state so you'll have to rely of distributed caching systems like Redis which means multiple network trips to get the data that you need even if its cached. Lambdas however are great for responding to backend events, triggering additional workflows and the likes.

Running time of the function logic

Lambda functions aren't supposed to be long running functions. AWS lambda used to have an upper limit of 5 mins which has increased to 15 mins for its maximum execution time. Lambdas are supposed to only do one thing and one this well and on top of that finish it in a couple of seconds.

Frequency of invocations

Eac AWS lambda executes in its own container. When a lambda executes for the first time, a considerable amount of time is spent in initialization. If the lambda is invoked not "too long" after, the same container is reused. The idea is to keep lambdas from going out of context so they don't have to spend time on initialization and are ready to execute immediately. Some system regularly invoke lambdas just to keep them "warm".

The programming language used

The programming language chosen has a bearing on all the three points discussed. Compiled languages which require a heavy runtime like JVM or the .NET runtime spend more time first time they execute compared to languages like NodeJS or Python which don't have a heavy runtime. Here is a comparison of a lambda function which:

  • Responds to S3 put events
  • Reads first 4K of the S3 object
  • Tries to find a string within the data read

Here we compare the performance of the lambda written in Python with one written in Java (Java11) for a cold start:

Cold start performance graph

Billed duration Init duration Max memory used
Python 262 408.89 71
Java 13087 404.08 152
Java not only executes slower but also takes double the memory. This directly impacts your AWS cost.

Next we compare the performance of the lambda written in Python with one written in Java (Java11) with a warm start:

Cold start performance graph

Billed duration Init duration Max memory used
Python 164 0 72
Java 835.81 0 158
The init duration doesn't really depend on the language / runtime but the execution duration (billed duration) does. Again Java is slower comparatively and uses twice the memory.

Conclusion

If lambdas are operating in the periphery of the application perhaps doing something like filtering data, sending notification to start core workflows, it makes sense to use a language having a small memory footprint like NodeJS or Python, you'll save on costs and not lose aynthing in the bargain.




Comments

Posts By Year

2022 (7)
2021 (5)
2020 (12)
2019 (6)
2018 (8)
2017 (11)
2016 (6)
2015 (18)
2014 (2)
2013 (4)
2012 (2)

Posts By Category

.NET (4)
.NET Core (2)
ASP.NET MVC (4)
AWS (4)
AWS API Gateway (1)
Android (1)
Apache Camel (1)
Architecture (1)
Azure (2)
Book review (3)
Business (1)
C# (3)
C++ (2)
CloudHSM (1)
Containers (4)
Corporate culture (1)
Database (3)
Database migration (1)
Desktop (1)
Docker (1)
DotNet (2)
DotNet Core (2)
Entity Framework (3)
Git (2)
IIS (1)
JDBC (1)
Java (8)
Kubernetes (1)
Lambda (1)
Learning (1)
Life (7)
Linux (1)
Lucene (1)
Multi-threading (1)
OData (1)
Office (1)
PHP (1)
Photography (1)
PowerShell (2)
Programming (27)
Rants (5)
SQL (2)
SQL Server (1)
Security (2)
Software Engineering (1)
Software development (1)
Solr (1)
Sql Server (2)
Storage (1)
T-SQL (1)
TDD (1)
TSQL (5)
Tablet (1)
Technology (1)
Test Driven (1)
Unit Testing (1)
Unit Tests (1)
Utilities (3)
VC++ (1)
VMWare (1)
VSCode (1)
Visual Studio (2)
Wallpapers (1)
Web API (2)
Win32 (1)
Windows (9)
XML (2)

Posts By Tags

.NET(6) API Gateway(1) ASP.NET(4) AWS(2) Adults(1) Advertising(1) Android(1) Anti-forgery(1) Authentication(2) Azure(2) Backup(1) Beliefs(1) BlockingQueue(1) Book review(2) Books(1) Busy(1) C#(4) C++(3) CLR(1) CORS(1) CSRF(1) CTE(1) Callbacks(1) Camel(1) Certificates(1) Checkbox(1) CloudHSM(1) Cmdlet(1) Commons(1) Company culture(1) Complexity(1) Consumer(1) Consumerism(1) Containers(3) Core(2) Custom(2) DPI(1) Data-time(1) Database(4) Debugging(1) Delegates(1) Developer(2) Dockers(2) DotNetCore(3) EF 1.0(1) Elastic Search(1) Encrypted(1) Entity framework(1) Events(1) File copy(1) File history(1) Font(1) Git(2) GradleApache(1) HierarchyID(1) IIS(1) Installing(1) Intelli J(1) JDBC(1) JSON(1) JUnit(1) JWT(1) Java(2) JavaScript(1) Kubernetes(1) Life(1) LinkedIn(1) Linux(1) Localization(1) Log4J(2) Log4J2(1) Lucene(1) MVC(4) Management(2) Migration history(1) Mobile Apps(1) Modern Life(1) Money(1) NGINX(1) NTFS(1) NUnit(2) OData(1) OPENXML(1) Objects(1) Office(1) OpenCover(1) Organization(1) PHP(1) Paths(1) PowerShell(2) Producer(1) Programming(1) Python(2) Quality(1) REDIS(2) Runtimes(1) S3-Select(1) SD card(1) SLF4J(1) SQL(2) SQL Code-first Migration(1) SSH(2) Sattelite assemblies(1) School(1) Secrets Manager(1) Self reliance(1) Shell(1) Solr(1) Sony VAIO(1) Spirituality(1) Sql Express(1) System Image(1) TDD(1) TSQL(3) Table variables(1) Tables(1) Tablet(1) Ubuntu(1) Url rewrite(1) VMWare(1) VSCode(1) Validation(2) VeraCode(1) Wallpaper(1) Wallpapers(1) Web Development(4) Windows(2) Windows 10(2) Windows 2016(2) Windows 8.1(1) Work culture(1) XML(1) Yii(1) renew(1)