软件架构的几个误区
1. 架构的目标即灵活性
灵活性越好的架构越能适应未来变化的需要,但不是架构设计的目标,一味追求容易陷入另外一个坑,造成性能的损失和资源的浪费。
2. 一套成熟的开源框架就是架构
框架是一类软件的可复用设计,是一个可扩展的半成品软件,并不是软件的架构,架构是软件设计的重要决策。
3. 大型系统才会考虑架构
的确,架构的设计要依赖于用户规模的考量,不能过度设计,但是并不代表不需要考虑良好的架构体系,很多软件产品一直以一个DEMO形式在运行,无人问津,并没有投入到真正的生产环境,问题没有暴露,若用户真正使用时即使是一个简单的软件依然会出现问题,优势是在数据安全、访问性能、伸缩性等非功能性需求上。
4. 微服务是最好的架构理念
独立功能甚至独立资源, 颗粒度小,松散耦合的组件化是微服务的优点,但大部分开发、运维在实践中依然遇到了新的问题:
- 服务分散排查问题非常困难
- 服务的抽象以及之间如何协作是一个较大的难点,设计往往被工期、成本所限制
- 部署维护造成了资源的浪费和性能的损失
生产环境服务的现状
- Beta测试才发现架构问题
- 产品2.0不到半年要开发3.0
- 真正用户来了之后各种故障和漏洞
从架构设计上缺失了哪一环?遗漏了什么?我们应如何避免,当然架构师是最重要的原因,没有不好的架构,只有不好的架构师,那我们可以有什么方法体系来避免此类问题的出现吗?
其实这并不是笑话,有很多的实际案例,每种角色都是从自身的角度去考率,没有完整的方法体系和全局思维,所以我们在设计架构的时候除过专业能力之外应具备以下3种思维模式,这也是技术人员最缺乏的思维,但我认为也是最重要的思维,因为 “软件架构师不仅是技术方案的设计者”。
用户思维
用户思维就是以用户为导向的,站在用户的角度去思考问题,用户的需求即是企业的需求,用户的喜好就是企业的喜好,同样应是产品软件设计的喜好。
-
用户是谁?
用户的需求?
知道了用户,那么在架构设计过程中就应该考虑每类用户的需求
(1)最终客户除过软件满足的功能性需求外,更关注的是用户体验是否好,如果一个网页的访问要等1分钟,显然用户是没有耐心的
(2)产品经理关注的用户功能是否都能够满足,需求变动响应的及时性,当产品经理提出一个新的需求或者需求变动时,如果你回答需要重构的时候产品经理会崩溃的
(3)开发人员关注的是清洗的功能模块以及模块之间的明确协议,以及基础的技术选型方案等
(4)运维人员关注的更多的是部署的易用性,可维护性,容错性(异常及时恢复)、数据安全等
(5)运营人员关注的是客户问题处理的及时性,产品功能的稳定性等
在架构设计过程中首先要了解用户是谁,每类用户关注的需求是什么,再针对性的去思考,这样才不会出现遗漏,但是仅仅了解需求是不够的,我们还需要了解用户是在什么样的场景下使用这些功能。
场景思维
- 频率场景
每类用户 是在什么情况下使用,是一个高频还是低频,是刚需还是非刚需,刚需也可以是低频。如果是一个高频刚需,那就需要重点的去考虑,我在公司负责大数据采集挖掘平台的整体架构设计,随着业务发展,每天逐渐出现了数据的峰值,因资源不够造成了数据的延时性不高,因为每天出现,从而形成了一个高频事件,这就需要我们在架构设计的时候考虑如何在峰值出现的时候不降低数据处理的及时性,同时又能不造成资源的浪费,所以结合成本、技术、客户体验设计了一套自动伸缩的弹性资源扩充机制,监测数据处理的及时性,如果及时性降低到一个预警值后则自动触发扩充资源。 - 空间场景
用户是在PC端还是在移动端,用户所使用的是一个高配置还是一个低配置设备,这些空间场景的因素都是我们在架构设计中应该考虑到的问题,否则直接会影响到用户的体验和感受。 - 特殊场景
在特定的场景下引发特定的需求。比如每年的淘宝双11促销活动就是一个特殊的场景,在设计整个系统架构时应充分考虑系统的伸缩性和队列机制。
场景化思维就是需要洞察用户的身份、空间、时间、意图、行为等特征,同样要考虑架构设计关联的所有用户场景,不同类用户场景也会不同,比如运维人员的场景和最终用户的场景完全不同。
敏捷思维
用户思维和场景思维充分考虑之后,大部分人可能会认为设计一个完整的架构成本太高,周期会很长,那我们应如何降低成本,缩短周期,避免过度设计,造成资源、研发周期的浪费呢,同敏捷开发的思想一样,我们在设计架构的时候同样应具备敏捷思维。
重大需求决定架构的成败
我们在综合各类用户需求之后,要对分散凌乱的需求进行梳理,梳理出关键需求、关键质量、关键约束,重点对这些重大需求先做架构设计。
总结
用户思维和场景思维是技术人员最缺失的,架构师在业界大部分都被定义为技术人员,其实无论是架构师或程序员都应具备用户思维和场景思维,这样设计、研发出来的软件系统才能更好的符合预期,符合用户体验,在这个时代,不仅是产品经理具备用户思维,企业中的每个角色都应具备用户思维和场景思维,同样敏捷思维又保证了不会过度的设计,造成不必要的浪费,因为不是每个企业都有bat那样的雄厚资金成本支撑。
将凌乱分散的需求通过设计变成有序、多维的架构是每个架构师的价值所在。
下篇分享《架构设计的六种视图》