架构视图之4+1

作者:动力节点
链接:https://www.zhihu.com/question/19841397/answer/778335946
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 

经典的当属“4+1”视图模型

  1. 逻辑视图:
    一般针对客户、用户、业务人员、开发组织,主要从系统的功能元素、以及它们的接口、职责、交互维度入手。
    主要元素包括系统、子系统、功能模块、子功能模块、接口等。
  2. 开发视图:
    一般针对开发和测试相关人员,主要描述系统如何开发实现。
    主要元素包括描述系统的分层、分区、框架、系统通用服务、业务通用服务、类和接口、系统平台和大基础框架。用途是指导开发设计和实现。
  3. 物理视图:

    一般针对系统运维人员、集成人员,它是系统逻辑组件到物理节点的映射,节点与节点间的物理网络配置等,主要关注非功能性需求,诸如性能(吞吐量)、可伸缩性、可靠性,可用性等,从而得出相关的物理部署结构图。
  4. 场景视图
  5. 过程视图

 

4+1视图提出后,业界也有其它的观点提出,诸如:

  • SEI(模块视图、组建和连接件视图、分配视图)
  • 西门子4种视图(概念、模块、代码、执行视图)
  • RM-ODP(企业视图、信息视图、计算视图、工程师图)

 

架构视图之4+1_第1张图片

 

Q3:架构分为哪些类型?

架构可细分为业务架构、应用架构、 部署架构、技术架构、代码架构。

 

我们常见的架构基本都是业务架构(忽悠客户和领导的),只有项目团队实际开发才会涉及到代码架构,应用和部署架构分别适用于产品经理和实施交付工程师。

 

好了好了,架构我知道了,那么架构图怎么画呢?

容我刷一波架构图先~

 

 

架构视图之4+1_第2张图片

 

 

  • 阿里云机器学习PAI的架构:

架构视图之4+1_第3张图片

 

 

  • eBay的架构:

架构视图之4+1_第4张图片

 

架构视图之4+1_第5张图片

 

 

  • 网易云的架构:

架构视图之4+1_第6张图片

 

 

  • 微信的架构:

架构视图之4+1_第7张图片

 

 

  • 美团的架构:

架构视图之4+1_第8张图片

 

  • 微博的架构:

架构视图之4+1_第9张图片

是不是又有点晕,在此就不一一赘述了......内行看个门道,外行听我讲个热闹~

架构视图之4+1_第10张图片

首先,我们了解一下架构的演进,大致如下:

  • 初始阶段:LAMP,部署在一台服务器
  • 应用服务器和数据服务器分离
  • 使用缓存改善性能
  • 使用集群改善并发
  • 数据库地读写分离
  • 使用反向代理和cdn加速
  • 使用分布式文件和分布式数据库
  • 业务拆分
  • 分布式服务

 

其次,我们了解一下架构的模式

  • 横向分层:应用层,服务层,数据层——这三块基本上是架构图必备的,也是业务架构图常见的结构。

 

架构视图之4+1_第11张图片

 

  • 纵向分割:拆分功能和服务,各个模块单元要求高内聚、低耦合。

 

架构视图之4+1_第12张图片

 

最后,架构图除了横向分层(应用、服务、数据)和纵向模块分割之外,还必须体现架构的5个核心要素

  • 高性能:性能测试+各种优化
  • 可用性:数据备份+灰度发布+监控报警
  • 伸缩性:建集群+负载均衡
  • 可扩展性:事件驱动架构+分布式服务
  • 安全性:SQL注入+SSL+Web防火墙漏洞防护

 

架构视图之4+1_第13张图片

 

 

Q4:架构师是干啥的?

  • 架构师的定义

百度百科的定义:

系统架构师是一个既需要掌控整体,又需要洞悉局部瓶颈,并依据具体的业务场景,给出解决方案的团队领导任务。

 

  • 架构师的职责

