系统架构设计知识体系总结

1.技术选型

1.什么是技术选型?

技术选型是指评估和选择在项目或系统开发中使用的最合适的技术和工具的过程。这涉及考虑基于其能力、特性、与项目需求的兼容性、可扩展性、性能、维护和其他因素的各种可用选项。技术选型的目标是确定与项目目标相符合、能够有效解决项目挑战和目标的最佳技术。

技术选型的过程通常包括:

项目评估:了解项目的目标、需求、约束和范围,以确定需要哪些技术。

研究:对不同技术、框架和工具进行彻底的研究,以满足项目的潜在需求。

比较:评估每种技术选项的优势和劣势,考虑功能、性能、社区支持、可扩展性、安全性和成本等因素。

概念验证:构建原型或进行小规模实验,以验证在项目中使用特定技术的可行性。

风险分析:识别与每个技术选择相关的潜在风险,包括兼容性问题、学习曲线、厂商依赖性和未来支持等。

专家咨询:寻求对所考虑技术有经验的专家、同事或行业专业人士的建议。

长期可行性:评估所选技术的长期可行性和未来增长潜力,以确保其能够在一段时间内保持相关性和支持。

成本考虑:评估实施和维护所选技术的初期和长期成本。

反馈与迭代:在选型过程中融入利益相关者、开发人员和用户的反馈,以确保与其需求保持一致。

决策:基于对选项及其影响的全面理解做出明智的决策。

有效的技术选型至关重要,因为技术选择可以显著影响项目的成功。恰当选择的技术可以简化开发流程、提高性能、改善用户体验并促进长期维护。另一方面,糟糕的技术选型可能导致项目延迟、增加成本、兼容性问题甚至项目失败。因此投入时间和精力进行研究、比较和选择合适的技术是实现成功项目成果的基本步骤。

2.为什么要技术选型?

技术选型的重要性体现在以下几个方面:

  1. 满足项目需求: 不同的项目有不同的需求和目标。技术选型可以确保所选的技术和工具能够满足项目的功能、性能、安全性和可扩展性等需求。
  2. 提高开发效率: 选择合适的技术可以加快开发过程,减少开发人员的工作量。适合项目的技术能够提供更多的开发工具、库和框架,从而简化开发流程。
  3. 优化性能: 不同技术在性能方面有所差异。选择性能良好的技术可以确保项目具有快速的响应时间和高效的运行。
  4. 降低风险: 经过充分的调研和验证后,选择合适的技术可以降低项目失败的风险。避免了可能的技术问题和不稳定性。
  5. 适应未来发展: 选用能够适应未来技术发展的技术,可以延长项目的寿命并减少技术迁移的成本。
  6. 提高用户体验: 选择适合项目的技术可以提供更好的用户体验,包括更快的加载时间、友好的界面和响应式设计等。
  7. 降低成本: 正确选择技术可以减少项目开发和维护的成本。合适的技术可以减少不必要的资源浪费。
  8. 避免厂商锁定: 在技术选型时,考虑到技术的开放性和厂商支持,可以避免在未来被特定供应商限制。
  9. 可维护性: 选择易于维护的技术可以确保项目在长期内保持稳定和可维护。
  10. 支持社区: 选择有活跃社区的技术可以获得更多支持、文档和解决问题的资源。

综上所述,技术选型是项目成功的关键因素之一。通过仔细考虑项目需求、调研不同的选项、验证适合性并做出明智的决策,可以确保项目在开发、上线和维护过程中取得更好的成果。

3.技术选型案例

跨境电商企业在技术选型时选择了Service Mesh Istio,但是在没有经过充分调研和验证的情况下,直接在开发环境中部署。这导致了一系列问题,包括项目延迟和长时间的适应期,最终影响了项目的正式上线。

从中提取出了一些重要的教训:

  1. 充分调研: 在决定采用新技术之前,进行充分的调研,了解技术的特点、优势、劣势以及适用场景。不要轻率地选择技术,而是确保它能够满足项目需求。
  2. 小规模尝试: 在大规模采用之前,尝试在小规模环境中引入新技术。这有助于发现潜在问题、了解技术的运作方式,并在实践中积累经验。
  3. 验证和适应期: 对于新技术,预留一段适应期是很重要的。技术的实际表现可能与预期不同,因此给予项目团队足够的时间来适应和解决问题是必要的。
  4. 项目风险: 技术选型不仅需要考虑技术本身的特点,还需要考虑其可能引发的项目风险。不稳定的技术可能导致项目延迟、成本增加等问题。
  5. 经验积累: 通过小规模引入和验证,项目团队可以积累关于技术的经验,了解如何优化和解决潜在问题。

综合来看,这个案例强调了在技术选型中谨慎而有计划的重要性。不要急于采纳新技术,而是通过调研、验证和小规模试验来确保技术能够稳定地支持项目的成功实施。

2.系统设计方法

1. 前端

在这里插入图片描述

2. 后端

在这里插入图片描述

