Logo
  • PHP
    • HipHop / HHVM
    • Modern PHP
    • PHPStorm
    • LAMP
    • Laravel
    • Composer
    • PDO
  • JavaScript
    • node.js
    • AngularJS
  • CSS
    • SASS
    • “CSS4” (CSS level 4)
  • HTML
  • Git
  • LAMP
  • Vagrant
  • UI / UX
  • Architecture of …
  • Off-Topic
With ♥ from Berlin
January 11, 2014
Chris
The architecture of ...
23

The architecture of StackOverflow

PreviousNext

One of the most interesting talks these weeks, and a rare insight into one of the most active pages on the web: Marco Cecconi of StackOverflow speaks about the general server architecture, why they don’t unit-test (!), how they release (5 times a day) and shows some awesome server load screenshots. It’s fascinating that they run one of the most trafficked pages (that also uses long-polling “real-time” messaging !) on just 25 servers, most of them on 10% load all the time. “We could run it on just 5 servers if needed”. Awesome. Nice statements regarding caching and using existing code, too.

I really like the Get-Things-Done attitude and the simple, but productive view on workflow (use multiple monitors, don’t be the nerd sitting in front of a laptop). The code is not perfect (lots of static methods), they don’t even test, only have a hand full of developers (!) and nearly no downtime. Ah yes, and they run one of the most successful sites in the history of the internet.

“Languages are just tools”. “You’ll be successful anyways, or fail anyways [it does not depend on the language].” I really like that guy. And by the way, they mainly use dot.net for the site. Make sure you also check out the links, especially #5 shows the current tech stack used in the company.

And by the way, have you noticed that EXTREMELY huge presentation screen ? Awesome! They obviously did this in a cinema or university audimax.

Update #1:
The slides of this talk:
https://speakerdeck.com/sklivvz/the-architecture-of-stackoverflow-developer-conference-2013

Update #2:
Thread on news.ycombinator.com regarding this topic, and Marco Cecconi (and other StackOverflow IT guys) have joined:
https://news.ycombinator.com/item?id=7052835

Update #3:
Excellent article in the StackOverflow tech blog showing how StackExchange was build back in 2008 (lots of technical details):
http://blog.stackoverflow.com/2008/09/what-was-stack-overflow-built-with/

Update #4:
Official 2009 database dump (legally available directly on StackOverflow):
http://blog.stackoverflow.com/2009/06/stack-overflow-creative-commons-data-dump/

Update #5:
AWESOME!
Full up-to-date list of software, technology, methods and servers used for StackExchange:
http://meta.stackoverflow.com/questions/10369/which-tools-and-technologies-are-used-to-build-the-stack-exchange-network

Update #6:
This excellent YouTube comment by Joseph Lust sums it up perfectly:

* Use static methods everywhere instead of OOP
* Write the least code possible
* Keep entire site compilation under 10s
* Cache every single object, it’s faster
* Design to scale Up before Out
* Use 368GB memory for your servers/db’s
* Don’t write tests, have your users find defects
* Don’t reinvent square wheels

 

This article was written quite a while ago (9 years), please keep this in mind when using the information written here. Links, code and commands might be outdated or broken.

Random articles

  • Extremely easy SASS in Laravel (with pure PHP)Extremely easy SASS in Laravel (with pure PHP)
  • How blind people use websites (video with Sina Bahram, blind accessibility researcher)How blind people use websites (video with Sina Bahram, blind accessibility researcher)
  • PHPMyAdmin not found after installation ? Here’s a fix (Ubuntu 12.04) !PHPMyAdmin not found after installation ? Here’s a fix (Ubuntu 12.04) !
  • HipHop VM reaches 100% green Unit Tests in Laravel, Drupal, Slim, CodeIgniter etc.HipHop VM reaches 100% green Unit Tests in Laravel, Drupal, Slim, CodeIgniter etc.
  • A preinstalled Vagrant box with PHP HipHop / HHVM and Ubuntu 12.04 (Precise Pangolin)A preinstalled Vagrant box with PHP HipHop / HHVM and Ubuntu 12.04 (Precise Pangolin)
  • First view on Zend Framework 3 by Matthew O’PhinneyFirst view on Zend Framework 3 by Matthew O’Phinney
  • How to install php-login-one-file on Ubuntu 12.04 LTSHow to install php-login-one-file on Ubuntu 12.04 LTS
  • How to hack time (KUNG FURY promo campaign)How to hack time (KUNG FURY promo campaign)
  • “Fuck you. Pay Me.” How to deal with clients, the professional way. An excellent talk with Mike Monteiro.“Fuck you. Pay Me.” How to deal with clients, the professional way. An excellent talk with Mike Monteiro.
