.NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记

目录

  • 什么是软件架构

  • 软件架构的基本思路

  • 单体向分布式演进、云原生、技术中台

1.1 什么是软件架构

1.1.1 什么是架构?

Software architecture = {Elements, Forms, Rationale/Constraints}

元素、形式/模式、基本原理和限制

为什么需要软件架构?

软件架构的终极目标是用最小的人力成本来满足构建和维护系统的需求

一个软件架构的优劣,可以用它满足用户需求的成本来衡量。如果该成本很低,并且在系统的整个生命周期内一直都维持这样的低成本,那么这个系统的设计就是优良的,如果该系统的每次发布都会提升下一次变更的成本,那么这个设计就是不好的,就这么简单。

--架构整洁之道

产品经理

  • 需求分析

  • 需求设计

  • 项目管理

  • 产品运营

1.1.2 什么是架构师?

系统的维度

负责整体系统的架构设计,主要是基础服务和各系统间的协调上,着眼全局不太注重某个应用本身架构,比如关注服务器负载,可靠性,伸缩,扩展,数据库切分,缓存应用等方法的基础架构设计

应用程序的维度

负责某个应用的技术架构,主要偏业务系统,关注理解业务,梳理模型,设计模式,接口,数据交互等方面

业务流程的维度

关注某一个行业、业务的领域分析,获取领域模型,最终获得系统的模型

也可以叫业务领域专家、行业专家、产品咨询师、资深顾问

降低成本

通过设计和实现优良的软件架构来持续降低软件的构建和维护成本

软件架构这项工作的实质就是规划如何将系统拆分成组件,并安排好组件之间的排列关系以及组件之间互相通信的方式

如何降低成本?

  • 低成本维护(容易被改动和理解)

  • 软件可复用

  • 轻松部署

设计原则会给我们答案

软件架构师的目标是创建一种系统形态,该形态会以策略为最基本的元素,并让细节与策略脱离关系,一个优秀的软件架构师应该致力于最大化可选项数量

职能

  1. 负责公司系统架构设计、研发工作

  2. 承担从业务向技术转换的桥梁作用

  3. 协作项目经理制定项目计划和控制项目进度

  4. 负责辅助并指导 SA 开展设计工作

  5. 负责组织技术研究和攻关工作

  6. 负责组织和管理公司内部的技术培训工作

  7. 负责组织及带领公司内部员工研究与项目相关的新技术

  8. 管理技术支撑团队并给项目、产品开发实施团队提供技术保障

  9. 理解系统的业务需求,制定系统的整体框架(包括:技术框架和业务框架)

  10. 对系统框架相关技术和业务进行培训,指导开发人员开发

  11. 解决系统开发、运行中出现的各种问题

  12. 对系统的重用、扩展、安全、性能、伸缩性、简洁等做系统级的把握

软件周期内,标准组织架构下的各个职位的分工

  • CEO

  • CTO/CIO

  • 产品总监/技术总监/架构师 Architect Director

  • 资深开发/Manager

  • 高级开发/Leader

1.1.3 软件架构分类

从架构师的工作内容上来划分可以分为三类:

  • 系统架构师

  • 应用架构师

  • 业务架构师

系统架构师/基础架构师

从系统的维度,负责整体系统的架构设计,主要是基础服务和各系统间协调上,着眼全局不太注重某个应用本身架构,比如关注服务器负载,可靠性,伸缩,扩展,数据库切分,缓存应用等方面的基础架构设计。

应用架构师

从应用程序的维度,负责某个应用的技术架构,主要偏业务系统,关注理解业务,梳理模型,设计模式,接口,数据交互等方面。

业务架构师

从业务流程的维度,关注某一个行业、业务的领域分析,获取领域模型,最终获得系统的模型。也可以叫业务领域专家、行业专家、产品咨询师、资深顾问。

基础架构、前端架构、后端架构是从职责上的分类。

.NET云原生架构师训练营讲什么,怎么讲,讲多久

https://mp.weixin.qq.com/s/JWOIScGrX0Hszz4uqdA6qw

