架构师需要具备的能力

前言  

        万物需要架构,比如国家的职能部门,有国务院/工商局/教育局等。企业的组织架构,有研发部/市场部/产品部等。

        组织结构下的每一个部门,又会分很多角色,比如研发部,有技术部总监,技术Leader,技术架构师,研发工程师等,每个角色各自发挥角色价值。

        互联网企业中架构师能力的好坏会决定软件系统的好坏,这个好坏体现在维护性,扩展性,成本,业务支撑效率等。

        今天说说做好架构师工作需要具备的核心能力,该能力包括架构师的思维模式,架构师具备的架构原则,架构师深知的架构质量属性及程序设计的SOLID原则。当然在做架构设计时还需要知道架构的CAP定理。

01 架构师的思维模式

    架构师的核心工作是管理复杂,解决复杂。要解决复杂就需要运用抽象、分层、分治和演化4项思维。

    1. 抽象:架构师需要从大处着眼,隐藏细节,架构师抽象能力的高低,决定解决问题的复杂性和规模大小。在做架构时,需要先形成抽象概念,在进行模块细节设计,先宏观再微观。

    2. 分层:分层和分裂是架构师需要掌握的架构模式之一,重点在于降低系统间的耦合性,提升团队协作效率。

    3. 分治:架构师需要对问题进行分解,大问题分解小问题,小问题在分解小问题,先解决核心问题,影响架构质量要素的问题。

    4. 演化:架构既是设计出来,也是演化出来的,三分靠设计,七分靠演化,架构师需要根据业务发展演化架构设计,避免刻舟求剑。

02 架构师具备的架构原则 

    架构师需要知道6项架构原则,分别是分层分裂、异步、可用性、自动化、安全、分布式。

    1. 分层分裂:通过分层降低系统的耦合性,通过三层架构,每层专注自己职责;通过分裂提升协同开发的效率,一般按团队职责划分系统。

    2. 异步:通过异步削峰提升系统可用性和响应速度,特别是瞬间流量情况下,系统无法立即扩容的情况下保障系统可用性。

    3. 分布式:通过抽象共性模块,做到分布式服务,进而提升水平伸缩能力,比如分布式应用,分布式数据库,分布式存储。

    4. 集群冗余:互联网最核心的挑战有高并发、大流量,网络复杂,安全环境等,通过集群冗余,在出现故障时能够进行主备容灾,IDC容灾等快恢。

    5. 自动化:分布式系统核心的挑战是复杂,运维成本高,提升架构治理的自动化能力,做到自动化问题发现,定位,报警,故障转移,限流降级等提升系统稳定性。

    6. 安全防控:互联网本来是安全的,但是因为有人研究安全就变得不安全了,所以架构还需要通过一些技术安全手段,比如HTTPS,存储加密,Web安全风控,DDoS防御等手段提升系统的安全性。

03 架构师深知的架构质量属性

    架构师在架构软件系统时,除了知道6项架构原则外,还需要将架构转换成架构质量属性,提升客户体验,组织效率,具体映射到性能、可用性、安全性、成本、伸缩性、扩展性。

    1. 性能:性能是用户访问系统第一感受,性能太慢,会逐渐降低用户的忍耐度,最终离开。优化性能需要从客户端-网络-服务端-数据逐层优化,提升系统的响应时间,吞吐量,并发数。

    2. 可用性:在出现流量高峰,故障,网络问题时,能够具备快速发现、快速定位,快速恢复能力。常用的方法有负载均衡,主从备份,限流降级,多机房容灾部署。

    3. 伸缩性:过去通过购买小型机提升硬件能力,进而提升系统容量,但是互联网的高并发,无论垂直硬件能力如何提升,最终还是会触及天花板,互联网提升伸缩能力主要是分布式部署,通过负载均衡算法实现流量均衡分布。

    4. 扩展性:主要是从后期维护成本,和新业务支撑效率,通过对扩展开放和修改关闭,避免新需求对老业务产生影响。

    5. 安全性:核心是保障用户数据在网络传输上的完整性,避免被篡改。在遇到攻击时系统能够稳如泰山,不出现系统宕机。在网络传输,数据存储时保障机密性,比如密码不能明文传输。

    6. 成本:互联网大流量,意味着带宽,机器,存储,CDN资源都需要巨大的成本,如何降低各种资源成本,人力成本,成为架构师的必要工作。