架构师的职责涉及到软件开发的各个过程:

  • 需求阶段:
    软件架构师主要负责理解和管理非功能性系统需求,比如软件的可维护性、性能、复用性、可靠性、有效性和 可测试性等等,此外,架构师还要经常审查和客户及市场人员所提出的需求,确认开发 团队所提出的设计
  • 设计阶段:
    架构师负责对整个系统架构设计,制定开发规范、开发计划,指导整个开发团队完成这个计划
  • 开发阶段:
    架构师则成为详细设计者和代码编写者的顾问,并且经常性地要举行一些技术研讨会、技术培训班等
  • 测试和交付阶段:
    协调做好相关测试和部署
  • 维护阶段:
    软件架构师就开始为下一版本的产品是否应该增加新的功能模块进行决策

 

  • 架构师的分类

 

中小公司很多架构师都是全能的,通常公司规模和体系越大,分工会越细。

 

  • 解决方案架构师:
    与客户探讨业务需求,将业务、市场,与技术、产品结合起来,为客户提供解决他们需求的方案。比如阿里云针对大客户都有解决方案架构师。

 

  • 系统架构师:
    也称应用架构师。最终确认和评估系统需求,并将业务转换为技术,为研发人员制订核心框架与技术规范,为研发工作澄清技术细节并扫清技术障碍。服务器负载,可靠性,伸缩,扩展,数据库切分,缓存应用。

 

  • 平台架构师:
    包括两个平台,一个是系统平台,也就是负责搭建多个系统整合的系统应用平台;另外一个是基础平台,是专门负责搭建基础技术平台。

 

  • 业务架构师:
    业务架构其实已经开始脱离技术层面了,但是它要求架构师有跨越多系统的大局观,去整合和组织不同系统的技术平台与交互模式。
    其实这个职位的未来也就是CIO了,主要内容:理解业务,梳理模型,设计模式,接口,数据交互。

 

架构视图之4+1_第14张图片

  • 网络架构师:
    一个优秀的网络架构师必须有足够的网络技术基底,并且它的关注点也是系统的基础架构。
    比如说如果搭建并优化集群环境,如果构建基于云计算的系统应用与部署等等。它对于像淘宝、腾讯这样的互联网公司是极其重要的。

 

  • 移动架构师:
    移动架构师既要整体和全局考虑整个前后端的软件系统架构,又要重点深入移动客户端的架构设计的方方面面,既要有跨平台思维,又要拿捏好原生和混合开发的尺度,另外移动应用的特点,导致移动架构师必须要比传统系统架构师更加注重非功能性的质量属性,如下图所示:

 

 

架构视图之4+1_第15张图片

摘自《程序员必读之软件架构》

 

  • 前端架构师:
    这里的前端特指网站开发中的前端,主要考虑前端呈现层的设计(HTML/CSS/JS/AJAX/RIA/…),跨浏览器设计等等。

 

  • 大数据架构师:
    比如某些公司做大数据处理,需要理解业务,并通过大数据相关技术来实现。

 

 

Q5:架构师对能力有什么要求?

  • 架构师的知识基础

这里有一个专业技能表Checklist,大家可以对照下,哪里不会补哪里。

 

1、基础知识

  • 计算基础
    • 计算机原理
    • 数据结构和常用算法
    • 操作系统:进程,线程,内存
  • 网络
    • TCP/IP协议
    • TCP/IP网络模型
    • HTTP协议原理
    • 网络IO模型
    • Socket网络编程

 

2、编程语言

  • java
    • java基础类库、异常
    • JVM原理和调优《深入理解java虚拟机》《java性能优化权威指南》
    • 框架
    • 并发《java并发编程实战》
    • 多线程
  • php
    • php基础
    • 常用框架
    • 异常处理机制
    • 深入php内核

 

3、程序设计

  • 高质量编码能力:
    • 重用性
    • 低耦合
    • 可扩展性
    • 可维护性
    • 高性能
    • 安全性高
  • 面向对象编程:
    • MVC编程思想
    • 掌握建模语言和建模工具:UML
    • 面向对象思想
  • 设计模式:
    • 基础设计模式和设计原则:单一职责、开放封闭原则等.
    • 常用设计模式
    • 重构

 

4、研发能力

  • 瀑布模型:需求->需求分析->设计->开发->测试->上线->运维/运营
  • 调试和解决问题能力
  • 敏捷思想:快速迭代,任务细分,wiki更新

 

