高层设计或HLD指的是整体系统设计,包括系统架构和设计的描述,是一种通用的系统设计,包括:
•系统架构•数据库设计•对系统、服务、平台和模块之间关系的简要描述。
高层设计或HLD也被称为宏观级别设计。
什么是高层设计文档?
HLD文档包括数据流、流程图和数据结构,以帮助开发人员了解和实现当前系统的设计意图。 此文档负责:
•解释系统组件和操作之间的连接,描述逻辑以及•为系统的每个模块所需的体系结构设计(用于系统的功能和流程)
根据功能需求。这是因为客户业务需求被转化为我们作为咨询工作或架构设计、安全性和网络的一部分所说的解决方案,我们将其称为高层设计。
HLD 不包括物理要求、端口详细信息、VLAN等许多细节。
高层设计文档的范围
高层设计文档呈现系统的结构,如应用/数据库架构、应用流程和技术架构。与低层设计不同,高层设计文档可能使用一些非技术术语,低层设计应该是严格的技术术语。
注意:制定HLD是解决方案架构师的责任。在创建HLD之后,有经验的专业设计人员根据HLD的标准转向LLD。LLD将提供关于软件实体如何工作的详细信息,而HLD只关注在组织中放置哪些软件实体以进行高效操作。 以下是在设计HLD时从解决方案架构师那里预期的约束:
1.收集功能和非功能需求2.成本限制(一旦组织规模扩大,这变得非常重要)3.对系统的一致性、可用性、可扩展性和性能的程度有强烈的约束。
高层设计的组成部分
为了提供对整个解决方案的总体概览,HLD应包含以下两个元素:
1.软件实体的属性和特性。2.不同软件实体(组件、模块、类等)之间的关系。
图解: 让我们通过下面的视觉辅助来描绘高层设计,以可视化组件及其关系,如下所示:
![null faa686b9eabab3d38501a716156b9592.png](https://i-blog.csdnimg.cn/blog_migrate/309c528a3d5b6095dc351d3593948c0f.png)
高层设计的组件
高层设计的目的
这个高层设计(HLD)的目的是:为合适的模型添加必要的详细描述。这旨在帮助满足运营需求,并可用作模块之间交互的参考手册。
基本上,HLD是功能需求和信息流跨资产或组件的技术表示。
高层设计的特点
•包含每个设计方面的图表在所有设计HLD中(基于业务需求和预期结果)。•包含硬件、软件接口以及用户界面的描述。•用户典型过程的工作流程详细说明,以及性能规格。•项目的架构和设计包含在用户HLD中。
如何设计可扩展的高层设计(HLD)系统
为了设计任何高层次系统,需要按照顺序列出某些术语,以便连接各个方面以了解:
![null b4cd93d6a6f6d402c131d63e1e526c6b.png](https://i-blog.csdnimg.cn/blog_migrate/17d9f8abc81174f1ae7d14fb2087a232.png)
如何设计可扩展的高层设计(HLD)系统
1. 容量估算:
在本文中,我们将研究我们需要在高层次设计中掌握的概念,因此我们将提出一条路线图。对于专业人士来说,路线图尤为重要,因为这些图表帮助我们完全理解实时服务在高层次上如何扩展。
我们还展示了服务器的特征行为,通过吞吐量和延迟在系统内进行测量,如下所示:
![null f4a6de85e8d756ddaa3b415a9aaad667.png](https://i-blog.csdnimg.cn/blog_migrate/8efe0b3f04049a58bf736b1e2bdbc576.png)
通过并发比较吞吐量和延迟:服务器的行为
2. HTTP和HTTPS及其方法:
1.GET2.PUT3.POST
提示:从服务器发送数据给客户端有两种方式:
1.使用 Websockets2.使用轮询
3. Websockets:
在客户端-服务器架构中,我们向服务器发送请求,服务器将其发送回来,这样通信就发生了。但是,在设计系统时,我们面临的最大问题是我们是否能够实现客户端-服务器模型,因为我们不能等待服务器响应。在这种情况下,Websockets扮演了至关重要的角色,解决了这些问题,使我们能够进行实时通信。它们在几乎每个需要设计的系统中被广泛使用,因为我们不能让我们的系统等待响应。考虑一个实时文本消息服务的例子,例如 Slack 和 Whatsapp,这些服务需要保持连接。
另外,在返回动态值的系统中也会使用,例如股票价格系统、食品和杂货送货系统,在这些系统中我们返回的是从卖家到消费者的实时产品信息。
4. 轮询:
轮询是一种从服务器发送和接收数据的技术,就像我们在 Websockets 中所做的一样。轮询有两种类型,分别是长轮询和短轮询。在短轮询中,客户端发送请求。
![null a76d4eeec82f439544374e1e87382b1e.png](https://i-blog.csdnimg.cn/blog_migrate/8827c70bb3013d2cd3ffa8de633c1eca.png)
短轮询与长轮询
在短轮询中,客户端发送请求,服务器会立即按固定间隔发送数据,无论数据是否更新。在长轮询中,服务器等待客户端请求以响应,并且仅在有新数据可用或数据更新时才会响应。在长轮询中,客户端发送请求,如果没有新信息可用或数据未更新,服务器将等待而不会响应。
提示:长轮询优于短轮询,因为系统发送的请求更少。 在设计系统时,请考虑如果没有客户端发出请求,服务器会发生什么。
5. 服务器发送事件(SSE):
它是专门从服务器向客户端进行单向通信的设计系统中的一种方式。
例子:实时流媒体
![null 1e3aff8e1ff865e3728be0629be270bf.png](https://i-blog.csdnimg.cn/blog_migrate/9245bbfd20b2488853d8fe5d7259759f.png)
服务器发送事件(SSE)
6. 过滤
控制室 API 支持对返回数组资源的端点进行过滤、分页和排序。
过滤机制可以过滤所需的资源,排序机制将资源排序,并且分页机制然后返回这些排序过的资源的特定范围。此主题为您提供有关过滤和排序 API 请求结果以及处理从 API 请求返回的大型结果集的分页的详细信息。
注意:排序和过滤支持子字符串。例如,如果要搜索名称中具有 "fin" 的机器人或文件,则输入 "fin" 作为搜索条件。将显示所有名称中包含 "fin" 的机器人和文件,例如 Finance、Finder、DeltaFinance 和 Dolfin。
通配符不支持搜索和过滤机器人或文件。 过滤允许您对返回的资源集合应用布尔条件,以便将集合子集化为仅对条件为真的那些资源。在控制室 API 过滤中,最基本的操作是将字段与给定值进行比较。可以使用相等比较、范围比较或逻辑。使用以下运算符将字段与常量值进行比较。
7. 速率限制:
速率限制器限制发送者在一段时间内可以完成的事件数量,限制发送者在一定时间内发送请求的数量。一旦达到阈值限制,进一步的请求将被阻止,如下图所示:
![null 56fa468f89c6974586d85590457c0650.png](https://i-blog.csdnimg.cn/blog_migrate/c016876201a89a0fcc9f0a43cc56321f.png)
速率限制
8. 容错性:
无论我们设计的系统有多好,总是存在硬件问题、软件问题(例如内存不足)或人为错误导致的故障和故障容忍。在这种情况下,我们需要通过以下方式提供韧性:
•复制•冗余•可用性
9. 分页:
在HLD阶段,我们不关心代码,但非常关注数据库设计,因此我们追踪数据如何进行。现
在,在设计高层次系统时,分页的概念进入了角色,我们需要从数据库中过滤出特定的数据,基于要求,例如地理因素。例如:苹果公司,它根据地理位置分页出特定产品。
![null 2649d0684c13ed517ca8f41e83fe2bc0.png](https://i-blog.csdnimg.cn/blog_migrate/5722366bf60642836116a00fae3a1d62.png)
分页
分页是通过 GET 请求实现的,在分页中有两个边界:
10. 日志记录:
日志文件记录软件应用程序中发生的事件的详细信息。这些详细信息可能包括微服务、交易、服务操作或对调试事件流有帮助的任何内容。日志记录对于监视应用程序的流程非常重要。