我们经常需要设计具有高可用性、高可扩展性和高吞吐量的系统。 它们到底是什么意思?
下图为复印件系统设计备忘单,包括“三高”的常见解决方案。
高可用性意味着我们需要达到一个正常运行时间长。我们通常将设计目标描述为:"3 个 9"或"4 个 9"。"4个九",即 9999% 的正常运行时间,这意味着服务只能中断 8 次64 秒。
为了实现高可用性,我们需要在系统中冗余设计。有几种方法可以做到这一点:
热-热 两个实例接收相同的输入,并将输出发送到下游服务。 如果其中一个出现故障,另一个可以立即接管。 由于双方都向下游发送输出,因此下游系统需要能够处理重复数据。
hot-warm两个实例接收相同的输入,只有热端将输出发送到下游服务。 如果热侧出现故障,则热侧将接管并开始向下游服务发送输出。
单个领导实例从上游系统接收数据,并将其复制到其他副本。
无领导的集群没有领导者。 任何写入操作都将复制到其他实例。 只要写入实例数加上读取实例数大于实例总数,我们就得到有效数据。 这称为仲裁。
这意味着需要该服务在一段时间内处理大量请求。常用的指标是 QPS(每秒查询数)或 TPS(每秒事务数)。
为了实现高吞吐量,我们通常在架构中进行添加缓存以避免通过速度较慢的 IO 设备,例如数据库或磁盘。 我们还可以增加计算密集型任务的线程数。 但是,添加过多的线程会降低性能。 因此,我们需要识别系统的瓶颈,提高系统的吞吐量。
我们也可以在系统中使用它异步处理有效地单独隔离耗时且资源密集型的组件。
高可扩展性意味着系统可以快速轻松地扩展到:容纳更多容量(水平可伸缩性)或更多功能(垂直可伸缩性)。 通常,我们通过查看响应时间来决定是否需要扩展系统。
为了实现高可扩展性,您需要隔离每个服务的职责。 因此,微服务被广泛采用。 我们还利用服务注册和负载均衡器将请求路由到适当的实例。
发布一系列龙卡,分享数百万现金