Click here to Skip to main content
15,885,782 members
Please Sign up or sign in to vote.
4.00/5 (1 vote)
See more: , +
Hi all,

We have a web-application product that we sell to companies that is hosted at our servers. The product contains couple of web applications, windows services and SQL server db. Right now we have only one client that uses our product. We have two servers - one for the web apps and services and other for the db.

In order to add the product to another client, we have to 'duplicate' all the apps and db and run in separately.

As we started expanding and some companies will require more server power then others, I need to plan the servers infrastructure.

Having two servers for each client sounds ridiculous. Hosting costs will be huge. What will happen when I'll have 10 clients? And probably some servers will take more power than others, leaving servers using 30% from their capacity while others use 70%.

One thing I really care about is separating the DB from each product so in case of server compromise, only one db will be at risk.

So... I thought about Virtual Machines... Does it sounds right? Do I need two super servers to hold virtual machine instances? (one for web and other for db?) What about Load balancing / etc..? Will it require more maintenance time only because I use virtual machines? Are there any hardware recommendations?

Any help will be appreciated

Many thanks
Posted

1 solution

Use VMs.

Every hosting company out there uses VMs because they're the best bang for your buck. A single web-server rarely exceeds 30% CPU usage on any semi-decent Xenon processor.

The area you need to watch for is RAM consumption.

So my suggestion is a clustered server setup that you can choose to load-balance, but that opens replication issues I don't think you're ready for. Ideally, you'd have all the hard-drives in a single SAN with a secondary SAN for your DB. However, SANs are expensive.

So. You can daisy chain RAID5 hot-swappable HDs for data replication for your WebServer VM collection. I would do physical mirroring of your Database(s) with an off-site backup for safety.

If this isn't making much sense, then honestly you need to hire someone who knows what they're doing because your code can be amazing, but if your physical environment is terrible, your application will suffer.
 
Share this answer
 
Comments
shaymar 7-Jun-11 16:12pm    
First of all, let me say that I really appreciate your comment.

Regarding your solution, there are few things I still don't understand

In your solution, I wont have fault tolerance. If the server that holds all the VMs will fall, all my clients products will be shutdown. In order to make it fault tolerance, I will have to buy an identical server and make some kind of mirroring between them. Am I correct? If so, will I need to have a SAN?

I totally agree that the web applications takes rarely 30% CPU and I might even hold them on one instance of a VM inside one IIS like 'strogg' suggested. What do you think? Do I really need to make a new instance of VM only for IIS for a specific client?

Now there is the question with the DB. The db consumes lots of server power. My initial thinking was that I need to isolate each db from other so in case of server compromise I won't risk all the data.
Strogg said to add databases to the same db server. In that case, I'll risk all the data.
What do you think?

Show me your wisdom ;) and again, many thanks.
Jpuckett 8-Jun-11 10:27am    
--If the server that holds all the VMs will fall, all my clients products will be shutdown.--

Yep. Which is why you run a dual physical server "cluster" so that the VMServer (or whatever VM software you run) sees only 1 computer. If one fails, all the VMs begin consuming resources from 1 box rather than two. Your clients' services will slow down undoubtedly, but the downtime is minimized.

--Am I correct? If so, will I need to have a SAN?--
Yes. And no. A SAN is nice because of the fail-over capabilities of it. It's just a huge initial investment. If you're able to get by with a cluster of servers with hot-swappable RAID5 drives, that's fine until you want to move to a more scalable solution. (Look up RAID5, it provides the mirroring you're looking for, and look up VM clustering, that's the server-died failover you're looking for).

--The db consumes lots of server power.--
Presumably. This goes on its own box (or boxes).

--My initial thinking was that I need to isolate each db from other so in case of server compromise I won't risk all the data.--
You can do this on VMs. Each DB Server *can* be on its own VM. However, if each DB is running as its own instance of a DB, it presumably, should have its own security, and you're minimizing that threat.

Data-security is its own beast. There are guys out there that make thousands of dollars consulting on that topic alone because it is so extensive. However, the bare minimum is that you are firewalled, patched OSes, with strong passwords not stored in plaintext.

If you have more questions just shoot me another reply.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900