要想在体系规划领域中脱颖而出,深化了解一些根底的体系规划概念是必不可少的,这些概念包括负载均衡、缓存、分区、仿制、数据库和署理等。
依据我自己的经验,我总结出了18个要害概念,假如能把握这些,将极大地进步你处理体系规划问题的才能。这些概念包括了:了解API网关的奇妙之处、熟练把握负载均衡技能、体会CDN的重要性,以及认识到缓存在现代散布式体系中所扮演的人物。读完这篇博客后,你将对这些核心理念有全面的了解,并有满足的决心鄙人一次面试中运用这些知识。
体系规划面试一般并无固定结构。在面试进程中,盯梢一切内容并保证你现已覆盖到规划的一切重要环节或许会有些挑战。为了简化这个进程,我制定了一份体系规划纲要,这份纲要能够协助你回答任何体系规划面试问题。你能够查看附图,以获取关于或许触及的体系规划要害组件的启示。
紧记这份纲要,咱们来讨论一下这18个要害的体系规划概念,每个概念的扼要描绘如下:
1.域名体系(DNS)
域名体系(DNS)是互联网根底设施的基本组成部分,它担任将用户友好的域名转换为相应的IP地址。它就像互联网的电话簿,让用户经过输入容易回忆的域名,例如https://minorstone.com/,而不是核算机用来辨认彼此的数字IP地址,如”192.0.2.1″,就能拜访网站和服务。
当你在浏览器中输入一个域名时,DNS担任找到相关的IP地址,并将你的恳求指向适当的服务器。这个进程从你的电脑发送一个查询到递归解析器开始,然后经过一系列的DNS服务器,从根服务器开始,然后到顶级域(TLD)服务器,最终到威望称号服务器。一旦找到IP地址,递归解析器将其回来给你的电脑,然后让你的浏览器能够与方针服务器建立衔接并拜访想要的内容。
2.负载均衡器
负载均衡器是一种网络设备或软件,规划用于将传入的网络流量分发到多个服务器,以保证资源的最优运用,降低推迟,并坚持高可用性。它在扩展应用程序和有效办理服务器作业负载方面起着要害作用,特别是在流量突然激增或服务器之间恳求分配不均的情况下。
负载均衡器采用各种算法来确定传入流量的分配。一些常见的算法包括:
- 轮询法:恳求以循环方法顺次均匀地分发到一切可用服务器。
- 最少衔接法:负载均衡器将恳求分配给活动衔接最少的服务器,优先考虑较不繁忙的服务器。
- IP哈希法:对客户端的IP地址进行哈希,成果值用于确定恳求应被指向哪个服务器。此办法保证特定客户端的恳求始终路由到同一台服务器,有助于坚持会话的持久性。
3.API网关
API网关是作为服务器或服务的人物,充任外部客户端与应用程序内部微服务或依据API的后端服务之间的中介。在现代架构中,特别是在依据微服务的体系中,它是一个重要的组成部分,它简化了通讯进程,并为客户端供给了一个拜访各种服务的单一进口。
API网关的主要功用包括:
- 恳求路由:依据预界说的规则和装备,API网关将来自客户端的API恳求指向适当的后端服务或微服务。
- 身份验证和授权:API网关办理用户身份验证和授权,保证只有经过授权的客户端能够拜访服务。它在将恳求路由到后端服务之前,会验证API密钥、令牌或其他凭证。
- 限速和节省:为了保护后端服务免受过度负载或滥用,API网关会依据预界说的战略对客户端的恳求进行限速或节省。
- 缓存:为了最小化推迟和后端负载,API网关会缓存经常运用的呼应,并直接服务于客户端,无需查询后端服务。
- 恳求和呼应转换:API网关能够修正恳求和呼应,如转换数据格式、增加或删去头部,或改动查询参数,以保证客户端和服务之间的兼容性。
4.CDN
内容分发网络(CDN)是一个散布式服务器网络,它将内容(如图片、视频、样式表和脚本)存储并从地舆方位上离用户更近的当地传送给用户。CDN的规划目的是进步向终端用户传输内容的功用、速度和牢靠性,无论他们相关于源服务器的方位怎么。以下是CDN的作业方法:
- 当用户从网站或应用程序恳求内容时,恳求会被指向最近的CDN服务器,也称为边际服务器。
- 假如边际服务器现已缓存了恳求的内容,它会直接将内容供给给用户。这个进程削减了推迟并进步了用户体验,因为内容传输的距离更短。
- 假如边际服务器上没有缓存内容,CDN会从源服务器或另一个近在咫尺的CDN服务器上获取它。一旦获取了内容,它就会被缓存在边际服务器上并供给给用户。
- 为了保证内容坚持最新状况,CDN会定期查看源服务器的变化,并相应地更新其缓存。
5. 正向署理与反向署理
正向署理,也被称为”署理服务器”或简单的”署理”,是放置在一个或多个客户端机器前的服务器,充任客户端和互联网之间的中介。当客户端机器恳求互联网上的资源时,恳求首要发送到正向署理。然后,正向署理代表客户端机器将恳求转发到互联网,并将呼应回来给客户端机器。
另一方面,反向署理是放置在一个或多个Web服务器前的服务器,作为Web服务器和互联网之间的中介。当客户端恳求互联网上的资源时,恳求首要发送到反向署理。然后,反向署理将恳求转发到其间一台Web服务器,该服务器将呼应回来给反向署理。最终,反向署理将呼应回来给客户端。
6. 缓存
缓存是坐落应用程序和原始数据源(如数据库、文件体系或远程网络服务)之间的高速存储层。当应用程序恳求数据时,首要查看缓存。假如数据存在于缓存中,它就会被回来给应用程序。假如在缓存中找不到数据,那么数据就会从原始源获取,存储在缓存中以备将来运用,然后回来给应用程序。在散布式体系中,缓存能够呈现在多个方位,包括客户端、DNS、CDN、负载均衡器、API网关、服务器、数据库等。
7. 数据分区
在数据库中,水平分区常被称为分片,它包括将表的行分割成更小的表,并将它们存储在不同的服务器或数据库实例上。这种办法被用来将数据库负载分散到多个服务器,然后进步功用。
相反,笔直分区触及到将表的列分割成独立的表。这种技能旨在削减表中的列数,并进步只拜访有限数目列的查询的功用。
8. 数据库仿制
数据库仿制是一种用于在各种服务器或方位上保护相同数据库的多份副本的办法。数据库仿制的主要方针是进步数据的可用性、冗余度和容错性,保证在硬件毛病或其他问题发生时体系仍能坚持运转。
在仿制的数据库装备中,一个服务器作为主(或主)数据库,其他的则作为副本(或从)。此进程触及同步主数据库和副本之间的数据,保证一切服务器都拥有相同的最新信息。数据库仿制供给了多种优点,包括:
- 进步功用:经过在多个副本间分发读取查询,能够减轻主数据库的负载,然后进步查询呼应时刻。
- 高可用性:假如主数据库遇到毛病或停机,副本能够持续供给数据,保证应用程序的拜访不间断。
- 增强数据保护:在不同方位保护数据库的多份副本有助于防止因为硬件毛病或其他灾难导致的数据丢掉。
- 负载均衡:副本能够处理读取查询,然后完成更好的负载分配并削减对主数据库的全体压力。
9.散布式音讯体系
散布式音讯体系为众多或许地舆分散的应用、服务或组件之间的音讯交换供给了一种牢靠、可扩展且容错性强的方法。这些体系经过解耦发送者和接收者组件来促进通讯,使它们能够独立地开发和运转。在大规模或杂乱体系中,如微服务架构或散布式核算环境中,散布式音讯体系显得尤为重要。这些体系的比如包括Apache Kafka和RabbitMQ。
10. 微服务
微服务代表了一种架构风格,其间应用程序被组织成一组小型、松懈耦合且能自主部署的服务。每个微服务担任应用程序中的一个特定功用或领域,并经过界说明确的API与其他微服务进行通讯。这种办法与传统的单体架构有所不同,后者将应用程序构建为一个紧密耦合的单一单位。
微服务的主要特性包括:
- 单一职责:遵循单一职责准则,每个微服务专注于特定的功用或领域,使服务更易于了解、开发和保护。
- 独立性:微服务能够独立开发、部署和扩展,为开发进程供给了更大的灵活性和敏捷性。团队能够同时开发各种服务,而不会影响整个体系。
- 分散化:一般,微服务是分散的,每个服务都有自己的数据和事务逻辑。这种办法促进了关注点分离,使团队能够依据自己的特殊需求做出决策并挑选技能。
- 通讯:微服务运用轻量级协议(如HTTP/REST、gRPC或音讯队列)进行交互。这有助于互操作性,并便于集成新服务或替换现有服务。
- 容错性:因为微服务是独立的,一个服务的失败不一定导致整个体系溃散,然后进步了应用程序的全体弹性。
11.NoSQL 数据库
NoSQL数据库,或称为“非仅仅是SQL”的数据库,对错联系型数据库,规划用于存储、办理和检索非结构化或半结构化数据。它们供给了对传统联系型数据库的替代,后者依赖于结构化数据和预界说的模式。因为NoSQL数据库的灵活性、可扩展性以及处理很多数据的才能,使其在现代应用程序、大数据处理和实时分析中越来越受欢迎。
NoSQL数据库能够分为四种主要类型:
- 文档型:这类数据库将数据存储在类似于文档的结构中,如JSON或BSON。每个文档都是自包括的,能够有自己共同的结构,使其适合处理异构数据。文档型NoSQL数据库的比如包括MongoDB和Couchbase。
- 键值对:这类数据库将数据以键值对形式存储,其间键作为仅有标识符,值则保存相关的数据。键值对数据库关于简单的读写操作十分高效,并且它们能够容易地进行分区并水平扩展。键值对NoSQL数据库的比如包括Redis和亚马逊的DynamoDB。
- 列族型:这类数据库将数据存储在列族中,列族是相关列的调集。它们规划用来处理写入密集型的作业负载,关于已知行和列键的数据查询十分高效。列族型NoSQL数据库的比如包括Apache Cassandra和HBase。
- 图形型:这类数据库规划用于存储和查询具有杂乱联系和互联结构的数据,例如社交网络或推荐体系。图数据库运用节点、边和特点来表明和存储数据,然后更易于履行杂乱的遍历和依据联系的查询。图形型NoSQL数据库的比如包括Neo4j和亚马逊的Neptune。
12. 数据库索引
数据库索引是一种数据结构,能进步数据库查询操作的速度和功率。它们的功用类似于书本中的索引,使数据库办理体系(DBMS)能迅速定位与特定值或值组相关的数据,无需查找表中的每一行。经过供给更直接的数据查找途径,索引能够明显削减从数据库检索信息所需的时刻。
索引一般建立在数据库表的一个或多个列上。B树索引是最常见的类型,它以分层树状结构组织数据,答应快速的查找、插入和删去操作。其他类型的索引,如位图索引和哈希索引,也存在各自的运用场景和优势。
虽然索引能够明显进步查询功用,但也触及到一定的权衡:
- 存储空间:索引需求额外的存储空间,因为它们在原始表数据旁边生成和保护独立的数据结构。
- 写功用:当在表中插入、更新或删去数据时,相应的索引也必须被更新,这或许会减慢写操作的速度。
13.散布式文件体系
散布式文件体系是一种规划用来在多个服务器、节点或机器(经常是跨网络散布)之间办理和授权拜访文件和目录的存储体系。它们让用户和应用程序能够拜访和修正文件,就像这些文件是坐落本地文件体系上一样,虽然实际的文件或许物理上坐落各种远程服务器上。散布式文件体系常用于大规模或散布式核算环境,以供给容错才能、高可用性和增强功用。
14.告诉体系
这些功用用于向用户发送告诉或警报,比如电子邮件、推送告诉或短信。
15. 全文检索
全文查找答应用户在应用程序或网站中查找特定的单词或短语。当接收到用户查询时,应用程序或网站会供给最相关的成果。为了快速有效地完成这个进程,全文查找运用了一种称为倒排索引的数据结构,该结构将单词或短语与呈现它们的文档进行关联。Elastic Search便是这样一种体系的比如。
16.散布式和谐服务
散布式和谐服务是一种旨在以牢靠、高效和容错的方法调控和同步散布式应用、服务或节点行为的体系。它们协助保护一致性,处理散布式同步,并在散布式环境中监控各种组件的装备和状况。在大规模或杂乱的体系中,例如微服务架构、散布式核算环境或集群数据库,散布式和谐服务特别有价值。Apache ZooKeeper、etcd和Consul便是这样服务的比如。
17. 心跳
在散布式环境中,作业/数据在服务器之间散布。为了在这样的设置中高效地路由恳求,服务器需求知道体系中的其他服务器。此外,服务器应该知道其他服务器是否还在正常运作。在去中心化体系中,每逢一个恳求到达服务器时,该服务器应该有满足的信息来决议哪个服务器应担任处理该恳求。这使得及时检测服务器毛病成为一项重要任务,它还使体系能够采取纠正举动,将数据/作业移至另一台健康的服务器,阻挠环境进一步恶化。
为了处理这个问题,每个服务器会定期向中心监控服务器或体系中的其他服务器发送心跳音讯,以显现它仍然存活并正常作业。
心跳是检测散布式体系中毛病的一种机制。假如有一个中心服务器,一切服务器会定期向它发送心跳音讯。假如没有中心服务器,一切服务器会随机挑选一组服务器,并每隔几秒钟向它们发送一条心跳音讯。这样,假如一段时刻没有收到来自某台服务器的心跳音讯,体系就会置疑该服务器或许现已溃散。假如在装备的超时期内没有心跳,体系能够得出服务器不再存活的结论,并中止向其发送恳求,并开始替换作业。
18. 校验和
在一个散布式体系中,在组件之间传输数据时,从节点获取的数据或许会呈现损坏的情况。这种损坏或许是因为存储设备、网络、软件等方面的毛病导致的。散布式体系怎么保证数据完整性,以便客户端接收到过错而不是损坏的数据?
为了处理这个问题,咱们能够核算一个校验和并将其与数据一同存储。
为了核算校验和,咱们运用了一种加密哈希函数,例如MD5、SHA-1、SHA-256或SHA-512。哈希函数接受输入数据并发生一个固定长度的字符串(包括字母和数字),这个字符串被称为校验和。
当体系存储某些数据时,它核算数据的校验和并将校验和与数据一同存储。当客户端检索数据时,它验证从服务器接收到的数据是否与存储的校验和相匹配。假如不匹配,客户端能够挑选从另一个副本中检索该数据。
结论
经过运用上述体系规划概念和模板,最大限度地进步您的体系规划方案。