系统设计元件介绍Building Block – 系统设计05

system-design-系统设计05-系统设计元件-building-block-hogantech

序言

系统元件是系统设计的基本模组块,它们可以被组合起来,用来建构出复杂的软体系统。这边也来复习一下系统设计基本概念,系统设计是软体工程中的一个重要环节,它涉及到软体系统的整体架构和设计。一个好的系统设计可以使软体系统更加可靠、可扩展和易于维护。

当然如果要使用这些元件去设计系统,势必需先了解到底有哪些设计元件?每个设计元件代表的意义又是什么?这一篇文章会简介每一个系统元件,后面的篇章则是会详细讲解每一个元件的细节以及应用。

为何要使用系统元件?

通常系统设计问题,会有一些相似的地方,但细节往往是不一样。因此我们将这些跨系统设计问题相似的地方使用系统元件来处理。例如:负载平衡器就是一个常见的系统元件,如果遇到需要负载平衡的地方,直接使用该元件就好。

将系统元件透过模组化的方式,分离出来的原因,是因为「我们只需要讨论它们的功能,不需要讨论它们的实作」,这也是前篇章节提到的「抽象」的概念。这样也有另一个好处,当面试官希望我们针对某个部分进行优化的时候,我们只需要针对特定的系统元件去说明如何优化,而不需要考虑其他系统元件。

系统设计常见的系统元件,也可以在知名的公共云服务中实际使用,例如:Amazon Web Services (AWS)、Azure 和Google Cloud Platform (GCP)。上述这些知名的云服务,通常都会提供相对应的系统元件来提供使用者使用。

系统设计元件Building Block

在系统设计中,系统元件非常重要,一个系统设计流程除了估算系统设计所需要的资源、效能以外,最重要的就是如何透过现有的系统设计元件,来建构出软体系统。这边也列出各种系统元件的简介,未来的文章中,会再仔细介绍这些系统元件。

网域名称系统(DNS)

网域名称系统(DNS) 系统元件,着重于如何为通过不同网际网路协议,连接到网际网路的计算机设计分层和分散式命名系统。我们也需要透过DNS来帮我们处理IP以及网域名称的问题。

负载平衡器(Load Balancers)

负载平衡器(Load Balancers) 系统元件中,主要用来将伺服器端的服务请求分配传入客户端的请求,还可以减少负载并绕过故障的服务器。白话来说,我们需要针对伺服器以及用户端的来回请求,进行平衡,避免某特定伺服器因为大量的请求而瘫痪。

资料库(Databases)

资料库(Databases) 系统元件,是一种关联式资料库,使我们能够储存、搜索、修改和删除资料。接下来的篇章,讲解资料库时,我也会详细讲解哪些情况下适合SQL、哪些情况下适合NoSQL,也会花一些篇幅讲解如何优化、备份。

键值资料库(Key-Value Store)

键值资料库(Key-Value Store) 是一种非关联式资料库,用键值的形式储存资料。讲解此资料库时,也会解释键值储存的设计以及实现可扩展性、持久性和可配置性…等等,重要的概念。

内容交付网路(CDN)

内容交付网路(CDN) 是一种互连伺服器网路,可加快资料密集型应用程式的网页载入速度。当使用者造访网站时,来自该网站伺服器的资料必须透过网际网路传输到使用者的电脑中。如果使用者距离该伺服器较远,则载入大型档案(例如影片或网站影像) 会需要很长的时间。相反,存放在CDN 伺服器上的网站内容在地理位置上靠近使用者,便能更快地到达他们的电脑。使用CDN 可以有效地将内容交付给最终用户,同时降低延迟和伺服器的负担。

顺序器(Sequencer)

在顺序器系统元件中,主要着重在如何产生具有唯一性ID 的生成器,并会花一些篇幅,解释这些生成器的原理。那ID生成器是什么呢?以使用者的编号为例:当任何使用者注册时,我们会给他对应的使用者编号,这个使用者编号会希望他是独一无二的,使用者编号不会重复,因此不能随意产生,需要透过特殊处理才能产生。

服务监控(Service Monitoring)

监控系统在分散式系统中非常中药,因为监控系统可以帮助分析系统,并在出现问题时通知工程师、专案经理、客户。监控通常是用来预警,以方便系统管理者可以再遇到问题前,提前采取行动,防止即将发生的小问题变成大问题。记住,世界上没有任何系统是不出错的,因此我们需要服务监控来去帮我们回报问题。

分散式快取(Distributed Caching)

所谓的快取,是透过暂时性的储存资料,来去优化效能。分散式快取系统,会有多个快取服务器协同各类型的储存机制,来去回传经常被搜寻的资料,优化系统。

分散式讯息伫列(Distributed Messaging Queue)

分散式系统伫列是由多个服务器组成的伫列设计,可让系统的不同部分以非同步方式进行通讯和处理操作,实现软体系统可扩展性并提高可靠性。

发布订阅系统(Publish-Subscribe System)

发布、订阅如同字面上的意思,会由一个发布者来去做讯息的发布,其他讯息接收者称为订阅者。在这个发布订阅的规范下,发布者不用去管订阅者是谁,只要管发布就好,而订阅者也只要管订阅就好。

限速器(Rate Limiter)

限速器主要用来限制服务传入的请求。如果有大流量的请求进来系统,我们可以透过此系统元件,来去做限制流量,慢慢的将请求处理掉,避免系统瘫痪。我们也通常将限速器用作系统服务的防御层,以避免有意或是无意的高流量访问。

Blob 储存(Blob Store)

「blob」是二进位大型物件的缩写,是二进位形式的大量资料,不一定符合任何档案格式。 Blob 储存将这些海量资料保存在称为「资料湖」的非阶层式储存区域中。白话来说,此元件着重于非结构化资料的储存方法,例如:多媒体档案、二进制可执行档案。

分散式搜寻(Distributed Search)

搜索系统会从使用者那里获取查询字串,并在几秒钟或更短的时间内返回相关内容。要如何有效地在成千上万比资料中,快速回传给使用者,就是这个系统元件在做的事行。

分散式记录(Distributed Logging)

日志记录是一个I/O 密集型操作,耗时且缓慢。这个元件主要工作是要让分散式系统服务,有效地记录其程式执行的纪录,如果遇到错误需要修正时,我们也需要透过这样的纪录元件,来去回溯问题发生的过程。

分散式任务排程(Distributed Task Scheduling)

分散式任务排程主要用于,任务和资源之间进行协调。它会有效率的将资源分配给任务,以满足任务级别和系统级别的需求。简而言之,透过此系统元件,来让系统可以有效的进行资源、任务的排程与调度。

分散计数器(Sharded Counters)

计数器顾名思义,就是拿来计算数量的,例如:使用者的观看数、留言数、点赞数。如果是小规模的系统,只需要透过简单的程式就可以完成,但如果是大型规模的系统,我们就需要一个高效的分散式计数系统,来处理数百万个并请求。

结论

这篇文章撰写于2024年3月,因此本文所撰写的系统元件则是以当前,所知道的为主要撰写内容,未来几篇文章也会以这些系统元件去做介绍。

希望大家会喜欢这样的内容!

引用

What is CDN?

相关文章

Back-of-the-envelope 封底计算 – 系统设计04

软体设计非功能性特性– 系统设计03

抽象在系统设计中的应用– 系统设计02

现代系统设计介绍– 系统设计01

2023 雅虎软件工程师 软件工程师面试

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

zh_CN简体中文