5、安全知识

  • web安全:xss,sql注入,ddos攻击
  • 安全维度:漏洞,风险,事件
  • https协议
  • 安全书:
    《黑客攻防技术宝典(Web实战篇)》

《白帽子讲Web安全》

《Web前端黑客技术揭秘》

《Web之困》

《SQL注入攻击与防御》

 

6、Linux知识

 

7、运维能力

  • 监控
  • 持续集成:jenkins
  • 自动化运维工具:ansible,saltstack
  • 虚拟化:kvm,vm
  • 容器docker
  • 云技术openstack
  • DevOps

 

8、数据库

  • 基础理论
  • 数据库设计的三大范式
  • MySQL原理
  • MySQL优化
  • mysql引擎:
    • InnoDB
    • MyISAM
  • NoSQL:redis/mongo

 

9、常用应用软件

  • Web server:
    • Nginx
    • OpenResty
    • Apache Httpd
    • Tomcat:架构原理,调优方案
    • Jetty
  • 消息队列:
    • RabbitMQ
    • RocketMQ
    • ActiveMQ
    • Kafka
    • Redis 消息推送
    • ZeroMQ
  • RPC:
    • Dubbo
    • Thrift
    • gRPC
  • 数据库中间件:
    • DBproxy
    • Haproxy
  • 软件负载均衡:
    • 几种负载均衡算法: 轮询、权重、负载、最少连接、QoS
    • DNS负载均衡
    • Nginx
    • LVS+Keepalived实现负载均衡
    • HAProxy
    • Haproxy+Keepalived+MySQL实现读均衡负载

 

9、性能

  • 性能优化方法论
  • 容量评估
  • CDN 网络
  • 连接池
  • 性能调优

 

10、大数据

  • Hadoop
  • Storm
  • Kafka Stream

 

11、工程化

  • maven
  • git
  • jenkins

架构视图之4+1_第16张图片

还是那句话,不要慌,功夫不是一天练成的。多注意平时积累,即可水到渠成。

我们继续讲~

 

  • 架构师的能力要求

架构视图之4+1_第17张图片

 

  • 简单来说,架构师需要具备的能力有:

技术能力、抽象建模能力、系统分析与设计、编程的四门功课(需求分析、设计实现、测试验证、调试纠错)

 

  • 具体来说,分如下几个方面:

1、了解相关领域的技术知识(广阔的知识领域)

在你想要成为架构师的相关技术领域,必须具备扎实的专业知识和过人的本领。

 

2、超强的分析、设计能力(多方位的思考分析能力)

不管怎样,具备很强的分析和设计能力都是必杀技。另外就是能够运用设计模式方式解决各种各样的问题。

 

3、编码与验证性测试(POC)

  • 熟悉该组织整个技术栈,并能使用各层的技术熟练地编码。
  • 能快速实现验证性测试。

 

4、架构设计的实力

  • 能为原始需求提供架构方案。
  • 考虑周全:工具和框架的采用、安全性、性能和扩展性、依赖关系、集成、效益。
  • 熟悉软件开发生命周期(SDLC):需求、分析、设计、测试、打包、部署。

 

5、建模语言或工具

能使用不同的建模语言或工具,向其他架构师、开发者、项目经理等人,阐述架构。

 

6、架构框架

  • 能证明架构的可行性,包括其业务、应用、数据、基础设置方面。
  • 了解TOGAF和ZACHMAN框架。

 

7、沟通能力与自我表达

能与开发人员、测试人员、商业分析师、上级经理沟通无阻,无论在口头上和书面上。

 

8、布道(有一定的魄力和感染力)

  • 能讲解该行业的市场、技术知识。
  • 能为全队提供培训课程。

 

9、销售、售前

能参与售前工作(尤其对于软件服务业):制定技术方案、使用各种预算工具估计方案的规模和成本、与销售对象互动。

 

10、演讲技巧

优秀的演讲技巧,有助于以下活动:华丽的计划书和技术文档、PPT演讲、布道。

架构视图之4+1_第18张图片

 

你可能感兴趣的:(架构)