3. API gateway网关架构

在这里插入图片描述

4. 7种分布式系统设计模式

在这里插入图片描述

5. 6种API架构风格

在这里插入图片描述

6. 常见应用架构模式

在这里插入图片描述

7. api安全的12个要点

在这里插入图片描述
在这里插入图片描述

8. 提升api性能的7中方法

在这里插入图片描述

9. 系统设计应遵循的原则

在这里插入图片描述

10. Redis常见用法

在这里插入图片描述

11. 25篇经典分布式架构设计论文

在这里插入图片描述

12.DevOps&SRE

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

13. 5种部署方法

在这里插入图片描述

3.微服务架构方法

1.微服务架构设计理论

1.NFR(非功能性需求):

在这里插入图片描述

2.架构的构成元素:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3.软件架构的4+1视图模型

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.编写FTGO应用架构文档案例

4+1视图架构:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
架构愿景(vision)
在这里插入图片描述
系统上下文
在这里插入图片描述
架构涉及的核心用户故事和场景
在这里插入图片描述在这里插入图片描述

在这里插入图片描述
非功能性需求:
在这里插入图片描述
编写服务清单文档
在这里插入图片描述
编写服务领域模型文档
在这里插入图片描述
记录架构决策
在这里插入图片描述
总结
在这里插入图片描述

2.微服务设计模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.云原生架构要点

0.架构演进的过程

在这里插入图片描述

1.云原生应用设计的12个要素

在这里插入图片描述

基准代码:指代码版本管理,基于同一个版本代码开发
依赖:显式的依赖
配置:代码与环境配置分开
进程:应用以一个或多个进程进行运行,应用无状态
端口绑定:端口与服务绑定
日志:日志以事件流的形式来看,方便处理

2. 云原生架构

在这里插入图片描述

3.下一代云原生架构serviceMesh(服务网格化)

在这里插入图片描述

微服务与Service Mesh 的区别和联系:

在这里插入图片描述

4.Docker

在这里插入图片描述Docker原理
在这里插入图片描述

5.k8s

在这里插入图片描述
k8s架构
在这里插入图片描述

5.参考资料

  • 《微服务架构设计模式》 & 代码: https://github.com/microservices-patterns/ftgo-application
  • 微服务理论网站:
    https://microservices.io/
    https://eventuate.io/

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

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

相关文章

基于3DMax与Vray引擎的轻量级室内场景渲染实践

欢迎踏入3DMAX室内渲染的沉浸式学习之旅!在这个精心设计的实战教程中,我们将携手揭开3DMAX与Vray这对黄金搭档在打造现实室内场景时的核心奥秘。无论您是渴望入门的3D新手,还是追求极致效果的专业设计师,这里都将为您呈现从场景蓝图构建到光影魔法施加的完整技术图谱。我们…

逻辑卷,vdo,(阿里加速器)

一、逻辑卷 10 20 30 1.逻辑卷的2个特点 (1)逻辑卷可以将多个分区或者磁盘整合成一个更大的逻辑磁盘,然后可以从逻辑磁盘上划分出分区(逻辑磁盘的大小等于整合的物理磁盘大小之和。) (2)能…

检索增强生成(2)本地PDF 本地嵌入模型

from langchain_community.document_loaders import PyPDFLoader from pathlib import Pathdef load_local_pdf(file_path):if not Path(file_path).exists():raise FileNotFoundError(f"文件 {file_path} 不存在!")loader PyPDFLoader(file_path)try:do…

安全守护:反光衣检测技术的革新之路

视觉分析助力船上工人反光衣检测 在现代工业生产与作业环境中,安全始终是首要考虑的因素。对于水上作业,如船舶维护、海上施工等场景,工人穿戴反光衣是预防事故、提高可见性的重要措施。然而,传统的人工检查方式不仅效率低下&…

【Scrapy】Scrapy教程8——处理子链接

通过前面几篇文章,已经了解了如何去爬取网页内容并存储到数据库,但是目前只是存储了一个页面的内容,现在想要获取每篇文章链接内的文章内容,我们来看看怎么获取。 生成新请求 首先我们肯定要先拿到链接,所以第一步都获取文章标题和链接肯定少不了,然后再爬取获取到到子…

Centos6配置yum源

Centos6配置yum源 为Centos6配置CentOS Vault源—防止yum源过期为Centos6配置epel源为Centos6配置ELRepo源---已ELRepo被官方清空Centos6安装dockerdocker配置国内镜像加速 为Centos6配置CentOS Vault源—防止yum源过期 参考:https://mirrors.ustc.edu.cn/help/cen…

“智改数转”新风口,物联网如何重构制造业竞争力?

一、政策背景 为深化制造业智能化改造、数字化转型、网络化联接,江苏省制定了《江苏省深化制造业智能化改造数字化转型网络化联接三年行动计划(2025-2027年)》,提出到2027年,全省制造业企业设备更新、工艺…

制作Oracle11g Docker 镜像