1.1.4 架构风格

  • 分层架构

  • 微核架构/六边形架构/简洁架构

  • 事件驱动架构

  • 微服务架构

  • 云架构

软件架构入门

http://www.ruanyifeng.com/blog/2016/09/software-architecture.html

1.2 软件架构的基本思路

1.2.1 如何理解需求

软件需求(第3版)

https://book.douban.com/subject/26307910/

需求分类

1.2.2 非功能性需求

  • 观感需求

  • 易用性:性能/可用性

  • 可扩展性

  • 可维护性

1.2.3 4+1模型

  • 场景视图

  • 逻辑视图

  • 开发视图

  • 处理视图

  • 物理视图

1.2.4 场景视图

  • 用户可以开设一个训练营成为营长

  • 营长可以制定训练营学生的任务和计划,可以快速利用到其他训练营

  • 营长可以邀请其他用户加入训练营成为学员

  • 营长可以对学员进行分组

  • 营长可以添加指定学员成为助教并指定到分组

  • 学员可以接受邀请加入训练营成为学员

  • 学员加入训练营之后可以完成训练营内的任务

  • 学员可以对训练营内的指定问题进行提问

  • 学员可以查看自己的学员档案

  • 营长/助教可以回答学员提出的问题

  • 营长/助教可以对学员完成的任务进行考评打分

1.2.5 逻辑视图

面向对象分解

用来支持功能性需求、系统应该被拆分为哪些问题域、对象

1.2.6 开发视图

关注软件模块组织和开发环境上、从组件、模块、子系统的组织和分层

每一层为上层提供有限的良好定义的接口供调用

  • 团队结构

  • 开发流程

  • 测试计划

  • 项目协作工具

  • Road Map 发布计划

1.2.7 处理视图

关注进程、线程、对象等运行的概念,以及相关的并发、同步、通信等问题

从软件实现的角度去关注非功能性需求

单体

分布式

2.8 物理视图

从硬件角度去关注非功能属性

单体

分布式

1.3 单体向分布式演进、云原生、技术中台

1.3.1 单体的问题

  • 巨大的代码库

  • 过载的 IDE

  • 过载的 WEB 容器

  • 持续部署困难

  • 应用扩展困难

  • 难于进行规模化开发

模式: 单体架构

https://microservices.io/patterns/cn/monolithic.html

1.3.2 高可用架构

系统设计

  • 故障转移

  • 超时控制

  • 降级和限流

系统运维

  • 灰度发布

  • 故障演练

故障转移

完全对等的节点之间做故障转移

在对等节点之间做故障转移,相对来说简单些

在这类系统中所有节点都承担读写流量,并且节点中不保存状态,每个节点都可以作为另一个节点的镜像

不对等的节点之间,即系统中存在主节点也存在备节点

使用最广泛的故障检测机制是“心跳”

你可以在客户端上定期地向主节点发送心跳包,也可以从备份节点上定期发送心跳包

当一段时间内未收到心跳包,就可以认为主节点已经发生故障,可以触发选主操作

超时/降级/限流

数据库访问超时、rpc/远程调用超时、缓存/队列等其他中间件访问超时
探测出系统或者服务单位内允许出现的最大请求,直接拒绝后面的请求

水平/垂直扩展

水平(也叫横向扩展):用更多的节点支撑更大的请求

如成千上万的蚂蚁完成一项搬运工作

垂直(也叫纵向扩展):扩展一个点的能力支撑更大的请求

如利用一个人的能力,如蜘蛛侠逼停火车

AKF 扩展立方

X 轴:代表无差别的克隆服务和数据,工作可以很均匀的分散在不同的服务实例上

Y 轴:关注应用中职责的划分,比如数据类型,交易执行类型的划分

Z 轴:关注服务和数据的优先级划分,如分地域划分

业务模块化打造单体和分布式部署同步支持方案

https://mp.weixin.qq.com/s/HE7BxH_RZo45bY2baNgt5Q

模块拆分原则

  • 微服务拆分的大部份原则依旧适用

  • 一个业务模块对应一个数据库,不能直接查另一个业务模块的数据库

  • 模块之间的调用通过抽象契约接口来完成

  • 模块之间互相依赖只能依赖于抽象契约

