系统设计问题

时间:2010-06-28 20:02:13

标签: sql-server database

我在一家从事云计算工作的公司面试时问了以下问题,并没有得到很好的答复。关于如何分析这个问题的任何建议都将非常感激。

我们公司拥有数亿用户,我们希望在生产中实现零停机时间,解释技术和编程实践,以帮助改进前端,中间层和后端服务(包括数据库服务)的冗余和故障转移功能

2 个答案:

答案 0 :(得分:2)

这个问题非常符合"Impossible Question" from Joel.这个问题没有正确答案。

我会开始将其分解为所有可能的失败点列表:

  • 数据库服务器
  • 数据库
  • 中间层
  • 中间层服务器
  • 应用
  • Web服务器

然后,对于他们中的每一个,我会找出破损的原因,以及如何在没有停机的情况下从中恢复。那些我不知道答案的人,我会尽那么多。

例如,让我们构建数据库服务器关闭的原因列表。由于我们正在寻找100%的正常运行时间,因此我们无视任何事情 - 无论有多远,

  • 硬件坏了
  • 电源下降
  • 网卡坏了
  • 操作系统意外崩溃
  • O.S。升级破解系统
  • Dumb System Admin或DBA
  • Dumb Janitor

一些可能的解决方案(考虑Windows后端的SQL Server)

  • 锁在门上
  • 数据库镜像(定期进行故障转移测试)
  • 多个NICS
  • 群集(定期进行故障转移测试)
  • 让更好的人

你可以基本上继续回答这个问题,直到面试官放弃,因为这个问题确实没有单一答案。

答案 1 :(得分:0)

这是一个非常广泛的问题。如果他们期望零停机时间,请告诉他们忘记它或将所有利润转为建立冗余。现在,如果他们只想要“五个9,或99.999%正常运行时间”,那么我们可以谈谈。 :)

您通常可以通过常规罐头来回答这些问题,即建立一个包含大量单元测试的可持续,自动化的构建环境。使用像MVC或类似设计模式可以帮助提高可测试性。执行定期安全审核。这比一个开发问题要大得多,这是一个关于网络和服务器架构,维护二级和三级数据中心等问题。这类问题确实让你有机会让面试官感到重要。