tabs ↹ over ␣ ␣ ␣ spaces

by Jiří {x2} Činčura

Comparing speed of Blob Storage, AppService and CDN on Azure for static file serving

30 Apr 2019 3 mins AppService, Azure, Azure Storage, CDN, Cloud

For no particular reason and with no particular goal I decided to see how “fast” some selected services, with the ability to serve a static file, on Azure are. I was interested in the time to serve the file and requests per second. The services I selected are AppService in B1 and S1 plan, Blob Storage GPv2 and CDN in Standard plan from Verizon and Microsoft.

The file I chose was a 26143 bytes long C# text file (FbMigrationSqlGenerator.cs renamed to test.txt, to be exact). The file was always accessed using HTTPS from an Azure VM in DS3_v2 size in the same region (West Europe). All the above-mentioned services were in default configuration (Blob Storage container was public). I use Apache Bench tool (Apache 2.4.39 x64 OpenSSL 1.1.1 VC15) with various settings (see below). I know this is in no way comprehensive test, but I’d like to say before you steam into comments section, I’m interested more in comparison than in absolute numbers.

The settings I used for Apache Bench all used Keep Alive (-k) and I did runs with concurrency (-c) 6 and 1k requests (-n), concurrency 100 and 20k requests and finally concurrency 400 and 80k requests.

First let’s look at requests per second.

Blob Storage AppService B1 AppService S1 CDN Verizon CDN Microsoft
1000R/6C 820 1164 1143 1362 1208
20000R/100C 6332 2253 2078 7032 7947
80000R/400C 6480 1365 1865 5600 6966

With a small number of concurrent requests, the services are similar to each other (not sure why Blob Storage was doing bad with small concurrency and good with more concurrency, maybe some network glitch). As the load is added Blob Storage and both CDNs are fine (I was maxing-out VM’s network (between 2.0-2.4 Gbps reported by Task Manager)).

Let’s look at milliseconds per request now.

Blob Storage AppService B1 AppService S1 CDN Verizon CDN Microsoft
1000R/6C 7.313 5.156 5.250 4.406 4.969
20000R/100C 15.792 44.386 48.127 14.221 12.584
80000R/400C 61.719 293.016 214.424 71.432 57.426

Again, on a small concurrency the results are pretty much the same and not much users or applications will be able to recognize 7ms or 4ms request. What surprised me was, that the Blob Storage is on-par with CDN. Yes, this was the lucky case, because Blob Storage was in the same region and both Verizon and Microsoft have CDN POPs in Amsterdam which is where the West Europe region is located. But still.

At the end of the day, you’re probably selecting (and configuring – i.e. location(s) and replication, number of instances and so on) services based on what the solution is asking for, but it’s still nice to see what to expect in respect to other services.

Profile Picture Jiří Činčura is .NET, C# and Firebird expert. He focuses on data and business layers, language constructs, parallelism, databases and performance. For almost two decades he contributes to open-source, i.e. FirebirdClient. He works as a senior software engineer for Microsoft. Frequent speaker and blogger at www.tabsoverspaces.com.