走出架构误区,架构师并不是想象的那么容易

简介:

几年前还记得我发表的软件设计的几大误区吗?

  随着时代的发展,orm被更多人接受,九十年代出来的设计模式也被动地融入到主流框架,以至于设计模式到现在发展成了架构模式和业务模式,而存储过程也被开发者更少地使用。

  之前提到的误区到现在已经没有什么争议了。

  但随着年代的变迁,从前的小程序员也成了有多年工作经验的大咖了,更多人的头衔从程序员贴上了架构师标签

  而在互联网如此火的今天,在这样一个年代里,我又要出来指出几个误区。

误区一:

  一套开发框架代替架构师

  首先我们来看下,架构师全称为“软件系统架构设计师”。

  名字很长,但拆分开来是xxxxxx设计师,前面加上“架构”这一词突出了是一个从更高层次的考虑问题的设计师,最终还是个“设计师”。

  更高层次是相对而言,相对ui设计、局部的功能设计,更高层次是总体的设计,并不是说架构设计要比ui设计厉害或重要。

  “软件系统”则限定了在软件系统范围内的设计师,而不是弱电、土木工程等设计师。

  一套开发框架只是代码架构,没错是架构,但实际开发中会对代码架构剪裁,这取决于需求的理解和系统的设计,类似嵌入式工程师对架构剪裁。

  这其中最重要的因素还是在于人为的设计,而不是架构,所以这种思想是错误的,而且错得可怕。

  从ejb、ssh、ssm,框架从来都没有解决过问题。

  离开了优秀的设计师,项目不提早完蛋,成本也会很高。

 误区二:

  高并发、大数据是难点

  主要是软件行业里伪程序员太多了,以至于这么基础的问题会成为一个难点。

  其实问题很简单,属于大学教科书里的课后练习题。

  大量培训学校,网络培训课程,以及混日子的大学生,和一波非专业对口人士转程序员,可能没有接触过。

  然而随着时代发展,这一波伪程序员已经有了相当长的工作经验,在长达5年以上的业余时间里,并未系统地学习过,精力只够了解新框架,新技术,但为生活所迫留在这行业成为资深,甚至成为带团队的负责人。

  然后团队开发模式非常落后,在这样的软件行业环境下,以至于程序有可能并发的情况下,程序运行出诡异的结果。

  等到出现诡异的结果时,往往应用程序已经离当初开发完成到交付有了个把月的时间。

  跑了一段时间后,互联网应用则会出现用户数量急剧上升所带来的问题,企业(zf)应用则需要导入历史数据或随着年代增长核心程序的业务数据堆积如山,导致海量数据性能问题需要解决。

  因为这些非功能性需求导致的问题,会在开发交付半年后才慢慢体现,这些公司事前最多也只是在文档中或讨论中提到这些非功能性需求,但没有有效的测试办法去保证万无一失。

  这也是我之前的一个误区,总以为我设计的软件是比别人高质量的,如何证明?请等半年或几年后看看我还维护得了,别人就得加班或跑路。

  为什么不能通过测试,提前暴露这些问题,在交付部署以前?而不是凭借个人经验或个人能力。

  交付部署以前,开发未完成时,除了对非功能性需求的考虑以外,还需要可量化的测试,用模拟的测试(mock)对服务对接点进行压力测试。

 误区三:

  流行微服务架构

  如果说上几年是xxx+xxx+xxx的开发框架比较火,

  那么这几年是微服务比较火,这也和并发要求高的大环境下有关,微服务通常提供了分布式服务的解决方案。

  其实这货就是以前得soa基于服务的架构分布式升级版,并非是必选项,然后水平不够该躺的地方还是得躺。

  通常误引入微服务的原因只是为了解决误区二里的高并发,高可用。

  但是又跌进了另一个更大的坑:

  1、比以前更吃资源,花费更多购买服务器的费用;

  2、分布式事务一致性难以保证,由网络导致的调用失败更多;

  3、设计师经验不足强行拆分带来的更多服务的交叉引用;

  4、发布和部署到生产环境和运维工作量更多,带来更大成本;

  如果误区二里分布式的问题不能在以前就解决,傻傻地引入微服务架构,最终结果还是一样的,还会付出更多代价。

  要说微服务这东西还真不是什么突然冒出来的概念,多年以前我就开发了一个webservice作为类似注册中心的总线,所有独立的dll丢到目录下就当是注册了,然后通过网关或是反向代理工具去访问多个点部署的它,实现负载均衡

  只是它并不是真正的微服务,当然也不像微服务那样吃系统资源,但它却解决了高并发、高可用的问题。

  可将它看作微服务的过渡版,正因为接触这种类型的soa,才知道分布式服务设计的难点所在,绝不是单单引入微服务就万事大吉了。

  关键点还是在于人,在于设计师,在于团队开发模式。

  没有实现不了功能的程序员,只有设计不出可靠软件的程序员。

  没有带不了团队的程序员,因为每个程序员都能实现功能,并且总有更弱得新手可以带,难的是带出一个好的设计师,难的是带出一个能带人的设计师,从而带起整个公司甚至是行业。


