可伸缩的Web体系结构和分布式系统 (译)


最近对高可用架构有些兴趣,看了下相关资料,总结下。

1 分布式系统设计的原则

  • Avilability。 需要对关键模块做redundancy,快速的恢复对于部分系统,和优雅的降级当问题出现时。
  • Performance。访问Web的速度。
  • Reliability。对数据的请求要返回相同的数据。
  • Scalability。增加处理更大负载的能力所需要的努力,通常称为系统的可伸缩性。
  • Manageability。是否方便的更新和维护。
  • Cost。

2 基本的Web系统

本节主要讨论几乎所有大型web应用程序的核心因素:services, redundancy, partitions, and handling failure。

2.1 例子:图片托管应用程序

用户可以方便的将图片upload到Web服务器,并且也可以从Web服务器方便的下载。核心的指标是:upload image的能力和查询一个图片能力。该系统的要求:

  • 存储的图片数量没有限制,因此需要考虑存储的可伸缩性(就图片数量而言)。
  • 图片下载/请求需要较低的延迟。
  • 如果用户上传了一个图像,那么图像应该始终存在(图像的数据可靠性)。
  • 系统应该易于维护(可管理性)。
  • 由于图像托管没有很高的利润率,系统需要具有成本效益

下图是一个简单的系统功能图:
在这里插入图片描述

2.2 服务拆分

在考虑可伸缩的系统设计时,将功能解耦,并将系统的每个部分看作具有明确定义的接口的自己的服务。在实践中,以这种方式设计的系统被称为具有面向服务的体系结构(SOA)。

在该图片系统中,可以将图片上传和下载拆分成2个服务。并且将read/write分成2个资源,防止共享一个带宽造成的网络拥塞。appache web server 最多支持500个并发。拆分还带来的好处是
在这里插入图片描述

2.3 Redundancy

Redundancy可以避免单点故障的问题。无论是服务器还是应用程序都要有Redundancy。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u011563903/article/details/89608348