架构入门要点

avatar
作者
猴君
阅读量:0

几个架构相关概念

系统、子系统:有关联的个体,通过一定规划,完成某项工作。
模块、组件:逻辑角度->模块,物理角度->组件
框架、架构:框架->规范,架构->结构

架构设计的目的

架构设计的目的:解决软件系统的复杂性

高性能

  • 横向扩展:单机
  • 纵向扩展:集群

高可用

核心:冗余

  • 计算高可用
  • 存储高可用
  • 高可用状态决策:
    • 独裁式
    • 协商式
    • 民主式

可扩展性

举例:装饰者模式(设计模式)、规则引擎

  • 预测变化
  • 封装变化
    • 变化层/稳定层
    • 抽象层/实现层

成本

安全

规模

架构设计的原则

  • 合适优于业界领先
  • 简单优于复杂
  • 演化优于一步到位

架构设计流程

1. 识别复杂度

2. 设计备选方案

  • 备选方案
    • 备选方案数量 3~5个
    • 备选方案差异比较明显
    • 备选方案的计数不要局限于已经熟悉的技术
  • 合适>最优
  • 备选方案不用写得太详细

3. 评估和选择备选方案

360°环评表:性能、复杂度、硬件成本、可运维性、可靠性、人力投入

4. 详细方案设计

可扩展架构:拆!

范围上:流程>服务>功能

  • 面向流程拆:分层架构
  • 面向服务拆:SOA、微服务架构
  • 面向功能拆:微内核架构

不同的拆分方式决定了不同的扩展方式

分层架构

  • C/S,B/S架构
  • MVC、MVP架构
  • 逻辑分层架构
  • 各层之间边界清晰明显
  • 隔离关注点(separation of concerns)-》支持扩展

SOA架构

  • 服务
  • ESB(enterprise service bus)
  • 松耦合

微服务

与SOA是不同的架构设计理念,只是在“服务”上有交集
精华:

  • small
  • lightweight
  • automated (基础设施)

微服务拆分方法:

  • 基于业务逻辑拆分
  • 基于可扩展性拆分(稳定服务和变动服务)
  • 基于可靠性拆分(识别可靠性要求高的核心服务)
  • 基于性能拆分(如电商的秒杀、抢购)

微服务基础设施

  1. 自动化测试
  2. 自动化部署
  3. 配置中心
  4. 接口框架
  5. API网关
  6. 服务发现
    6.1 自理式(Dubbo)
    6.2 代理式
  7. 服务路由
  8. 服务容错
  9. 服务监控
    10.服务跟踪
  10. 服务安全

微内核架构

组件

  • 插件模块
  • 核心系统

应用实例

  • OSGi架构
    • Elipse采用的Equinox,Spring的Spring DM
    • 有一个MANIFEST.MF文件
  • 规则引擎架构
    • JBoss Drools

技术演进的动力——业务发展

企业业务分类:

  • 产品类业务
  • 服务类业务

互联网业务发展时期

  1. 初创期:新、快
  2. 发展期
    2.1 堆功能期
    2.2 优化期
    2.3 架构期——拆(功能、数据库、服务器)
  3. 竞争期
    3.1 平台化(解决“重复造轮子”问题)
    3.3 服务化(解决“系统交互复杂”问题)
  4. 成熟期——求精

架构重构内功心法

有的放矢

  • 识别真正需要架构重构来解决的问题,集中力量快速解决,而不是通过架构重构解决所有问题
  • 架构重构 or 系统优化?考虑一个问题:从0开始设计当前系统,新老系统是否类似?

合纵连横

沟通协调时,将技术语言通俗化。以事实说话,用数据说话。换位思考、合作双赢、关注长期

运筹帷幄

重构的做法:分段实施

将要解决的问题根据优先级、重要性、实施难度等划分为不同的阶段,每个阶段聚集于一个整体的目标,集中精力和资源解决一类问题

分段实施的策略
  1. 优先级排序
  2. 问题分类
  3. 先易后难
  4. 循序渐进

开源项目

不要重复造轮子,但要找到合适的轮子


  1. 1.1 满足业务
    1.2 成熟度
    1.3 运维能力

  2. 2.1 深入研究,仔细测试
    2.2 小心应用,灰度发布
    2.3 做好应急,以防万一(注意备份!)

  3. 3.1 保持纯洁,加以包装
    3.2 发明你要的轮子

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!