Skip to content

AWS S3 vs Hetzner's (S3-compatible) Object Storage

Hetzner only supports Object Storage located in eu-central — none in the US! So, I'm curious about potential latency issues since both our users and servers are primarily in the US. 🤔

I am performing benchmarking tests using https://github.com/dvassallo/s3-benchmark to compare performance between AWS S3 located in us-east-2 and Hetzner's Object Storage located in eu-central (hel1).

Ideally, the benchmark is with us-east-1 instead of us-east-2. However, us-east-1 is a bit finicky. They're close enough for purposes of this benchmark.

👉 Jump to Results 👈

Test Setup

In this test, I have two variables:

  • Storage location:
    • AWS S3 (us-east-2)
    • Hetzner Object Storage (hel1)
  • Client location:
    • Hetzner Server (ash-dc1). Specs:
      • cpx11
      • 2 vCPU
      • 2 GB RAM
      • 40 GB Disk local
      • $4.99 /mo Price
    • My own laptop to simulate a user in the US (Seattle)
      • 2021 MacBook M1 Pro
      • 32 GB RAM

Client location is an important variable because it represents where we will be accessing the storage from. With our Rails app, both the server and the user's browser accesses the storage. See sections below for specific use cases.

Server to Storage

Use cases:

  • ActiveStorage uploads when not using Direct Uploads
  • ActiveStorage processing variants

Benchmark Results

Hetzner Object Storage

Hetzner Server (ash-dc1) to Hetzner Object Storage (hel1)

Click to expand
--- BENCHMARK ----------------------------------------------------------------------------------------------------------------

