我正在考虑一些社交媒体应用程序,例如 Facebook 或 linkedin。我在 http://highscalability.com/ 等网站上阅读了很多文章并没有找到正确答案。
因为,现在最大的应用程序都使用他们的自定义系统。他们使用自定义文件系统或自定义数据库引擎或自定义 Web 服务器。他们不使用原来的iis、apache、mssql、mysql、windows或linux。他们使用多种编程语言来解决不同的问题。由于他们的负担,这对他们来说没关系。他们必须计算每一点或某件事。他们从一些小环境开始,遇到了问题并看到了瓶颈。因此他们找到了新的解决方案。
现在,我们可以找到一些有关他们当前系统的文章。但我们没有关于最好的开始的答案。
我需要学习“什么样的架构是正确的开始?”的答案
我对此有一些想法,但我们需要确定。
我们认为,
使用mysql作为关系数据库。还有像 mysql 上的 memcached 这样的缓存机制。以及业务层的rest api。我们考虑使用Python来编码rest api。所有系统都在合适的 Linux 发行版上运行。当所有这些环境都OK之后,我们就可以使用任何语言或系统来进行UI了。它可以是用于 Web 的 PHP 站点,也可以是用于 IOS 或 Android 的 native 应用程序。
我们需要您的建议。非常感谢。
(我是一个很好的读者,但这是我的第一个问题。我希望没有问题。)
最佳答案
去年我提出了类似的问题 compiled一些较大的社交网站使用的技巧和技术。
以下架构概念在此类网站中很流行:
可扩展性
- 缓存(大量缓存,跨多个层)
- 数据分片(最好按照数据局部性标准)
- 用于经常引用数据的内存数据库
- 高效的线路级协议(protocol)(与企业通常认为的最先进的协议(protocol)相反)
- 异步处理
灵活性
- 以服务为导向的架构作为基准原则
- 解耦和分层组件
- 异步处理
可靠性
- 异步处理
- 复制
- 小区架构(独立运行的子集,例如按照地理标准)
注意:如果您启动一个新站点,您不太可能遇到这些超大型站点所面临的扩展或可靠性要求。因此,最好的建议是从小事做起,但保持灵活性。一种方法是使用一开始很简单但以后可以灵活扩展的应用程序框架,例如 Django 。
关于performance - 多平台社交应用开发架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20913206/