Web application deployment : one version for all clients or each his own

deploymentweb-applications

I have a general question about software deployment. At work, we design a CRM that is used through web browsers. I've recently been told that each specific client has its own server (although the servers are owned by my company, they're not theirs neither are located in their offices).

That troubles me a little. To my point of view, when one's designing a web application, he must have in mind that he will be able to maintain one "soft" running for all of his clients (not talking about replication or load balancing), with maybe different databases for each, but one application… It especially helps maintaining and keeping everyone up to date with patches and upgrading. Am I wrong ?? May you help me better understand this question with resources (I must be lacking the right keywords or so to find them myself). I actually don't understand why they went through "the third way" between "one centralized web application for everyone" and "one distributed desktop application for each".

Thank you !

Best Answer

It depends on the approach. It is much easier to maintain thousands servers which are the same with todays technologies (tools for job automation such us docker, puppet, chef, ansible, etc - hundreds of them).

Having a single server for each customer gives you ability to plan resources for each customer more precisely and let them pay for what they really use. It also makes your problem smaller, which has also some advantages.

Imagine you would have 1000 customers on one database with 2TB of data in total. Your developers would have to write SQL queries perfectly to have such database fast enough. This problem is much smaller with a small database for each customer.

Another question to think about might be security. If you have to separate your customers on application level, your developers must be very carefull about what data they select. If you have one database per customer, there is smaller chance to leak another customers data.

On the other hand, having single instance for all customers gives you ability to share resources between your customers and save some money on hardware.

So, this decision should be made at the begining of the project, after making a list of advantages and disadvantages. I would also suggest to create some prototypes, so you know e.g. deployment process, database migrations, etc. will not be a problem for you.

From my experience I personaly suggest to have an instance for each customer if you can deal with managing many instances.

Related Topic