Download performance with 1 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.0 MB/s |  144   104   105   106   130   247   359   435 |  157   104   105   126   150   288   400   435 |
|       9 |       0.0 MB/s |  156   104   105   106   158   329   384   420 |  169   104   105   108   158   336   420   425 |
|      10 |       0.1 MB/s |  164   104   105   106   118   370   375   400 |  174   104   105   112   157   370   388   400 |
|      11 |       0.1 MB/s |  156   104   105   107   128   323   362   373 |  166   105   105   114   150   326   373   396 |
|      12 |       0.1 MB/s |  154   104   105   107   116   344   376   397 |  161   104   106   113   148   348   376   445 |
|      13 |       0.1 MB/s |  137   104   105   106   116   259   336   346 |  150   104   106   124   148   259   336   346 |
|      14 |       0.1 MB/s |  159   104   105   109   179   314   361   380 |  176   104   106   148   180   319   408   420 |
|      15 |       0.1 MB/s |  148   104   106   110   154   259   364   376 |  166   105   109   148   160   272   364   420 |
|      16 |       0.1 MB/s |  164   104   105   107   205   292   375   423 |  186   104   106   149   243   332   416   424 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 2 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.1 MB/s |  117   104   104   105   112   135   208   349 |  138   104   105   142   151   160   252   350 |
|       9 |       0.1 MB/s |  123   104   105   105   113   147   287   299 |  143   104   106   147   151   160   287   299 |
|      10 |       0.1 MB/s |  141   104   105   107   112   310   353   366 |  167   105   107   147   152   316   353   408 |
|      11 |       0.1 MB/s |  135   104   105   106   110   265   344   386 |  147   104   105   109   148   265   388   428 |
|      12 |       0.1 MB/s |  125   104   105   106   114   125   332   341 |  132   104   106   107   122   158   366   383 |
|      13 |       0.1 MB/s |  128   104   105   107   114   127   362   366 |  139   105   105   113   147   163   362   366 |
|      14 |       0.2 MB/s |  130   104   105   110   119   154   348   363 |  148   104   107   123   153   177   388   408 |
|      15 |       0.1 MB/s |  129   104   105   106   116   200   327   329 |  138   104   105   111   147   200   328   329 |
|      16 |       0.2 MB/s |  135   104   105   110   117   268   317   412 |  156   104   109   145   151   301   328   456 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 4 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.2 MB/s |  164   104   105   105   232   306   358   359 |  181   106   107   148   267   319   360   362 |
|       9 |       0.1 MB/s |  183   105   105   108   262   364   435   442 |  198   106   107   153   272   374   437   442 |
|      10 |       0.2 MB/s |  175   104   105   109   236   337   421   421 |  188   106   107   129   260   355   423   463 |
|      11 |       0.2 MB/s |  171   104   105   106   199   356   392   423 |  183   106   107   110   201   382   396   464 |
|      12 |       0.2 MB/s |  158   104   105   106   190   273   398   399 |  179   106   108   149   203   306   401   440 |
|      13 |       0.2 MB/s |  151   104   105   107   124   274   401   403 |  175   106   108   148   172   300   403   448 |
|      14 |       0.2 MB/s |  151   104   105   108   147   284   354   382 |  171   105   109   148   187   285   355   426 |
|      15 |       0.2 MB/s |  154   104   105   114   118   287   398   419 |  174   106   107   116   156   320   460   533 |
|      16 |       0.3 MB/s |  149   104   105   110   128   289   351   355 |  161   106   107   121   150   326   356   363 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 8 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.3 MB/s |  165   104   105   106   145   352   527   537 |  185   108   109   149   156   360   542   568 |
|       9 |       0.4 MB/s |  144   104   105   106   118   258   375   382 |  162   108   109   128   154   265   379   429 |
|      10 |       0.5 MB/s |  141   104   105   106   116   270   399   410 |  152   108   109   111   148   273   414   448 |
|      11 |       0.5 MB/s |  134   104   105   105   112   225   353   380 |  151   107   108   119   151   225   383   395 |
|      12 |       0.5 MB/s |  148   104   105   109   119   321   373   391 |  165   108   109   128   152   324   376   437 |
|      13 |       0.5 MB/s |  151   104   105   109   132   293   355   383 |  163   107   108   115   154   313   386   387 |
|      14 |       0.5 MB/s |  162   104   105   108   133   342   406   409 |  178   107   108   136   151   383   412   415 |
|      15 |       0.4 MB/s |  151   104   105   107   122   320   375   513 |  164   106   108   119   151   323   384   515 |
|      16 |       0.5 MB/s |  156   104   105   111   126   315   391   425 |  176   106   114   147   156   329   396   427 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 16 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.7 MB/s |  142   104   105   105   123   295   388   397 |  146   108   109   109   127   299   392   401 |
|       9 |       0.8 MB/s |  141   104   105   107   116   286   359   369 |  146   108   109   111   123   290   364   373 |
|      10 |       0.8 MB/s |  153   104   105   109   139   305   346   367 |  157   108   109   114   143   309   350   371 |
|      11 |       0.9 MB/s |  148   104   105   107   121   292   406   413 |  152   108   109   111   131   295   409   416 |
|      12 |       0.9 MB/s |  147   104   105   106   133   292   347   378 |  151   107   109   111   136   295   350   381 |
|      13 |       1.0 MB/s |  155   104   105   110   131   327   375   377 |  160   107   108   114   136   329   378   380 |
|      14 |       0.9 MB/s |  158   104   105   108   129   373   406   438 |  161   107   108   110   132   376   409   441 |
|      15 |       1.2 MB/s |  144   104   106   113   139   247   328   335 |  147   106   108   120   139   248   329   337 |
|      16 |       1.1 MB/s |  156   105   106   109   122   295   368   404 |  158   106   108   112   124   297   370   406 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 32 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       1.2 MB/s |  193   104   105   117   252   347   611   720 |  203   109   110   120   263   395   616   725 |
|       9 |       1.3 MB/s |  170   104   105   110   241   316   402   437 |  175   109   110   118   244   320   406   442 |
|      10 |       1.4 MB/s |  172   104   105   109   233   320   363   366 |  176   109   110   114   238   324   365   371 |
|      11 |       1.5 MB/s |  181   104   105   111   256   356   423   442 |  186   108   109   120   261   359   426   446 |
|      12 |       1.9 MB/s |  167   104   105   109   221   301   390   402 |  171   108   109   113   224   304   394   406 |
|      13 |       1.8 MB/s |  184   104   106   116   291   352   370   423 |  187   107   109   120   294   355   373   427 |
|      14 |       1.8 MB/s |  187   105   106   117   289   345   411   451 |  190   107   108   120   292   348   413   454 |
|      15 |       2.1 MB/s |  175   104   106   111   268   338   385   391 |  178   107   108   114   270   341   387   394 |
|      16 |       2.1 MB/s |  178   104   107   110   249   343   390   407 |  181   107   109   113   251   347   391   408 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 64 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       3.1 MB/s |  143   104   105   105   127   282   309   394 |  147   109   109   110   133   286   313   398 |
|       9 |       3.0 MB/s |  150   104   105   108   132   300   360   376 |  155   109   110   111   135   304   364   381 |
|      10 |       3.6 MB/s |  158   104   105   107   123   332   382   393 |  162   107   108   112   127   335   387   397 |
|      11 |       3.4 MB/s |  154   104   105   106   128   323   360   367 |  158   107   108   109   131   325   363   370 |
|      12 |       4.0 MB/s |  150   104   105   109   128   291   405   407 |  153   107   108   112   135   294   407   409 |
|      13 |       4.6 MB/s |  140   104   105   106   128   245   320   344 |  144   107   108   109   132   247   323   347 |
|      14 |       5.1 MB/s |  144   104   106   109   130   274   327   351 |  147   107   108   112   134   276   330   353 |
|      15 |       4.4 MB/s |  146   104   106   112   126   280   366   367 |  150   107   108   116   132   282   369   369 |
|      16 |       4.9 MB/s |  139   104   105   109   130   230   349   358 |  142   106   107   112   133   231   351   359 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 128 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       4.7 MB/s |  173   104   106   116   205   330   442   470 |  177   109   110   121   209   341   446   475 |
|       9 |       6.0 MB/s |  147   105   105   111   125   283   341   346 |  152   109   109   119   129   287   346   356 |
|      10 |       6.3 MB/s |  147   105   105   106   121   303   388   420 |  151   108   109   110   125   306   391   423 |
|      11 |       6.6 MB/s |  157   105   105   109   126   340   392   413 |  161   108   109   113   131   343   395   417 |
|      12 |       7.4 MB/s |  146   104   105   109   124   250   383   438 |  150   108   109   112   131   253   386   441 |
|      13 |       8.9 MB/s |  153   105   106   109   121   313   404   414 |  157   108   110   112   123   316   407   417 |
|      14 |       6.9 MB/s |  163   104   106   109   127   340   420   455 |  168   107   108   116   134   342   423   457 |
|      15 |       8.6 MB/s |  162   105   107   113   155   311   349   389 |  166   108   110   118   157   314   352   392 |
|      16 |       7.9 MB/s |  163   105   106   114   134   332   403   425 |  166   107   109   117   137   336   406   427 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 256 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |      13.0 MB/s |  132   105   105   107   121   160   342   382 |  137   110   110   113   126   165   346   387 |
|       9 |      15.1 MB/s |  124   105   106   107   115   137   289   296 |  129   109   110   112   122   142   293   300 |
|      10 |      14.0 MB/s |  131   105   106   110   115   145   400   406 |  137   108   111   115   124   148   405   412 |
|      11 |      13.4 MB/s |  134   105   106   107   119   160   367   410 |  139   109   109   110   127   163   371   413 |
|      12 |      19.0 MB/s |  134   105   106   108   118   179   351   364 |  137   108   110   112   126   182   354   367 |
|      13 |      17.8 MB/s |  148   105   106   110   116   273   361   391 |  153   108   109   113   127   276   364   393 |
|      14 |      14.9 MB/s |  168   105   107   113   205   360   424   512 |  184   108   112   131   218   374   428   515 |
|      15 |      16.5 MB/s |  158   105   106   110   145   328   362   383 |  166   108   109   126   156   331   373   386 |
|      16 |      22.1 MB/s |  152   105   106   112   149   261   351   369 |  158   108   110   117   152   288   354   372 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 512 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |      22.5 MB/s |  155   106   106   107   140   317   433   608 |  167   112   112   115   158   323   444   658 |
|       9 |      21.5 MB/s |  158   106   108   116   142   302   425   451 |  176   112   117   135   183   340   431   457 |
|      10 |      20.7 MB/s |  174   105   121   134   152   335   398   438 |  202   119   140   154   229   350   413   453 |
|      11 |      24.8 MB/s |  181   106   125   146   179   340   412   447 |  201   124   143   178   199   357   430   466 |
|      12 |      23.7 MB/s |  199   108   144   188   199   288   361   414 |  220   126   163   214   217   304   385   431 |
|      13 |      23.0 MB/s |  206   106   144   162   231   343   449   519 |  235   137   178   184   248   364   467   540 |
|      14 |      22.7 MB/s |  232   108   196   215   268   342   414   503 |  252   145   214   233   287   359   431   520 |
|      15 |      23.6 MB/s |  229   109   158   199   287   350   396   486 |  266   138   206   252   305   372   414   503 |
|      16 |      23.9 MB/s |  243   108   172   217   270   378   449   648 |  280   128   217   252   287   412   468   665 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

AWS S3

Hetzner Server (ash-dc1) to AWS S3 (us-east-2)

Click to expand
--- BENCHMARK ----------------------------------------------------------------------------------------------------------------

