performancearchitecturescalabilitysocial-networkingdevelopment-environment

Multi-platform social networking application development architecture


I was thinking on some social media applications like Facebook or LinkedIn. I read lots of articles on websites like http://highscalability.com/ and didn't find the correct answer.

Because, the biggest apps of now, use their custom systems. They use custom file systems customized db-engines or customized web servers. They don't use the original iis, apache, MySQL, MySQL, windows, or Linux. They use lots of programming languages for different problems. It's OK for them because of their load. They have to calculate every bit or something. They started on some small environments and they encountered problems and saw bottlenecks. So they founded new solutions.

Now, we can find some articles about their current systems. But we have no answer about what is the best start.

I need to learn the answer of "What kind of architecture is a correct start?"

I have some ideas on it but we need to be sure about it.

We think,

Use MySQL for a relational database. And a caching mechanism like memcached over MySQL. And a rest API for the business layer. We think using Python for codding of rest API. And all systems run on a suitable Linux distro. After all of these environments is ok, we can use any language or system for UIs. It can be a PHP site for the web or a native application for IOS or Android.

We need your advice. Thank you so much.

(I am a good reader but it's my first question. I hope there's no problem.)


Solution

  • Following a similar question last year I compiled the techniques and technologies used by some of the larger social networking sites.

    The following architecture concepts are prevalent among such sites:

    Scalability

    Flexibility

    Reliability

    NB: If you start a new site, you are unlikely to have the kind of scaling or reliability requirements that these extremely large sites face. Hence the best advice is to start small but keep it flexible. One approach is to use an application framework that starts out simple but has flexibility to scale later, e.g. Django.