1.3.3 云原生

什么是云原生

云原生技术有利于各组织再公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用

云原生的代表技术包括容器、微服务、服务网络、不可变基础设施和声明式 API

这些技术可以让我们构建高度稳定、可控、可观测的松散耦合应用

但云原生方案的重点并不是应用部署在何处,而是如何构建、部署和管理应用

关键点

  • 不可变基础设施

  • 12 因素:https://12factor.net/zh_cn/

12 因素

  1. 基准代码:基准代码和应用之间总是保持一一对应的关系:

  • 一旦有多个基准代码,就不能称为一个应用,而是一个分布式系统。分布式系统中的每一个组件都是一个应用,每一个应用可以分别使用 12因素 进行开发

  • 多个应用共享一份基准代码是有悖于 12因素 原则的。解决方案就是将共享的代码拆分为独立的类库,然后使用 依赖管理 策略去加载它们

  1. 显示声明依赖

  2. 配置:推荐将配置保存于环境变量中

  3. 把后端服务当作附加资源

  4. 严格分享构建和运行

  5. 以一个或多个无状态进程运行应用

  6. 通过端口绑定提供服务:12因素 应用完全自我加载,而不依赖于任何网络服务就可以创建一个面向网络的服务。互联网应用通过端口绑定来提供服务,并监听发送至该端口的请求

  7. 通过进程模型进行扩展

  8. 快速启动和优雅终止可最大化健壮性

  9. 尽可能的保持开发,预发布,线上环境相同

  10. 把日志当作事件流

  11. 后台管理任务当作一次性进程运行

云原生 VS 微服务

云原生方案与微服务架构类似

然而,尽管微服务可通过构建云原生应用来交付,可企业仍需要采取许多措施,才能在生产环境中熟练地管理微服务

而想要享受云原生应用的各种益处,也并非一定需要微服务

很多企业都通过基于相同的原则,构建出更优秀的模块化单体式应用,从而取得云原生方案的种种效益

1.3.4 技术中台

课程链接

.NET云原生架构师训练营讲什么,怎么讲,讲多久

欢迎各位读者加入微信群一起学习交流,

在公众号后台回复“加群”即可~~

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

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

相关文章

leetcode530. 二叉搜索树的最小绝对差

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

再分享 5 个 vs 调试技巧

前言 之前在《5 个非常实用的 vs 调试技巧》和《继续分享 5 个实用的 vs 调试技巧》中分享了 10 个我认为非常值得了解的 vs 调试技巧,本周继续分享 5 个很实用的调试技巧。1. 显示下一条语句 在调试时,遇到断点中断后,为了更加清楚的了解程…

leetcode501. 二叉搜索树中的众数

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

网络知识 | 《图解HTTP》读书笔记(上)

【网络知识】| 作者 / Edison Zhou这是EdisonTalk的第293篇原创内容作为一个专业的IT技术人,一个Web应用开发者,不了解网络基础和协议,怎么能行?本文是我2016年阅读《图解HTTP》一书的读书笔记,希望对你有所帮助&#…

leetcode292周赛--6057. 统计值等于子树平均值的节点数

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

C# 中 System.Range 结构体

翻译自 John Demetriou 2020年4月6日 的文章 《C# 8 Is Introducing Ranges》我们之前讨论过的 C# 中的一个特性 System.Index 结构体,与另一特性 System.Range 结构体 是携手并进的。在 C# 8.0 之前,没有访问集合中任意部分的范围或切片的语法。开发人员…

leetcode292周赛--6056. 字符串中最大的 3 位相同数字