Download performance with 1 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.2 MB/s |   44    30    32    34    35    97   114   127 |   44    30    32    34    35    97   114   127 |
|       9 |       0.2 MB/s |   45    29    32    34    40    86   100   110 |   45    29    32    34    40    86   100   110 |
|      10 |       0.2 MB/s |   45    29    32    34    40    93   104   108 |   45    29    32    34    40    93   104   108 |
|      11 |       0.2 MB/s |   46    30    32    34    37    97   102   116 |   46    30    32    34    37    97   102   116 |
|      12 |       0.2 MB/s |   49    31    33    35    45   100   106   113 |   49    31    33    35    45   100   106   113 |
|      13 |       0.2 MB/s |   52    31    34    36    66   103   112   113 |   52    31    34    36    66   103   112   113 |
|      14 |       0.2 MB/s |   52    31    34    36    69   103   111   117 |   52    31    34    36    69   103   111   118 |
|      15 |       0.2 MB/s |   54    31    34    36    72   104   112   136 |   54    31    34    36    72   104   112   136 |
|      16 |       0.3 MB/s |   57    31    34    37    79   109   116   121 |   57    31    34    37    79   109   116   121 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 2 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.3 MB/s |   44    29    33    35    37    70   127   134 |   44    29    33    35    37    70   127   134 |
|       9 |       0.4 MB/s |   43    30    33    35    36    68    97    98 |   43    30    33    35    36    68    97    98 |
|      10 |       0.4 MB/s |   44    29    32    33    35    90   101   105 |   44    29    32    33    35    90   101   105 |
|      11 |       0.4 MB/s |   48    30    33    35    40    98   102   102 |   48    30    33    35    40    98   102   102 |
|      12 |       0.5 MB/s |   48    31    34    35    41   100   102   104 |   48    31    34    35    41   100   102   104 |
|      13 |       0.5 MB/s |   51    30    33    35    68    99   104   110 |   51    30    33    35    68    99   104   110 |
|      14 |       0.5 MB/s |   54    32    34    36    68   105   120   125 |   54    32    34    36    68   105   120   125 |
|      15 |       0.5 MB/s |   51    29    33    36    70    97   100   102 |   51    29    33    36    70    97   100   102 |
|      16 |       0.5 MB/s |   53    30    32    35    80   104   107   114 |   53    30    32    35    80   104   107   114 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 4 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.7 MB/s |   45    30    33    35    37    92   101   151 |   45    30    33    35    37    92   101   151 |
|       9 |       0.8 MB/s |   45    31    33    35    37    71   115   116 |   45    31    33    35    37    72   115   116 |
|      10 |       0.8 MB/s |   45    30    33    34    38    90   100   121 |   45    30    33    34    38    90   100   121 |
|      11 |       0.8 MB/s |   49    30    33    35    37   100   116   118 |   49    31    33    35    37   100   116   118 |
|      12 |       0.9 MB/s |   50    30    33    36    42   102   107   114 |   50    30    33    36    42   103   107   114 |
|      13 |       0.9 MB/s |   50    31    33    34    38    99   109   111 |   50    31    33    34    38    99   109   111 |
|      14 |       1.0 MB/s |   48    30    32    34    65    92    97    99 |   48    30    32    34    65    92    97    99 |
|      15 |       1.0 MB/s |   51    31    33    34    68    95   101   111 |   51    31    33    34    68    95   101   111 |
|      16 |       0.9 MB/s |   54    29    32    35    89    98   102   112 |   54    29    32    35    89    98   102   112 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 8 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       1.2 MB/s |   47    31    34    35    37    99   113   123 |   47    31    34    35    37    99   113   123 |
|       9 |       1.4 MB/s |   46    31    33    35    36    86   117   129 |   46    31    33    35    36    86   117   129 |
|      10 |       1.6 MB/s |   47    30    32    34    44    96   103   108 |   47    30    32    34    44    96   103   108 |
|      11 |       1.6 MB/s |   48    31    33    35    41   102   112   128 |   49    31    33    35    41   102   112   128 |
|      12 |       1.8 MB/s |   48    31    33    35    42   101   105   108 |   49    31    33    35    42   101   105   108 |
|      13 |       1.9 MB/s |   50    30    32    35    57    98   101   105 |   50    30    32    35    57    98   101   105 |
|      14 |       2.0 MB/s |   50    31    32    35    67    98   107   108 |   50    31    33    35    67    98   107   108 |
|      15 |       2.1 MB/s |   52    31    34    36    68   100   107   110 |   52    31    34    36    68   100   107   110 |
|      16 |       2.0 MB/s |   56    30    33    35    87   107   114   115 |   56    30    33    35    87   107   114   115 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 16 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       2.8 MB/s |   43    32    33    34    36    83   105   117 |   43    32    33    34    36    83   105   117 |
|       9 |       2.8 MB/s |   46    32    34    35    37    93   107   108 |   46    32    34    35    37    93   107   108 |
|      10 |       3.2 MB/s |   46    30    34    35    40    94   101   110 |   46    30    34    35    40    94   101   110 |
|      11 |       3.5 MB/s |   46    32    34    36    37    89   101   102 |   46    32    34    36    37    89   101   102 |
|      12 |       3.7 MB/s |   46    31    33    34    45    91    96   100 |   47    31    33    34    45    91    96   100 |
|      13 |       3.7 MB/s |   50    31    34    36    38    98   106   107 |   50    31    34    36    38    98   107   108 |
|      14 |       3.7 MB/s |   53    31    34    36    66   102   121   126 |   53    31    34    36    67   102   121   126 |
|      15 |       4.1 MB/s |   51    31    33    35    70    97   106   109 |   51    31    33    35    70    97   107   109 |
|      16 |       4.5 MB/s |   52    31    33    35    70    99   101   103 |   52    31    33    35    70    99   101   103 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 32 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       5.2 MB/s |   43    29    32    34    36    69   112   118 |   46    30    34    35    37    83   132   135 |
|       9 |       5.7 MB/s |   44    30    32    34    39    68   101   109 |   48    31    33    35    52    87   111   129 |
|      10 |       5.5 MB/s |   49    29    33    35    37   103   147   150 |   53    30    33    35    38   124   152   170 |
|      11 |       6.4 MB/s |   46    28    32    34    41    97   108   108 |   51    29    33    35    55   115   128   129 |
|      12 |       6.0 MB/s |   48    30    32    34    54    96   103   103 |   54    30    33    35    68   112   122   123 |
|      13 |       6.6 MB/s |   49    29    33    34    49   100   103   112 |   55    30    34    35    68   118   120   132 |
|      14 |       7.3 MB/s |   49    30    32    34    69    97   101   104 |   55    31    33    35    70   114   120   123 |
|      15 |       7.3 MB/s |   53    29    32    35    68   107   111   114 |   60    30    33    36    69   127   129   134 |
|      16 |       7.5 MB/s |   54    30    33    35    76   105   111   112 |   62    31    34    36    96   125   132   132 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 64 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       9.7 MB/s |   42    29    32    35    37    82   101   109 |   50    30    33    36    38    82   140   144 |
|       9 |      10.8 MB/s |   42    31    32    34    36    72    92    97 |   49    31    33    35    39   108   128   137 |
|      10 |      11.2 MB/s |   43    29    32    33    36    92    96   108 |   52    30    33    35    62   111   132   145 |
|      11 |      11.7 MB/s |   47    31    32    34    36    98   108   113 |   55    32    34    35    38   136   148   153 |
|      12 |      12.2 MB/s |   47    29    33    34    38    95   101   108 |   57    30    34    35    67   131   143   149 |
|      13 |      13.1 MB/s |   47    29    31    33    51    91   100   101 |   57    30    32    35    69   126   140   141 |
|      14 |      12.9 MB/s |   51    30    32    34    65   105   110   110 |   63    31    34    35    76   138   149   152 |
|      15 |      13.0 MB/s |   52    30    33    36    68   105   109   114 |   66    31    34    37    86   144   149   154 |
|      16 |      14.2 MB/s |   52    30    32    35    70   101   102   105 |   66    31    34    37    89   140   142   145 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 128 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |      16.1 MB/s |   51    30    35    38    42   119   152   152 |   59    31    37    40    44   155   189   192 |
|       9 |      17.7 MB/s |   50    30    37    40    43    96   112   112 |   60    31    39    42    53   138   156   170 |
|      10 |      20.6 MB/s |   46    28    34    37    40    94    99   105 |   57    29    36    39    53   132   147   152 |
|      11 |      22.2 MB/s |   49    31    35    39    42    96   105   107 |   59    32    36    41    55   130   146   148 |
|      12 |      21.3 MB/s |   52    30    38    40    44    99   104   110 |   65    31    39    43    64   140   154   170 |
|      13 |      21.2 MB/s |   53    29    35    39    47   101   112   112 |   67    30    36    45    78   147   154   155 |
|      14 |      23.9 MB/s |   53    31    36    38    57    98   106   125 |   68    32    37    40    79   149   162   166 |
|      15 |      23.4 MB/s |   55    31    35    41    57   103   109   112 |   72    33    39    50    88   145   150   172 |
|      16 |      25.5 MB/s |   56    28    35    40    91   104   108   109 |   73    31    39    44    99   146   151   163 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 256 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |      31.2 MB/s |   51    31    35    38    42   118   145   151 |   61    32    36    39    53   178   201   205 |
|       9 |      35.3 MB/s |   47    31    34    38    44    92   103   107 |   60    32    36    41    58   120   168   186 |
|      10 |      37.7 MB/s |   49    28    34    38    41   100   110   112 |   63    30    37    40    53   155   170   171 |
|      11 |      36.8 MB/s |   49    28    35    40    44    92   100   102 |   66    30    39    43    63   147   158   162 |
|      12 |      40.6 MB/s |   52    30    35    39    45   104   109   111 |   69    32    38    44    64   159   172   172 |
|      13 |      40.7 MB/s |   53    31    35    40    49   101   105   108 |   72    34    38    47    77   157   167   172 |
|      14 |      35.3 MB/s |   58    30    36    39    76   110   119   134 |   82    32    38    58   105   166   178   181 |
|      15 |      44.0 MB/s |   55    31    34    38    72   105   116   117 |   77    33    37    53   108   155   177   187 |
|      16 |      46.3 MB/s |   55    29    35    39    83    99   110   110 |   78    30    40    53   125   160   170   170 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 512 KB objects (instance-type not found)
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |      57.7 MB/s |   51    29    33    37    42   124   155   160 |   65    31    36    40    50   198   234   242 |
|       9 |      67.5 MB/s |   46    29    34    38    43    90   102   106 |   63    31    37    43    54   160   184   186 |
|      10 |      72.2 MB/s |   49    29    34    38    45    98   102   103 |   65    33    37    42    56   170   178   195 |
|      11 |      71.7 MB/s |   50    31    35    39    42   101   107   110 |   70    33    37    43    61   174   187   190 |
|      12 |      75.0 MB/s |   51    29    35    40    50    95   105   110 |   72    30    39    46    65   166   185   190 |
|      13 |      80.2 MB/s |   51    28    34    36    44   102   107   108 |   76    30    37    48    62   180   187   188 |
|      14 |      74.6 MB/s |   54    29    35    40    69   101   110   111 |   81    34    41    56   109   183   190   198 |
|      15 |      69.8 MB/s |   56    28    35    40    79   108   114   115 |   84    30    40    54   123   189   194   208 |
|      16 |      81.2 MB/s |   59    30    34    38    96   111   123   132 |   90    32    39    56   142   186   196   197 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

