系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第二部分:CI CD、设计模式、数据库
本心、输入输出、结果
系统设计 - 我们如何通俗的理解那些技术的运行原理 - 第二部分: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 种关键设计模式
设计模式是常见设计问题的可重用解决方案,可实现更顺畅、更高效的开发过程。它们是构建更好的软件结构的蓝图。以下是一些最流行的模式
以下的序号与图上对应
- 抽象工厂:族创建者 - 制作相关项目的组。
- 建造者:乐高大师 - 逐步构建对象,保持创建和外观分离。
- 原型:克隆制作者 - 创建完全准备好的示例的副本。
- 单例:唯一 - 只有一个实例的特殊类。
- 适配器:通用插头 - 连接具有不同接口的东西。
- 桥接:功能连接器 - 将对象的工作方式链接到它的作用。
- 复合:树生成器 - 形成简单和复杂部分的树状结构。
- 装饰器:定制器 - 在不更改对象核心的情况下向对象添加功能。
- 外观:一站式商店 - 代表具有单一简化界面的整个系统。
- 享元:节省空间 - 高效共享可重复使用的小物品。
- 代理:替身执行组件 - 表示另一个对象,控制访问或操作。
- 责任链:请求中继 - 通过对象链传递请求,直到被处理。
- 命令:任务包装器 - 将请求转换为对象,准备执行操作。
- 迭代器:集合资源管理器 - 逐个访问集合中的元素。
- 中介:通信中心 - 简化不同类之间的交互。
- 快照:时间胶囊 - 捕获和恢复对象的状态。
- 观察者:新闻广播员 - 通知类有关其他对象中的更改。
- 访客:熟练的访客 - 在不更改职业的情况下向职业添加新操作
云服务中不同数据库的清单
为了可以方便的选择一项数据库技术,为了避免过多的数据库类型给我们造成选择困难或者决策困难,所以我们整理了云服务商的数据库技术
可以帮助我们提供更高层面的指导和决策支持,避免潜在的陷阱
注意:Google 针对其数据库用例的文档有限。尽管我们尽了最大努力查看可用的内容并得出了最佳选择,但某些条目可能需要更准确
8 种支持数据库的数据结构
答案将根据您的用例而有所不同。数据可以在内存或磁盘上编制索引。同样,数据格式也各不相同,例如数字、字符串、地理坐标等。系统可能是写入密集型或读取密集型的。所有这些因素都会影响数据库索引格式的选择。
以下是一些用于索引数据的最常用数据结构:
- Skiplist:一种常见的内存中索引类型。在 Redis 中使用
- 哈希索引:“Map”数据结构(或“集合”)的一种非常常见的实现
- SSTable:磁盘上不可变的“映射”实现
- LSM 树:Skiplist + SSTable。高写入吞吐量
- B树:基于磁盘的解决方案。一致的读/写性能
- 倒排索引:用于文档索引。用于 Lucene
- 后缀树:用于字符串模式搜索
- 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 有很好的了解。选择与您最相关的主题。
弘扬爱国精神
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!