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

本心、输入输出、结果

文章目录

  • 系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第二部分: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.rhkb.cn/news/165277.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在模拟冷藏牛肉加工条件下,冷和酸对荧光假单胞菌和单核细胞增生李斯特菌双菌种生物膜的综合影响

1.1 Title:Combined effects of cold and acid on dual-species biofilms of Pseudomonas fluorescens and Listeria monocytogenes under simulated chilled beef processing conditions 1.2 分区/影响因子:Q1/5.3 1.3 作者:Zhou Guanghui…

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

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

大语言模型在推荐系统的实践应用

本文从应用视角出发,尝试把大语言模型中的一些长处放在推荐系统中。 01 背景和问题 传统的推荐模型网络参数效果较小(不包括embedding参数),训练和推理的时间、空间开销较小,也能充分利用用户-物品的协同信号。但是它的缺陷是只能利用数据…

softplc windows 安装测试

下载 .NET 6.0 (Linux、macOS 和 Windows) 安装后 在这里 The command could not be loaded, possibly because: * You intended to execute a .NET application: The application restore does not exist. * You intended to execute a .NET SDK command: No…

海外版知乎Quora,如何使用Quora进行营销?

想必大家对知乎非常熟悉,而Quora作为海外最受欢迎的网站之一,是与知乎功能与性质非常相似的一个平台,靠回答别人的问题获得关注,是引流最快的一个平台。对于做跨境电商、独立站的商家来说,这是一个绝佳的免费引流广告工…

小程序canvas层级过高真机遮挡组件的解决办法

文章目录 问题发现真机调试问题分析问题解决改造代码效果展示 问题发现 在小程序开发中需要上传图片进行裁剪&#xff0c;在实际真机调试中发现canvas层遮挡住了生成图片的按钮。 问题代码 <import src"../we-cropper/we-cropper.wxml"></import> <…

2023.10.19 关于 单例模式 详解

目录 引言 单例模式 饿汉模式 懒汉模式 懒汉模式线程安全问题 分析原因 引言 设计模式为编写代码的 约定 和 规范 阅读下面文章前建议点击下方链接明白 对象 和 类对象 对象和类对象 单例模式 单个实例&#xff08;对象&#xff09;在某些场景中有特定的类&#xff0c;…

IntelliJ IDEA 2020.2.1白票安装使用方法

先安装好idear Plugins 内手动添加第三方插件仓库地址&#xff1a;https://plugins.zhile.io 搜索&#xff1a;IDE Eval Reset插件进行安装 输入https://plugins.zhile.io 手动安装离线插件方法 安装包可以去笔者的CSDN资源库下载 安装mybaties插件

Java版ORM最初雏形

经过一个晚上的加班&#xff0c;终于把ORM初步结构工程搭好了。工程依赖有点难用&#xff0c;编辑器提示比VS差很多。 首先LIS.Core创建一个最初的容器雏形&#xff0c;先能反射得到对象给ORM获得数据库驱动 然后ORM创建数据库驱动差异接口&#xff0c;不同数据库实现接口后配…

uniapp vue3 使用pinia存储 并获取数据

存token import { defineStore } from pinia;export const userInfo defineStore(userInfo, {state: () > {return {userToken: uni.getStorageSync(token) || ,};},actions: {// 添加tokenupdateToken(token: string) {uni.setStorageSync(token, token);this.userToken…

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

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

【六:pytest框架介绍】

常见的请求对象requests.get()requests.post()requests.delete()requests.put()requests.request()常见的响应对象reprequests.request()//返回字符串格式数据print(req.text)//返回字节格式数据print(req.content)//返回字典格式数据print(req.json)#状态码print(req.status_c…

Character Animator 2024(Ch2024):打造生动角色,让动画设计更上一层楼

Character Animator 2024是一款专为角色动画设计师打造的软件&#xff0c;它可以帮助设计师快速创建出丰富多彩的角色动画。无论是初学者还是专业设计师&#xff0c;都可以通过Character Animator 2024轻松实现自己的创意。 Ch2024独特优势&#xff1a; 实时角色动画&#xf…

计算机网络 | 应用层

计算机网络 | 应用层 计算机网络 | 应用层应用层概述网络应用模型客户/服务器模型&#xff08;Client/Server&#xff0c;C/S&#xff09;P2P模型&#xff08;Peer-to-Peer&#xff09; 域名系统&#xff08;DNS&#xff09;层次域名空间域名服务器域名解析过程 文件传输协议&a…

DevExpress WPF Pivot Grid组件,可轻松实现多维数据分析!(二)

在上文中&#xff08;点击这里回顾>>&#xff09;我们主要为大家介绍了DevExpress WPF Pivot Grid组件的超快速枢轴分析功能、Microsoft分析服务等&#xff0c;本文将继续介绍图表透视数据的处理、MVVM支持等。欢迎持续关注我们&#xff0c;探索更多新功能哦~ P.S&#…

【工具】利用ffmpeg将网页中的.m3u8视频文件转化为.mp4格式

目录 0.环境 1.背景 2.前提 3.详细描述 1&#xff09;在网站上找到你想下载的视频的.m3u8链接 2&#xff09;打开命令行&#xff0c;用ffmpeg命令进行转化 3&#xff09;过程&结果截图 0.环境 windows64 ffmpeg 1.背景 网页上有个.m3u8格式的视频文件&#xff0c;…

2023高频前端面试题(含答案)

一、简单页面1、CSS选择器样式优先级2、CSS实现三列布局&#xff08;左右固定宽度&#xff0c;中间自适应&#xff09; &#xff08;1&#xff09;CSS浮动 第一个float:left&#xff0c;第二个float:right&#xff0c;第三个设置margin-left和margin-right &#xff08;2&#…

LC-2316. 统计无向图中无法互相到达点对数(DFS、并查集)

2316. 统计无向图中无法互相到达点对数 中等 给你一个整数 n &#xff0c;表示一张 无向图 中有 n 个节点&#xff0c;编号为 0 到 n - 1 。同时给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ai, bi] 表示节点 ai 和 bi 之间有一条 无向 边。 请你返回 无法互相…

pandas写入MySQL

安装好pandas、mysql pip install pandas pip install pymysql 导入pandas、mysql import pymysql as mysql import pandas as pd 建立连接 conmysql.connect(host10.10.0.221,userroot,passwordroot,databasepandas,port3306,charsetutf8) 创建游标 curcon.cursor() 读…

vite+vue3.0 使用tailwindcss

参考资料&#xff1a; 安装 - TailwindCSS中文文档 | TailwindCSS中文网 npm install -D tailwindcss npm install postcss npm install autoprefixer npx tailwindcss init -p 生成/src/tailwind.config.js和/src/postcss.config.js配置文件 在/src/tailwind.config.js配置文件…