User (browser) to Storage

Use cases:

  • Loading images on the website
    • Profile pictures
    • Organization logos/background images
  • Uploading images via Direct Uploads
    • This happens in the background, so latency is less of a concern

Benchmark Results

For these benchmarks, from my laptop, I noticed that the setup process for Hetzner took significantly longer than others. I've included the setup output which include the upload times.

Hetzner Object Storage

My laptop to Hetzner Object Storage (hel1)

Click to expand
--- SETUP --------------------------------------------------------------------------------------------------------------------

Uploading 1 KB objects
 100% |████████████████████████████████████████|  [8s:0s]
Uploading 2 KB objects
 100% |████████████████████████████████████████|  [10s:0s]
Uploading 4 KB objects
 100% |████████████████████████████████████████|  [7s:0s]
Uploading 8 KB objects
 100% |████████████████████████████████████████|  [13s:0s]
Uploading 16 KB objects
 100% |████████████████████████████████████████|  [29s:0s]
Uploading 32 KB objects
 100% |████████████████████████████████████████|  [58s:0s]
Uploading 64 KB objects
 100% |████████████████████████████████████████|  [1m34s:0s]
Uploading 128 KB objects
 100% |████████████████████████████████████████|  [2m19s:0s]
Uploading 256 KB objects
 100% |████████████████████████████████████████|  [3m51s:0s]
Uploading 512 KB objects
 100% |████████████████████████████████████████|  [29s:0s]

--- BENCHMARK ----------------------------------------------------------------------------------------------------------------

