如何构建一个可用的Web应用程序

4
假设我们要构建一个高可用性的 Web 应用程序,我们的客户是企业,因此对于所有相关方而言,停机时间都等同于收益损失。
简而言之,为了让每个人都满意,我们需要始终在线。因此,从非常基本的角度来看,我们应该考虑哪些技术呢?
除了使用 PHP 以保持开发速度快之外,我们几乎没有任何偏好,因此完全可以采用新的数据存储平台等其他方法来实现这一目标。
非常感谢你的回答!谢谢!

你已经写好这个应用程序了吗?还是要从头开始? - strager
2
你可以试着在ServerFault上寻求帮助。高可用性有很大的硬件组成部分(冗余、跨多个数据中心的复制等)。 - David
你好!这个应用程序还没有被编写,因此我们对所有可以帮助我们的选项都持开放态度。 - Industrial
5个回答

3
你需要考虑硬件和软件两方面。
对于硬件,你最好选择有必要经验的托管提供商,例如Rackspace(我个人有良好的经验,但还有很多其他选择)。这不会便宜。你需要完全冗余的硬件来应对任何一个组件故障 - 多个服务器(至少两个),每个服务器都有多个磁盘、网络卡、风扇、电源等等。
关于软件-确保你构建时考虑了可伸缩性。如果是普通的Web应用程序,使用MVC范例并保持分离将有助于确保你可以跨多个服务器扩展应用程序。
通常最难的部分是数据库,因为你不能只运行两个。因此,研究具有自动故障转移的主从设置,甚至研究集群。
有许多书籍涉及此主题,这里只是其中之一。祝你好运!

哦,一个快速增长的替代个别服务器进行可用性管理的选择是使用云托管。绝对值得一看。 - Thilo
软件的进一步考虑 - 在使用多个服务器时跟踪客户端状态。有很多选项,每个选项都有优缺点,因此一个好的方法是考虑您希望向最终用户提供什么以及您想要花费多少时间/金钱来实现它。100%的正常运行时间比99.9%昂贵得多。 - mwalker
嗨Thilo,非常感谢您的回答!提供了很多有用的信息。当一个服务器离线时,如何处理服务器崩溃?我们如何“重定向”访问者到第二个服务器? - Industrial
一个负载均衡器可以自动为您完成这项工作。不幸的是,那是一件昂贵的硬件,并且它会引起用户会话的问题,正如mwalker所提到的那样。请参见http://en.wikipedia.org/wiki/Load_balancing_%28computing%29。 - Thilo

2

根据许多变量,有几种方法可以解决这个问题:

  • 选择托管解决方案
  • 部署虚拟机以实现冗余
  • 使用负载均衡
  • RAID阵列

所有这些组合都可以帮助您。

如果您决定选择托管解决方案,您仍然需要进行一些自己的备份,以防主机崩溃并且您需要恢复。如果您部署了虚拟机,您还可以强制执行一些负载均衡,并准备好虚拟机以防组件崩溃。


1

如果你不能承受停机,那么就需要考虑到冗余性,甚至要覆盖多个数据中心。


1

-1

4
那是胡说八道,就像说某个品牌和型号的汽车永远不会出故障一样。当心那些所谓的 unsinkable 船! - mwalker
广告并不能解决问题!而且,自从什么时候微软在开源世界中表现良好了呢?是的,它可能支持PHP,那又怎样?我的祖母可以跑马拉松,但这并不意味着我会把赌注押在她身上;无论是专业还是非专业。 - Chuck Burgess
mwalker,你能告诉我另一种选择吗?它可以在不同的数据中心托管您的Web应用程序,这样如果一个数据中心被摧毁,您的应用程序仍将正常运行。顺便说一下,Amazon EC2不是一个选项,因为它仍然需要应用程序所有者进行一定量的管理工作,而Azure平台会自动处理。 - Konstantin Tarkus
对不起,伙计们,这个答案真的很有用。我对当前的回答和评论感到惊讶,第一,很少有评论提到云解决方案,第二,这是第一个提到Azure的帖子。Azure确实使在自动高可用配置中部署网站变得容易。再加上Azure SQL数据库,你只需要编写和部署代码。你可以直接获得全球冗余...我使用多种语言和IDE编写代码。多年来,我已经将我们的EC2服务迁移到了Azure,并得到了巨大的满意度和支持。 - Chris Schaller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接