关于架构与架构师的一些感悟

news2024/11/15 2:07:58

本博客地址:https://security.blog.csdn.net/article/details/132152177

一、引子

最近在做工作总结的过程中,对于架构与架构师又有了一些新的感悟,本文有感而写,分为四个部分:

● 关于系统架构
● 关于系统架构师
● 关于安全架构
● 关于安全架构师

二、关于系统架构

通俗地说,系统架构就是系统的一种整体的高层次的结构表示,是系统的骨架和根基。它具体体现在系统的构件、构件与构件之间的关系、构件与环境之间的关系、以及指导其设计和演化的原则上。系统架构可用于指导系统各个方面的设计与实现,在系统开发过程中起着关键性的作用,架构设计的优劣决定了系统的健壮性和生命周期的长短。我们通常把架构设计作为系统开发过程中需求分析阶段后的一个关键步骤,也是系统设计前不可或缺的工作要点之一。

说起架构,就不得不提到架构模型,架构模型简单来讲就是架构设计的最佳实践,因此在很多架构设计的场景下,可以直接套用一些较为适配的架构模型。比较典型的架构模型包括分层架构、事件驱动架构、微核架构、微服务架构、云架构等,同时还包括我们常听的什么C/S架构、B/S架构等。

在实际中,系统这个词可大可小,大了讲可以将整个企业的业务看做是一个系统,小了讲可以是一个Photoshop软件,或者几行代码形成的一个脚本也可以称之为系统,正所谓一花一世界,一叶一菩提。所以,系统架构也可以说是无处不在,大到一个公司的技术体系,小到Spring框架的MVC,再或者一个脚本代码中的函数,都有架构的影子。

对于一个企业来讲,它的系统体系架构可以分为四层,即战略系统、业务系统、应用系统、信息基础设施。战略系统在第一层,是指企业中与战略制定、高层决策有关的系统。业务系统在第二层,是指企业中完成一定业务功能的系统。应用系统在第三层,是指信息系统中的应用软件部分,是完成业务功能的实现手段。信息基础设施在第四层,是指由信息设备、通信网络、数据库、系统软件和支持性软件等组成的环境。这和一个企业的文件体系架构有异曲同工之处。

最后,我们来看一个最常见的分布式服务架构的网站,来感受架构的魅力所在,如图所示:

请添加图片描述

这个架构其实解决了很多超大型网站面临的各种问题,让我们来逐一看看:

● 首先是对用户访问速度的保障。无论哪个网站,它的访问的特点都是大部分业务访问集中在一小部分数据上,此时,通过将这一小部分数据缓存在内存中,就可以减少数据库的访问压力,提高整个网站的数据访问速度了。这里可以部署大内存的服务器作为专门的缓存服务器,形成远程分布式缓存集群,可以在理论上实现不受内存容量限制的缓存服务,从而有效缓解数据访问压力。

● 还是对用户访问速度的保障。使用的手段是CDN和反向代理,CDN服务器可以让用户在请求网站服务时从距离自己最近的网络获取数据,从而实现对网站响应的加速。反向代理服务器可以缓存用户经常请求的资源,当用户请求的资源恰好在反向代理服务器中时,就可以将其直接返回给用户。它俩的目的都是尽早返回数据给用户,同时也减轻后端服务器的负载压力。

● 然后是海量请求的并发处理保障。这里使用了负载均衡,负载均衡调度可以将来自用户的访问请求分发到应用服务器集群中的任何一台服务器上,如果有更多用户,就在集群中加入更多的应用服务器,使应用服务器的压力不再成为整个网站的瓶颈。

● 之后是对超复杂业务场景的高效处理保障。首先可以通过分而治之的手段将整个网站业务分成不同的产品线,然后根据产品线将网站拆分成许多不同的应用系统,由于每个应用系统都会执行一些相同的业务操作,比如用户管理、商品管理等,那么接下来就可以将这些共用的业务提取出来进行独立部署,而应用之间可以通过消息队列进行数据分发。当我们通过这些共用的业务来连接数据库并提供共用服务时,就可以很好的改善数据库连接资源不足导致的拒绝服务问题了。

● 接下来是海量数据的存储性能保障。数据库在经过读写分离后依然不能满足需求时,就需要使用分布式数据库了。对于文件系统也一样,需要使用分布式文件系统。分布式数据库是网站数据库拆分的最后手段,只有在单表数据规模非常庞大的时候才使用。当然,网站更常用的数据库拆分手段是业务分库,将不同业务的数据库部署在不同的物理服务器上。

● 最后是海量数据的读写性能保障。在分布式和超复杂数据的情况下,数据的读写性能也会面临巨大挑战,此时可以采用NoSQL(非关系数据库)和搜索引擎(非数据库查询)。NoSQL和搜索引擎都对可伸缩的分布式特性具有更好的支持。应用服务器则通过一个统一数据访问模块来访问各种数据,从而减轻应用程序管理诸多数据源的麻烦。