Download performance with 1 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.0 MB/s |  223   194   201   210   227   243   375   404 |  230   194   203   213   236   250   404   436 |
|       9 |       0.0 MB/s |  232   197   204   211   218   285   428   471 |  240   198   205   215   241   285   461   471 |
|      10 |       0.0 MB/s |  241   193   201   206   223   306   545   570 |  245   196   202   215   239   306   545   570 |
|      11 |       0.0 MB/s |  242   194   202   210   223   361   455   491 |  247   195   205   213   252   361   455   491 |
|      12 |       0.0 MB/s |  247   194   206   214   240   370   510   528 |  250   194   208   214   247   370   528   571 |
|      13 |       0.0 MB/s |  230   194   198   204   214   321   421   534 |  235   194   199   207   220   321   421   534 |
|      14 |       0.0 MB/s |  235   190   202   207   223   328   469   484 |  240   191   202   207   231   328   469   485 |
|      15 |       0.0 MB/s |  238   196   204   210   225   258   486   488 |  240   196   204   215   225   259   486   488 |
|      16 |       0.0 MB/s |  242   191   217   224   229   256   458   477 |  244   192   218   226   241   256   458   477 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 2 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.1 MB/s |  255   189   199   206   230   427   477   648 |  257   189   200   206   231   427   477   648 |
|       9 |       0.1 MB/s |  250   190   206   213   235   384   503   534 |  250   190   206   214   235   384   504   534 |
|      10 |       0.1 MB/s |  251   191   201   210   234   410   503   513 |  254   191   203   214   247   410   503   513 |
|      11 |       0.1 MB/s |  264   193   203   212   252   455   630   814 |  276   195   204   220   257   478   630   827 |
|      12 |       0.1 MB/s |  233   192   203   214   234   300   377   436 |  234   192   203   215   238   300   377   436 |
|      13 |       0.1 MB/s |  243   191   202   214   221   360   526   532 |  245   195   203   215   240   360   526   532 |
|      14 |       0.1 MB/s |  237   190   202   210   233   336   419   461 |  240   192   202   214   239   336   419   461 |
|      15 |       0.1 MB/s |  230   194   200   210   228   270   419   467 |  234   196   200   211   237   271   454   467 |
|      16 |       0.1 MB/s |  237   194   200   210   228   390   432   504 |  243   194   204   215   235   390   449   504 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 4 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.1 MB/s |  300   197   210   225   406   467   537   628 |  304   200   212   227   409   473   537   628 |
|       9 |       0.1 MB/s |  285   197   206   213   390   447   525   553 |  288   199   208   216   397   447   536   553 |
|      10 |       0.1 MB/s |  295   198   207   220   395   444   474   495 |  302   198   212   234   395   453   474   495 |
|      11 |       0.1 MB/s |  303   195   205   239   391   468   483   499 |  310   201   208   240   398   473   499   516 |
|      12 |       0.1 MB/s |  292   195   205   235   371   437   473   515 |  299   200   211   258   376   451   473   515 |
|      13 |       0.1 MB/s |  320   195   207   254   364   520   678   709 |  330   198   214   254   424   554   683   709 |
|      14 |       0.2 MB/s |  280   194   199   226   346   435   472   510 |  288   194   204   237   348   440   510   512 |
|      15 |       0.1 MB/s |  643   190   238   380  1285  1428  1546  1681 |  655   191   244   380  1288  1431  1546  1683 |
|      16 |       0.2 MB/s |  286   190   197   217   370   458   504   511 |  300   192   203   251   386   474   508   511 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 8 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.2 MB/s |  244   190   194   199   223   410   471   496 |  268   194   204   244   251   431   478   504 |
|       9 |       0.2 MB/s |  243   191   195   199   230   373   401   402 |  264   197   204   236   256   407   447   449 |
|      10 |       0.2 MB/s |  245   191   194   199   235   395   434   477 |  274   196   212   242   265   419   485   524 |
|      11 |       0.2 MB/s |  251   191   197   203   317   373   449   491 |  284   199   217   246   339   410   497   538 |
|      12 |       0.3 MB/s |  264   193   196   206   320   405   453   468 |  297   198   219   249   356   440   525   528 |
|      13 |       0.1 MB/s |  902   203   507   991  1161  1326  1452  1493 |  924   203   553  1024  1183  1333  1452  1541 |
|      14 |       0.3 MB/s |  249   188   197   205   224   410   458   485 |  274   197   208   244   273   420   485   495 |
|      15 |       0.1 MB/s |  714   190   201   237   542  2398  2551  2686 |  736   196   230   261   548  2402  2581  2691 |
|      16 |       0.3 MB/s |  396   199   351   384   415   575   598   669 |  415   201   362   405   431   583   632   669 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 16 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.5 MB/s |  210   190   198   203   215   232   262   274 |  219   196   206   210   223   241   277   286 |
|       9 |       0.3 MB/s |  428   195   203   363   557   808   978  1106 |  436   199   210   371   569   814   987  1113 |
|      10 |       0.4 MB/s |  312   189   202   328   387   439   505   517 |  320   196   210   334   398   444   513   521 |
|      11 |       0.6 MB/s |  267   192   201   209   330   396   573   578 |  274   202   209   218   334   409   573   583 |
|      12 |       0.4 MB/s |  411   193   211   368   545   760   795   908 |  419   202   214   374   554   766   803   916 |
|      13 |       0.4 MB/s |  519   195   323   387   566   973  1145  1292 |  525   198   333   396   576   978  1154  1299 |
|      14 |       0.3 MB/s |  609   196   389   463   993  1198  1227  1262 |  615   202   394   471  1006  1212  1227  1265 |
|      15 |       0.2 MB/s | 1141   194   493  1053  1593  1761  1803  2331 | 1146   203   501  1053  1596  1761  1808  2332 |
|      16 |       0.4 MB/s |  590   202   378   480   811  1012  1103  1115 |  596   202   383   485   823  1017  1106  1124 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 32 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.4 MB/s |  520   203   278   401   637  1213  1219  1257 |  531   213   289   410   650  1219  1237  1263 |
|       9 |       0.9 MB/s |  314   193   205   350   377   448   527   529 |  324   199   214   365   394   458   540   541 |
|      10 |       1.2 MB/s |  220   194   200   204   212   244   434   445 |  228   201   206   213   221   251   437   452 |
|      11 |       0.6 MB/s |  511   195   223   407   753   849  1007  1408 |  522   201   227   413   760   858  1016  1414 |
|      12 |       0.7 MB/s |  447   199   252   377   594   755   764   768 |  454   208   257   382   600   761   770   774 |
|      13 |       0.6 MB/s |  435   194   220   354   405   598  1524  1541 |  441   200   228   359   414   602  1534  1542 |
|      14 |       0.6 MB/s |  675   196   387   804   971   998  1010  1033 |  681   198   389   810   979  1002  1022  1037 |
|      15 |       0.7 MB/s |  579   242   385   462   865   972  1012  1014 |  585   253   389   467   867   979  1024  1024 |
|      16 |       0.8 MB/s |  544   195   427   558   635   790   850   890 |  551   202   433   582   642   796   852   895 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 64 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       1.3 MB/s |  332   191   198   345   416   518   559   589 |  344   202   208   352   424   520   567   603 |
|       9 |       1.3 MB/s |  425   194   221   360   434   861   930   998 |  434   202   229   378   442   869   937  1000 |
|      10 |       1.9 MB/s |  300   195   230   282   355   392   417   705 |  312   204   239   295   362   395   446   718 |
|      11 |       2.0 MB/s |  297   195   217   277   353   401   437   491 |  307   201   223   290   363   409   443   507 |
|      12 |       1.7 MB/s |  394   196   216   370   423   628   768   802 |  408   203   223   375   563   641   774   808 |
|      13 |       1.3 MB/s |  433   196   203   212   249  1632  1642  1651 |  443   202   210   224   278  1639  1649  1653 |
|      14 |       1.7 MB/s |  428   203   367   404   535   618   636   786 |  435   206   374   407   536   625   665   786 |
|      15 |       2.7 MB/s |  294   197   210   249   352   398   416   625 |  301   200   218   256   361   401   424   631 |
|      16 |       2.9 MB/s |  293   196   210   242   349   415   558   572 |  302   203   223   251   355   419   558   584 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 128 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       3.0 MB/s |  287   192   199   206   401   432   547   619 |  296   201   208   213   403   441   558   629 |
|       9 |       2.7 MB/s |  366   192   207   372   425   503   636   799 |  375   201   219   384   437   509   636   809 |
|      10 |       3.2 MB/s |  351   196   204   366   421   520   613   708 |  359   203   214   371   430   527   621   723 |
|      11 |       2.6 MB/s |  462   196   290   415   553   699   879   922 |  470   203   300   423   563   711   888   929 |
|      12 |       2.2 MB/s |  635   194   322   539   949  1022  1081  1113 |  644   200   333   545   952  1037  1088  1120 |
|      13 |       2.1 MB/s |  572   199   395   564   757   914  1147  1164 |  587   204   411   573   757   937  1154  1173 |
|      14 |       1.9 MB/s |  609   195   387   579   689  1064  1393  1396 |  620   199   397   588   720  1089  1399  1405 |
|      15 |       0.6 MB/s | 1687   192   228   476   583  9337  9576  9758 | 1694   202   239   491   595  9339  9576  9762 |
|      16 |       4.7 MB/s |  338   199   225   363   380   417   477   624 |  344   200   229   369   391   424   482   631 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 256 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       7.8 MB/s |  233   194   200   209   237   292   452   505 |  243   201   209   219   245   303   465   514 |
|       9 |       7.1 MB/s |  258   196   202   207   279   387   523   524 |  270   202   208   217   287   422   533   535 |
|      10 |       1.2 MB/s | 1960   199   370   532  1286  7375  7410  7414 | 1969   208   381   538  1293  7390  7415  7421 |
|      11 |       9.7 MB/s |  258   198   205   210   262   403   455   509 |  267   205   211   219   266   406   464   514 |
|      12 |      10.2 MB/s |  236   191   203   210   232   287   451   461 |  245   200   209   224   242   296   457   466 |
|      13 |      11.7 MB/s |  244   197   204   211   222   346   439   443 |  256   201   211   220   261   353   445   453 |
|      14 |      13.4 MB/s |  234   195   207   214   220   256   432   490 |  245   204   214   224   238   259   444   500 |
|      15 |       6.7 MB/s |  511   200   217   331   841  1177  1225  1237 |  521   210   227   335   866  1181  1231  1243 |
|      16 |       4.6 MB/s |  738   200   247   684  1253  1420  1581  1822 |  751   221   261   696  1256  1424  1585  1834 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 512 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       7.6 MB/s |  423   200   366   403   471   568   779   830 |  440   210   379   415   495   576   836   869 |
|       9 |       7.3 MB/s |  580   200   222   362   557  1656  1694  1729 |  593   207   230   369   564  1660  1701  1745 |
|      10 |      13.3 MB/s |  309   194   212   248   393   462   578   766 |  330   208   230   262   406   476   617   771 |
|      11 |       9.0 MB/s |  529   203   213   259   460  1389  1630  1654 |  552   214   222   307   531  1417  1641  1663 |
|      12 |       8.9 MB/s |  453   196   229   284   461   719  1502  1623 |  480   219   260   363   476   740  1514  1637 |
|      13 |       9.4 MB/s |  408   200   280   334   380   548  1373  1379 |  453   226   321   366   497   572  1394  1401 |
|      14 |       4.6 MB/s | 1396   364  1005  1272  1800  2083  3238  3445 | 1448   397  1046  1295  1831  2102  3262  3465 |
|      15 |       4.8 MB/s | 1177   442   692  1020  1694  1936  2335  2336 | 1215   459   707  1178  1740  1980  2364  2372 |
|      16 |       4.7 MB/s | 1515   357   616  1621  2106  2532  2676  2697 | 1540   388   649  1651  2131  2550  2694  2721 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

