阅读量: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 (基础设施)
微服务拆分方法:
- 基于业务逻辑拆分
- 基于可扩展性拆分(稳定服务和变动服务)
- 基于可靠性拆分(识别可靠性要求高的核心服务)
- 基于性能拆分(如电商的秒杀、抢购)
微服务基础设施
- 自动化测试
- 自动化部署
- 配置中心
- 接口框架
- API网关
- 服务发现
6.1 自理式(Dubbo)
6.2 代理式 - 服务路由
- 服务容错
- 服务监控
10.服务跟踪 - 服务安全
微内核架构
组件
- 插件模块
- 核心系统
应用实例
- OSGi架构
- Elipse采用的Equinox,Spring的Spring DM
- 有一个MANIFEST.MF文件
- 规则引擎架构
- JBoss Drools
技术演进的动力——业务发展
企业业务分类:
- 产品类业务
- 服务类业务
互联网业务发展时期
- 初创期:新、快
- 发展期
2.1 堆功能期
2.2 优化期
2.3 架构期——拆(功能、数据库、服务器) - 竞争期
3.1 平台化(解决“重复造轮子”问题)
3.3 服务化(解决“系统交互复杂”问题) - 成熟期——求精
架构重构内功心法
有的放矢
- 识别真正需要架构重构来解决的问题,集中力量快速解决,而不是通过架构重构解决所有问题
- 架构重构 or 系统优化?考虑一个问题:从0开始设计当前系统,新老系统是否类似?
合纵连横
沟通协调时,将技术语言通俗化。以事实说话,用数据说话。换位思考、合作双赢、关注长期
运筹帷幄
重构的做法:分段实施
将要解决的问题根据优先级、重要性、实施难度等划分为不同的阶段,每个阶段聚集于一个整体的目标,集中精力和资源解决一类问题
分段实施的策略
- 优先级排序
- 问题分类
- 先易后难
- 循序渐进
开源项目
不要重复造轮子,但要找到合适的轮子
- 选
1.1 满足业务
1.2 成熟度
1.3 运维能力 - 用
2.1 深入研究,仔细测试
2.2 小心应用,灰度发布
2.3 做好应急,以防万一(注意备份!) - 改
3.1 保持纯洁,加以包装
3.2 发明你要的轮子