架构设计的三种思维

软件架构的几个误区

1. 架构的目标即灵活性
灵活性越好的架构越能适应未来变化的需要,但不是架构设计的目标,一味追求容易陷入另外一个坑,造成性能的损失和资源的浪费。
2. 一套成熟的开源框架就是架构
框架是一类软件的可复用设计,是一个可扩展的半成品软件,并不是软件的架构,架构是软件设计的重要决策。
3. 大型系统才会考虑架构
的确,架构的设计要依赖于用户规模的考量,不能过度设计,但是并不代表不需要考虑良好的架构体系,很多软件产品一直以一个DEMO形式在运行,无人问津,并没有投入到真正的生产环境,问题没有暴露,若用户真正使用时即使是一个简单的软件依然会出现问题,优势是在数据安全、访问性能、伸缩性等非功能性需求上。
4. 微服务是最好的架构理念
独立功能甚至独立资源, 颗粒度小,松散耦合的组件化是微服务的优点,但大部分开发、运维在实践中依然遇到了新的问题:

  • 服务分散排查问题非常困难
  • 服务的抽象以及之间如何协作是一个较大的难点,设计往往被工期、成本所限制
  • 部署维护造成了资源的浪费和性能的损失

生产环境服务的现状

  1. Beta测试才发现架构问题
  2. 产品2.0不到半年要开发3.0
  3. 真正用户来了之后各种故障和漏洞

从架构设计上缺失了哪一环?遗漏了什么?我们应如何避免,当然架构师是最重要的原因,没有不好的架构,只有不好的架构师,那我们可以有什么方法体系来避免此类问题的出现吗?


引自《软件架构设计》一书

其实这并不是笑话,有很多的实际案例,每种角色都是从自身的角度去考率,没有完整的方法体系和全局思维,所以我们在设计架构的时候除过专业能力之外应具备以下3种思维模式,这也是技术人员最缺乏的思维,但我认为也是最重要的思维,因为 “软件架构师不仅是技术方案的设计者”

用户思维

用户思维就是以用户为导向的,站在用户的角度去思考问题,用户的需求即是企业的需求,用户的喜好就是企业的喜好,同样应是产品软件设计的喜好。

  • 用户是谁?


    架构设计关联用户
  • 用户的需求?
    知道了用户,那么在架构设计过程中就应该考虑每类用户的需求
    (1)最终客户除过软件满足的功能性需求外,更关注的是用户体验是否好,如果一个网页的访问要等1分钟,显然用户是没有耐心的
    (2)产品经理关注的用户功能是否都能够满足,需求变动响应的及时性,当产品经理提出一个新的需求或者需求变动时,如果你回答需要重构的时候产品经理会崩溃的
    (3)开发人员关注的是清洗的功能模块以及模块之间的明确协议,以及基础的技术选型方案等
    (4)运维人员关注的更多的是部署的易用性,可维护性,容错性(异常及时恢复)、数据安全等
    (5)运营人员关注的是客户问题处理的及时性,产品功能的稳定性等

在架构设计过程中首先要了解用户是谁,每类用户关注的需求是什么,再针对性的去思考,这样才不会出现遗漏,但是仅仅了解需求是不够的,我们还需要了解用户是在什么样的场景下使用这些功能。

场景思维

  • 频率场景
    每类用户 是在什么情况下使用,是一个高频还是低频,是刚需还是非刚需,刚需也可以是低频。如果是一个高频刚需,那就需要重点的去考虑,我在公司负责大数据采集挖掘平台的整体架构设计,随着业务发展,每天逐渐出现了数据的峰值,因资源不够造成了数据的延时性不高,因为每天出现,从而形成了一个高频事件,这就需要我们在架构设计的时候考虑如何在峰值出现的时候不降低数据处理的及时性,同时又能不造成资源的浪费,所以结合成本、技术、客户体验设计了一套自动伸缩的弹性资源扩充机制,监测数据处理的及时性,如果及时性降低到一个预警值后则自动触发扩充资源。
  • 空间场景
    用户是在PC端还是在移动端,用户所使用的是一个高配置还是一个低配置设备,这些空间场景的因素都是我们在架构设计中应该考虑到的问题,否则直接会影响到用户的体验和感受。
  • 特殊场景
    在特定的场景下引发特定的需求。比如每年的淘宝双11促销活动就是一个特殊的场景,在设计整个系统架构时应充分考虑系统的伸缩性和队列机制。

场景化思维就是需要洞察用户的身份、空间、时间、意图、行为等特征,同样要考虑架构设计关联的所有用户场景,不同类用户场景也会不同,比如运维人员的场景和最终用户的场景完全不同。

敏捷思维

用户思维和场景思维充分考虑之后,大部分人可能会认为设计一个完整的架构成本太高,周期会很长,那我们应如何降低成本,缩短周期,避免过度设计,造成资源、研发周期的浪费呢,同敏捷开发的思想一样,我们在设计架构的时候同样应具备敏捷思维。
重大需求决定架构的成败
我们在综合各类用户需求之后,要对分散凌乱的需求进行梳理,梳理出关键需求、关键质量、关键约束,重点对这些重大需求先做架构设计。

关键需求决定架构成败

总结

用户思维和场景思维是技术人员最缺失的,架构师在业界大部分都被定义为技术人员,其实无论是架构师或程序员都应具备用户思维和场景思维,这样设计、研发出来的软件系统才能更好的符合预期,符合用户体验,在这个时代,不仅是产品经理具备用户思维,企业中的每个角色都应具备用户思维和场景思维,同样敏捷思维又保证了不会过度的设计,造成不必要的浪费,因为不是每个企业都有bat那样的雄厚资金成本支撑。

架构设计思维过程

将凌乱分散的需求通过设计变成有序、多维的架构是每个架构师的价值所在

下篇分享《架构设计的六种视图》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容

  • 1.埋点是做什么的 2.如何进行埋点 3.埋点方案的设计 近期常被问到这个问题,我担心我的答案会将一些天真烂漫的孩...
    lxg阅读 2,014评论 0 1
  • 一、生命周期 一个事物一旦出生,就必然会长大,变异,一旦长大,就面临着衰老,接下来就是消亡了,这个过程就称为一个事...
    ZyBlog阅读 2,660评论 1 11
  • 第六章 开发方法 6.1 软件生命周期 软件生命周期划分为8个阶段:可行性研究与计划、需求分析、概要设计、详细设计...
    步积阅读 1,400评论 0 3
  • 请看下面的图片: 这段代码的主要目的是把一个c字符串赋给一个string。最后一条语句显然是一个兼容类型赋给一个类...
    Stroman阅读 408评论 0 0
  • 人们常说熬夜不好,经常熬夜会对人体造成损害。科学也证实了这一点,熬夜会让人变傻、变丑、变胖…… 没...
    Mg__4b7a阅读 787评论 0 0