All Collections
Technical documentation
Servers & Installation
What server specifications do I need to handle X clicks per day?
What server specifications do I need to handle X clicks per day?

Here we study what level of server resources should comfortably deal with certain volumes of traffic.

Zeno avatar
Written by Zeno
Updated over a week ago

In most cases a basic VPS is fine even for tens of thousands of daily events.

However, it is ideal to have some guidelines for when you may need a server upgrade.

Keep in mind the following guiding principles:

  • It's not just about how many visits per month your server can handle, but also how well it can deal with spikes, both intended and accidental.
    Example: you start a pop up ad campaign and accidentally send your daily budget in 30 minutes. Your server may be able to handle that per day, but this volume in 30 minutes cannot be absorbed as a spike and the server fails, leading to redirects not working.

  • You should monitor your server CPU/RAM usage. Most server control panels provide this. If you are regularly using more than 70% of your available CPU resources or RAM, you should probably upgrade as a precaution.

  • Note that for CPU usage, most control panels report 100% per core. So if you have 4 vCPU resources, "max" may be 400%, not 100%.

Below we will cover some basic testing of how various servers handle click volume with FunnelFlux.


Server testing

All the tests outlined below for hits per month were completed by sending one hour of test traffic to simulate an average monthly volume.

The hits sent to the server within an hour were 15% more than the hits it was supposed to handle. Spikes in traffic were also simulated with no errors.

In all cases no errors were logged from the web, PHP, MySQL services. The servers had only FunnelFlux installed (no landers or similar were hosted on the server).

All the tests were completed with directly linked real offers. The traffic source we used was PopAds. The campaigns set were configured to get traffic from 2+ countries on each continent. Asia and US/CA were the biggest contributers in our testing.

If you expect spikes to appear e.g. from sudden scaling or poor pacing from traffic sources, the server should be monitored for such and when those happen calculate the number of hits you get per second (average) and move to a VPS/dedicated server package that can handle such spikes.

Here are our recommendations for monthly click volumes:

#500 k/daily hits

The VPS used for the testing was from Vultr
$20/mo VPS — 2 CPU Cores/2 GB RAM/45 GB SSD storage.

#1 mil/daily hits

The VPS used for the testing was from Vultr
$40/mo VPS — 4 CPU Cores/4 GB RAM/90 GB SSD storage.

#2 mil/daily hits

The VPS used for the testing was Vultr
$160/mo VPS — 8 CPU Cores/16 GB RAM/300 GB SSD storage.

#5 mil/daily hits (dedicated server) 

Depending on the data-center this price may vary. 

We suggest E5-16xx/E5-26xx or higher CPU classes. These should give you 6+ cores / 12+ threads. 

Aim for 32 GB RAM, SSD storage (RAID if the fee fits into your budget).

The base price for such a server is likely in the $400 USD/mo range.

#10 mil/daily hits (dedicated server)

Depending on the data-center this price may vary. 

We suggest DUAL E5-26xx or higher CPU classes, which should give you 12+ cores / 24+ threads. 

Aim for, 32 GB RAM (64 GB recommended), SSD storage (RAID if the fee fits into your budget).

The base price for such a server is likely in the $600 USD/mo range.


Data Retention

We estimate that one click will require around 650 bytes in data for storage in a normal table. This amount is reduced to 650 bytes if the stats table has been compressed. 

Compression can be configured at an early stage to prevent later, time consuming compression operations. Compression of your table will give a trade off of storage efficiency to reporting speed.

However, if you have many nodes in your funnel, and factoring in the cached reports computed for all hits, you should assume more like 5 KB of data per visitor.

So, take 5 GB per million visits and you multiply that by the number of M visits you would like to keep in your database.

It is important to consider the fact that SSD storage mediums function optimally when at 50% full and below, so plan to overprovision space to keep performance high.
​ 
I.e. If you are using 1.2 TB SSD drive on a dedicated server, you should plan for a 600 GB database as a maximum.

Keep in mind that cleaning up old data in large databases may be a time consuming process.

Notes

  • There is a difference between cores and threads. If you are not familiar with those terms it is highly recommended to check with your system administrator befoce making any updates to higher hardware classes or a dedicated server.

  • VPS's normally offer threads, as you have portions of the CPU resources provided by the actual server hardware.

  • With SSD classes there is big difference between NVMe and SATA SSD storage. NVMe is substantially faster but more expensive.

  • Traffic spikes. It is highly recommended to get a server with 30% more resources from what you will actually need. This way you have free resources to handle spikes. If you are expecting your traffic to double and exceed server limitations in the near future, better to upgrade before that happens.

  • It is important to monitor your database size and ensure any unnecessary statistics have been cleared. Keeping your databases lean ensures any drill down report will be generated faster.

  • The servers we have used for the testing were running Nginx, PHP v5.6 (PHP-FPM), MariaDB 10.1. All these services were tweaked for our different tests to ensure efficient utilisation of server resources, as well as keeping a portion of resources free.

  • It is extremely important to have a system administrartor available when you are increasing traffic and upgrading servers so that they can tweak the settings of the server where needed. One configuration for processes such as PHP, MySQL, etc. is not optimal in all situations.

  • There is no perfect server setup.

Did this answer your question?