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