如何设计一个支持1亿用户使用的系统

高可用架构设计最核心的就是两点:解耦和冗余。解耦包括业务状态分离(无状态架构设计)、分库分表等。冗余包括缓存、CDN、主从备份、主主备份、GeoDNS 等。一个好的架构设计需要在产品迭代的不同阶段选择合适的技术,从而既能在合理的成本条件下有效保障当前的业务需求,又能考虑到业务下一步发展的可能性。原文链接:https://levelup.gitconnected.com/how-to-design-a-system-to-scale-to-your-first-100-million-users-4450a2f9703d

对于软件架构师来说,设计一个支持数亿用户的系统是一个巨大的挑战(不过在读了这篇文章后,也许就没那么难了)。

以下是本文涉及的一些主题:

从最简单的开始:单体架构可伸缩性的艺术:水平扩展(scaling out),纵向扩展(scaling up)关系型数据库的可扩展性:主从备份、主主备份、联合、分片、去规范化和 SQL 调优数据库选型:NoSQL 还是 SQL?高级概念:缓存、CDN、GeoDNS 等

我们暂时不讨论高性能计算中的其他常用术语,比如容错、可靠性、高可用性等。

让我们平静一下,旅程即将开始!

从 0 开始

我们先从设计一个仅支持少量用户的基本应用程序开始。最简单的方法就是将整个应用程序部署到单个服务器上,这可能也是大多数人开始的方式。如下图所示。

一个网站(包括 API)运行在类似 Apache(或 Tomcat)这样的 Web 服务器上。

一个 Oracle(或 MySQL)这样的数据库。

在同一台物理服务器上部署 Web 服务器和数据库服务器

但目前的架构有如下缺陷:

如果发生数据库故障,则会导致系统故障。如果 Web 服务器出现故障,也会导致整个系统故障。

在本例中,我们没有做故障恢复和冗余。如果一个服务器宕机,意味着所有服务都会挂掉。

DNS 服务器解析主机名和 IP 地址

在上图中,用户(或客户端)连接到 DNS 以获得我们的系统所在服务器的 IP 地址。一旦获得了 IP 地址,请求就直接发送到我们的系统。

每当你访问一个网站,你的电脑将会执行一次 DNS 查寻。

通常,DNS 以付费服务的形式由服务器托管公司提供,并不需要在我们自己的服务器上运行。

可伸缩性的艺术

由于许多原因,例如数据量的增加、业务的增加(例如事务数量)和用户的增长,我们的系统可能不得不进行扩展。

可伸缩性通常意味着能够处理更多的用户、客户、数据、事务或请求,可以动态增加更多资源而不会影响用户体验。

我们必须决定如何扩大这个系统的规模。在本例中,有以下两种类型的扩展:垂直扩展(scale-up)和水平扩展(scale-out)。

scale up vs scale out

Scaling up:向现有服务器添加更多内存和 CPU

Scaling up(也被称为 vertical scaling),指的是使系统的资源最大化,以扩展其处理不断增加的负载的能力——例如,我们通过增加内存和 CPU 来增加服务器的处理能力。

如果我们服务器的内存为 8GB,那么只需要更换或添加硬件就可以很容易地升级到 32GB 甚至 128GB。

有很多方法可以实现垂直扩展,如下所示:

通过增加 RAID 中的硬盘,增加 I/O 容量。通过切换到固态驱动器(SSD)来改善 I/O 访问时间。切换到具有更多处理器的服务器。通过升级网络接口或安装额外的网络接口,提高网络吞吐量。通过增加内存来减少 I/O 操作。

如果可以负担硬件升级的成本,垂直扩展对于小型系统来说是一个不错的选择,但它也有以下严重的限制:

“不可能无限制的给一台服务器增加硬件”。能够增加多少硬件主要取决于操作系统和服务器的内存总线宽度。当我们增加内存或者其他硬件时,必须关闭

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值