架构设计方法初探

最近学习了阿里资深技术专家李运华的架构设计教程,颇有收获,总结一下。

1 基本概念和目的

架构设计的基本概念和目的

架构设计的目的是为了解决系统复杂度带来的问题,并不是要面面俱到,不需要每个架构都具备高性能、高可用、高扩展等特点,而是要识别出实际业务实际情况的复杂点,然后有有针对性地解决问题,即:有的放矢,而不是贪大求全。 在实际情况中,不一定每个系统都要做架构设计,需要结合实际情况。有时候最简单的设计开发效率反而是最高的,架构设计毕竟要投入时间和人力,这部分投入如果用来尽早编码,项目也许会更快。

2 架构设计复杂度来源

高性能

高性能

高可用

高可用

可扩展性

可扩展性

低成本、安全、规模

低成本、安全、规模

3 架构设计三原则

架构设计三原则

合适原则

GFS为何在Google诞生,而不是在Microsoft诞生,其中Google有那么庞大的数据是一个主要因素,而不是因为Google的工程师比Microsoft的工程师更加聪明。

真正优秀的架构都是企业在当前人力、条件、业务等各方面约束条件下设计出来的,能够合理地将资源整合一起并发挥出最大功效,并且能迅速落地。这也是很多BAT出来的架构师到了小公司或者创业团队反而做不出成绩的原因,因为没有大公司的平台、资源、积累,只是生搬硬套大公司的做法,失败的效率非常高。

简单原则

软件领域的复杂性

无论是结构的复杂性还是逻辑的复杂性,都会存在各种问题,所以架构设计时如果简单方案和复杂的方案都可以满足需求,最好选择简单的方案。《UNIX编程艺术》总结的KISS(Keep It Simple,Stupid!)原则一样适用于架构设计。

演化原则

对于软件系统来说,变化才是主题。软件架构需要根据业务的发展而不断变化。 如果没有把握“软件架构需要根据业务发展不断变化”这个本质,在做架构设计的时候就很容易陷入一个误区:试图一步到位设计一个软件架构,期望不管业务如何变化,架构都稳如磐石。

为了实现这样的目标,要么照搬业界大公司公开发表的方案;要么投入庞大的资源和时间来做各种各样的预测、分析、设计。无论哪种做法,后果都很明显:投入巨大,落地遥遥无期。更让人沮丧的是,就算跌跌撞撞拼死拼活终于落地,却发现很多预测和分析都是不靠谱的。

实践中,架构师要提醒自己不要贪大求全,遵循演化优于一步到位的原则,因为业务的发展和变化总是很快的,无论多牛的团队,都不可能完美预测所有的业务发展和变化路径。实践中可以参考如下建议:

  • 首先,设计出来的架构要满足当时的业务需要
  • 其次,架构要不断地在实际应用过程中迭代,保留优秀的设计,修复有缺陷的设计,改正错误的设计,去掉无用的设计,使得架构逐渐完善。
  • 第三,当业务发生变化时,架构要扩展、重构,甚至重写;代码也许会重写,但有价值的经验、教训、逻辑、设计等却可以在新架构中延续。

4 架构设计的流程

架构设计的流程

参考资料:

从0开始学架构——李运华

架构蓝图--软件架构 "4+1" 视图模型



原文发布于微信公众号 - 芋道源码(YunaiV)

原文发表时间:2018-09-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Linyb极客之路

架构设计方法初探

架构设计的目的是为了解决系统复杂度带来的问题,并不是要面面俱到,不需要每个架构都具备高性能、高可用、高扩展等特点,而是要识别出实际业务实际情况的复杂点,然后有有...

1112
来自专栏大数据文摘

中国移动社群生态报告(下载39PPT)

27211
来自专栏WeTest质量开放平台团队的专栏

WeTest入驻腾讯云 助游戏开发者造“精品”

2015年7月31日的ChinaJoy,WeTest质量开放平台在腾讯云展台上正式亮相。WeTest平台,旨在将腾讯内部打磨已久的质量工具对外提供服务。除了为...

1372
来自专栏靠谱PM

为什么要做用户调研?

在前面的文章中有写过如何快速的了解一款产品(回看请戳下面链接),但在产品初期可获取的用户反馈相对来说是有限或没有的,那么当我们接到对产品优化的工作时就要主动去了...

1152
来自专栏python读书笔记

python 数据分析基础 - 总结

至此,经过19天的阅读,《python数据分析基础》已经阅读完毕。 个人感觉,这是一本不错的关于数据分析方面的入门书籍。但是,这本书是有阅读门槛的,必须初步了...

3326
来自专栏ThoughtWorks

TW洞见 |建设DevOps能力到底有多重要?典型问题+对症方法

当软件行业进入互联网时代,市场对软件产品和服务的交付提出了更高的要求:不仅要快速实现需求,而且要快速发布上线,并且必须保证业务可靠、高效运行。为了满足这些要求...

3117
来自专栏CSDN技术头条

如何运用 DDD 解决团队协作与沟通问题?

领域驱动设计的核心是“领域”,因此要运用领域驱动设计,从一开始就要让团队走到正确的点上。当我们组建好了团队之后,应该从哪里开始?

1103
来自专栏CDA数据分析师

收藏 ▏用户群体画像功能深度解析

作者 于晓松 本文为原作者原创作品,转载需授权 所有伟大的产品,都离不开用户的追随与期待。 用户群体画像是产品用户增长的利器之一——它能够帮您探究产品指标数字...

2488
来自专栏微信公众号:Java团长

架构设计方法初探

架构设计的目的是为了解决系统复杂度带来的问题,并不是要面面俱到,不需要每个架构都具备高性能、高可用、高扩展等特点,而是要识别出实际业务实际情况的复杂点,然后有有...

742
来自专栏WeTest质量开放平台团队的专栏

用上WeTest适配测试,流失用户减少一半!

为什么需要适配测试? 近期,腾讯游戏工作室对近2000名流失玩家进行了一次问卷调查活动。

1092

扫码关注云+社区

领取腾讯云代金券