architecturebackendcompanyscalabilitysidebar-specialstackoverflow
Share this

23 Comments

  • M. Moore
    August 26, 2018 1:33 am

    TDD Doesn’t work well with static classes? That’s news to me. Why does a test case care about instantiation? Why should it? I suppose there’s no writing a failed test case for Math.Add(1,2), eh?

    Reply
  • Iván Stepaniuk
    January 22, 2014 11:48 pm

    I can’t see how TDD forces object lifetime that way. IoC and static classes are at odds, but there is no need for that static-everything madness. Whole graphs can be reused by many requests with just one static container class, thus avoiding massive garbage collections. They are sacrificing maintainability, the “Fear Driven Development” is the proof.

    Reply
  • Bill Schneider
    January 20, 2014 4:00 am

    Interesting points about frequent releases and short feedback loops. You don’t need extensive manual or unit tests if you can release constantly to an alpha site where real users will find issues for you – not a good idea for every business but works well for them.

    Reply
  • Yoo Matsuo
    January 15, 2014 3:34 pm

    I didn’t imagine SO runs by so many static methods, though Marco’s explanation, “many instances make GC run so often and it causes low performance, therefore we cannot use TDD which doesn’t work well with static methods”, has so many interesting points of view. Very interesting talk. Thanks!

    Reply
  • Alex Dowad
    January 14, 2014 11:43 am

    It’s very strange that at a “Developer Conference”, Mr. Cecconi had to explain concepts like garbage collection!

    Reply
    • Chris
      February 10, 2015 8:03 pm

      I think most people were just too shy to raise their hands :) As most conferences are quite expensive I highly doubt that the audience are mostly beginners.

      Reply
  • Obdurodon
    January 13, 2014 9:09 pm

    “Use multiple monitors” is just as much posturing as “look cool using a tiny laptop” is. If you’re doing something really hard, like solving a tricky algorithmic problem or chasing an elusive bug, it *doesn’t matter* what kind of monitor’s in front of you because most of the action is in your head anyway. A good programmer can do these things while walking around, exercising (like I will be in a minute), or taking a crap. Multiple big screens can help sometimes, but they can also hurt if they encourage a level of multi-tasking a.k.a. self-interruption that disrupts good concentration.

    Reply
    • Chris
      January 13, 2014 9:31 pm

      Hmm good point, but basically I agree with Mr. Cecconi’s opinion, as lots of developers block themselves (and their workflows) with tiny screens, tiny eye-hurting font sizes, small laptop keyboards, not using a mouse (!), no second screen, not using an additional analog notebook (to keep your stuff organized OFF the screen), and attitudes a la “i want to solve this by myself” instead of taking the shortest way etc. This is a super-interesting topic, but we should not discuss this here.

      Reply
      • Sławomir Uchto
        January 20, 2015 11:44 am

        Why should I use mouse? As a developer I prefer to have two hands on keyboard. Mouse is nothing but distraction and slows us down.

        Reply
        • Chris
          February 10, 2015 8:13 pm

          Why should we NOT use a mouse ? Switching / moving / organizing things with a keyboard is nearly impossible and slows us down extremely. But in general I think everybody should find his/her personal workflow, so if you can work in a wonderful way without a mouse, then do so, iwould also say it depends on what you are doing. I get frustrated when frontend people need 10sec to close a windows when they try to reach a tiny close button with a sticky touchpad. :) Please let’s skip or move the discussion as it’s not really related to the above article. Cheers!

          Reply
  • Soner Gönül
    January 12, 2014 1:11 pm

    I just learned a lot of information how Stack Overflow works on behind. Thanks.

    Reply

Leave A Comment Cancel reply

(Links) How to fix an extremely slow Symfony inside a Vagrant box