AWS S3

My laptop to AWS S3 (us-east-2)

Click to expand
--- SETUP --------------------------------------------------------------------------------------------------------------------

Uploading 1 KB objects
 100% |████████████████████████████████████████|  [2s:0s]
Uploading 2 KB objects
 100% |████████████████████████████████████████|  [2s:0s]
Uploading 4 KB objects
 100% |████████████████████████████████████████|  [2s:0s]
Uploading 8 KB objects
 100% |████████████████████████████████████████|  [2s:0s]
Uploading 16 KB objects
 100% |████████████████████████████████████████|  [2s:0s]
Uploading 32 KB objects
 100% |████████████████████████████████████████|  [2s:0s]
Uploading 64 KB objects
 100% |████████████████████████████████████████|  [3s:0s]
Uploading 128 KB objects
 100% |████████████████████████████████████████|  [3s:0s]
Uploading 256 KB objects
 100% |████████████████████████████████████████|  [3s:0s]
Uploading 512 KB objects
 100% |████████████████████████████████████████|  [10s:0s]

--- BENCHMARK ----------------------------------------------------------------------------------------------------------------

Download performance with 1 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.1 MB/s |  143    88    94    98   106   328   394   415 |  144    88    94    99   106   328   398   415 |
|       9 |       0.1 MB/s |  145    87    96   106   135   302   362   383 |  145    88    96   106   136   302   362   383 |
|      10 |       0.1 MB/s |  131    89    94   102   146   208   292   293 |  132    89    95   102   146   208   292   293 |
|      11 |       0.1 MB/s |  158    86    97   103   170   304   401   413 |  159    86    97   103   170   304   401   413 |
|      12 |       0.1 MB/s |  114    90    93    99   110   177   197   198 |  114    90    94    99   110   177   197   198 |
|      13 |       0.1 MB/s |  173    91   101   110   202   398   405   405 |  173    91   102   110   202   398   405   405 |
|      14 |       0.1 MB/s |  167    94   100   113   212   312   378   392 |  168    94   100   113   212   312   378   392 |
|      15 |       0.1 MB/s |  144    93    98   107   171   235   271   274 |  144    93    98   107   171   235   271   274 |
|      16 |       0.1 MB/s |  175    91    97   106   214   375   394   404 |  176    92    99   106   214   375   395   404 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 2 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.1 MB/s |  126    86    92    97   101   244   299   342 |  126    86    92    97   103   245   299   342 |
|       9 |       0.1 MB/s |  135    87    93    97   105   283   358   365 |  135    87    94    97   105   283   361   365 |
|      10 |       0.1 MB/s |  145    86    95    99   119   292   391   394 |  146    86    96   100   119   292   393   394 |
|      11 |       0.1 MB/s |  150    87    97   104   176   290   349   350 |  150    87    97   104   176   294   349   350 |
|      12 |       0.2 MB/s |  119    91    96   106   123   172   205   206 |  119    91    96   106   123   172   205   206 |
|      13 |       0.1 MB/s |  161    87    98   108   199   299   398   398 |  162    87    98   108   201   299   398   399 |
|      14 |       0.1 MB/s |  168    92    98   107   193   350   371   371 |  168    92    98   107   193   352   371   371 |
|      15 |       0.2 MB/s |  127    88    95   102   149   212   231   244 |  128    89    95   102   149   212   231   244 |
|      16 |       0.2 MB/s |  143    93   102   130   171   205   210   214 |  143    93   102   130   171   205   210   214 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 4 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.3 MB/s |  100    88    93    95    99   111   139   155 |  100    88    94    96   101   111   139   155 |
|       9 |       0.2 MB/s |  134    88    94    97   106   267   348   349 |  135    88    94    97   106   267   348   351 |
|      10 |       0.3 MB/s |  131    89    93    98   181   190   280   282 |  131    89    94   100   181   190   280   282 |
|      11 |       0.2 MB/s |  155    91    95   103   181   307   382   384 |  156    92    96   104   181   307   382   384 |
|      12 |       0.3 MB/s |  142    92    98   105   182   254   291   296 |  142    92    98   105   182   254   291   296 |
|      13 |       0.3 MB/s |  162    95   102   107   189   303   392   393 |  164    95   102   107   191   303   392   393 |
|      14 |       0.3 MB/s |  142    90    97   112   171   205   276   284 |  142    90    97   112   172   205   276   284 |
|      15 |       0.3 MB/s |  171    88    96   109   229   358   366   369 |  172    90    97   109   229   360   367   369 |
|      16 |       0.3 MB/s |  166    88    95   109   208   308   357   404 |  167    88    95   109   214   308   357   405 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 8 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       0.5 MB/s |  117    89    94   100   110   185   221   240 |  117    90    94   101   110   186   222   242 |
|       9 |       0.4 MB/s |  161    92   101   109   193   287   389   469 |  162    92   101   110   193   287   390   469 |
|      10 |       0.6 MB/s |  131    91    98   106   152   199   287   287 |  131    91    98   107   152   199   287   288 |
|      11 |       0.6 MB/s |  128    87    95   100   151   196   259   278 |  128    87    96   101   152   196   259   278 |
|      12 |       0.5 MB/s |  163    94    99   108   185   343   387   388 |  164    94   100   108   185   344   387   389 |
|      13 |       0.7 MB/s |  118    92    99   103   119   167   205   208 |  119    92    99   103   121   167   205   208 |
|      14 |       0.6 MB/s |  167    89    95   101   215   369   379   410 |  168    90    97   101   216   371   379   410 |
|      15 |       0.6 MB/s |  177    91    96   110   216   373   389   389 |  178    92    98   110   216   373   390   391 |
|      16 |       0.8 MB/s |  129    87   100   123   140   173   190   195 |  133    88   101   126   142   176   195   248 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 16 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       1.0 MB/s |  110    91    97   105   117   133   156   163 |  121    91   100   106   125   172   195   205 |
|       9 |       0.9 MB/s |  137    90    96   104   173   213   290   292 |  141    90    97   106   176   214   290   292 |
|      10 |       1.1 MB/s |  137    88    94   100   108   260   343   350 |  140    89    95   101   167   261   343   351 |
|      11 |       1.2 MB/s |  134    88    95   102   179   231   287   297 |  134    88    96   102   179   232   287   297 |
|      12 |       1.1 MB/s |  154    89    94    98   188   338   364   378 |  155    90    95    98   188   339   364   378 |
|      13 |       1.2 MB/s |  145    90    95   102   175   269   337   340 |  151    92    96   106   175   282   340   341 |
|      14 |       1.1 MB/s |  148    90    95   101   191   266   319   351 |  168    90    97   111   221   314   341   351 |
|      15 |       1.0 MB/s |  184    91    96   118   247   394   413   415 |  198    91    98   133   248   412   491   495 |
|      16 |       1.3 MB/s |  178    91    94   103   217   378   411   412 |  184    92    98   106   246   380   413   423 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 32 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       1.7 MB/s |  107    90    94    97   104   141   188   188 |  139    91    95    99   169   244   270   550 |
|       9 |       1.4 MB/s |  135    86    92    97   110   294   343   345 |  177    88    95   110   226   319   421   421 |
|      10 |       1.5 MB/s |  141    89    95    97   103   296   363   366 |  182    90    97   102   245   379   439   548 |
|      11 |       1.8 MB/s |  152    90    94   101   119   314   396   401 |  178    91    98   103   194   381   457   478 |
|      12 |       1.5 MB/s |  176    90   103   126   209   361   400   400 |  204    93   108   136   217   434   481   509 |
|      13 |       1.8 MB/s |  170    91   106   115   179   399   399   400 |  209    97   113   176   280   474   475   558 |
|      14 |       2.0 MB/s |  161    89    96   104   173   324   387   388 |  198    90   101   149   277   387   465   470 |
|      15 |       2.0 MB/s |  162    87    96   115   200   321   379   395 |  197    92    99   172   258   353   454   472 |
|      16 |       1.9 MB/s |  176    88    94   100   243   372   381   405 |  224    91    96   160   318   478   525   611 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 64 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       2.5 MB/s |  133    89    93    97   103   314   376   401 |  171    91    96    99   181   441   451   486 |
|       9 |       2.2 MB/s |  144    88    96   108   129   292   353   386 |  206    91   106   155   249   427   556   661 |
|      10 |       3.0 MB/s |  144    88    95    98   106   366   377   378 |  195    95    98   108   204   451   462   521 |
|      11 |       3.1 MB/s |  149    88    93   100   123   346   371   375 |  204    90    96   168   266   417   518   582 |
|      12 |       3.5 MB/s |  142    89    93    99   190   293   381   384 |  198    92   100   173   198   358   480   549 |
|      13 |       2.6 MB/s |  165    86    95   105   199   372   395   402 |  233    91   105   171   313   465   624   749 |
|      14 |       2.8 MB/s |  176    91    99   109   203   396   403   415 |  253    95   112   179   295   514   607   822 |
|      15 |       3.4 MB/s |  174    88    92    98   217   394   412   424 |  234    90    97   174   286   496   551   575 |
|      16 |       3.1 MB/s |  182    89    98   105   291   377   411   420 |  257    95   107   177   367   525   573   756 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 128 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       4.2 MB/s |  140    86    97   101   110   267   420   431 |  193    89   100   105   181   410   650   978 |
|       9 |       4.4 MB/s |  140    93    98   102   111   292   370   373 |  227    95   103   171   222   429   924  1365 |
|      10 |       4.8 MB/s |  149    95    99   104   123   306   384   386 |  221    97   110   176   281   473   552   626 |
|      11 |       3.3 MB/s |  160    95   100   105   136   331   424   431 |  305    97   104   114   354   868   996  1202 |
|      12 |       5.7 MB/s |  160    96   102   106   150   362   380   384 |  233   102   107   179   313   508   549   625 |
|      13 |       4.9 MB/s |  172    93   109   121   199   358   373   374 |  264   101   118   189   335   526   674   752 |
|      14 |       5.2 MB/s |  190    95   108   148   211   379   385   396 |  287    98   148   223   361   577   606   662 |
|      15 |       4.1 MB/s |  187    97   108   121   239   377   392   395 |  339    99   115   164   529   915   986  1068 |
|      16 |       4.2 MB/s |  182    93    99   104   369   387   402   404 |  355    96   106   186   536   936  1021  1022 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 256 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       6.6 MB/s |  148    91   101   105   112   360   429   441 |  253    95   104   109   201   657  1217  1448 |
|       9 |       8.8 MB/s |  143    90    99   105   114   274   376   399 |  229    98   104   112   264   465   728  1360 |
|      10 |      10.1 MB/s |  149    94    99   107   118   307   367   382 |  216    97   106   114   275   506   621   700 |
|      11 |       8.0 MB/s |  165    95   103   111   178   336   390   390 |  273   101   109   201   337   607   678   724 |
|      12 |       7.4 MB/s |  158    91    97   101   113   381   388   410 |  331    95   102   110   196   731  1477  1676 |
|      13 |       7.5 MB/s |  164    91   100   109   206   353   370   378 |  294    93   107   121   373   596  1653  1654 |
|      14 |       5.9 MB/s |  180    90   102   118   218   391   396   403 |  379    97   113   170   349  1299  1488  1562 |
|      15 |       8.5 MB/s |  173    87    99   106   114   377   386   445 |  312    92   105   181   576   684  1109  1468 |
|      16 |      12.5 MB/s |  188    94   105   123   270   370   373   373 |  287    98   112   169   430   622   719   721 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Download performance with 512 KB objects
                           +-------------------------------------------------------------------------------------------------+
                           |            Time to First Byte (ms)             |            Time to Last Byte (ms)              |