一:题目 二:上码 class Solution { public:string largestGoodInteger(string num) {int slowIndex 0;int count 0;vector<int> ans;for (int fastIndex 1; fastIndex < num.size(); fastIndex) {if (num[fastIndex] ! num[slowIndex]) {slowIndex;} else {//相等…

GDB 调试 .NET 程序实录 - .NET 调用 .so 出现问题怎么解决

注&#xff1a;本文重要信息使用 *** 屏蔽关键字。最近国庆前&#xff0c;项目碰到一个很麻烦的问题&#xff0c;这个问题让我们加班到凌晨三点。大概背景&#xff1a;客户给了一些 C语言 写的 SDK 库&#xff0c;这些库打包成 .so 文件&#xff0c;然后我们使用 C# 调用这些库…

leetcode236. 二叉树的最近公共祖先(java递归)

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/ class Solution {/**思路:1.后序遍历 从下往上遍历 找到目标结点后然后做逻辑判断处理1…

WPF MVVM 弹框之等待框

WPF MVVM 弹框之等待框目录一、效果二、弹框主体改造三、等待动画用户控件四、弹窗 ViewModel 和帮助类的改造五、使用方法和代码地址独立观察员 2020年10月13日之前写过一篇《WPF MVVM 模式下的弹窗》&#xff0c;里面实现了确认框和消息框&#xff0c;经过一段时间的演化&…

设计一个具有等待队列的连接池

说到连接池相关很多人都使用过&#xff0c;常见的有数据连接池&#xff0c;HttpClient连接池等。连接池的作用是保持一定量的连接让交互过程复用这些连接&#xff0c;从而大大节省连接创建过程或过多的损耗。在连接池策略中往往当池没有连接的情况都会抛出异常告诉使用者资源无…

leetcode701. 二叉搜索树中的插入操作

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

你不该错过的2020中国开源年报,填开源开发者问卷,成为国内开源的见证者

点击上方“开源社”关注我们| 作者&#xff1a;王伟| 编辑&#xff1a;黄欣宜| 设计&#xff1a;冯艺怡| 责编&#xff1a;王玥敏卷首语一年一度的中国开源年报再度启动&#xff5e;中国开源年报由开源社发起。旨在从多种维度&#xff0c;多种方式&#xff0c;多种协作来呈现国…

leetcode450. 删除二叉搜索树中的节点(java详解版)

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

.NET Core使用FluentEmail发送邮件

前言在实际的项目开发中&#xff0c;我们会遇到许多需要通过程序发送邮件的场景&#xff0c;比如异常报警、消息、进度通知等等。一般情况下我们使用原生的SmtpClient类库居多&#xff0c;它能满足我们绝大多数场景。但是使用起来不够简洁&#xff0c;许多场景需要我们自行封装…

进击吧! Blazor !第四期 组件开发

Blazor 是一个 Web UI 框架&#xff0c;可通过 WebAssembly 在任意浏览器中运行 .Net 。Blazor 旨在简化快速的单页面 .Net 浏览器应用的构建过程&#xff0c;它虽然使用了诸如 CSS 和 HTML 之类的 Web 技术&#xff0c;但它使用 C&#xff03;语言和 Razor 语法代替 JavaScrip…

HttpReports 2.0 发布了 !!!

https://www.cnblogs.com/myshowtime/p/13806631.html来源???? 前言介绍HttpReports 是基于.Net Core 开发的APM监控系统&#xff0c;使用MIT开源协议&#xff0c;主要功能包括&#xff0c;统计, 分析, 可视化&#xff0c; 监控&#xff0c;追踪等&#xff0c;适合在微服务…

.NET Standard 来日苦短去日长

作者&#xff1a;Richard翻译&#xff1a;精致码农-王亮原文&#xff1a;http://dwz.win/Q4h自从 .NET 5 宣贯以来&#xff0c;很多人都在问这对 .NET Standard 意味着什么&#xff0c;它是否仍然重要。在这篇文章中&#xff0c;我将解释 .NET 5 是如何改进代码共用并取代 .NET…

leetcode538. 把二叉搜索树转换为累加树

一:题目 二:上码 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

【BCVP升级】泛型主键的使用

&#xff08;图片来源于SqlSugar官网&#xff0c;5年5.0&#xff09;大家假期已经结束了吧&#xff0c;还有80天左右就要到2021年了&#xff0c;你准备好了么&#xff1f;BCVP&#xff08;Blog.Core&Vue Project&#xff09;项目已经开源2年多&#xff0c;从来没有停更过&a…