以上,是不是已经感受到了架构的魅力?

三、关于系统架构师

唠完系统架构后,对于系统架构师相信我们心里已经有轮廓了。

系统架构师是一种综合性很强的人才,需要在技术领域的广度和深度上掌握更多的基础知识,还需要在架构设计方法、架构模式、开发流程以及各种模型等方面有丰富的经验。虽然架构师可以不用关注技术的具体细节,也可以不必在项目中编写代码,但必须得跟上最新技术的发展。另外,架构师需要在业务领域及管理等方面具备一定知识,如果架构师不理解业务模型,就可能会设计出一个不能满足用户需求的解决方案,因此,熟悉业务也使得架构师能够预见可能发生的改变。同时,架构师还需要具备有效的口头和书面表达能力。

系统架构师是承担系统架构设计的核心角色,其既需要掌控整体又需要洞悉局部瓶颈,并依据具体的业务场景给出解决方案。架构师在项目中的主要任务通常是领导与协调整个项目中的技术活动、推动主要的技术决策并最终表达为系统架构、确定系统架构并促使其架构设计的文档化。从技术角度看,架构师的职责就是抽象设计、非功能设计和关键技术设计等三大任务。

架构师角色可以由一个人或一个团队来履行。我们知道,角色和人之间是存在差异的,一个人可能会履行多个角色,由于架构师需要非常广泛的技能,所以架构师角色通常由多个人来履行。特别是在理解业务领域和掌握各方面技术所必须的技能上,往往由几个人才能有很好地覆盖。如果架构师角色由一个团队履行时,拥有一个首席架构师角色就非常重要,该角色主要承担架构团队的单点协调人,如果没有这个协调人,架构团队的成员要创造出高内聚的架构或做出决策是很困难的。

系统架构师与技术专家是有区别的,系统架构师是基于完善的架构设计方法论的指导来进行架构设计,而技术专家更多的是基于经验进行架构设计。简单来说,即使是同样一个方案,系统架构师能够清晰地阐述架构设计的理由和原因,而技术专家可能就是因为自己曾经这样做过,或者看到别人这样做过而选择设计方案。从技术专家成长为系统架构师,最主要的是形成自己的架构设计方法论。

四、关于安全架构

安全架构是架构面向安全性方向上的一种细分,我们在设计安全架构时,通常要识别系统可能会遇到的安全威胁,通过对系统面临的安全威胁实施相应的控制措施,形成提升系统安全性的安全方案,从而实现安全架构设计的目标。

产品安全架构

对于安全架构而言,产品安全架构是很重要的一方面,产品安全架构主要是为了构建产品安全质量,它的目标是在不依赖外部防御系统的情况下,从源头打造自身安全的产品。

我们前面提到,架构师与技术专家是有区别的,架构师是基于完善的架构设计方法论的指导来进行架构设计,而技术专家更多的是基于经验进行架构设计。那么问题来了,我们在对产品进行安全架构设计时,可以参考哪些安全模型呢?

我们常见的安全模型有以下:

请添加图片描述

BLP模型:

BLP模型的安全规则如下:
● 简单安全规则:安全级别低的主体不能读安全级别高的客体;
● 星属性安全规则:安全级别高的主体不能往低级别的客体写;
● 强星属性安全规则:不允许对另一级别进行读写;
● 自主安全规则:使用访问控制矩阵来定义说明自由存取控制,其存取控制体现在内容相关和上下文相关。

Biba模型

Biba模型的安全规则如下:
● 星完整性规则:完整性级别低的主体不能对完整性级别高的客体写数据;
● 简单完整性规则:完整性级别高的主体不能从完整性级别低的客体读取数据;
● 调用属性规则:一个完整性级别低的主体不能从级别高的客体调用程序或服务。

安全体系架构

安全体系架构是安全架构师或安全负责人最常进行的工作。在进行安全体系架构规划前,首先需要对企业信息化发展的历史情况进行深入和全面的调研,同样的,在构建安全体系架构时,我们也可以参考一些安全模型,其中比较常见的安全模型是WPDRRC模型,WPDRRC模型有6个环节和3大要素:

● 6个环节包括:预警(W)、保护(P)、检测(D)、响应(R)、恢复(R)、反击(C)
● 3大要素包括:人员、策略和技术。人员是核心,策略是桥梁,技术是保证

这个模型是不是看着很熟悉?实际上安全工程师的日常工作都在这个模型之下,例如安全预警、渗透测试、应急响应等等。在设计安全架构时,由于不同企业的实际情况不同,所以信息安全规划包括的内容就不同,同时不同的安全架构师也可能会设计出不同的安全架构来,但万变不离其宗,不论这个架构如何设计通常都离不开如下几个方面:

