【发布时间】:2011-05-06 23:11:36
【问题描述】:
我是网络开发领域的新手,目前正在面试公司,人们最喜欢问的问题是:
如果可以,您如何扩展您的网络服务器 开始达到一百万个查询?
如果你只有一个,你会怎么做 在那运行的数据库实例 时间?你是怎么做到的?
这些问题真的很有趣,我想了解一下。
请针对此类情况提出您的建议/实践(您遵循的)
谢谢
【问题讨论】:
标签: database scalability
我是网络开发领域的新手,目前正在面试公司,人们最喜欢问的问题是:
如果可以,您如何扩展您的网络服务器 开始达到一百万个查询?
如果你只有一个,你会怎么做 在那运行的数据库实例 时间?你是怎么做到的?
这些问题真的很有趣,我想了解一下。
请针对此类情况提出您的建议/实践(您遵循的)
谢谢
【问题讨论】:
标签: database scalability
如何缩放:
典型的缩放选项:
数据库扩展选项:
【讨论】:
在最基本的层面上,扩展 Web 服务器包括编写您的应用程序,使其可以在 1 台以上的机器上运行,然后将更多的机器用于解决问题。无论您对它们进行多少调整,最终的扩展都将涉及 Web 服务器群。
数据库问题更难处理。你的读/写百分比是多少?这是一个什么样的应用程序? OLTP? OLAP?社交媒体?什么是数据库?我们如何添加更多服务器来处理负载?我们是否将数据分区到多个数据库?还是将所有更改复制到从负载的负载?
您的问题会引发更多问题,即在面试中,如果某人只是对您发布的一般问题“有答案”,那么他们只知道一种做事方式,而这种方式可能会也可能不会最好的。
【讨论】:
对于第一个问题,我有几种方法:
是否有硬件升级可以在短时间内处理数百万个查询?如果是这样,这可能是调查的初始点。
是否可以进行软件更改以优化服务器的性能?我知道 IIS 有大量不同的设置可用于在一定程度上提高性能。
考虑进入网络场情况,而不是使用单个服务器。实际上,我确实遇到过这样的情况,我曾经工作过,我们确实每分钟有数百万次点击,它严重破坏了我们的网络服务器并关闭了许多网站。我们的解决方案是更改负载平衡器,以便一些服务器为站点提供服务,这些站点会破坏服务器,以便其他服务器可以保持其他站点正常运行,因为这是在秋季,而在零售业,这是您的重要季度。虽然有些人会从这里开始,但我可能会最后到这里,因为与其他两个选项相比,这可能会打开一些蠕虫。
至于数据库实例,我认为这将是一组类似的选项,尽管我可能会先执行多服务器选项,因为冗余可能是一个重要的附带好处,我不确定它是否容易网络服务器。我可能还差得很远,但我最初就是这样解决这个问题的。
【讨论】:
如果您为所有访问者提供相同的页面(例如,新闻网站),您可以通过使用缓存代理(例如 Varnish 或 )缓存生成的内容来将负载降低一个数量级>Apache Traffic Server.
代理将位于您的服务器和访问者之间。如果您的首页获得 10,000 次点击,则只需生成一次,代理将向其他 9999 名访问者发送相同的响应,而无需再次询问您的应用服务器。
【讨论】:
可能在开发者开始开发系统之前, 他们会考虑服务器的规格 也许您可以减少对 SEO 的使用并阻止搜索引擎对其进行抓取 (这是占用大量资源的任务) 尽量把所有东西都索引好,避免轻易搜索
【讨论】:
将其部署在云上,确保您的 Web 服务器和 Web 应用程序云准备就绪,并且可以跨不同节点进行扩展。我推荐 cherokee web 服务器(很容易在不同服务器之间进行负载平衡,并且基准测试证明比 Apache 更快)。例如,谷歌云(appspot)需要你的网络应用是 Python 或 Java
使用缓存代理,例如。 Nginx。
对于数据库,对一些假设重复的查询使用 memcache。
如果公司希望数据是私有的,那就建立一个私有云,在这里,Ubuntu 在这方面做得很好,完全免费和开源:http://www.ubuntu.com/cloud/private
【讨论】: