当我开始关注架构以及管理的一些书籍时,我探索到《左耳听风,传奇程序员的练级攻略》这本书(已深读),结合自己的现状,这本书让我感触颇多,然后,以这本书为线索,我知道有个骨灰级的大牛,叫陈皓,再就知道他有个网站叫酷壳,试着了解了一下,发现他的博客的确有深度,学习中,其中"我做系统架构的一些原则"【我做系统架构的一些原则 | 酷 壳 - CoolShell】,这篇文章是我当下关注如何提升架构能力的一个点,当时做了笔记,借着空闲做个反思和汇总。
作者博文中有详细的介绍,自己只是个人简单做笔记和反思(写博文的意义只是为了自己反思)。
1.关注收益而不是技术(技术是为了解决问题,促成产品的)
降低技术门槛,不过多沉浸在技术中。
系统运行更稳定,对异常停机等场景(有计划和无计划的停机)做方案备份。
使用简化、自动化尽可能代替人力成本。
保证数据不丢失,备份(单点故障时,接管方案的考虑),保证高可用,数据一致性。
2.目标整体一致性(站在服务和对外api的视角,而不是技术和底层的应用视角)
就像眼界决定认知一样,角度不同,发现和对待问题的视角是不同的,看到有说架构师需要跳出架构之外看架构的思维,应该让自己跳出软件开发的限制去看系统,去符合市场定律。
3.选择最主流和成熟的技术(不应陷在自己的技术框架中)
技术都是为了解决问题的,不同的技术解决问题的场景也有侧重,选择最适合的才重要。
越去学习,越会发现自己不会的太多,这里看他提到一个工业化的技术栈,或许是应该值得自己深思的(好的技术能沉淀和推广,就已经说明了该技术的优点)。
我能明显的感受到我只是在当下的视角中看待当下的产品,去考虑他的边界和未来,但是随着业务和场景的多变,永远不能考虑到后续会是怎么样的,接触过太多技术栈选型导致代码越来越难改的产品,或许,主流的成熟的技术,以及好的架构设计,就是一开始的最好的方案。
这里提到一个工业化的技术栈,全球流技术,以及红利大的主流技术,但是认知不够的前提可能对相关技术都不知道,还是需要建立在个人持续积累的基础。
4.完备性比性能更重要
我个人在开发软件时一般也有技术情节,从一开始考虑太多,然后去做设计,但是,直观的反思现状是,身边确实有同事以结果为导向,先出产品,一定程度上忽视代码和架构质量。
我不认为自己有错,但是值得反思的是在一定可控的前提下,先有产品,再优产品,才是合理的。
同时,文章中提到性能的优化方案有很多,纠结于性能而忽视核心产品功能,其实也会得不偿失。
你对项目的自由散漫,项目必然回应你自由散漫,越来越明悟,项目的前期设计的重要性,前期完整一致性目标及对应架构让项目事半功倍,而基于架构的先紧后松的态度,对项目影响的程度是致命的(永远不知道项目下一步会遇到怎样的问题)。
5.制定并遵循服从标准、规范和最佳实践
一直都在学习和使用网络,尤其近几年关注到相关网络标准都是参考RFC文档,对这个主题深度认可,也接触过太多产品设计错误码、对外接口等,好像大家都一致性的默认规范。
脑中最近想到项目实施前的一致性目标最多,映射到这里,大家没有一致性的约束,自己只跟自己玩,是丢了进度,最后也是丢了自己。
或许,在小产品的开发上我也有过为了安逸而忽视这个主题的规范,但我也明白,我已经给这个产品定义了产品的边界,后期在开发产品时,接口,错误码,对外服务等,还是应该参考业界标准来实施。
6.架构的扩展性和可维护性(设计原则为准则,使用设计模式)
天天都在说架构,为什么要用架构,不就是为了扩展和解决未来可能遇到的问题。
我也一直深陷在设计软件是如何设计好架构让系统后期好用的泥潭,这需要磨练的,参考设计原则,使用设计模式让自己上升高度,练习和思考的更多,才能设计出好的架构,实现好的系统吧。
7.对控制逻辑进行全面收口(业务逻辑、控制逻辑)
控制逻辑一般是为了帮助更好的实现业务逻辑,对控制逻辑进行控制能更好的保障系统的可靠。
系统的可靠性要求,多体现在对控制逻辑的控制上(异步方案、高并发设计、监控、峰值处理等):流量收口(流量网关);服务治理收口(服务发现、健康检查,配置管理、事务、事件、重试、熔断、限流(消息队列控制?));监控数据收口(日志、指标、调用链等监控,如ebpf);中间件的收口(数据库,消息,缓存,服务发现,网关 (这里描述的中间件是提供服务的一些组件))。
貌似这些控制逻辑的控制都有现成成熟的方案,如消息队列,etcd,nginx网关等,还需要细细体会和用产品实践进行反思。
8.不将就老的技术栈
个人对这个不执著,站在自己的角度上会持续考虑更优方案,但是一般公司角度自己只有建议权。
应该做的就是提升自己的技术栈,能承担解决更多问题的能力。
9.不依赖经验,而是数据和学习
每次有人问我问题的时候,对于不熟悉的,我都会先去实践一下,这是对答案的尊重。
但是我在做项目的时候,调研和对比确实做的不够好,或许是因为自己没有足够的技术储备,只会对比自己所认知到和探索到的可选方案,对于市场上已有、在用这些角度都没有过深度研究和思考,在调研这方面,如果有机会,还是会试着深度投入吧。
10.小心X-Y问题,追问原始需求
回头看曾经的自己,不就是一直陷入在一个又一个小的技术问题而无法自拔。
再看身边的新人,你所一眼看到的问题,他在处理时却也是举步维艰。
自己也经历过技术方向的探索,是持续做新手,然后探索到一个阶段豁然开朗,或许这个主题也一样,我们要的是持续的追根刨底,从本质上理解了问题,才能给出最好的方案。
11.激进胜于保守,创新与实用不冲突
我的性格属于保守类型,但近年来,由于工作需要,被强行安排深入研究非精通领域,无头绪得开始,到剥丝抽茧后得明悟,这样一件事情后才发现科研、钻研对于我们的意义,原来,有的东西,真的可以用钻研去真正弄会(那些硕士、博士身上所拥有的一些素养)。
我理解这里的激进说的应该是对新的技术的关注,我应该持有激进的态度去认识和理解新型技术,以理智的心态应用他。