How to scale a PHP Application? This article gave a good overview of the different components needed to scale a web application. The easiest way to do it is to use a cloud provider and let them handle the scaling for you!
PHP gets a lot of hate in my experience. So much hate that I’m almost afraid to say that I like the language. Version 7 solved a lot of issues and I specifically love the type-checking features that were added.
And, if you use the popular Laravel framework, all the ugly parts of PHP are hidden away and you can work with the beautiful libraries Laravel provides for you.
One argument that comes up a lot when I talk about PHP is scalability. There seems to be the notion that PHP applications don’t scale.
In this article, I will show you what is needed to scale up a PHP application.
By far the easiest way to scale up your application is to buy a better server. Adding more CPUs and RAM will speed up your website, but it comes at a cost as buying a high-end server is expensive.
Furthermore, it is hard to dynamically scale your application this way. Suppose you have almost no users at night and around a million users during the day, then you have a very expensive server that you only use half of the time.
This method of scaling is called vertical scaling.
Almost all big web applications use horizontal scaling. This means adding more servers to scale up the website — instead of buying a better server.
Typically, there is a load balancer that will redirect users to one of the application servers.
It is important to separate the database from the application servers. That way, each application server will have access to the same database.
There is a problem with this method though. The server must be stateless.
PHP uses sessions to keep track of the user’s state. If a user logs in on
Server 01 then that server knows the user is logged in. But if the load-balancer sends the next request to
Server 02 then this server will not know that the user is logged in.
You can configure PHP sessions to store session data in the database.
However, this means that for each request, a database query must be made. This scales badly as most often the database is the performance bottleneck in large web applications.
Redis is an extremely fast in-memory key-value data store. You can set up a Redis server that will store all PHP session data. Check out this article for a practical guide on how to do this.
You could choose to not use PHP sessions at all. A lot of websites have a stateless API as back end and use JSON web tokens as an authentication system.
This is the most scalable solution, in my opinion, as all the session management is done on the client's side.
Most applications perform more read queries than write queries. You can use this information to scale up your databases by adding read-only databases.
To keep the data consistent, these read-only databases sync with a single write-only database.
If you need to add more write-only databases, you enter the land of database sharding, which is very complicated and I would not recommend doing yourself. Check out this article if you want to learn more about sharding.
If a user uploads a file to
Server 01 then
Server 02 will also need to know that the file was uploaded.
A solution could be to use Gluster. Gluster will automatically sync a filesystem over multiple nodes in a network.
Another solution could be to create a single object-storage server, the only purpose of this server is to store static files. As a bonus, you could create multiple object-storage servers and use Gluster to keep them in sync!
Successfully scaling up a web application is a lot of work. That is why most companies turn to cloud computing to scale their applications.
With the Google Cloud platform, you can spin up a Google Cloud database as your database server. Use Cloud Run to host your application server. Create a Google Storage bucket to host static files. And use Google Cloud Firestore as your key-value session server.
The amazing thing is that the Google Cloud platform will automatically dynamically scale your application. No work on your part required!
Hopefully, this article gave a good overview of the different components needed to scale a web application. The easiest way to do it is to use a cloud provider and let them handle the scaling for you!
But, it can definitely be fun to set up the components yourself.
In this article i will let you know to delete multiple rows through checkbox using ajax in laravel and before delete we will give a confirmation message.
Spread the love1. Stop on first validation error By default, Laravel will check for all validation rules and return a list of errors. But if you want to stop this process after first validation failure, that’s how you can achieve…Read More→
Spread the loveHow to get relationship from relationship using With() in Laravel Some times there are cases where you want to get relationship from relationship in Laravel, that can be achieved via following: How to create multiple where clauses in…Read More→
Spread the loveTip 1. Controllers Having Single Action In some situations you need a single action in a controller, if this is the case in Laravel you can achieve it by __invoke() method. Routes: Artisan command to generate this controller:…Read More→
Laravel is the most popular, free, and open-source PHP framework in the world, known for its expressive and elegant syntax. Laravel is accessible, powerful, and offers some of the best web development tools required for large, robust, and modern applications. In this article, you will learn how to install the Laravel PHP Framework on Ubuntu 20.04 server running on the Nginx web server.