如何画出一张合格的技术架构图?
…摘要: 技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也体现在优秀工程师在工作效率提升、产品性能优化和用户体验改善等经验方面的分享,以提高我们的专业能力。
阿里妹导读:技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也体现在优秀工程师在工作效率提升、产品性能优化和用户体验改善等经验方面的分享,以提高我们的专业能力。
接下来,阿里巴巴技术专家三画,将分享自己和团队在画好架构图方面的理念和经验,希望对你有所帮助。
当我们想用一张或几张图来描述我们的系统时,是不是经常遇到以下情况:
- 对着画布无从下手、删了又来?
- 如何用一张图描述我的系统,并且让产品、运营、开发都能看明白?
- 画了一半的图还不清楚受众是谁?
- 画出来的图到底是产品图功能图还是技术图又或是大杂烩?
- 图上的框框有点少是不是要找点儿框框加进来?
- 布局怎么画都不满意……
如果有同样的困惑,本文将介绍一种画图的方法论,来让架构图更清晰。
先厘清一些基础概念
1、什么是架构?
架构就是对系统中的实体以及实体之间的关系所进行的抽象描述,是一系列的决策。
架构是结构和愿景。
系统架构是概念的体现,是对物/信息的功能与形式元素之间的对应情况所做的分配,是对元素之间的关系以及元素同周边环境之间的关系所做的定义。
做好架构是个复杂的任务,也是个很大的话题,本篇就不做深入了。有了架构之后,就需要让干系人理解、遵循相关决策。
2、什么是架构图?
系统架构图是为了抽象地表示软件系统的整体轮廓和各个组件之间的相互关系和约束边界,以及软件系统的物理部署和软件系统的演进方向的整体视图。
3、架构图的作用
一图胜千言。要让干系人理解、遵循架构决策,就需要把架构信息传递出去。架构图就是一个很好的载体。那么,画架构图是为了:
- 解决沟通障碍
- 达成共识
- 减少歧义
4、架构图分类
搜集了很多资料,分类有很多,有一种比较流行的是4+1视图,分别为场景视图、逻辑视图、物理视图、处理流程视图和开发视图。
场景视图
场景视图用于描述系统的参与者与功能用例间的关系,反映系统的最终需求和交互设计,通常由用例图表示。
逻辑视图
逻辑视图用于描述系统软件功能拆解后的组件关系,组件约束和边界,反映系统整体组成与系统如何构建的过程,通常由UML的组件图和类图来表示。
物理视图
物理视图用于描述系统软件到物理硬件的映射关系,反映出系统的组件是如何部署到一组可计算机器节点上,用于指导软件系统的部署实施过程。
处理流程视图
处理流程视图用于描述系统软件组件之间的通信时序,数据的输入输出,反映系统的功能流程与数据流程,通常由时序图和流程图表示。
开发视图
开发视图用于描述系统的模块划分和组成,以及细化到内部包的组成设计,服务于开发人员,反映系统开发实施过程。
以上 5
Redis基础及深入系列
Redis基础系列-0x001:安装与连接测试
Redis基础系列-0x002:KEY相关操作
Redis基础系列-0x003:String
Redis基础系列-0x004:Hash
Redis基础系列-0x005:List
Redis基础系列-0x006:Set
Redis基础系列-0x007:Sorted Set
Redis基础系列-0x008:发布订阅模式
Redis基础系列-0x009:事务
Redis深入系列-0x010:redis-cli--Redis命令行接口(上)
Redis深入系列-0x011:redis-cli--Redis命令行接口(中)
Redis深入系列-0x012:redis-cli--Redis命令行接口(下)
Redis深入系列-0x013:redis配置
Redis深入系列-0x014:Redis数据类型和概念介绍(上)
Redis深入系列-0x015:Redis数据类型和概念介绍(下)
Redis深入系列-0x017:Redis同步
Redis深入系列-0x018:Redis同步实践
Redis深入系列-0x019:Redis 持久化
…
两步验证 双因素认证(2FA)教程
所谓认证(authentication)就是确认用户的身份,是网站登录必不可少的步骤。
密码是最常见的认证方法,但是不安全,容易泄露和冒充。
…
推荐一个计算机科学速成课(视频)
课程共约7小时。1天可以看完。推荐
…原通过PHP单例模式与长连接减少MySql连接数
此单例代码有问题,请参考下面的
在Mysql驱动的PHP网站中,MySql连接的一般都是利用脚本的结束来进行释放,在一些分层写的php网站中,若一个页面含有多个数据访问类,由于每个数据访问类都会有数据库的连接,导致这一个页面在脚本结束前会有多个数据库连接,在一些大型的页面连接可能多至数十上百,为此需要进行必要的控制,对于解释性的PHP语言,脚本是顺序执行的,也就是说数据库连接的利用同时只有一个,根据这个特点,可以用单例模式来进行改造。
<?php class ConnecToDB { private static $instance; private function _constuct() { } //私有构造函数,防止外界构造新对象, public static function GetConnec() { if (!self::$instance instanceof self) { self::$instance =new self;//若当前对象实例不存在 } $temp=self::$instance; //获取当前单例 return $temp::Con() ; //调用对象私有方法连接 数据库 } //连接到数据库 private static…
PHP环境变量如何工作
浏览器原生的图片懒加载
Laravel中的不安全SQL函数
我最近了解到并非Laravel中的所有查询构建器功能都是“安全的”。这意味着不应将用户输入直接传递给它,因为它可能会将您的应用程序暴露给SQL注入漏洞。
过去几天很明显,社区对这些不安全的功能知之甚少。许多开发人员和我一样认为,Laravel查询构建器完全阻止了SQL注入攻击。
这篇博文旨在提高人们对什么是安全的,哪些不安全的意识。…
Linux 常用内核网络参数与相关问题处理
本文总结了常见的 Linux 内核参数及相关问题。修改内核参数前,您需要:
- 从实际需要出发,最好有相关数据的支撑,若您的业务没有受到影响不建议调整内核参数。
- 了解每一个参数的具体作用,并且同类型或版本操作系统下内核参数可能有所不同。
- 备份 ECS 实例中的重要数据。参阅文档创建快照。
Linux 常用内核网络参数
参数 | 描述 |
---|---|
net.core.rmem_default | 默认的 TCP 数据接收窗口大小(字节)。 |
net.core.rmem_max | 最大的 TCP 数据接收窗口(字节)。 |
net.core.wmem_default | 默认的 TCP 数据发送窗口大小(字节)。 |
net.core.wmem_max | 最大的 TCP 数据发送窗口(字节)。 |
net.core.netdev_max_backlog | 在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目。 |
net.core.somaxconn | 定义了系统中每一个端口最大的监听队列的长度,这是个全局的参数。 |
net.core.optmem_max | 表示每个套接字所允许的最大缓冲区的大小。 |
net.ipv4.tcp_mem | 确定 TCP 栈应该如何反映内存使用,每个值的单位都是内存页(通常是 |
近期评论