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

news2024/11/19 16:22:44

本心、输入输出、结果

文章目录

  • 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第二部分:CI CD、设计模式、数据库
    • 前言
      • CI/CD
        • 第 1 部分 - 带有 CI/CD 的 SDLC
        • 第 2 部分 - CI 和 CD 之间的区别
        • 第 3 部分 - CI/CD 管道
      • Netflix Tech Stack (CI/CD Pipeline)
      • 架构设计模式
      • 每个开发人员都应该知道的 18 种关键设计模式
      • 云服务中不同数据库的清单
      • 8 种支持数据库的数据结构
      • 如何在数据库中执行 SQL 语句
        • 步骤说明
      • CAP定理
        • CAP定理真的有用吗?
      • 可视化 SQL 查询
        • SQL 语句由数据库系统分几个步骤执行,包括:
        • SQL 的执行非常复杂,涉及许多注意事项,例如:
      • SQL语言
      • 弘扬爱国精神

系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第二部分: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 有很好的了解。选择与您最相关的主题。

弘扬爱国精神

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1117016.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DNSPod十问李攀:程序员如何卖出全国爆火降温杯?

本期嘉宾 李攀 1030Design创始人 李攀,1030Design创始人。带领团队打造了55度杯、讯飞翻译机、“一个天台”等现象级爆款,荣获Reddot、金点设计等多项国内外知名设计奖项,在公司战略、品牌定位、产品创新及新零售等领域有着丰富的经验。北京…

10G SFP+线缆选购指南

凭借低成本和易安装的优势,在10G速率短距离传输中SFP线缆比SFP光模块更受欢迎。本文将从类型、优势、应用和选购指导等方面为您介绍10G SFP线缆,旨在帮助您更快做出购买决策。 10G SFP线缆:定义和类型 SFP线缆是一种高速线缆,两…

非科班,补基础

大家好,我是大彬~ 今天跟大家分享知识星球小伙伴关于【非科班转码如何补基础】的提问。 往期星球提问整理: 读博?找工作? 性格测试真的很重要 想找一份实习工作,需要准备什么 球友提问: 大彬大佬&#xf…

Ubutun配置C语言环境

问题起因 因为老师说上课会给我们一段代码让我们读取这个程序也就是进程的内存,从而破解明文,但老师给的程序是Linux环境的也就是二进制文件,所以来配置一下Linux下的C语言环境 解决方法 首先先下载gcc,因为我以前下载过所以直…

蓝牙音视频远程控制协议(AVRCP)介绍

零.声明 本专栏文章我们会以连载的方式持续更新,本专栏计划更新内容如下: 第一篇:蓝牙综合介绍 ,主要介绍蓝牙的一些概念,产生背景,发展轨迹,市面蓝牙介绍,以及蓝牙开发板介绍。 第二篇:Trans…

VT-VSPA1-508-1X/V0替代型模拟放大器

适用于控制所有无电位置反馈的直动式和先导式比例方向阀、比例压力阀。如: DBETX–...–8 DBE6X–...–8 DRE6X–...–8 DBE10Z–...–8 DRE10Z–...–8 通过 24V 输入或跳线改变内部控制值信号极性。 – 通过相位识别(24V 输入)或斜坡…

C++类中函数重写(成员函数覆盖)

