系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第二部分:CI CD、设计模式、数据库

2023-12-13 09:30:16

本心、输入输出、结果

系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第二部分:CI CD、设计模式、数据库


编辑:简简单单 Online zuozuo
地址:https://blog.csdn.net/qq_15071263

在这里插入图片描述

前言

我们使用视觉效果和简单术语来解释复杂的系统是如何运转的,帮助我们理解技术细节

我们使用视觉效果和简单术语来解释复杂的系统是如何运转的,帮助我们理解技术细节

在这里插入图片描述

CI/CD

CI/CD 管道用简单的术语解释

在这里插入图片描述

第 1 部分 - 带有 CI/CD 的 SDLC

软件开发生命周期 (SDLC) 由几个关键阶段组成:

  • 开发
  • 测试
  • 部署
  • 维护

CI/CD 自动执行并集成这些阶段,以实现更快、更可靠的发布。

当代码被推送到 git 存储库时,它会触发自动生成和测试过程。运行端到端 (e2e) 测试用例来验证代码。如果测试通过,代码可以自动部署到过渡/生产。如果发现问题,代码将发送回开发部门进行错误修复。这种自动化为开发人员提供了快速反馈,并降低了生产中出现错误的风险。

第 2 部分 - CI 和 CD 之间的区别

持续集成 (CI) 可自动执行生成、测试和合并过程。每当提交代码时,它都会运行测试,以便及早检测集成问题。这鼓励频繁的代码提交和快速反馈。

持续交付 (CD) 可自动执行基础架构更改和部署等发布流程。它确保软件可以通过自动化工作流程随时可靠地发布。CD 还可以自动执行生产部署之前所需的手动测试和批准步骤。

第 3 部分 - CI/CD 管道

典型的 CI/CD 管道具有多个连接的阶段:

  • 开发人员将代码更改提交到源代码管理
  • CI 服务器检测更改并触发构建
  • 编译和测试代码(单元、集成测试)
  • 向开发人员报告的测试结果
  • 成功后,项目将部署到过渡环境
  • 在发布前,可以在分期时进行进一步测试
  • CD 系统将批准的更改部署到生产环境

在这里插入图片描述

Netflix Tech Stack (CI/CD Pipeline)

在这里插入图片描述

规划:Netflix Engineering 使用 JIRA 进行规划,使用 Confluence 进行文档编制。

编码:Java是后端服务的主要编程语言,而其他语言用于不同的用例。

构建:Gradle 主要用于构建,Gradle 插件是为了支持各种用例而构建的。

打包:包和依赖项打包到亚马逊系统映像 (AMI) 中以供发布。

测试:测试强调生产文化对构建混沌工具的关注。

部署:Netflix使用其自建的Spinnaker进行金丝雀部署。

监控:监控指标集中在Atlas中,Kayenta用于检测异常。

事件报告:事件根据优先级调度,PagerDuty 用于事件处理

在这里插入图片描述

架构设计模式

MVC、MVP、MVVM、MVVM-C 和 VIPER

这些架构模式是应用开发中最常用的模式之一,无论是在 iOS 还是 Android 平台上。开发人员引入了它们来克服早期模式的局限性。那么,它们有何不同

在这里插入图片描述

  • MVC 是最古老的模式,可以追溯到近 50 年前
  • 每个模式都有一个“视图”(V),负责显示内容和接收用户输入
  • 大多数模式都包含用于管理业务数据的“模型”(M)
  • “控制器”、“表示器”和“视图模型”是在视图和模型(VIPER 模式中的“实体”)之间进行调解的转换器

在这里插入图片描述

每个开发人员都应该知道的 18 种关键设计模式

设计模式是常见设计问题的可重用解决方案,可实现更顺畅、更高效的开发过程。它们是构建更好的软件结构的蓝图。以下是一些最流行的模式

在这里插入图片描述

以下的序号与图上对应

  1. 抽象工厂:族创建者 - 制作相关项目的组。
  2. 建造者:乐高大师 - 逐步构建对象,保持创建和外观分离。
  3. 原型:克隆制作者 - 创建完全准备好的示例的副本。
  4. 单例:唯一 - 只有一个实例的特殊类。
  5. 适配器:通用插头 - 连接具有不同接口的东西。
  6. 桥接:功能连接器 - 将对象的工作方式链接到它的作用。
  7. 复合:树生成器 - 形成简单和复杂部分的树状结构。
  8. 装饰器:定制器 - 在不更改对象核心的情况下向对象添加功能。
  9. 外观:一站式商店 - 代表具有单一简化界面的整个系统。
  10. 享元:节省空间 - 高效共享可重复使用的小物品。
  11. 代理:替身执行组件 - 表示另一个对象,控制访问或操作。
  12. 责任链:请求中继 - 通过对象链传递请求,直到被处理。
  13. 命令:任务包装器 - 将请求转换为对象,准备执行操作。
  14. 迭代器:集合资源管理器 - 逐个访问集合中的元素。
  15. 中介:通信中心 - 简化不同类之间的交互。
  16. 快照:时间胶囊 - 捕获和恢复对象的状态。
  17. 观察者:新闻广播员 - 通知类有关其他对象中的更改。
  18. 访客:熟练的访客 - 在不更改职业的情况下向职业添加新操作

在这里插入图片描述

云服务中不同数据库的清单

在这里插入图片描述