● 基础安全:基础安全主要是面向安全防护方向的,包括物理安全、狭义网络安全、主机安全等等,所涉及的技术有设备安全、网络结构安全、操作系统安全、防火墙、入侵检测、防病毒等等。

● 应用安全:应用安全即我们常说的SDL,在应用全生命周期的不同环节进行不同的安全管控,需要注意的是,它只是一个对应用的安全约束框架,和前面讲的产品安全架构有本质区别。

● 数据安全:广义上的数据安全可以是一个很大的概念,一般而言,数据安全主要是在数据全生命周期的不同环节进行的不同的安全管控,同时,还包括数据库、数仓以及其他一些数据保护相关设施的安全。

● 隐私合规:隐私合规主要是合规监管和用户隐私保护,随着监管机制的完善,合规监管是每一个企业都绕不开的内容,也是安全工作的必选项。而用户隐私保护则是合规的具象化体现,是技术合规的目标。

● 安全管理:安全管理主要体现在三个方面,其一是制定健全的安全管理制度、流程、人员任命机制等,其二是构建安全运营体系,建设安全管理平台等,其三是增强人员的安全防范意识。

以上只是列明了大方向,其具体内容可以参考博主很久以前写的《安全体系架构》,当然,这篇文章可能也有瑕疵但此处不再深入讨论。

五、关于安全架构师

如果您阅读到这个地方,不用再多讲,相信您对安全架构师已经有了一定的概念了。

安全架构师是安全行业综合性很强的人才,做过安全的都知道,安全行业的分支有很多,如安全合规、安全风控、安全攻防、安全开发等等,并且每个分支的知识壁垒都很高,甚至可以说是隔分支如隔山,这主要是因为各个分支的技术栈相对独立导致的。要成为安全架构师,就需要花费非常大的精力去学习不同安全分支的知识,并且需要达到一定深度,以此来打通不同安全分支之间的知识壁垒,成为一个全才。

除了打通不同安全分支的知识壁垒外,安全架构师还应当对业务模型以及业务技术有一定了解,如果一个安全架构师只懂得安全而不懂业务模型和业务技术,那他设计的安全架构就可能会很独立,无法很好的贴合业务为业务赋能,有闭门造车之嫌,最终所起到的效果也就大打折扣了。同样的,安全架构师可以不用去关注技术的具体细节,例如不用关注一个漏洞具体是怎样被利用的,但他必须的跟上最新的技术发展,在大方向上不能止步不前。

此外,安全架构师和安全负责人是有区别的,安全架构师主要是负责安全架构的规划设计、落地跟进、更新演化等。而安全负责人则是部门主管,涉及到团队人员管理方面。安全架构师通常可以做安全负责人,但安全负责人不一定能做安全架构,因为安全负责人不要求有这么宽的安全技术栈,他的重点是团队管理,甚至对于一个人的安全部来说,团队管理都不会涉及。对于一个小团队而言,安全架构师和安全负责人通常是同一个角色,但对于一个大团队而言,这两者通常是分开的。

以上,本篇分享就到这里。

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

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

相关文章

动手学深度学习(三)线性神经网络—softmax回归

分类任务是对离散变量预测,通过比较分类的概率来判断预测的结果。 softmax回归和线性回归一样也是将输入特征与权重做线性叠加,但是softmax回归的输出值个数等于标签中的类别数,这样就可以用于预测分类问题。 分类问题和线性回归的区别&#…

《24海南大学835软件工程考研经验贴》

1.经验之谈 首先,我是一个二战的考生,一战给我带来的经验有几点。第一,数学、专业课这两门越早复习越好,越拖到后面你就会发现来不及了,这学不完,那学不完的。第二、我认为是比较关键的一点,一定…

WebRTC基础知识

文章目录 基础概念NAT (Network Address Translation) 打洞STUN(Session Traversal Utilities for NAT)基于STUN协议的DDoS反射攻击 # TODO TURN(Traversal Using Relays around NAT)ICE(Interactive Connectivity Est…

Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis tbms

​ 功能描述 1、门户管理:所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含:招标公告、非招标公告、系统通知、政策法规。 2、立项管理:企业用户可对需要采购的项目进行立项申请,并提交审批,查…

