Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

Problem

I am a lead engineer for a highly trafficked eCommerce website (upwards of 1m page views an hour). For various reasons we have the opportunity to rebuild large portions of our infrastructure. This brings up a number of interesting problems in balancing flexibility, stability, speed to market, etc... At a high level I am interested in how others have handled similar situations. In particular I am want to know how others have architected their site to provide stable deploys in fast moving environment.

  • One of the main trade offs I am looking at is breaking our site by functional area and providing them each their own sub domain. The primary driver for this is that we are hosting on Azure and deployments are all or nothing.
  • I am also interested in how others have maintained architectural integrity in a fast moving environment and team composed of varying levels of experience.

Tech

We are primarily a Microsoft shop: SQL Server, Windows Server 2008, .Net 4.0, Visual Studio 10, etc...

We have also made the decision to host our main site on the Azure platform and are making heavy use of table and blob storage as well as app fabric cache. We are considering using multiple Azure data centers but have not made that final decision as of yet.

All static content including JavaScript and CSS will be minified and hosted on our CDN .

Our site is built using .Net MVC 3 and is supported by a DDD style architecure. Our data access libraries and business rules are fairly well encapsulated and separate from actual display logic.

Process

While not a true agile shop we iterate very quickly with frequent deployments, multivariate testing, just in time requirements, etc... We are generally very entrepreneurial and have the need to respond quickly to new opportunities as they arise. (code for "it can get chaotic")

Team

Our development team is made up of a couple dozen developers with varying levels of skill and experience. While some of the developers can operate independently others need to have very careful code reviews done.

The QA team has a very thorough manual review process. They are also beginning to build a suite of QTP tests to automate regression testing. The dev team in turn makes use of Unit Testing and BDD testing when appropriate.

Not Considerations

I know there are a lot of strong opinions out there so to preempt religious wars here are a couple of responses that will not be helpful to me.

  • Just use Java, Oracle, PHP, Ruby, etc...
  • Just use EC2
  • Just ask your developers to be more careful
  • Just tell your developers to code faster
  • Just tell "the business" to slow down
  • Just use Google Checkout

Who I'm looking for feedback from

I know there are many engineers who, while very skilled, have never worked on systems that supports more than a few hundred concurrent users. The lessons learned from a site supporting 30,000 concurrent users are very different from those of an internal support app (I've worked on both, btw, and am not disparaging internal apps. They just require a different approach).

If you have experience in similar situation I would love to hear how you approached the problem and what the draw backs of your solution where.

share|improve this question
    
You might want to get in touch with Matthew Kerner, see his presentations on the subject here :channel9.msdn.com/Events/Speakers/Matthew+Kerner –  Carlo Kuip Dec 21 '11 at 17:57
add comment

1 Answer

I am want to know how others have architected their site to provide stable deploys in fast moving environment.

We have: 1) A standard 3 tier architecture, DB (My SQL), Business layer (Java, Struts like), presentation layer (Java, Html, Javascript, Css)

2) 1 Primary DB server + failover DB server

3) 3 webservers with load balancing (The site is lightning fast, though we only get about 250k hits per hour. We could get by on 2 But figured why not have the failover server doing some work as opposed to just sitting idle)

4) The Ecommerce site handles all interactions with the client and only holds data that is necessary for that. All administrative, order processing, payment processing happens locally within the ERP system. With order data regularly downloaded from the site.

5) All Item level data is maintained within the ERP system and published regularly to the Ecommerce DB. (There is a bit of back and forth with regard to quantity available among other things)

6) When deploying we publish the entire code base.. It’s tiny, I think under 10mb. And we run DB mod scripts. It takes less the 5 min of downtime, we do this when usage is low (2am or something)

One of the main tradeoffs I am looking at is breaking our site by functional area and providing them each their own sub domain. The primary driver for this is that we are hosting on Azure and deployments are all or nothing.

I think this is a mistake; it effects the user experience, therefor should be made based on business reasons not technical ones.

I am also interested in how others have maintained architectural integrity in a fast moving environment and team composed of varying levels of experience.

We have a key architected position who along with myself know the enter system architecture from a high level. We make all major architecture decisions and well as approve any Db structure modification. We act as a central control.

share|improve this answer
    
How do you handle regression testing your site? Basically, how do you ensure you did not break something unexpected when you change your framework for a separate reason. Do you deploy your entire site enmasse for each deployment or do you cherry pick? –  William Edmondson Dec 21 '11 at 19:53
    
We deploy the entire site. For test We basically go though UAT, just like any other app, but the "users" are the designers of the UI. we heavily test the primary functions (IE placing and order). Remember that is the only time the web app updates the db. All other data updates are pushed up via the ERP (also custom). So we can literally check 85% Site Just by looking at it. ie looking at various products with different configurations, the navigation systems ect. –  Morons Dec 21 '11 at 20:08
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.