We coded Product Kits app and it worked pretty well. Peak hits were 5000 hits per seconds. Read Story of Product Kits from 100 to 100000 hits per minute. We had a lot of issues, but issues with PHP wasn’t scalability. We were able to handle everything but the problem came when we had to know what other workers were doing.
The first question that might come to your mind is if you have chosen the write tech stack? Since we are aware of the fact that PHP doesn’t support multi-threading. However, there is a trade-off between the speed of development and the performance. PHP is not very fast, in fact, it is slow – but it is fast enough. As long as you don’t want individual PHP scripts to know the state of each other, you are in a pretty good shape – most of the time.
Trade-Off – Scalable VS Speed
While using PHP, our major concern was RAM, it was much easier to get high RAM usage and CPU. We had to deal with a lot of data and data most of the time either stays in RAM or required us to increase the HIT if we wanted to keep it outside. If your PHP codes are using a lot of RAM, you will have to solve a scalability problem. However, if your app doesn’t require a lot of RAM, better is to optimize it for speed.
Writing the Right Codes:
- Rely on always running PHP codes – If a worker is written in PHP, tie the worker in an infinite loop which will wait for an event (A Queue, MySQL entry) instead of invoking PHP every second or so.
- Cache sooner – Although there are a couple of cache options in PHP – OPcache and Memcache. However, Redis is favourite which can further help you scaling by having multiple master or other topology. Combination of opcache and redis will be best.
- Load fewer classes – Ensure that you are not loading a lot of classes, rely on dynamic loading. This will increase the speed and reduce the memory.
- Keep over-writing variables – This is a pretty bad practice but it ensures that your memory is limited.
- Make smaller blocks – A heavy code or multiple functional calls under the loop are your sworn enemy. It is better to write multiple loops few smaller blocks than to have one large block.
- Use JSON instead of XML – JSON is a new standard and takes lesser memory.
- Use classes – Obvious but – having functions inside class will make it less memory hogger as long as you are loading classes when needed.
Micro Optimization of your codes:
These optimizations are not something you should do after the development as it has a very little effect. However, right from the beginning, a good practice is to follow it.
- Promote ‘static’ – This alone can increase the execution speed by 3X.
- Use single quotes – ‘ – As long as there is variable inside.
- Use str_replace instead of preg_replace_all
- Use ‘===’ instead of ‘==’
- Use ‘isset’ instead of count/size