When you work with Vagrant (if not – try it!) on a Windows or Mac machine (which is an excellent

Install MINI in 30 seconds inside Ubuntu 14.04 LTS

This is a guideline on how to install MINI – an extremely simple naked PHP application – more or less

sass

New features in SASS 3.3 (a talk by SASS-creator Chris Eppstein)

A very interesting conference talk by Chris Eppstein, creator of SASS itself, showing some of the new features in SASS

js javascript

[video] Netflix JavaScript Talks about ECMAScript 7: The Evolution of JavaScript

This article was written quite a while ago (8 years), please keep this in mind when using the information written

O’Reilly’s Programming JavaScript Applications by Eric Elliott for free (Early Access release)

O’Reilly currently offers the entire book Programming JavaScript Applications by Eric Elliott for free (as an online-readable version) while its

php

Must-read PHP blog: PHPweekly.com

Probably one of the best ressources for your weekly doze of news from the PHP scene: phpweekly.com simply publishes a

composer

The difference between “composer install” and “composer update” – nailed on the head

What a beautiful, direct and clean explaination of the often-confusing difference between composer install and composer update: Beau Simensen (Twitter,

phpstorm-8

Killer-feature in PHPStorm: Search everywhere

A short but massive productivity improvement: The new “search everywhere” feature in PHPStorm 7.1+! Simply double-tap the SHIFT key and

git-php-deployment

Extremely simple deployment with PHPloy

Let me ask you a question: How mad do you get when you have to remember which files you edited

php

A super-simple introduction into PHP namespaces (7min video)

Once again, Jesse of JREAM totally nails it right on the head. A super-simple introduction into PHP namespaces. If you

1/4

Categories

Search

css3-chrome-font
Google rolls out Chrome 37, finally fixes horrible font-rendering
Quick fix for 404 error in WordPress category / tag page
redaktionelle-hochlastseiten
Hochlastseiten mit PHP, MySQL und Apache am Beispiel stern.de (deutscher Artikel)
MINI, an extremely simple barebone PHP application
windows-xp-eol
Windows XP is officially dead from today. Do you know people still using it ? Punch them.
vagrant
How to setup a (or multiple) server/LAMP-stack inside a virtual machine for local development with Vagrant and PuPHPet
php
How to use the PHP 5.5 password hashing functions
“Fuck you. Pay Me.” How to deal with clients, the professional way. An excellent talk with Mike Monteiro.
hiphop php
PHP’s HipHop outperforms PHP 5.5 with Zend OPCache and Nginx by 15-20 times
sass laravel
SASSmeister is a real-time JSfiddle for SASS / CSS. Awesome!
sass
New features in SASS 3.3 (a talk by SASS-creator Chris Eppstein)
ubuntu-14-04-lts lamp
How to install/setup a basic LAMP stack (Linux, Apache, MySQL, PHP) on Ubuntu 14.04 LTS
mod-rewrite-ubuntu-14-04-lts
Which server OS version to choose ? Some EOL lists of Debian, Ubuntu and CentOS
php
appserver.io – A New Way of Magento Enterprise Infrastructure (26min video talk)
Hacking ATMs – A conference talk about the current security state of Windows XP driven cash machines

Tags

apache bash centos composer conference coupon CSS debian fonts framework git GitHub hack HHVM HipHop HTML HTML5 IDE JavaScript JS LAMP laravel linux mod_rewrite MVC MySQL Nginx optimization PHP PHP 5.5 PHP 5.6 phpmyadmin PHPStorm security server SSD Ubuntu UI UX vagrant video virtual machine voucher VPS wordpress
Side-Project: Wordle-Solver:
www.wordle-helper.info

Pages

  • Privacy Policy
 
We use cookies on our website to give you the most relevant experience by remembering your preferences and repeat visits. By clicking “Accept”, you consent to the use of ALL the cookies.
Do not sell my personal information.
Cookie SettingsAccept
Manage consent

Privacy Overview

This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience.
Necessary
Always Enabled
Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
CookieDurationDescription
cookielawinfo-checkbox-analytics11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Analytics".
cookielawinfo-checkbox-functional11 monthsThe cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
cookielawinfo-checkbox-necessary11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookies is used to store the user consent for the cookies in the category "Necessary".
cookielawinfo-checkbox-others11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Other.
cookielawinfo-checkbox-performance11 monthsThis cookie is set by GDPR Cookie Consent plugin. The cookie is used to store the user consent for the cookies in the category "Performance".
viewed_cookie_policy11 monthsThe cookie is set by the GDPR Cookie Consent plugin and is used to store whether or not user has consented to the use of cookies. It does not store any personal data.
Functional
Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
Performance
Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
Analytics
Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
Advertisement
Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.
Others
Other uncategorized cookies are those that are being analyzed and have not been classified into a category as yet.
SAVE & ACCEPT