+---------+----------------+------------------------------------------------+------------------------------------------------+
| Threads |     Throughput |  avg   min   p25   p50   p75   p90   p99   max |  avg   min   p25   p50   p75   p90   p99   max |
+---------+----------------+------------------------------------------------+------------------------------------------------+
|       8 |       7.8 MB/s |  120    89    98   107   117   187   216   227 |  392    98   109   127   336   586  2414  2674 |
|       9 |      12.0 MB/s |  157    81   105   118   140   357   378   381 |  323    90   133   205   452   703   881  1204 |
|      10 |       7.1 MB/s |  156    92   102   110   132   373   382   390 |  345   108   121   167   314   813  2185  2201 |
|      11 |       8.5 MB/s |  150    88    95   101   110   367   374   380 |  447    98   104   110   209  2111  2275  2316 |
|      12 |      16.5 MB/s |  170    93   102   116   169   396   410   411 |  309    99   124   200   439   720   838   838 |
|      13 |       8.8 MB/s |  177    91   105   122   176   393   396   398 |  377    98   131   210   489   738   948  2310 |
|      14 |      10.7 MB/s |  173    93   100   109   177   377   387   389 |  400   102   111   390   511   805   824  1832 |
|      15 |       8.8 MB/s |  196    92   104   123   303   407   423   424 |  497   101   131   195   602   759  2211  2267 |
|      16 |       9.4 MB/s |  191    94    99   111   303   404   405   423 |  454   104   116   182   672   789  2083  2176 |
+---------+----------------+------------------------------------------------+------------------------------------------------+