原文发布时间为:2018-06-7

本文来自云栖社区合作伙伴“IT168”,了解相关信息可以关注“IT168”。

相关文章
|
6月前
|
敏捷开发 缓存 架构师
Apache 架构师总结的 30 条架构原则
Apache 架构师总结的 30 条架构原则
78 0
|
存储 人工智能 架构师
ChatGPT 与软件架构 (4) - 架构师提示工程指南
ChatGPT 与软件架构 (4) - 架构师提示工程指南
138 0
|
3月前
|
存储 架构师 测试技术
架构之道——人人都是架构师
本文的探讨和编写主要围绕三个方面:架构是什么?架构师要解决的问题有哪些?解决这些问题的方法论是什么?最后作者希望人人都能具备架构师思维。
|
6月前
|
机器学习/深度学习 人工智能 架构师
【架构师】AI时代架构师必备技能
【架构师】AI时代架构师必备技能
138 5
|
1月前
|
缓存 NoSQL Java
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
高并发下的秒杀系统设计是一个复杂的挑战,涉及多个关键技术点。40岁老架构师尼恩在其读者交流群中分享了16个关键架构要点,帮助解决高并发下的秒杀问题,如每秒上万次下单请求的处理、超卖问题的解决等。这些要点包括业务架构设计、流量控制、异步处理、缓存策略、限流熔断、分布式锁、消息队列、数据一致性、存储架构等多个方面。尼恩还提供了详细的实战案例和代码示例,帮助读者全面理解和掌握秒杀系统的架构设计。此外,他还分享了《尼恩Java面试宝典》等资源,帮助读者在面试中脱颖而出。如果你对高并发秒杀系统感兴趣,可以关注尼恩的技术自由圈,获取更多详细资料。
秒杀圣经:10Wqps秒杀,16大架构绝招,一文帮你秒变架构师 (2)
|
1月前
|
缓存 NoSQL Java
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
高并发下,如何设计秒杀系统?这是一个高频面试题。40岁老架构师尼恩的读者交流群中,近期有小伙伴在面试Shopee时遇到了这个问题,未能很好地回答,导致面试失败。为此,尼恩进行了系统化、体系化的梳理,帮助大家提升“技术肌肉”,让面试官刮目相看。秒杀系统设计涉及16个架构要点,涵盖业务架构、流量架构、异步架构、分层架构、缓存架构、库存扣减、MQ异步处理、限流、熔断、降级、存储架构等多个方面。掌握这些要点,可以有效应对高并发场景下的秒杀系统设计挑战。
秒杀圣经:10Wqps高并发秒杀,16大架构杀招,帮你秒变架构师 (1)
|
6月前
|
Dubbo Java 应用服务中间件
阿里巴巴资深架构师深度解析微服务架构设计之SpringCloud+Dubbo
软件架构是一个包含各种组织的系统组织,这些组件包括Web服务器,应用服务器,数据库,存储,通讯层),它们彼此或和环境存在关系。系统架构的目标是解决利益相关者的关注点。
|
4月前
|
存储 架构师 测试技术
架构之道:人人都是架构师(2)
每个业务系统的开发者都应该具备一定的架构师素养,架构师的重要职责不仅仅是做决策,更重要的是提升团队的整体能力。一个好的架构师应该聚焦于业务和系统,定义问题和结果,设计系统、模块和代码,同时也需要解决跨域问题,确定团队间的边界,制定规范,统一语言,并创建一个让每个人都能成长为架构师的环境,以促进团队的敏捷性。本文旨在探讨如何培养架构思维,并阐述了架构师的职责、能力模型、方法论,以及如何成为架构师。
141 10
|
4月前
|
存储 运维 架构师
架构之道:人人都是架构师(1)
架构之道:人人都是架构师
181 8
|
6月前
|
运维 架构师 安全
架构师养成手册:架构师职责
小米是一名热情的技术爱好者和架构师,他探讨了架构师的角色和职责。主要涉及六个方面:顶层设计,需与企业战略目标对齐,制定架构原则;规划可适应未来变化的企业架构,分析需求并关注技术趋势;全局视角制定可落地的架构方案,兼顾全局与局部优化;技术选型与难题解决,选择合适技术并解决实际问题;关注方案与代码的广度与深度,确保宏观设计与微观实现的统一;同时,架构师还需具备管理能力,包括团队协作、资源调配和风险管理。
194 11
下一篇
无影云桌面