Building a new webshop which useage will grow overtime

Goodday,

In the passed we had a customer active in wholesale. We created a webshop. He maily had orders by phone and fax. After some time 90% of his orders went through the webshop. In numbers he did between 60 - 100 orders a day.
Two years ago our customer merged with 9 other companies and started to use an other webshop (from one of the other companies). They are unsatiefied by the company deploying the webshop. It takes very long time to add new features to the webshop.
We are currently the developers of the website, and we add new functions / changes very fast. The website has an all new lay-out following their corporate identity. The webshop looks still the old way (after 5 months).

Because the good experiences in the passed and because the good experiences with the current website they have offered us the opportunity to develop a new webshop. We’ve done a pitch which went good. But three other companies are in the running also.

Our company is small, and we lack some experience with big webshops. They are a little bit worried about this.

In numbers they all together have around 240 orders a day. Basically our client and one other company have orders through their webshop. They want to increase this to around 1000 - 2000 orders a day.
webshop total ordering is currently 15% off all orders. Here is much to win and we feel we made a solid plan to make the webshop grow.

The webshop will be written in PHP. As database we usually use MySQL. My question, with 2000 orders a day, do we have to make special arrangement to handle all this orders (peak load) or is a good server with apache sufficiënt for this kind of numbers? Should we split up servers, database server, content server, import/export server? Do we need i.e. a load balancer?

I hope you will point me in the good direction and give me stuff to think about so we can create a solid plan to handle lots of orders.

Well I have never had to deal with that many queries in a day before, but I did find a page that has some information on MySQL and its caching. It seems that you can increase the cache, but this may slow down the database interaction. You may find link useful: http://stackoverflow.com/questions/2095614/mysql-query-caching-limited-to-a-maximum-cache-size-of-128-mb

It talks about changing the cache size and something about a mysqltuner.pl whatever that is. Anyway, some stuff to think about. For my limited knowledge of the strain on MySQL servers I don’t know why that amount of orders would be a problem provided your queries are efficient. Seems like SQL servers should be designed for such endeavors, but I’m not an expert…

I’m guessing my response is too late but…

Obviously, you’ll need to work on the numbers on what exactly 1 order entails…like how many table records do you need to insert. 1~5000 order is fine but do they need to be permanently persisted or can you delete them after certain period? I’m sure PHP web servers can scale horizontally but should you pick a database that scales horizontally as well. For example, HBase, Cassandra, and etc… The choice of DB will dramatically change the way you design. The idea of creating big application is all about making your web application scale easily as possible. I would definitely take advantage of Amazon EC2 services.

I deal with shops this size and larger regularly, here are some tips.

Look at the traffic as it is currently. Order volume in this instance means very little. If the site is converting 50% the traffic is going to be orders of magnitude smaller than if the shop is converting 5%. So traffic is the real quantitative measure in this situation.

I prefer to keep a site on a dedicated server for as long as possible. It reduces overall costs and complexity in the job. Design the site using best practices for low server load and as few of requests as possible. I prefer to use APC for Opcode caching, but ultimately it depends on how your code is written to what Opcode cache is the best. Also, I would look into a wildcard ssl certificate for the site. You can offload a lot of the static requests through MaxCDN or similar. The reason for the Wildcard is so that you can serve secure through several sub domains. If you are custom rolling the cart, you can just drop the CDN on the secure pages though.

A dedicated server should be able to handle the load of 2k orders a day with a 10% conversion rate. But at the same time when I say a dedicated server, I mean one that is a business class server. Not a Godaddy type dedicated that uses home class processors.

As far as the stack I would suggest PHP 5.2x, APC, running under centos. I would also use cpanel too. Cpanel sites are so much easier to maintain as compared to not running a panel or the other options.

If you haven’t found a cart to use I would suggest Prestashop. I have clients that are doing 10k orders a day with it, no problems at all.