[C#] 简单的俄罗斯方块实现

一个控制台俄罗斯方块游戏的简单实现. 已在 github.com/SlimeNull/Tetris 开源. 思路 很简单, 一个二维数组存储当前游戏的方块地图, 用 bool 即可, true 表示当前块被填充, false 表示没有. 然后, 抽一个 “形状” 类, 形状表示当前玩家正在操作的一个形状, 例如方块, 直线…

力扣 474. 一和零

题目来源:https://leetcode.cn/problems/ones-and-zeroes/description/ C题解:本题其实是01背包问题!只不过这个背包有两个维度,一个是m 一个是n,而不同长度的字符串就是不同大小的待装物品。动规五部曲: …

Java并发 | 常见线程安全容器

文章目录 简介一、Hash表🚣1、ConcurrentHashMap1.1 内部实现原理1.2 并发操作方法1.3 ConcurrentHashMap与Hashtable的比较 二、集合🚣2、CopyOnWriteArrayList2.1 内部实现原理2.2 Copy-On-Write(COW)设计思想2.3 实操 三、Map🚣3、Concurr…

C语言第十课----------------扫雷----------数组的经典练手题

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂…

力扣120.三角形最小路径和(动态规划)

/*** author Limg* date 2022/08/09* 给定一个三角形 triangle ,找出自顶向下的最小路径和。* 每一步只能移动到下一行中相邻的结点上。* 相邻的结点在这里指的是下标与上一层结点下标相同或者等于上一层结点下标 1 的两个结点。* 也就是说,如果正位于当…

(MVC)SpringBoot+Mybatis+Mapper.xml

前言:本篇博客主要对MVC架构、Mybatis工程加深下理解,前面写过一篇博客:SprintBoothtml/css/jsmybatis的demo,里面涉及到了Mybatis的应用,此篇博客主要介绍一种将sql语句写到了配置文件里的方法,即Mybatis里…

AVL树(二叉搜索树)

AVL树 1.1 AVL树的概念1.2 AVL树节点的定义1.3 AVL树的旋转1.3.1 右旋(右单旋)1.3.2 左旋(左单旋)1.3.3 左右双旋(先左单旋再右单旋)1.3.4 右左双旋(先右单旋再左单旋) 1.4 AVL树的插…

进程 的初识

程序和进程有什么区别 程序是静态的概念,gcc xxx.c -o pro 磁盘中生成的文件,叫做程序。进程是程序的一次运行活动,通俗点的意思就是程序跑起来了,系统中就多了一个进程。 如何查看系统中有哪些进程 使用 ps 指令(完整…

❤ vue组件的生命周期

❤ vue组件的生命周期 介绍 在vue组件中,生命周期指的是从组件创建开始,到组件销毁,所经历的整个过程;在这个过程中的一些不同的阶段,vue会调用指定的一些组件方法。基本生命周期函数有下面几个阶段:创建…

Python中的dataclass:简化数据类的创建

Python中的dataclass是一个装饰器,用于自动添加一些常见的方法,如构造函数、__repr__、__eq__等。它简化了创建数据类的过程,减少了样板代码,提高了代码的可读性和可维护性。有点类似java里面的Java Bean。 让我们看一个简单的例子…

将.doc文档的默认打开方式从WPS修改为word office打开方式的具体方法(以win 10 操作系统为例)

将.doc文档的默认打开方式从WPS修改为word office打开方式的具体方法(以win 10 操作系统为例) 随着近几年WPS软件的不断完善和丰富,在某些方面取得了具有特色的优势。在平时编辑.doc文档时候也常常用到wps软件,不过WPS文献也存在…

【分布式技术专题】RocketMQ延迟消息实现原理和源码分析

痛点背景 业务场景 假设有这么一个需求,用户下单后如果30分钟未支付,则该订单需要被关闭。你会怎么做? 之前方案 最简单的做法,可以服务端启动个定时器,隔个几秒扫描数据库中待支付的订单,如果(当前时间-订…

EasyPoi导出 导入(带校验)简单示例 EasyExcel

官方文档 : http://doc.wupaas.com/docs/easypoi pom的引入: <!-- easyPoi--><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>4.0.0</version></dep…

分布式协调组件Zookeeper

Zookeeper介绍 什么是Zookeeper ZooKeeper 是⼀种分布式协调组件&#xff0c;用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper 通过其简单的架构和 API 解决了这个问题。ZooKeeper 允许开发人员专注于核心应用程序逻辑&#xff0c;而不必担心应用…

【Linux】多线程——线程引入 | 线程控制

文章目录 一、Linux多线程1. 线程概念2. 线程创建3. 线程和进程4. 线程的优缺点 二、线程控制1. 线程创建2. 线程终止3. 线程等待4. 线程分离5. 线程局部存储 三、线程封装 一、Linux多线程 一级页表和二级页表都是key/val模型&#xff0c;一级页表的key是第一份的10个比特位&a…

(统计学习方法|李航)第一章统计学习方法概论——四五六节模型评估与模型选择,正则化与交叉验证,泛化能力

一&#xff0c;模型评估与模型选择 1.训练误差与测试误差 假如我们有100个数据。80条记录给训练集&#xff0c;10条记录给测试集&#xff0c;10条记录给验证集 先在训练集中训练模型&#xff0c; 再在验证集上测试看哪种模型更拟合 最后用测试集算出成绩 表示决策函数 模型…