解决重载的Web服务器问题

时间:2010-11-08 23:55:02

标签: database scalability

我是网络开发领域的新手,目前正在采访公司,人们最喜欢的问题是:

  

如何扩展您的网络服务器   开始打一百万个查询?

     

如果你只有一个,你会怎么做?   运行的数据库实例   时间?你是怎么做到的?

这些问题非常有趣,我想了解它们 请填写您的建议/实践(您遵循)以了解此类情况

谢谢

6 个答案:

答案 0 :(得分:7)

如何扩展:

  • 找出你的瓶颈。
  • 找出问题的正确解决方案。
  • 检查您是否可以实施正确的解决方案。
  • 确定备用解决方案并检查

典型缩放选项:

  • 垂直缩放(更大,更快的服务器硬件)
  • 负载平衡
  • 将层/组件拆分到更多/其他硬件上
  • 通过缓存/ cdn卸载工作

数据库扩展选项:

  • 垂直缩放(更大,更快的服务器硬件)
  • 复制(主动或被动)
  • 群集(如果DBMS支持)
  • 拆分

答案 1 :(得分:4)

在最基本的层面上,扩展Web服务器包括编写应用程序,使其可以在>上运行。 1台机器,并抛出更多机器的问题。无论你调整多少,最终的扩展都将涉及一个Web服务器群。

数据库问题处理起来更加棘手。你的读/写百分比是多少?这是什么类型的应用程序? OLTP? OLAP?社交媒体?什么是数据库?我们如何添加更多服务器来处理负载?我们是否跨多个dbs划分数据?或者将所有更改复制到奴隶的负载?

你的问题会引发更多问题,即在面试中,如果某人只是对你发布的一般性问题“有答案”,那么他们只知道一种做事方式,这种方式可能是也可能不是最好的一个。

答案 2 :(得分:3)

我会采取一些方法来解决第一个问题:

  1. 硬件升级是否足以在短时间内处理数百万个查询?如果是这样,这可能是调查的初始点。

  2. 是否可以对软件进行更改以优化服务器的性能?我知道IIS有很多不同的设置可以用来在一定程度上提高性能。

  3. 考虑进入Web场而不是使用单个服务器。实际上我确实遇到过这样的情况:我曾经在那里工作过一次,我们每分钟就有数百万次点击,这让我们的网络服务器发生了相当糟糕的打击并占用了许多网站。我们的解决方案是更改负载均衡器,以便一些服务器提供服务器,这会破坏服务器,以便其他服务器可以保持其他站点,因为这是在秋季和零售这是你的大季度。虽然有些人会从这里开始,但我可能最后来到这里,因为与其他两个选项相比,这可以打开一些蠕虫。

  4. 至于数据库实例,虽然我可能首先使用多服务器选项,但它可能是一个类似的选项集,因为冗余可能是一个重要的附带好处,我不确定它是如此简单一个Web服务器。我可能会离开,但这就是我最初解决这个问题的方法。

答案 3 :(得分:3)

使用缓存代理

如果您向所有访问者(例如新闻网站)提供相同的网页,则可以通过使用缓存代理(例如 Varnish )缓存生成的内容,从而将负载降低一个数量级的 Apache Traffic Server

代理将位于您的服务器和访问者之间。如果您的首页获得10,000次点击,则只需生成一次,代理会向其他9999位访问者发送相同的响应,而无需再次询问您的应用服务器。

答案 4 :(得分:0)

可能在开发人员开始开发系统之前, 他们会考虑服务器的规格 也许你可以减少使用SEO并阻止它从搜索引擎抓取它 (这是占用大量资源的任务) 尝试将所有内容编入索引并避免轻松进行搜索

答案 5 :(得分:-1)

  1. 将其部署在云端,确保您的Web服务器和Web应用云准备就绪,并且可以跨不同节点进行扩展。我推荐切诺基网络服务器(非常容易在不同服务器之间实现负载平衡,基准测试比Apache更快)。例如,谷歌云(appspot)需要您的Web应用程序为Python或Java

  2. 使用缓存代理,例如。 Nginx的。

  3. 对于数据库,请使用memcache来解决一些假设要重复的查询。

  4. 如果公司希望数据是私有的,那么构建一个私有云,在这里,Ubuntu在完全免费和开源方面做得非常好:http://www.ubuntu.com/cloud/private