Analyzed Results

https://docs.google.com/spreadsheets/d/1otN5-t1f7BhSFV5NrbBqDFT1WWLY_YYtc_YaDgA3Ndk/edit?usp=sharing

First Byte (p90) Last Byte (p90) Thoughput
AWS S3 to Hetzner Server 97.10 ms 118.95 ms 15.75 MB/s
Hetzner Object Storage to Hetzner Server 289.11 ms 300.14 ms 5.36 MB/s
AWS S3 to Macbook 305.58 ms 439.80 ms 2.97 MB/s
Hetzner Object Storage to Macbook 854.24 ms 863.77 ms 2.18 MB/s

Switching our object storage from AWS (us-east-2) to Hetzner (hel1) will result in:

  • 297.75% increase in First Byte (p90) for our server
  • 252.33% increase in Last Byte (p90) for our server
  • 34.02% decrease in throughput for our server

  • 279.55% increase in First Byte (p90) for web clients

  • 196.40% increase in Last Byte (p90) for web clients
  • 73.25% decrease in throughput for web clients

How to run benchmarks

  1. Follow install instructions: https://github.com/dvassallo/s3-benchmark
  2. Set up AWS/Hetzner S3 credentials: https://aws.amazon.com/blogs/security/a-new-and-standardized-way-to-manage-credentials-in-the-aws-sdks/
    • Create a file called ~/.aws/credentials
    • You can use AWS Profiles to store both the AWS and Hetzner credentials.
    • Use export AWS_PROFILE=your-profile-name to set the profile before running the benchmark.
    • Alternatively, you can set the AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables.
  3. Run benchmarks for Hetzner and AWS S3
    export AWS_PROFILE=hetzner && ./s3-benchmark -region=hel1 -endpoint=https://hel1.your-objectstorage.com -upload-csv=data
    
    export AWS_PROFILE=aws && ./s3-benchmark -region=us-east-2 -upload-csv=data
    
  4. Grab result CSV files from the buckets using the provider's dashboard.