基于Linux系统&#xff0c;宿主主机要设置如下环境变量&#xff0c;oracle为64位版本 dockerfile中需要的数据库安装包可从csdn下载内找到 #!/bin/bash # 在宿主机上运行以设置Oracle所需的内核参数 # 这些命令需要root权限cat > /etc/sysctl.d/99-oracle.conf << EO…

从GTC2025首次量子日看英伟达量子AI融合算力网络前景与趋势

GTC2025 Quantum Day 最新内容全部汇总: 技术名称描述合作伙伴/开发者应用场景/目标量子模拟器优化方案NVIDIA与IonQ、D-Wave合作,针对量子模拟器进行性能优化,提升量子计算任务效率。IonQ、D-Wave量子算法开发、复杂系统模拟混合量子-经典计算架构结合量子计算与经典GPU加速…

UE4学习笔记 FPS游戏制作12 添加第二把枪,制作枪的父类,动态生成物体,切换武器

我们添加一个发射器类型的枪 我们目前有了一个Rifle的枪械蓝图&#xff0c;我们在添加Launcher时&#xff0c;需要为他们添加一个父类&#xff0c;将公共方法放到父类里&#xff0c;方法体由子类实现 添加父类 方法1 新建一个Gun的蓝图&#xff0c;Gun继承Actor&#xff0c;…

【原创首发】开源基于AT32 SIP/VOIP电话

前言 本次为了反馈各位粉丝的关注&#xff0c;特此分享 AT32_VOIP 工程&#xff0c;此功能其实跟我之前发过的《STM32F429的VOIP功能》是一样的&#xff0c;只是用了AT32F437。 其实那个工程是一个比较Demo中的Demo&#xff0c;很多功能和硬件依赖性太大了。后面项目中发现AT…

通俗易懂搞懂@RequestParam 和 @RequestBody

&#x1f4cc; 博主简介: &#x1f4bb; 努力学习的 23 级科班生一枚 &#x1f680;&#x1f3e0; 博主主页 &#xff1a; &#x1f4ce; 灰阳阳&#x1f4da; 往期回顾 &#xff1a;Session和Cookie我不允许你不懂&#x1f4ac; 每日一言&#xff1a; 「流水不争先&#xff0c…

dubbo版本与分组

Dubbo服务中&#xff0c;接口并不能唯一确定一个服务&#xff0c;只有 接口分组版本号 的三元组才能唯一确定一个服务。 当同一个接口针对不同的业务场景、不同的使用需求或者不同的功能模块等场景&#xff0c;可使用服务分组来区分不同的实现方式。同时&#xff0c;这些不同实…

RAG现有技术方案

RAG现有技术方案 一、现有技术方案的核心问题 检索质量不足 挑战:传统RAG系统依赖单轮检索,难以应对智能电网的海量异构数据(如传感器读数、控制参数),导致检索结果相关性低、覆盖不全。案例:BM25稀疏检索在处理长文本或专业术语时,易遗漏语义关联;BGE等稠密检索模型对…

redis MISCONF Redis is configured to save RDB snapshots报错解决

直接上解决方案 修改redis配置文件 stop-writes-on-bgsave-error no 重启redis

个人学习编程(3-22) leetcode刷题

连续子数组&#xff1a;&#xff08;难&#xff09; 示例 1: 输入: nums [0,1] 输出: 2 说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。 示例 2: 输入: nums [0,1,0] 输出: 2 说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。 需要理解的知识&a…

希尔排序

希尔排序是一种改进的插入排序算法&#xff0c;它通过将原始数据分成多个子序列来改善插入排序的性能&#xff0c;每个子序列的元素间隔为 d&#xff08;增量&#xff09;。随着算法的进行&#xff0c;d 逐渐减小&#xff0c;最终减为 1&#xff0c;此时整个序列就被排序好了。…

JavaScript基础-DOM事件流

在Web开发过程中&#xff0c;理解和掌握DOM事件流是实现高效交互的关键。DOM事件流描述了当一个事件发生时&#xff0c;它在文档树中的传播路径。了解事件流的概念有助于我们更精确地控制事件处理逻辑&#xff0c;避免不必要的行为&#xff0c;并提升用户体验。本文将深入探讨D…

C语言基础知识07---预编译模块化

目录 预编译指令 1.1 编译流程 1.2 文件包含 1.3 条件编译 1.4 宏定义 1.5 无参宏 1.6 typedef和无参宏的区别 1.7 有参宏 1.8 函数与有参宏的区别 1.9 取消宏定义 #undef 1.10 符合使用 模块化操作 1.1 H文件&#xff1a;固定模版 1.2 C文件&#xff1a;源文件-…

自由学习记录(46)

CG语法的数据类型 // uint : 无符号整数&#xff08;32位&#xff09; // int : 有符号整数&#xff08;32位&#xff09; // float : 单精度浮点数&#xff08;32位&#xff09;&#xff0c;通常带后缀 f&#xff08;如 1.0f&#xff09; // half : 半精度浮…