系统架构设计知识体系总结
1.技术选型
1.什么是技术选型?
技术选型是指评估和选择在项目或系统开发中使用的最合适的技术和工具的过程。这涉及考虑基于其能力、特性、与项目需求的兼容性、可扩展性、性能、维护和其他因素的各种可用选项。技术选型的目标是确定与项目目标相符合、能够有效解决项目挑战和目标的最佳技术。
技术选型的过程通常包括:
项目评估:了解项目的目标、需求、约束和范围,以确定需要哪些技术。
研究:对不同技术、框架和工具进行彻底的研究,以满足项目的潜在需求。
比较:评估每种技术选项的优势和劣势,考虑功能、性能、社区支持、可扩展性、安全性和成本等因素。
概念验证:构建原型或进行小规模实验,以验证在项目中使用特定技术的可行性。
风险分析:识别与每个技术选择相关的潜在风险,包括兼容性问题、学习曲线、厂商依赖性和未来支持等。
专家咨询:寻求对所考虑技术有经验的专家、同事或行业专业人士的建议。
长期可行性:评估所选技术的长期可行性和未来增长潜力,以确保其能够在一段时间内保持相关性和支持。
成本考虑:评估实施和维护所选技术的初期和长期成本。
反馈与迭代:在选型过程中融入利益相关者、开发人员和用户的反馈,以确保与其需求保持一致。
决策:基于对选项及其影响的全面理解做出明智的决策。
有效的技术选型至关重要,因为技术选择可以显著影响项目的成功。恰当选择的技术可以简化开发流程、提高性能、改善用户体验并促进长期维护。另一方面,糟糕的技术选型可能导致项目延迟、增加成本、兼容性问题甚至项目失败。因此投入时间和精力进行研究、比较和选择合适的技术是实现成功项目成果的基本步骤。
2.为什么要技术选型?
技术选型的重要性体现在以下几个方面:
- 满足项目需求: 不同的项目有不同的需求和目标。技术选型可以确保所选的技术和工具能够满足项目的功能、性能、安全性和可扩展性等需求。
- 提高开发效率: 选择合适的技术可以加快开发过程,减少开发人员的工作量。适合项目的技术能够提供更多的开发工具、库和框架,从而简化开发流程。
- 优化性能: 不同技术在性能方面有所差异。选择性能良好的技术可以确保项目具有快速的响应时间和高效的运行。
- 降低风险: 经过充分的调研和验证后,选择合适的技术可以降低项目失败的风险。避免了可能的技术问题和不稳定性。
- 适应未来发展: 选用能够适应未来技术发展的技术,可以延长项目的寿命并减少技术迁移的成本。
- 提高用户体验: 选择适合项目的技术可以提供更好的用户体验,包括更快的加载时间、友好的界面和响应式设计等。
- 降低成本: 正确选择技术可以减少项目开发和维护的成本。合适的技术可以减少不必要的资源浪费。
- 避免厂商锁定: 在技术选型时,考虑到技术的开放性和厂商支持,可以避免在未来被特定供应商限制。
- 可维护性: 选择易于维护的技术可以确保项目在长期内保持稳定和可维护。
- 支持社区: 选择有活跃社区的技术可以获得更多支持、文档和解决问题的资源。
综上所述,技术选型是项目成功的关键因素之一。通过仔细考虑项目需求、调研不同的选项、验证适合性并做出明智的决策,可以确保项目在开发、上线和维护过程中取得更好的成果。
3.技术选型案例
跨境电商企业在技术选型时选择了Service Mesh Istio,但是在没有经过充分调研和验证的情况下,直接在开发环境中部署。这导致了一系列问题,包括项目延迟和长时间的适应期,最终影响了项目的正式上线。
从中提取出了一些重要的教训:
- 充分调研: 在决定采用新技术之前,进行充分的调研,了解技术的特点、优势、劣势以及适用场景。不要轻率地选择技术,而是确保它能够满足项目需求。
- 小规模尝试: 在大规模采用之前,尝试在小规模环境中引入新技术。这有助于发现潜在问题、了解技术的运作方式,并在实践中积累经验。
- 验证和适应期: 对于新技术,预留一段适应期是很重要的。技术的实际表现可能与预期不同,因此给予项目团队足够的时间来适应和解决问题是必要的。
- 项目风险: 技术选型不仅需要考虑技术本身的特点,还需要考虑其可能引发的项目风险。不稳定的技术可能导致项目延迟、成本增加等问题。
- 经验积累: 通过小规模引入和验证,项目团队可以积累关于技术的经验,了解如何优化和解决潜在问题。
综合来看,这个案例强调了在技术选型中谨慎而有计划的重要性。不要急于采纳新技术,而是通过调研、验证和小规模试验来确保技术能够稳定地支持项目的成功实施。
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/
相关文章:
系统架构设计知识体系总结
1.技术选型 1.什么是技术选型? 技术选型是指评估和选择在项目或系统开发中使用的最合适的技术和工具的过程。这涉及考虑基于其能力、特性、与项目需求的兼容性、可扩展性、性能、维护和其他因素的各种可用选项。技术选型的目标是确定与项目目标相符合、能够有效解…...
计算机视觉的多模态模型
计算机视觉的多模态模型 是指能够同时处理和理解 多种类型数据(模态) 的模型。这些模态可以包括图像、文本、音频、视频、深度信息等。多模态模型的核心目标是利用不同模态之间的互补信息,提升模型的性能和泛化能力。 1. 多模态模型的核心思想…...
Scrapy 入门教程
Scrapy 入门教程 Scrapy 是一个用于爬取网站数据的 Python 框架,功能强大且易于扩展。本文将介绍 Scrapy 的基本概念、安装方法、使用示例,并展示如何编写一个基本的爬虫。 1. 什么是 Scrapy? Scrapy 是一个开源的、用于爬取网站数据的框架…...
Oracle OCP认证是否值得考?
Oracle OCP(Oracle Certified Professional)认证是数据库领域的传统权威认证,但随着云数据库和开源技术的崛起,其价值正面临分化。是否值得考取,需结合你的职业定位、行业需求及长期规划综合判断。以下是关键分析&…...
OpenCV中距离公式
一、各类距离公式总结 常见距离公式 欧氏距离: 曼哈顿距离(L1): 切比雪夫距离(Chessboard): 1、点与点距离(欧氏距离) 二维空间 设两点坐标为 P1(x1,y1)、P2(x2,y2),其距离…...
DeepSeek自学手册:《从理论(模型训练)到实践(模型应用)》|73页|附PPT下载方法
导 读INTRODUCTION 今天分享是由ai呀蔡蔡团队带来的DeepSeek自学手册:《从理论(模型训练)到实践(模型应用)》,这是一篇关于DeepSeek模型训练、应用场景及替代方案的综合指南文章,主要介绍了Deep…...
Doris官网上没有的一些Fe参数了,都在源码中
一、FE配置源码 apache-doris-src\fe\fe-common\src\main\java\org\apache\doris\common\Config.java 二、BE配置源码 apache-doris-src\be\src\common\config.cpp 三、FE源码 package org.apache.doris.common;public class Config extends ConfigBase {ConfField(descri…...
(一)丶Windows安装RabbitMQ可能会遇到的问题
一丶可能会忘了配置ERLang的环境变量 二丶执行命令时报错 第一步 rabbitmq-plugins enable rabbitmq_management 第二部 rabbitmqctl status 三丶修改.erlang.cookie 文件 1.找到C盘目下的.erlang.cookie文件 C:\Users\admin\.erlang.cookie C:\Windows\System32\config\sys…...
stm32g030移植RT-Thread
移植流程 移植前需要安装Keil.STM32G0xx_DFP.1.2.0.pack组件,大致的移植过程: CubeMX配置RT-Thread组件配置工程模板配置 参考例程配置:拷贝仓库原有的stm32g070-st-nucleo工程,然后另起一个名字,目录结构如下 完整…...
Parsing error: Unexpected token, expected “,“
今天在使用Trae AI 编程工具开发大文件切片上传功能,使用的是VUE3,TS技术栈,开发完成运行时,编译报错(Parsing error: Unexpected token, expected ","),让AI自行修复此问题多次后还是没有解决&a…...
Day23: 数组中数字出现的次数
整数数组 sockets 记录了一个袜子礼盒的颜色分布情况,其中 sockets[i] 表示该袜子的颜色编号。礼盒中除了一款撞色搭配的袜子,每种颜色的袜子均有两只。请设计一个程序,在时间复杂度 O(n),空间复杂度O(1) 内找到这双撞色搭配袜子的…...
目标检测——清洗数据
清洗VOC格式数据集代码示例 import os import xml.etree.ElementTree as ETdef process_annotations(image_folder, annotation_folder):# 遍历标签文件夹中的所有XML文件for xml_file in os.listdir(annotation_folder):if not xml_file.endswith(.xml):continuexml_path os…...
嵌入式基础知识学习:UART是什么?
UART(Universal Asynchronous Receiver/Transmitter,通用异步收发传输器)是一种广泛应用于嵌入式系统和通信设备的异步串行通信协议。它通过两根数据线(TX和RX)实现设备间的全双工数据传输,无需共享时钟信号…...
SpringBoot项目实战(初级)
目录 一、数据库搭建 二、代码开发 1.pom.xml 2.thymeleaf模块处理的配置类 3.application配置文件 4.配置(在启动类中) 5.编写数据层 ②编写dao层 ③编写service层 接口 实现类 注意 补充(注入的3个注解) 1.AutoWir…...
合成层优化
以下是关于 合成层(Composite Layer)优化 的系统梳理,涵盖基础原理、触发条件、优化策略及进阶实践,帮助深入理解如何通过分层渲染提升页面性能: 一、合成层基础概念 1. 什么是合成层? 定义:浏览器将页面元素提升为独立的图形层(Graphics Layer),由 GPU 单独处理,避…...
什么是MCP|工作原理是什么|怎么使用MCP|图解MCP
写在前面 Manus的爆火似乎推动了MCP的出圈,虽然Manus没有用MCP。这篇文章我们就讲讲MCP,当然我也是最近才学习到MCP的,如果理解有误的地方,欢迎评论区指出! 1. 为什么需要MCP? 1.1 LLM 现状 我们都知道…...
《Partial-label learning with a guided Prototypical classifier》23年CVPR 文献速读
论文地址 1. 引言 本文介绍了一种用于部分标签学习(Partial-Label Learning, PLL)的新框架 PaPi(Partial-label learning with a guided Prototypical classifier),旨在提高在视觉任务中处理部分标签数据时的性能。部…...
GitLens with `Commit Graph`
文章目录 GitLens with Commit Graph GitLens with Commit Graph 自己打包的 GitLens,能够查看 commit graph。 GitLens 持续更新中 下载之后,通过 VSCode 插件直接安装即可使用。...
python每日十题(6)
】函数定义:函数是指一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需要调用其函数名即可。函数能提高应用的模块性和代码的重复利用率 在Python语言中,用关键字class来定义类 在Python语…...
UniRel论文复现过程中的问题解决办法(全)
注解写在前面:本文仅为解决各位同学在复现时面对的问题,有问题可以评论,看见会回复!!! [顶刊论文]UniRel:Unified Representation and Interaction for Joint Relational Triple Extraction2022.11.16&…...
js逆向之断点调试
1.XHR/提取断点用法 当刷新页面时候,有大量请求,并且你无法定位参数信息的时候,或者参数被混淆无法搜到,可以用该方法,该方法是会捕获所有请求连接,然后我们通过连接过滤出自己想要的请求,然后…...
Unity Shader编程】之渲染流程之深度及pass详解
关于透明物体的渲染,首先需要了解以下部分 深度缓冲区深度写入深度测试pass渲染和深度测试的过程深度测试和颜色混合过程 ** 一,深度缓冲区 ** 深度即物体距离相机的距离,深度写入即是把物体的距离相机信息记录下来,写入一个名…...
【算法笔记】图论基础(一):建图、存图、树和图的遍历、拓扑排序、最小生成树
目录 何为图论图的概念 图的一些基本概念有向图和无向图带权图连通图和非连通图对于无向图对于有向图 度对于无向图对于有向图一些结论 环自环、重边、简单图、完全图自环重边简单图 稀疏图和稠密图子图、生成子图同构 图的存储直接存边邻接矩阵存边邻接表存边链式前向星存边 图…...
Compose 原理解析
Compose 的组件都是放在 setContent() 之后才能显示的,那需要先看看这个函数的作用。 先看 ComponentActivity 的扩展函数 setContent(): /*** 将给定的可组合项合成到给定的 Activity 中。[content] 将成为给定 Activity 的根视图。* 这大致相当于使用…...
pyspark学习rdd处理数据方法——学习记录
python黑马程序员 """ 文件,按JSON字符串存储 1. 城市按销售额排名 2. 全部城市有哪些商品类别在售卖 3. 上海市有哪些商品类别在售卖 """ from pyspark import SparkConf, SparkContext import os import jsonos.environ[PYSPARK_P…...
个人学习编程(3-22) leetcode刷题
连续子数组:(难) 示例 1: 输入: nums [0,1] 输出: 2 说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。 示例 2: 输入: nums [0,1,0] 输出: 2 说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。 需要理解的知识&a…...
RabbitMQ八股文
RabbitMQ 核心概念与组件 1. RabbitMQ 核心组件及其作用 1.1 生产者(Producer) 作用:创建并发送消息到交换机。特点:不直接将消息发送到队列,而是通过交换机路由。 1.2 交换机(Exchange) 作…...
运维面试题(七)
1.statefulset用来管理有状态的应用程序,有状态是什么意思? 每一个pod都有一个固定的网络标识符,在整个生命周期中不会改变。每个实例都可以拥有自己的持久化存储卷,即使容器被删除并重新创建,存储卷仍然存在。Statef…...
【项目设计】网页版五子棋
文章目录 一、项目介绍1.项目简介2.开发环境3.核心技术4.开发阶段 二、Centos-7.6环境搭建1.安装wget工具2.更换软件源(yum源)3.安装scl工具4.安装epel软件源5.安装lrzsz传输工具6.安装高版本gcc/g编译器7.安装gdb调试器8.安装git9.安装cmake10.安装boost库11.安装Jsoncpp库12.…...
Netty——BIO、NIO 与 Netty
文章目录 1. 介绍1.1 BIO1.1.1 概念1.1.2 工作原理1.1.3 优缺点 1.2 NIO1.2.1 概念1.2.2 工作原理1.2.3 优缺点 1.3 Netty1.3.1 概念1.3.2 工作原理1.3.3 优点 2. Netty 与 Java NIO 的区别2.1 抽象层次2.2 API 易用性2.3 性能优化2.4 功能扩展性2.5 线程模型2.6 适用场景 3. 总…...
Docker 安装 Mysql
以下是安装Docker版MySQL 8.0.25并实现目录挂载的步骤: docker仓库:https://hub.docker.com/_/mysql 1. 拉取Mysql镜像文件 docker pull mysql:8.0.252. 创建mysql临时容器服务 docker run -d \--name mysql \-p 3306:3306 \-e MYSQL_ROOT_PASSWORD123…...
Electron打包文件生成.exe文件打开即可使用
1 、Electron 打包,包括需要下载的内容和环境配置步骤 注意:Electron 是一个使用 JavaScript、HTML 和 CSS 构建跨平台桌面应用程序的框架 首先需要电脑环境有Node.js 和 npm我之前的文章有关nvm下载node的说明也可以去官网下载 检查是否有node和npm环…...
线程和协程的区别了解
1.资源消耗 调度方式:线程由操作系统内核调度(抢占式),协程由程序自己控制调度(协作式)。切换开销:线程切换涉及内核态与用户态的转换,开销大;协程只在用户态切换上下文…...
楼宇自控系统的结构密码:总线与分布式结构方式的差异与应用
在现代建筑中,为了实现高效、智能的管理,楼宇自控系统变得越来越重要。它就像建筑的 智能管家,可自动控制照明、空调、通风等各种机电设备,让建筑运行更顺畅,还能节省能源成本。而在楼宇自控系统里,有两种关…...
算法及数据结构系列 - 滑动窗口
系列文章目录 算法及数据结构系列 - 二分查找 算法及数据结构系列 - BFS算法 算法及数据结构系列 - 动态规划 算法及数据结构系列 - 双指针 算法及数据结构系列 - 回溯算法 算法及数据结构系列 - 树 文章目录 滑动窗口框架思路经典题型76. 最小覆盖子串567. 字符串的排列438. …...
【江协科技STM32】软件SPI读写W25Q64芯片(学习笔记)
SPI通信协议及S为5Q64简介:【STM32】SPI通信协议&W25Q64Flash存储器芯片(学习笔记)-CSDN博客 STM32与W25Q64模块接线: SPI初始化: 片选SS、始终SCK、MOSI都是主机输出引脚,输出引脚配置为推挽输出&…...
2025.3.23机器学习笔记:文献阅读
2025.3.23周报 题目信息摘要Abstract创新点网络架构实验不足以及展望 题目信息 题目: Enhancement of Hydrological Time Series Prediction with Real-World Time Series Generative Adversarial Network-Based Synthetic Data and Deep Learning Models期刊&…...
Day20-前端Web案例——部门管理
目录 部门管理1. 前后端分离开发2. 准备工作2.1 创建Vue项目2.2 安装依赖2.3 精简项目 3. 页面布局3.1 介绍3.2 整体布局3.3 左侧菜单 4. Vue Router4.1 介绍4.2 入门4.3 案例4.4 首页制作 5. 部门管理5.1部门列表5.1.1. 基本布局5.1.2 加载数据5.1.3 程序优化 5.2 新增部门5.3…...
实验3 以太坊交易周期的需求分析
区块链技术 实验报告 实验名称 实验3 以太坊交易周期的需求分析 一、实验目的 1、学习并掌握以太坊交易的内容; 2、学习并掌握以太坊交易周期的四个阶段; 3、学习并掌握结构化需求分析方法; 4、学习并掌握面向对象的需求分析方法&…...
Linux 通过压缩包安装 MySQL 并设置远程连接教程
一、引言 在 Linux 系统中,有时候我们需要通过压缩包的方式手动安装 MySQL 数据库,并且为了方便在其他设备上对数据库进行管理和操作,还需要设置允许远程连接。本文将详细介绍在 Linux(以 CentOS 为例)系统中通过压缩包安装 MySQL 8 并设置远程连接的步骤。 二、安装前准…...
【商城实战(56)】商城数据生命线:恢复流程与演练全解析
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
Java学习笔记-XXH3哈希算法
XXH3是由Yann Collet设计的非加密哈希算法,属于XXHash系列的最新变种,专注于极速性能与低碰撞率,适用于对计算效率要求极高的场景。 极速性能 在RAM速度限制下运行,小数据(如 1-128 字节)处理可达纳秒级&…...
同旺科技USB to SPI 适配器 ---- 指令循环发送功能
所需设备: 内附链接 1、同旺科技USB to SPI 适配器 1、周期性的指令一次输入,即可以使用 “单次发送” 功能,也可以使用 “循环发送” 功能,大大减轻发送指令的编辑效率; 2、 “单次发送” 功能,“发送数据…...
在Mac M1/M2芯片上完美安装DeepCTR库:避坑指南与实战验证
让推荐算法在Apple Silicon上全速运行 概述 作为推荐系统领域的最经常用的明星库,DeepCTR集成了CTR预估、多任务学习等前沿模型实现。但在Apple Silicon架构的Mac设备上,安装过程常因ARM架构适配、依赖库版本冲突等问题受阻。本文通过20次环境搭建实测…...
【CXX-Qt】2.5 继承
某些 Qt API 要求你从抽象基类中重写某些方法,例如 QAbstractItemModel。 为了支持直接从 Rust 中创建这样的子类,CXX-Qt 提供了多种辅助工具。 某些基类可能需要特殊的构造参数。这可以通过使用自定义构造函数来实现。 访问基类方法 要在 Rust 中访…...
Linux系统之美:环境变量的概念以及基本操作
本节重点 理解环境变量的基本概念学会在指令和代码操作上查询更改环境变量环境变量表的基本概念父子进程间环境变量的继承与隔离 一、引入 1.1 自定义命令(我们的exe) 我们以往的Linux编程经验告诉我们,我们在对一段代码编译形成可执行文件后…...
【nnUnetv2】推理+评估+测试
在 Windows 系统下设置环境变量 之前训练和推理的时候开着AutoDL的服务器,是在 Linux 系统下设置的环境变量。 但是现在开始研究具体代码了,就在本地跑(一直开着服务器有点费钱),所以就在Windows 系统下设置环境变量。 ①右键点击 “此电脑”,选择 “属性”。 ②在左侧…...
损失函数理解(一)——极大似然估计
本博客内容来自B站up主【王木头学科学】的视频内容 习惯看视频的小伙伴可移至视频链接[待补充]:~~~ 首先通俗地解释一下极大似然估计(Maximum Likelihood Estimation,MLE)的思想:通过结果寻找使该结果发生的最可能的原…...
ios端使用TCplayer直播播放三秒直接卡顿bug
1. 查看配置项没问题 setTcPlayer() {let that this;player new TcPlayer("videoPlayer", {live: this.activatPlayType "livePlay" ? true : false,x5_type: "h5",x5_fullscreen: true,systemFullscreen: true,x5_orientation: 1,x5_player…...
大模型-提示词工程与架构
什么是提示工程 提示工程(Prompt Engineering)是一门新兴的技术领域,专注于研究如何设计、构建和优化提示词,以充分发挥大模型的潜力 。它涉及到对语言结构、任务需求、模型特性等多方面因素的综合考量。提示工程的目标是通过精心…...