为了可以方便的选择一项数据库技术,为了避免过多的数据库类型给我们造成选择困难或者决策困难,所以我们整理了云服务商的数据库技术

可以帮助我们提供更高层面的指导和决策支持,避免潜在的陷阱

注意:Google 针对其数据库用例的文档有限。尽管我们尽了最大努力查看可用的内容并得出了最佳选择,但某些条目可能需要更准确

在这里插入图片描述

8 种支持数据库的数据结构

答案将根据您的用例而有所不同。数据可以在内存或磁盘上编制索引。同样,数据格式也各不相同,例如数字、字符串、地理坐标等。系统可能是写入密集型或读取密集型的。所有这些因素都会影响数据库索引格式的选择。

在这里插入图片描述

以下是一些用于索引数据的最常用数据结构:

  1. Skiplist:一种常见的内存中索引类型。在 Redis 中使用
  2. 哈希索引:“Map”数据结构(或“集合”)的一种非常常见的实现
  3. SSTable:磁盘上不可变的“映射”实现
  4. LSM 树:Skiplist + SSTable。高写入吞吐量
  5. B树:基于磁盘的解决方案。一致的读/写性能
  6. 倒排索引:用于文档索引。用于 Lucene
  7. 后缀树:用于字符串模式搜索
  8. R树:多维搜索,如查找最近的邻居

在这里插入图片描述

如何在数据库中执行 SQL 语句

下图显示了该过程。请注意,不同数据库的体系结构不同,该图演示了一些常见的设计

在这里插入图片描述

步骤说明

步骤1 - SQL语句通过传输层协议(例如TCP)发送到数据库。

步骤 2 - 将 SQL 语句发送到命令解析器,在那里进行语法和语义分析,然后生成查询树。

步骤3 - 将查询树发送到优化器。优化程序创建执行计划。

步骤 4 - 将执行计划发送给执行者。执行程序从执行中检索数据。

步骤 5 - 访问方法提供执行所需的数据获取逻辑,从存储引擎检索数据。

步骤 6 - 访问方法确定 SQL 语句是否为只读。如果查询是只读的(SELECT 语句),则会将其传递给缓冲区管理器进行进一步处理。缓冲区管理器在缓存或数据文件中查找数据。

步骤 7 - 如果语句是 UPDATE 或 INSERT,则将其传递给事务管理器进行进一步处理。

步骤8 - 在事务期间,数据处于锁定模式。这是由锁管理器保证的。它还确保事务的 ACID 属性

在这里插入图片描述

CAP定理

CAP定理是计算机科学中最著名的术语之一,但我敢打赌,不同的开发人员有不同的理解。让我们来看看它是什么以及为什么它会令人困惑

在这里插入图片描述

CAP 定理指出,分布式系统不能同时提供这三个保证中的两个以上。

  • 一致性:一致性意味着所有客户端无论连接到哪个节点,都能同时看到相同的数据。
  • 可用性:可用性意味着任何请求数据的客户端都会得到响应,即使某些节点关闭。
  • 分区容错:分区表示两个节点之间的通信中断。分区容错意味着无论存在网络分区,系统仍继续运行。

“2/3”的表述可能有用,但这种简化可能会产生误导。

选择数据库并不容易。仅仅根据CAP定理来证明我们的选择是不够的。例如,公司不会仅仅因为它是一个AP系统而选择Cassandra作为聊天应用程序。有一个良好的特征列表使Cassandra成为存储聊天消息的理想选择。我们需要更深入地挖掘。

“CAP只禁止设计空间的一小部分:在存在分区的情况下,完美的可用性和一致性,这是罕见的”。引自论文:十二年后的CAP:“规则”如何变化。

该定理大约是 100% 的可用性和一致性。更现实的讨论是在没有网络分区时延迟和一致性之间的权衡。有关更多详细信息,请参阅PACELC定理。

CAP定理真的有用吗?

我认为它仍然有用,因为它让我们对一系列权衡讨论敞开心扉,但这只是故事的一部分。在选择正确的数据库时,我们需要更深入地挖掘

在这里插入图片描述

在这里插入图片描述

可视化 SQL 查询

在这里插入图片描述

SQL 语句由数据库系统分几个步骤执行,包括:
  • 解析 SQL 语句并检查其有效性
  • 将 SQL 转换为内部表示,例如关系代数
  • 优化内部表示并创建利用索引信息的执行计划
  • 执行计划并返回结果
SQL 的执行非常复杂,涉及许多注意事项,例如:
  • 索引和缓存的使用
  • 表连接的顺序
  • 并发控制
  • 事务管理

在这里插入图片描述

SQL语言

1986年,SQL(结构化查询语言)成为标准。在接下来的 40 年里,它成为关系数据库管理系统的主要语言。阅读最新标准 (ANSI SQL 2016) 可能非常耗时。我该如何学习它?

在这里插入图片描述

SQL 语言有 5 个组件:

  • DDL:数据定义语言,如创建、更改、删除
  • DQL:数据查询语言,如 SELECT
  • DML:数据操作语言,如插入、更新、删除
  • DCL:数据控制语言,如GRANT、REVOKE
  • TCL:事务控制语言,如提交、回滚

对于后端工程师,您可能需要了解大部分内容。作为数据分析师,您可能需要对 DQL 有很好的了解。选择与您最相关的主题。

弘扬爱国精神

在这里插入图片描述

文章来源:https://blog.csdn.net/qq_15071263/article/details/133957260
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。