Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the acf domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/functions.php on line 6131

Deprecated: Creation of dynamic property ACF::$fields is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/fields.php on line 138

Deprecated: Creation of dynamic property acf_loop::$loops is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/loop.php on line 28

Deprecated: Creation of dynamic property ACF::$loop is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/loop.php on line 269

Deprecated: Creation of dynamic property ACF::$revisions is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/revisions.php on line 397

Deprecated: Creation of dynamic property acf_validation::$errors is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/validation.php on line 28

Deprecated: Creation of dynamic property ACF::$validation is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/validation.php on line 214

Deprecated: Creation of dynamic property acf_form_customizer::$preview_values is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/forms/form-customizer.php on line 28

Deprecated: Creation of dynamic property acf_form_customizer::$preview_fields is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/forms/form-customizer.php on line 29

Deprecated: Creation of dynamic property acf_form_customizer::$preview_errors is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/forms/form-customizer.php on line 30

Deprecated: Creation of dynamic property ACF::$form_front is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/forms/form-front.php on line 598

Deprecated: Creation of dynamic property acf_form_widget::$preview_values is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/forms/form-widget.php on line 34

Deprecated: Creation of dynamic property acf_form_widget::$preview_reference is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/forms/form-widget.php on line 35

Deprecated: Creation of dynamic property acf_form_widget::$preview_errors is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/forms/form-widget.php on line 36

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the all-in-one-wp-migration domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/functions.php on line 6131

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/functions.php:6131) in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/wp_plugin/wp_plugin.php on line 23

Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/wp-super-cache/wp-cache-phase2.php on line 54

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/functions.php:6131) in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/wp-super-cache/wp-cache-phase2.php on line 1539

Deprecated: strtolower(): Passing null to parameter #1 ($string) of type string is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/wp-super-cache/wp-cache-phase2.php on line 828

Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the rocket domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/functions.php on line 6131

Deprecated: Creation of dynamic property acf_field_oembed::$width is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/fields/class-acf-field-oembed.php on line 31

Deprecated: Creation of dynamic property acf_field_oembed::$height is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/fields/class-acf-field-oembed.php on line 32

Deprecated: Creation of dynamic property acf_field_google_map::$default_values is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/fields/class-acf-field-google-map.php on line 33

Deprecated: Creation of dynamic property acf_field__group::$have_rows is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/includes/fields/class-acf-field-group.php on line 31

Deprecated: Creation of dynamic property acf_field_clone::$cloning is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-clone.php on line 34

Deprecated: Creation of dynamic property acf_field_clone::$have_rows is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-pro/pro/fields/class-acf-field-clone.php on line 35

Deprecated: Creation of dynamic property jh_acf_field_table::$settings is deprecated in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-content/plugins/advanced-custom-fields-table-field/class-jh-acf-field-table.php on line 23

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/functions.php:6131) in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/functions.php:6131) in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/functions.php:6131) in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/functions.php:6131) in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/functions.php:6131) in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/functions.php:6131) in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/functions.php:6131) in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/rest-api/class-wp-rest-server.php on line 1902

