We have one standard server setup:
- 6 cores CPU
- 12 threads
- 128 GB of memory
- 2x800 GB SSD RAID-0
Our earliest configuration was already quite powerful: 4 processors, 8 threads, 32 GB RAM, and 2x120 GB SSD 320-series disks. However, we quickly found out that it needed an upgrade.
For example, we discovered that 4 cores and 8 threads aren’t always enough to handle many operations running in parallel. We ultimately went with 6 cores and 12 threads, which handle an ongoing flow of indexing operations without impacting the speed of search. This upgrade also gives us a lot of extra processing speed to manage our servers’ system resources.
For the disks, we experimented with many kinds of SSD RAID-0 before picking the right one. The current SSD S3500 series gives us a faster hard-drive, thereby removing a serious performance bottleneck.
To strike the right balance of RAM and disk space for both caching and data capacity, we ran through a number of use cases, engine tweaks, and countless performance tests before arriving at the right amount of memory and disk size—no more no less. For example, we needed to increase the memory to process large indices, while leaving enough space to perform in-memory searches.
To get an idea of the importance of balancing RAM size with the right number of cores and threads, consider large indices. For performance reasons, we load all indices in memory. Additionally, we break up large indices into smaller pieces, and each piece (shard) receives a dedicated thread on the same server. This setup allows for faster updates and searches. Meanwhile, other threads are dedicated to processing searches, while still more threads are monitoring the system and managing consensus.
Our machines require a large minimum of RAM and cores, with a reasonable buffer for flexibility.
To go into far more detail about our engine, take a look at our Inside the Engine blog series.