什么是架构?

架构是系统的结构轮廓。引出问题:

  • 系统都有哪些层?
  • 每层的职责是什么?
  • 层与层之间的关系是什么?

角色:架构师,设计师,开发者



架构师:


  • 理解现有的技术和工具
  • 为支撑业务寻找技术方案
  • 提供一个中心视野
  • 识别技术组合的优点和弱点

设计师:


  • 某方面的技术专家
  • 分析需求和代码
  • 面向对象设计和非面向对象设计
  • 设计模式

开发者:


  • 熟悉技术和工具
  • 开发语言

架构模式




tier是物理分层,layer是逻辑分层。


一个系统可以划分为很多tier。


  • 单tier,远程桌面
  • 两tier,客户端,数据库
  • 三tier,web,应用,数据库
  • 四tier,web,缓存,应用,数据库

Layer


  • 按功能将应用程序分层,如逻辑上的组件
  • 层数不限,不强制用多层,刻意多层只会降低效率
  • Layer在tier里,每tier有一或多layer

如何分Layer


  • 利用抽象,将通用的功能抽象出来,将需要改变的独立出来。
  • 严格和松散分Layer层,松散的分层很难交换两个Layer,紧密耦合

设计Layer


  • 耦合,紧耦合意味着改变一layer会影响到其依赖layer,反之则反之
  • 内聚,高内聚意味着一个layer把一件事情做好。小而专注的layer容易被集成到复杂的组件中。低内聚则意味着一个layer做很多事情。

Google的Layer


  1. Sawzall 是用来处理数据的脚本语言
  2. MapReduce是一套简单的风格数据处理API
  3. BigTable提供灵活的分布式存储API
  4. GFS是一个分布式文件系统

Tier与Layer的映射关系



逻辑分层:




net5 架构图 简述net的架构_API



物理分层:



net5 架构图 简述net的架构_API_02




分布式系统的挑战


  • 潜在因素,远程通信速度慢,序列化开销大
  • 局部故障,远程组件可能随时出现故障,必须能优雅地恢复
  • 并发,高效地处理多个连接,异步调用

通信方式


  • 同步,Remoting,WebService
  • 异步,MSMQ,同步并发
  • 协议,TCP,HTTP
  • 序列化格式,XML(可互操作,速度慢),二进制(不可互操作,速度快)

扩展性


  • 灵活性架构,如果负载(包括web请求,数据量,大量计算)增加,可迅速加入新的资源(硬盘,CPU,内存,带宽)
  • 设计挑战,架构模式,程序设计,成本,工期

稳定性


  • 任何环节都可能出故障,软件,硬件,网络,数据中心
  • 发现问题,容错,抢救,恢复

灵活性和重用性


  • 软件需求改变
  • 设计模式升级
  • 可重用的开发(类,组件,服务)
  • Layer的重用(抽象API,扩展性)

安全性


  • 控制对服务的访问(身份认证,代码访问的安全)
  • 保护信息(加密,读写权限)

性能


  • 80、20原则,80%的时间解决20%的代码上,用工具发现瓶颈
  • 好算法带来高性能
  • IO瓶颈,网络瓶颈,CPU常常不是瓶颈