Warning: Cannot modify header information - headers already sent by (output started at /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/functions.php:6131) in /var/www/vhosts/studiogo.tech/httpdocs/upcloudold/wp-includes/rest-api/class-wp-rest-server.php on line 1902
{"id":27952,"date":"2019-09-23T15:21:26","date_gmt":"2019-09-23T12:21:26","guid":{"rendered":"https:\/\/upcloud.com\/container-performance-cloud-providers"},"modified":"2019-09-23T15:21:26","modified_gmt":"2019-09-23T12:21:26","slug":"container-performance-cloud-providers","status":"publish","type":"post","link":"https:\/\/studiogo.tech\/upcloudold\/container-performance-cloud-providers\/","title":{"rendered":"Container performance on popular cloud providers"},"content":{"rendered":"

Containers are by no means a new thing at this point. However, their popularity is certainly not declining thanks to the convenience and ease of use they offer. Just about any app can be containerized for quick scalability but are you compromising on something when doing so? What should you expect for container performance due to the additional virtualization layer? The only way to find out is to test it yourself!<\/p>\n

While it’s easy to compare providers on simple benchmark results, getting a more in-depth look into the cost and performance metrics takes a bit more effort. Throw containers into the mix and you have quite the equation to balance out. Therefore, to get a better understanding of the costs and benefits of containers, we decided to put some container configurations through their paces.<\/p>\n

Test hosting on UpCloud!<\/a><\/p>\n

Containers in the cloud<\/h2>\n

The move towards cloud infrastructure has been long supported in part by the savings offered by competitive pricing and reduced administrative overhead. Users can achieve further cost reductions by making efficient use of their resources and containers can provide a convenient method for fully utilising cloud servers. But too much of any good thing can be to the detriment of its benefits.<\/p>\n

One of the main selling points of containers is the ability to isolate the applications running in separate containers without adding too much in the way of overhead. However, it’s a commonly held belief that containers impose performance costs. Due to the extra layer of virtualization, containerized applications might not achieve quite the same performance as those running natively on the OS.\u00a0This was still the case some years ago<\/a>\u00a0but technology has come a long way since.<\/p>\n

As self-hosting server hardware is becoming rarer, containers more often run on top of already virtualized systems such as cloud servers. While each cloud server runs a full guest operating system, containers share the same kernel between themselves and the cloud host. Then again, thanks to the flexibility of the cloud, you can easily deploy any number of cloud servers with varying configuration.<\/p>\n

The question then turns to the balance between the numbers of individual cloud servers and hosted containers. Although the final infrastructure from a single container’s\u00a0the point of view might be mostly the same, the application scalability and performance can differ. Therefore, it becomes ever more important to validate the optimal number of containers per cloud server resources.<\/p>\n

Testing the theory<\/h2>\n

It would be a simple task to just deploy the largest configuration available and test how many containers you can stuff into it. However, the number of resources a single container can utilise will depend largely on the containerized application. That is why, instead of attempting to simulate a real-world use case, we decided to fully stress the servers by running a varying number of concurrent CPU benchmarks within Docker containers.<\/p>\n

To save time and manual work, the cloud servers were deployed using Terraform to create a clean environment for each run. Then as we needed to be able to quantify the container performance objectively, we selected to use Sysbench to run CPU benchmarks. Although Sysbench does not offer a ready-made container, it was a simple task of building one using the latest Ubuntu container along with the appropriate packages.\u00a0Each server was also benchmarked running Sysbench natively on the OS to create a baseline.<\/p>\n

The results speak well for the performance improvement attained by containerized application. Containers were able to reach performance numbers within the margin of error of the uncontainerized natively run baseline. Below you can see example performance numbers per container per number of containers on UpCloud. The number of threads per container was adjusted according to the total number of containers to fully utilise each server configuration, oversubscribing where necessary.<\/p>\n

 <\/p>\n\n\n\n\n\n\n\n\n\n\n\n\n\n
Performance per container (events\/s)<\/th>\n<\/tr>\n
<\/th>\nNative<\/th>\n1<\/th>\n2<\/th>\n4<\/th>\n6<\/th>\n8<\/th>\n12<\/th>\n16<\/th>\n20<\/th>\n<\/tr>\n<\/tbody>\n
1CPU-2GB<\/td>\n410.05<\/td>\n409.76<\/td>\n<\/tr>\n
2CPU-4GB<\/td>\n803.52<\/td>\n803.33<\/td>\n400.33<\/td>\n<\/tr>\n
4CPU-8GB<\/td>\n1640.29<\/td>\n1648.11<\/td>\n829.04<\/td>\n410.42<\/td>\n<\/tr>\n
6CPU-16GB<\/td>\n2465.24<\/td>\n2616.64<\/td>\n1316.46<\/td>\n724.98<\/td>\n414.1<\/td>\n<\/tr>\n
8CPU-32GB<\/td>\n3895.53<\/td>\n3842.9<\/td>\n1928.47<\/td>\n959.51<\/td>\n658.08<\/td>\n487.61<\/td>\n<\/tr>\n
12CPU-48GB<\/td>\n5921.93<\/td>\n5881.14<\/td>\n2963.14<\/td>\n1440.09<\/td>\n988.49<\/td>\n707.62<\/td>\n493.95<\/td>\n<\/tr>\n
16CPU-64GB<\/td>\n7814.03<\/td>\n7256.47<\/td>\n3924.92<\/td>\n1973.86<\/td>\n1309.65<\/td>\n981.08<\/td>\n705.12<\/td>\n494.38<\/td>\n<\/tr>\n
20CPU-96GB<\/td>\n9896.47<\/td>\n9899.97<\/td>\n4949.09<\/td>\n2474.39<\/td>\n1639.14<\/td>\n1259.72<\/td>\n895.73<\/td>\n685.98<\/td>\n494.87<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n

 <\/p>\n

We at UpCloud<\/a> have always had a big focus on performance and we stand by our slogan of offering the world’s fastest cloud servers. Therefore we did not shy away from comparing our servers<\/a> with some of the most popular cloud providers. The tests were run on a long list of different cloud server configurations from DigitalOcean, AWS, Linode, and of course, UpCloud.<\/p>\n

Single-core performance for containers immediately reflects the power differences between the providers. Our cloud servers are consistently able to edge out better single-threaded performance regardless of the number of CPU cores allocated to the system. Note that Linode and AWS do not offer all the same configuration options as DigitalOcean and UpCloud and are therefore absent in certain results.<\/p>\n

\"\"<\/p>\n

Consequently, multi-core performance in containers follows the same trend.\u00a0While smaller configurations remain relatively closely grouped, UpCloud attains a clear lead as the number of usable CPU cores increases.<\/p>\n

\"\"<\/p>\n

Although containers are certainly nothing magical, just as other multithreaded workloads, containerized apps can be more efficient in using resources from the host system. Depending on how continuously each container utilises the available resources, it might be advantageous to even oversubscribe the server. This, of course, has the downside of reducing the performance available to individual containers.<\/p>\n

The take-away<\/h2>\n

One of the advantages of containerized applications is the possibility of running multiple instances of the same software on a single cloud server. This allows you to increase the number of threads even if the application itself is not multithreaded, as long as the final use case supports it. You then have the option to split the expected workload between multiple cloud servers by deploying a cluster. Furthermore, as we’ve shown above, containers are fully capable of providing competitive performance should your application need it.<\/p>\n

Thanks to the fixed monthly pricing options on most popular cloud providers, the expected resource costs are easily calculated. Therefore, it’s possible to plan your infrastructure around the optimal number of multithreaded applications per cloud server resources without letting the costs get out of hand. Additionally, by carefully planning your server configurations, you might also be able to save on your infrastructure costs\u00a0by optimizing the resource split between your cloud servers.<\/p>\n

Although the scope of these benchmarks did not include stress tests to a point that would have run into bottlenecks, certain limitations of the container technology could pose restrictions. Mainly, as containers share the underlying kernel, some workloads might become constricted by the shared resources. The effects of kernel bottlenecks are further discussed at Hackernoon.com in\u00a0an article\u00a0investigating low performance in containers<\/a>.<\/p>\n

\n

Not on UpCloud yet? Sign up for a free trial!<\/h3>\n

Benchmark our cloud servers for yourself.<\/p>\n

Start your free trial now!<\/a><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"

Containers are great for easy app deployment and scaling but is that all? This comparison looks into container performance on popular cloud providers.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[97],"tags":[],"class_list":["post-27952","post","type-post","status-publish","format-standard","hentry","category-comparisons"],"acf":[],"_links":{"self":[{"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/posts\/27952","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/comments?post=27952"}],"version-history":[{"count":0,"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/posts\/27952\/revisions"}],"wp:attachment":[{"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/media?parent=27952"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/categories?post=27952"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/tags?post=27952"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}