蔡学镛���
稜鏡軟件架构法
PRISM: A Methodology of Software Architecture Design
摘要版
产品创新需要技术⽀支撑
技术
创新产品
企业竞争⼒力
促
进
⽀支
撑
唯有持续推出创新的产品,
才能维持企业竞争⼒力
滞后的技术,⽆无法⽀支撑产品
的创新
但…
1. 【产品重构】可增加既有产品的竞争⼒力
2. 【内部平台】可加快新产品推出速度
3. 【云平台】弹性灵活的运算能⼒力
4. 【数据平台】可充分发挥数据的价值
5. 【开放平台】可⿎鼓励与外部企业合作
6. 【创新孵化】孵化有业务创意的⼩小团队
产品
重构
业务
平台
数据
平台
开放
平台
创新
孵化
六阶段加强技术建设,以成为产品创新的后盾 …
云
平台
平台化
?
重构
重构前,系统
内部错综复杂,
难以修改
重构后,系统
内部模块化。
可以因应后续
业务需求
产品
重构
业务
平台
数据
平台
开放
平台
创新
孵化
云
平台
平台化
产品
重构
业务
平台
数据
平台
开放
平台
创新
孵化
云
平台
平台化
平台
产品
产品
数据库
平台
产品
产品
数据库
产品
重构
业务
平台
数据
平台
开放
平台
创新
孵化
云
平台
平台化
完
整
数
据
平
台
产品
重构
业务
平台
数据
平台
开放
平台
创新
孵化
云
平台
平台化
平台
产品
产品
数据库
产品
重构
业务
平台
数据
平台
开放
平台
创新
孵化
云
平台
平台化
完
整
数
据
平
台
平台
产品
产品
数据库
外部
产品
产品
重构
业务
平台
数据
平台
开放
平台
创新
孵化
云
平台
平台化
完
整
数
据
平
台
平台
孵化
产品
产品
数据库
外部
产品
⾸首席架构师的架构
能⼒力
依靠的是 …
想要做到 …
产品
重构
业务
平台
数据
平台
开放
平台
创新
孵化
云
平台
平台化
代理
核⼼心
服务
应⽤用
界⾯面
⽤用户
接出
接⼊入
数据
框架
七
层
架
构
、
用
色
规
范
、
依
赖
关
系
黑色是外部系统(包括人)
红橙黄绿蓝靛紫
示抽象程度
业
务
资
源
领
域
交
互
箭头表示依赖,都是由上往下
这条线就是开放平台
服务和代理允许水平依赖
服务和代理允许水平依赖
架构的流程
业务
技术
数据
⺴⽹网络
⼈人员
领域
(Step 1)業務建模
商业公司应该是业务
驱动
项⺫⽬目⼀一开始由业务架
构师设计业务架构图
业务架构图描述各种
业务系统之间的关系
以及与外部系统之间
的关系
每個業務系統应该详
细描述各个业务系统
的业务功能
每个系统都可以产⽣生
⼀一个以上的⼦子系统
业务
技术
数据
⺴⽹网络
⼈人员
领域
画一个大框。把黑色的外
部角色放到边界外:
• 用户角色放上面
• 接入系统角色放两侧
• 接出系统角色放下面
思考跟这些外部角色相关
的内部系统有哪些,归纳
出初步的边界关系
绘制业务架构图(1)边界关系
思考这些内部系统是否有
调用依赖,为这些依赖画
上箭头:
• 用户角色放上面
• 接入系统角色放两侧
• 接出系统角色(与数据
库)放下面
思考跟这些外部角色相关
的内部系统有哪些,归纳
出初步的边界关系
绘制业务架构图(2)内部关系
思考这些内部系统是否有
调用依赖,为这些依赖画
上箭头:
• 用户角色放上面
• 接入系统角色放两侧
• 接出系统角色放下面
思考跟这些外部角色相关
的内部系统有哪些,归纳
出初步的边界关系
用户沿著箭头,会走出一
道彩虹
绘制业务架构图(3)内部分解
最后得到的结果会把业务
系统分为顶层、上层、下
层、底层。依序摆放。
可以双色表示
绘制业务架构图(4)最终结果
(Step2)领域建模
先做业务建模,再做领域
建模,可以避免「
瘫
痪症」。直接做领域建模
容易导致分析瘫痪。
业务
技术
数据
⺴⽹网络
⼈人员
领域
(Step 3)技术建模
业务架构交给技术架
构师,进⾏行抽象架构
的规划。
技术架构师设计对于
不够清楚甚⾄至技术实
现有难度的部分,与
业务架构师进⾏行反复
研讨
每个⼦子系统都可以拆
分出⼀一个以上的模块
最后产出可实现的模
块详细规格
业务
技术
数据
⺴⽹网络
⼈人员
领域
边界模型
内部模型
代码模型
嵌
套
必要的话,继续分层。
每层内找出模块,模
块的特点是「内聚力
强」。
定义每个模块的接口,
找出模块间的接口依
赖。
绘制模块架构图:接⼝口与调⽤用
接⼝口规范的定义流程
从上往下,详细定义每
个接⼝口的参数与返回值
【接出系统】的接⼝口是
外部定义的,我们只能
接受其定义。
代理层刚好夹在两层之
间,担任转接的任务
⼀一个⽤用户使⽤用⼀一到多个界⾯面
⼀一个应⽤用衍⽣生出⼀一到多个界⾯面
⼀一个框架衍⽣生出⼀一到多个应⽤用
⼀一个框架调⽤用⼀一到多个服务
⼀一个服务调⽤用⼀一到多个核⼼心
⼀一个核⼼心调⽤用⼀一到多个代理
⼀一个代理调⽤用⼀一到多个数据或外部
(Step 4)数据建模
数据架构师从模块的
详细规格可以得知需
要存储的数据有哪些
数据架构师要特别关
注每个数据种类的属
性:
• 增删改查频率
• ⼀一致性要求
• 保密性要求
• 重要性
• 权限
数据架构师任务:
• 数据库技术选型
• 数据库设计
业务
技术
数据
⺴⽹网络
⼈人员
领域
数据
代理
核⼼心
服务
框架
应⽤用
界⾯面
多数人提到大数据
时,都是指来自这
里(数据库)的数
据。而系统运行过
程中的许多有价值
的数据,都被丢弃
忽略了。
比方说:当多数用
户到了某页面后,
就不往下进行,可
能页面设计有问
,
只要改善页面用户
体验,业绩就会大
幅提升。但只通过
数据库,无法分析
出这点
数据
代理
核⼼心
服务
框架
应⽤用
界⾯面
七
层
架
构
与
五
个
事
件
钩
子
事件
钩⼦子
事件
钩⼦子
事件
钩⼦子
事件
钩⼦子
事件
钩⼦子
业务系统的层与层之间,都可设
置事件钩子,避免系统改造。
事件钩子可以将事件原地处理,
也可将事件送到其他服务器处理
事件钩子同时具备日志的效果,
关键事件可以送到统一日志中心
注意:代理层的事件钩子是
设置在代理层下方,而不是
上方
外部
外部
事
件
信
息
流
向
与
数
据
分
析
系
统
商业智能系统
业务活动监控系统
⽤用户体验分析系统
⺴⽹网络攻击分析系统
商业⻛风险控制系统
数据备份系统
事件
钩⼦子
事件
钩⼦子
事件
钩⼦子
事件
钩⼦子
事件
钩⼦子
数据
⼤大
数
据
分
析
从代理层的接口,归纳:
• 数据种类
• 数据关系
• 查询关系
从更上层的模块以及业务需求,归纳出:
• 数据的属性
代理层+数据层
代理层提供访问接⼝口,内部将 数据
库驱动程序与 SQL 等数据库语句隐
藏起来
(Step 5)⺴⽹网络建模
⺴⽹网络架构师根据前⾯面
所有分析与设计的结
果,进⾏行⺴⽹网络规划
⺴⽹网络架构必须考虑系
统的⾼高效率与⾼高可⽤用
业务
技术
数据
⺴⽹网络
⼈人员
领域
Lang Runtime
容器
模块
容器
程序库
模块
Guest OS
Hypervisor
硬件
Server(通⽤用层)
每
⼀一
点
都
有
监
控
与
配
置
的
需
求
引擎
规则
代理
核⼼心
服务
应⽤用
界⾯面
⽤用户
接出
应
⽤用
优
化
资
源
优
化
接⼊入
平
台
优
化
前
端
优
化
数据
框架
负载均衡服务器
软负载均衡
静态资源服务器
Session服务器
集群
MQ
集群
MQ
CDN
反向代理服务器
缓存服务器
业务云
读写分离
同步备份
异步备份
冷备份
缓存服务器
核⼼心云
Session服务器
配置服务器
配置服务器
缓存服务器
(Step 6)⼈人员配置
⾸首席架构师根据前⾯面
所有的规划设计,进
⾏行:
• 技术选型
• 技术⼈人员招聘
• ⼈人员职责设计
• KPI 设置
后三者需要⼈人⼒力资源
部⻔门的协助
KPI 设置很重要。产
品、业务、⼯工程⼈人员
如果没有共同⺫⽬目标,
⽽而是各怀⿁鬼胎,项⺫⽬目
就会失败。
业务
技术
数据
⺴⽹网络
⼈人员
领域
七
层
架
构
之
开
发
人
员
素
质
了解市场与用户,且具有审美观
了解市场与用户
了解市场与用户,且擅长归纳总结
了解行业与公司的战略
有比较强的计算机知识与算法能力
了解行业与合作夥伴
了解行业、市场、用户、数据库
数据
代理
核⼼心
服务
框架
应⽤用
界⾯面
⽤用户
外部
上
层
底
层
外部
下
层
顶
层
数据
代理
核⼼心
服务
框架
应⽤用
界⾯面
七
层
架
构
与
职
责
【用户体验组】专精交互设计与用户体验
【应用开发组】具有很强的市场嗅觉与产品
设计能力
【通用服务组】具有良好的业务抽象能力与
接口设计经验,可以将业务转化成平台
【核心技术组】精通网络、操作系统、算法
…等计算机专业知识。
数据
代理
核⼼心
服务
框架
应⽤用
界⾯面
七
层
架
构
与
技
术
【用户体验组】使用Java/JS/HTML5/Obj-‐C
【应用开发组】使用任何脚本语言或
Java
【通用服务组】使用
Java
语言
【核心技术组】使用
C
语言
数据
代理
核⼼心
服务
框架
应⽤用
界⾯面
七
层
架
构
与
K
P
I
设
置
【用户体验组】客户是用户,由业绩说话
【应用开发组】客户是【用户体验组】,由
【用户体验组】打
KPI
【通用服务组】客户是【应用开发组】,由
【应用开发组】打
KPI
【核心技术组】客户是【通用服务组】,由
【通用服务组】打
KPI
KPI
对员工的行为影响相当大,通过
KPI,让
每个组都有服务意识,合作意识,而不是对
抗意识
数据
代理
核⼼心
服务
框架
应⽤用
界⾯面
七
层
架
构
与
迭
代
进
度
根据用户反馈,平均每月推新版
根据市场发展与竞争对手的状况,平均
一季推一个新版
系统比较少做大更动,平均每半年推新版
平均每年推出新版
(Step 7)
⾸首席架构师必须让架
构设计反复进⾏行,因
为:
• 降低设计复杂度
• 修正⽼老化的架构
架构设计时,复杂度
太⾼高,会导致设计难
以进⾏行。最好先简化
再逐步累加,且重要
的⼦子系统先设计
随著业务持续累积,
架构会⽼老化。这时⾸首
席架构师要发起重构
业务
技术
数据
⺴⽹网络
⼈人员
领域
重点复习
如果你记不住今天所有的内容
记得下面两页就好
架构的流程
业务
技术
数据
⺴⽹网络
⼈人员
领域
代理
核⼼心
服务
应⽤用
界⾯面
⽤用户
接出
接⼊入
数据
框架
Lang Runtime
容器
模块
容器
程序库
模块
Guest OS
Hypervisor
硬件
Server(通⽤用层)
引擎
规则
谢
谢
Copyright © 2014 by Jerry Tsai (蔡学镛) All Rights Reserved.
电邮 JerryTsai1218@gmail.com 微信公众号:JerryTsai1218