04 程序设计SOLID原则

     架构师在做软件架构时,会根据架构原则、架构质量属性等指导原则提升系统的扩展性,可维护性等,还需要具备程序设计的SOLID原则,在指导研发同学,CR,方案评审时给出具体的指导意见,避免架构只停留在书面上。SOLID每个字母代表一个原则。

    1. 开闭原则:对扩展开放,对修改关闭。

    2. 接口隔离原则:接口保持最小精简和颗粒度,避免客户端依赖不需要的接口,简单理解为只需要暴露必要的接口。

    3. 里式替换原则:子类替换父类后,功能运行正常。

    4. 单一职责原则:一个类只有一个职责,如果修改一个类有多种理由,就不属于单一职责原则。

    5. 依赖倒置原则:上层模块(使用者)和下层模块(被使用者)都依赖中间的抽象层,上层模块依赖抽象注入能力,下层模块实现抽象的业务逻辑。

05 架构CAP定理

    C是一致性,A是可用性,P是分区容错性。但是在软件架构设计时一般无法同时满足CAP定理。

    比如金融系统要求高一致性,为了做到一致性,可能会牺牲可用性。软件设计上,一般会通过备份冗余的方式提高系统的可用性,但是备份冗余会存在数据的同步(不同副本间数据需要同步),数据肯定会存在延迟,所以金融系统的高一致性,背后是可用性降低。但是随着系统发展,可用性降低不代表系统完全不可用,遇到故障时,达到基本可用,或者核心链路服务可用,其他功能降级。

    反过来,互联网企业更在意高可用性,牺牲一致性,但是随着系统发展,一致性不是真的牺牲,只是短暂不一致,最终还是会形成最终一致性,比如通过解析mysql binglog完成副本数据同步实现最终一致性。

06 总结

    以上比较简单简洁介绍了架构师的能力,具体到每个类目下的每个概念都是一个非常大的话题,值得仔细深入研究,提升自己的架构能力。

    推荐阅读:《大型网站分布式架构》

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java架构需要具备以下能力: 1. 扎实的Java编程能力:Java架构需要具备扎实的Java编程技能,能够熟练掌握Java语言的各种特性和应用场景。 2. 深入的架构设计能力:Java架构需要具备深入的架构设计能力,能够根据业务需求设计出高性能、可扩展、可维护的架构方案。 3. 丰富的系统开发经验:Java架构需要具备丰富的系统开发经验,能够熟练掌握各种开发工具和框架,能够快速定位和解决系统开发中的各种问题。 4. 深入的数据库知识:Java架构需要具备深入的数据库知识,能够熟练掌握数据库的设计、优化、调优等方面的技能。 5. 熟悉常用的中间件和技术:Java架构需要熟悉常用的中间件和技术,如消息队列、缓存、分布式系统、微服务等,能够根据业务需求选择和配置合适的中间件和技术。 6. 良好的编程规范和团队协作能力:Java架构需要具备良好的编程规范和团队协作能力,能够与开发团队紧密协作,保证系统的质量和进度。 7. 技术领导力:Java架构需要具备技术领导力,能够指导和带领团队进行技术创新和提高,推动公司技术的持续发展。 8. 优秀的沟通能力:Java架构需要具备优秀的沟通能力,能够与产品、设计、测试等团队进行有效的沟通和协调。 9. 学习能力:Java架构需要具备持续学习的能力,跟踪行业的发展和变化,不断学习新技术、新框架,提高自己的技术水平。 10. 解决问题的能力:Java架构需要具备解决问题的能力,能够快速定位和解决系统开发中的各种问题,保证系统的稳定性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值