与数据公式或法则不同建筑设计,如何设计一个好的体系结构很难一概而论. 设计师(架构师)的各种想法,各种折衷和满足系统需求的智能输出在很多情况下都是如此. 但是我们已经掌握了前辈总结的经验,让我们站在巨人的肩膀上,看着群山. 一些好的建筑设计原则可以确保设计决策在一定程度上可以满足要求.
1. 架构原则的形成过程
形成架构原则的过程
建筑原理需要SMART
2、15条通用架构原则
《建筑真理》一书简要解释了建筑设计的一些常用原理. 列出一些常用原则建筑设计,以下是具有通用价值架构的15条原则:
1建筑设计,N + 1设计: 当开发的系统出现故障时,至少有一个冗余实例
广泛用于数据中心设计中以部署应用程序服务:
如果发生故障建筑设计,系统必须至少具有一个冗余实例.
您必须确保一个人为自己建筑设计,一个人为客户和一个人为失败
2. 回滚设计: 确保系统向后兼容.
1)如果维修时间很长建筑设计,那么回滚必须在特定时间范围内完成.
2)灾难性事故建筑设计,例如损坏,通常在部署后几天发生.
3)系统最好根据预先设计通过发布或回滚来解决问题.
3. 禁用设计: 您可以关闭任何发布功能
在设计系统建筑设计,尤其是与其他系统或服务进行通信的高风险系统时,请确保可以通过开关禁用这些系统. 这将为维修服务提供更多时间,同时确保系统不会由于错误引起的奇怪要求而停机.
4. 监视设计: 应该在设计阶段而不是部署之后考虑监视.
通过监视建筑设计,发现系统的可用性.
通过监视可以自建筑设计我诊断和修复系统.
通过监视确定系统可保留空间的使用情况.
通过监视和控制系统之间的交互建筑设计,找到瓶颈
如果监视工作做得很好,您不仅可以找到服务的生死攸关的情况,可以检查日志文件,还可以收集与系统相关的数据以评估最终用户的响应时间. 如果系统和应用程序是设计和构建的,请考虑进行监视建筑设计。
因此建筑设计,即使您无法修复自己,也至少可以诊断出自己.
5. 数据中心的设计
所有数据都集中在一个数据中心吗建筑设计?
读写分开吗建筑设计?
所有客户信息是否共享相同的数据结构建筑设计?
服务呼叫是否允许存在延迟
6. 使用成熟的技术
工程师倾向于学习和实施性感时尚的新技术. 因为新技术可以降低成本建筑设计,缩短上市时间并提高性能. 不幸的是,新技术也往往具有更高的故障率. 如果将新技术应用于架构的关键部分,则可能会对可用性产生重大影响.
当大多数人采用该技术时建筑设计,最好努力进入. 首先,将新技术应用于不需要高可用性的功能. 一旦证明它可以可靠地处理日常交易,就可以将该技术移植到任务区的关键Go中.
7. 故障隔离: 避免单个服务占用所有资源. 避免服务之间的交互2.隔离机房以避免单点故障.
不共享的原则: 理想的情况是负载平衡建筑设计,网络前端,应用程序服务器,并且永远不要共享任何服务,硬件和软件.
非交叉区域的原理: 不同的隔离区域之间没有通信建筑设计,所有服务调用必须在同一故障隔离区域中进行.
8. 横向扩展
什么是水平可伸缩性?平台的水平扩展意味着随着业务的发展建筑设计,当需要扩展平台的服务能力时,无需通过添加新设备来重建软件系统和满足业务增长的需求.
X轴扩展: 服务器拆分. 可以通过添加硬件设备来扩展平台的服务能力建筑设计,而无需更改服务.
Y轴扩展: 拆分. 通过不断分解和部署服务来扩展平台的服务功能.
Z轴扩展: 功能拆分. 可以根据客户的持续分解和部署来构建平台的服务功能建筑设计,以完成容量的扩展. (例如,按用户uid划分表和库等).
9. 非核心购买
工程师通常有自己开发所有系统的冲动.
系统研发需要资源建筑设计,系统维护需要长期投资.
影响核心产品的上市速度.
如果您可以形成差异化的竞争优势建筑设计,请自己做,否则外包.
10. 使用商用硬件
在大多数情况下建筑设计,便宜是最好的.
标准建筑设计,低成本,可互换和易于商业化是商业化硬件的特征. 如果架构设计合理,只要所有商用硬件的总成本低于高端硬件的总成本,就可以通过购买最便宜的服务器轻松实现水平扩展.
11. 快速迭代
体积小: 体积小建筑设计,成本低,可确保投资产生价值.
小释放: 释放的失败率与更改次数有关建筑设计,小释放率很低.
快速尝试和错误: 根据市场反馈建筑设计,可以快速迭代,加速TTM并优化用户体验
12建筑设计,异步设计
同步系统中各个子系统的故障会影响整个系统.
同步系统中性能最差的子系统成为整个系统性能的瓶颈.
同步系统中扩展性最低的子系统是整个系统扩展的瓶颈.
13. 无状态设计
1无状态系统更有利于扩展建筑设计,更有利于负载均衡.
状态是系统吞吐量建筑设计,易用性,可用性,性能和可伸缩性的敌人,应尽可能避免.
14. 前瞻性设计
现在: 当前正在使用系统的体系结构建筑设计,设计,功能,性能和可伸缩性.
现在+1: 下一代预研究系统的体系结构建筑设计,设计,功能,性能和可伸缩性.
Now + 2: 下一代计划系统的体系结构建筑设计,设计,功能,性能和可伸缩性
15. 自动化
设计和构建自动化流程. 如果机器可以做到建筑设计,请不要依靠人. 人们经常犯错误. 更令人沮丧的是,他们经常以不同的方式多次犯相同的错误.
3. 建筑设计的关键原则
一个好的设计:
1)解决现有需求和问题
2)控制现实的进度和风险
3)预测和规划未来建筑设计,不要过度设计,从迭代中发展和改进.
在开始设计之前建筑设计,请考虑可帮助您创建具有最低成本,高可用性和可伸缩性的体系结构的关键原理.
分离关注点,并将应用程序划分为功能上尽可能少的功能点. 主要参考因素是使相互作用,高内聚性和低耦合最小化. 但是网络架构设计原则,错误地划分功能边界可能会导致功能之间的高度耦合和复杂性建筑设计。
单一职责建筑设计,每个组件或模块应仅具有一个职责或功能,并且功能应具有凝聚力.
基于最少知识的原理建筑设计,组件或对象不应了解其他组件或对象的内部实现细节.
不要重复自己建筑设计,只需要在一个地方描述目的即可. 例如,特殊功能只能在一个组件中实现,而在其他组件中则不应有副本.
最小化预先设计建筑设计,仅设计必要的内容. 在某些情况下,您可能需要预先设计一些内容. 在其他情况下,尤其是对于敏捷开发,可以避免过度设计. 如果您对应用程序的要求不清楚,最好不要做很多预先设计.
低耦合建筑设计,高内聚性,防止突变(使用界面和适配器防止突变),关注点分离.
1跟随分离
水平分层建筑设计,垂直分区
(1)模块化相关事务建筑设计,将它们封装到单独的组件(例如子系统)中,并调用其服务;
(2)使用修饰符将关注点(例如安全性)放入Decrator对象中. 装饰器对象包装内部类并提取其服务. 装饰器在EJB技术中称为容器建筑设计,并且EJB容器围绕内部对象业务逻辑,为外部装饰器添加安全检查;
(3)使用后建筑设计,它将使用面向方面的技术(例如,AspectJ支持开发人员的透明性,以便在编译后将横断面的注意力编织到代码中. )
2分离关注点的方式
好的体系结构设计必须将变更点封装到软件系统的不同部分. 因此建筑设计,必须分离关注点. 这些关注点彼此分离,这意味着系统的一部分可以更改而不会影响其他部分. 即使您需要更改,您也可以清楚地确定哪些部分需要更改. 如果您需要扩展体系结构,那么影响将最小化,每个已经可以工作的部分都可以继续工作.
首先建筑设计,您可以通过划分职责来分离问题. 面向对象设计的关键是职责的确定和分配. 每个功能的完成是通过一系列协作责任链来完成的. 当合理区分不同的职责时,只需建立新的协作链即可实现新功能,而需求变更页面通常只影响几个职责的定义和实现.
第二建筑设计,可以通过使用软件系统各部分的通用性来分离关注点. 不同程度的共性意味着变化的可能性是不同的. 分离具有不同通用性的零件有利于通用零件的重复使用. 该页面可方便地修改专用部分.
此外建筑设计,您还可以考虑使用大粒度的子系统,并暂时忽略子系统如何由小粒度的模块和类组成. 在实践中,软件架构师经常将系统划分为一组子系统,并为子系统定义明确的借口,其详细内容将在后续的开发工作中慢慢发展.
根据职责分离关注点建筑设计,根据通用性分离关注点以及根据不同的粒度级别分离关注点是三种不同的思维方式.
建筑设计的非侵入性原理
那么建筑的侵入性是什么?所谓的侵入性是指此体系结构设计的组件对系统的影响范围. 例如建筑设计,框架的侵入性非常高. 由于项目中引入了框架,因此必须围绕该框架执行整个设计. 一旦使用,顺便说一下,框架的可替换性几乎为0,因此具有侵入性. 该组件的侵入性相对较低,例如ibaties,它可以在任何Java框架中使用,甚至可以与其他ORM组件共存,您只需引入,配置,然后就可以使用它,也可以替换他和其他ORM一起,所以.这种经历应该非常令人愉快.
因此建筑设计,在设计通用体系结构时,我们应注意这一非常重要的观点. 除非我们只为自己使用它,否则我们不应该假定设计用户已经拥有的东西. 在使用哪种环境或特殊设计之前,必须先进行
这是一个比喻. 如果要设计通用权限管理系统建筑设计,则必须考虑它. 这是组件,框架还是现成的系统(重用是通过更改代码来实现的,实际上,我个人认为此设计是非常底层的,尽管类似的东西确实功能丰富). 设定目标之后,我们可以开始下一步. 例如,如果它是一个框架,它可能会更自由,因为不需要高度的凝聚力,但是可能是因为该框架需要在太多方面进行设计,所以我总是感到个人力量. 不足以解决这类问题. 如果是组件,则需要高度的内聚性才能实现非侵入性. 例如,当引入DLL时,所有页面都需要从某个基本页面继承,这不是一个好主意.
尽管文字很好建筑设计,但我在设计自己的时候经常会有所干扰,但是高凝聚力和低耦合是我们的不变目标网络架构设计原则,因此所有从事设计的学生都可以一起工作