在本文中,您将学习函数重写。此外,您还将学习如何在C 编程中评估基类的函数重写。继承允许软件开发人员从现有类派生新类。派生类继承基类(现有类)的功能。假设基类和派生类都具有一个具有相同名称和参数(参数的数量和…

OA和别的系统对接的java文件,调的websevice接口的参考实例

//代码块 package com.bj520.action; import com.alibaba.fastjson.JSON; import com.bj520.service.zs.Webfcs; import com.bj520.service.zs.WebfcsLocator; import com.bj520.util.LogUtil; import com.bj520.util.ZsResultUtil; import weaver.conn.RecordSet; import wea…

Capture One 23 Pro for Mac/win:专业图片编辑的最佳选择

在当今的数字时代,图片编辑软件如雨后春笋般涌现,但并非所有软件都能满足专业摄影师的需求。如果你追求卓越的图像质量、高效的编辑功能和一流的用户体验,那么Capture One 23 Pro无疑是你不二的选择。 Capture One 23 Pro以其出众的图像质量…

python控制负数以16进制整型格式输出

实际使用时候,发现 python输出负数进程是 十进制和16进制一样的,就是16进制多了一个负号,和预期结果不同;比如我想要 -1输出 0xFFFFFFFF,可以参考如下方式; def TestPrintf(): ret -3print("test1 r…

Find My资讯|苹果将推迟至2025年量产AirTag 2,Find My获得市场认可

郭明錤调整今年 8 月关于苹果第二代 AirTag 的预测,表示该产品量产时间从此前的 2024 年第 4 季度,延迟到 2025 年,会进一步推迟新款上市日期。 AirTag 是用于固定在背包、行李和其他物品上的配件。任何搭载 U1 芯片的设备都可以用于精确查…

代码随想录算法训练营第五十八天 | 583. 两个字符串的删除操作、72. 编辑距离

583. 两个字符串的删除操作 链接: 代码随想录 (1)代码 72. 编辑距离 链接: 代码随想录 (1)代码

哪个牌子的台灯对孩子的视力好?对孩子视力好的台灯推荐分享

现在市面上台灯品牌众多,价格不一,品质更是参差不齐,所以要学会如何选择适合孩子的台灯。光源质量是重要因素,光源是直接影响到孩子的视力, 一般来说,光源质量主要看照度、亮度和均匀度、显色指数等&#x…

npm publish发布到在线仓库时,提示:Scope not found

当npm publish发布时,控制台提示:Scope not found,具体错误信息如下: npm notice npm ERR! code E404 npm ERR! 404 Not Found - PUT https://registry.npmjs.org/xxx%2fxxx - Scope not found npm ERR! 404 npm ERR! 404 xxx/xx…

static设置变量的使用方法

重点: 1.长时间不使用static会忘记,记录一下,static变量的设置使用。 class Test { public:Test() default;~Test() default;public:int GetNum() { return m_num; };void SetNum(int num) { m_num num; }; private:static int m_num; }…

springboot188基于spring boot的校园商铺管理系统

项目名称:springboot188基于spring boot的校园商铺管理系统 点击这里进入源码目录 声明: 适用范围: 本文档适用于广泛的学术和教育用途,包括但不限于个人学习、毕业设计和课程设计。免责声明: 特此声明,本…

Android一些新的技术栈,你都会哪些?

Jetpack Compose: Jetpack Compose是一种全新的声明式UI框架,用于构建Android应用的用户界面。它使UI开发更加简单和直观,通过使用Kotlin语言来创建交互式和动态的UI组件。 Kotlin Multiplatform: Kotlin Multiplatform允许开发者…

外贸出口小型取暖器UL 1278怎么办理

UL1278是针对出口小型取暖器的安规认证,办理流程和要求因地区而异,具体的流程和要求可以参考当地的UL认证标准和操作指南。一般来说,办理UL1278需要以下步骤: 1. 准备申请材料 2. 联系UL认证机构 3. 样品测试 4. 文件审核 5. 认证…

Nginx平滑升级重定向rewrite

文章目录 Nginx平滑升级&重定向rewritenginx平滑升级流程环境查看旧版的配置信息下载新版nginx源码包和功能模块包编译配置新版本平滑升级验证 重定向rewrite配置重定向准发访问测试 Nginx平滑升级&重定向rewrite nginx平滑升级 流程 平滑升级: (升级版本、增加新功…

最短路相关笔记

Floyd Floyd 算法,是一种在图中求任意两点间最短路径的算法。 Floyd 算法适用于求解无负边权回路的图。 时间复杂度为 O ( n 3 ) O(n^3) O(n3),空间复杂度 O ( n 2 ) O(n^2) O(n2)。 对于两点 ( i , j ) (i,j) (i,j) 之间的最短路径,有…