AWS vs. Azure – Lambda vs. WebJobs
Back to one year ago, I started using Microsoft Azure to build my first cloud-first web application. My own application covered:
- Collecting and storing content from my favorite bloggers, YouTube channels and RSS subscribers.
- Auto performing searching and tagging information with predefined condition frequently.
- Supporting to add notes, comment to each article.
I used Azure Websites for web application and WebJobs for all background jobs, they’re fantastic services from Microsoft Azure. I stopped my project because I found better tool for my purposes (I’m using OneNote and feedly now), but I learnt a lot after all.
Two days ago (13 Nov 2014), at AWS re: Invent, Amazon announced to worldwide cloud developers and their partners a similar service named AWS Lambda.
I did my research about AWS Lambda and in this post I would like to compare it to Azure WebJobs from Microsoft.
First of all, AWS Lambda and Azure WebJobs are:
- Zero-administration compute platforms, they are PaaS.
- You don’t have to configure, launch, or monitor any virtual machine.
- You don’t have to install any operating systems or language environment.
- You don’t need to think about scale or fault tolerance.
- You don’t need to request or reserve capacity.
- The services help you implement your background jobs and deploy them to abstract environment.
And the following table shows us what differences between them are:
|AWS Lambda||Azure WebJobs|
|Acceptable Languages/ File Types||.js (using Node.js)||YES||YES|
|.ps1 (using PowerShell)||NO||YES|
|.sh (using Bash)||NO||YES|
|.php (using PHP)||NO||YES|
|.py (using Python)||NO||YES|
|Execution Modes||On Demand||NO||YES|
|Continuously Running Task||NO||YES|
|Schedule Task||YES (2)||YES|
|Run with Triggers||YES||YES|
|Independent Service||YES||NO (3)|
|Supported Tools||Management Tool||AWS Management Console||Azure Scheduler|
|Audit Trail Tool||AWS CloudWatch||Azure Job History|
|Deployment Tool||AWS Management Console||Azure Portal and Visual Studio Publishing Tool|
|Limitations||Allocated memory||128MB to 1GB||Depend on Azure Websites subscription plan|
|Number of threads/ processes||256|
|Local storage consuming||512 MB or 1024 file descriptors|
|Cost||Cost model||Independent cost||Included in Azure Websites cost|
|Impacted factors||Allocated memory and total execution time (called GB-s)||Number of instances and band width|
Here’s some typical scenarios that would be great for the AWS Lambda or Azure WebJobs:
- Image processing or other CPU-intensive work.
- Queue processing.
- RSS aggregation.
- File maintenance, such as aggregating or cleaning up log files.
- Data indexing or synchronization
- Other long-running tasks that you want to run in a background thread, such as sending emails.
For now, Azure WebJobs is the winner but AWS Lambda is just a preview version, and technologies are changing every day, so I’ll come back and perform my comparison again for next couple months.
(1) Developers can implement their functions then upload compressed package (.zip file) to AWS Lambda or Azure WebJobs.
(2) AWS Lambda functions can be triggered by external event timers.
(3) Azure WebJobs is Azure Websites Component, it must run along with Azure Websites.