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":27881,"date":"2017-08-18T17:46:29","date_gmt":"2017-08-18T14:46:29","guid":{"rendered":"https:\/\/upcloud.com\/case-studies\/sportmonks"},"modified":"2023-09-05T11:55:21","modified_gmt":"2023-09-05T11:55:21","slug":"sportmonks","status":"publish","type":"case-study","link":"https:\/\/studiogo.tech\/upcloudold\/case-study\/sportmonks\/","title":{"rendered":"How SportMonks increased their API performance to new heights"},"content":{"rendered":"\r\n
\r\n
\"\"<\/figure>\r\n<\/div>\r\n\r\n\r\n\r\n

About\u00a0SportMonks<\/h2>\r\n\r\n\r\n\r\n

SportMonks\u00a0started out as\u00a0a company under the name Soccerema with an idea for a web-based football game<\/a>, soccer to those from the US, using real match results and player information. The game needed data\u00a0on all football matches, players, location,\u00a0games and a lot more.<\/p>\r\n\r\n\r\n\r\n

While the game itself did not get a lot of players,\u00a0we received\u00a0a number\u00a0of\u00a0questions\u00a0about our data. Due to the popular demand, we developed an API to match data. This turned out to be the start of a new part in our story\u00a0and how\u00a0the data used for the game became the product. We pivoted to publishing and making the data available to all and so SportMonks\u00a0was born.<\/p>\r\n\r\n\r\n\r\n

We offer a public API to our sports data at SportMonks.com. Though we have our\u00a0origins\u00a0in football (or soccer), we are expanding to other sports like Formula 1 racing, Basketball, Baseball and Hockey to name a few.<\/p>\r\n\r\n\r\n\r\n

With the help of a cloud hosting provider Twisted Bytes<\/a>, we migrated our\u00a0old servers\u00a0from DigitalOcean, which struggled with the load, to a highly optimized set of cloud servers that\u00a0are able to handle a lot more customers. We\u00a0continue to get suggestions for ways to optimize the code and resources from Twisted Bytes. We are really happy about having chosen UpCloud and following up on their recommendation to get in contact with Twisted Bytes.<\/p>\r\n\r\n\r\n\r\n

Previous challenges<\/h2>\r\n\r\n\r\n\r\n

When we started the API, we had\u00a0built everything by using the standard way to create and manage cloud servers from the framework we use, Laravel. But when the number of customers and API requests began to increase\u00a0the servers started struggling to handle it all. In an attempt to cope with the increased demand\u00a0we scaled up\u00a0our backend to the extreme.<\/p>\r\n\r\n\r\n\r\n

We are developers not system administrators or DevOps, therefore we needed somebody with the knowledge about squeezing every bit of performance out of the cloud servers. Because simply adding\u00a0more resources will not always solve the developers’ problems.<\/p>\r\n\r\n\r\n\r\n

After working with Twisted Bytes and UpCloud to migrate and tune our new cloud servers, it became clear that the old setup could have handled the load\u00a0with better optimisation\u00a0according to the size of the backend. But default setups do\u00a0not provide the level of finesse required.\u00a0We also needed someone who could take the time to monitor the application, the site, and the servers to see what is going on.<\/p>\r\n\r\n\r\n\r\n

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

Hosting on UpCloud<\/h2>\r\n\r\n\r\n\r\n

We are using the basic services from UpCloud: high-performance cloud servers and of course their incredibly fast storage. We have not had much need for\u00a0anything else because our systems are managed by Twisted Bytes. They monitor and track the growth of usage and will tell us\u00a0when rescaling or additional\u00a0resources are needed.\u00a0Thanks to the\u00a0stable configuration, we\u00a0have not needed to add, remove, or resize our cloud servers very often. As such, our service’s costs are easily predictable.<\/p>\r\n\r\n\r\n\r\n

Our setup\u00a0consists of a load balanced set of API servers and of course\u00a0a couple of hosts for the database, caching and other services. This setup enables us to\u00a0adjust the backend capabilities when needed without any outages to the\u00a0API. Any changes can be\u00a0done fast and easy\u00a0thanks to\u00a0UpCloud’s simple web\u00a0console.<\/p>\r\n\r\n\r\n\r\n

Improvements<\/h2>\r\n\r\n\r\n\r\n

Our switch to UpCloud helped us to focus on developing the API\u00a0to include more sports such as Formula 1. We are now sure the servers are taken care of by Twisted Bytes and UpCloud. And as developers,\u00a0we can trust in being able to create the cloud servers we need\u00a0to deploy our applications.<\/p>\r\n\r\n\r\n\r\n

Although\u00a0our old\u00a0setup could have been optimized better, the new servers at UpCloud are so much faster on the disk, CPU, and memory performance. We get way more requests out of the same amount of money that the\u00a0migration was well worth it. UpCloud tells you about their fast disks, but what they don’t tell you is that the CPUs they use are also faster than those you normally get\u00a0with other cloud providers.\u00a0An extra\u00a0700Mhz more per thread is something you will notice.\u00a0But\u00a0when your\u00a0service grows big\u00a0enough to need load balancing and high availability, you can either build your own environment or turn to a company like Twisted Bytes. We are\u00a0very glad UpCloud recommended us to get in touch.<\/p>\r\n\r\n\r\n\r\n

Future plans<\/h2>\r\n\r\n\r\n\r\n

At the moment we are running everything in one zone. But we are going to expand to more locations and that is going to need some global load balancing. We already have some ideas about that and are looking forward to getting\u00a0it implemented.<\/p>\r\n\r\n\r\n\r\n

In the long run,\u00a0with the addition of UpCloud’s Go API client<\/a>, we would\u00a0love to\u00a0see support for tools like Terraform.\u00a0It would make managing and documenting our servers at UpCloud even easier.\u00a0In that way defining hosts would be as simple as writing a\u00a0configuration file.<\/p>\r\n","protected":false},"featured_media":20889,"template":"","case-study-category":[129],"class_list":["post-27881","case-study","type-case-study","status-publish","has-post-thumbnail","hentry","case-study-category-platform-as-a-service"],"acf":[],"_links":{"self":[{"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/case-study\/27881","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/case-study"}],"about":[{"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/types\/case-study"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/media\/20889"}],"wp:attachment":[{"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/media?parent=27881"}],"wp:term":[{"taxonomy":"case-study-category","embeddable":true,"href":"https:\/\/studiogo.tech\/upcloudold\/wp-json\/wp\/v2\/case-study-category?post=27881"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}