Java程序员如何快速变成一个优秀架构师,阿里架构师推荐这份文档

成为一名优秀架构师需要深厚的技术基础和广泛的领域知识,包括Java、微服务、分布式系统等方面。本文强调了功能、性能、可用性、伸缩性、扩展性和安全性作为架构设计的关键点,并提供了Java架构师的学习路径,涵盖了JVM、并发、Spring、微服务、Netty、Zookeeper等多个主题。此外,还提到了性能优化、高可用架构以及安全防护措施,如防止XSS、SQL注入等攻击。
摘要由CSDN通过智能技术生成

如何成为一名架构师?

  想成为一名架构师,首先第一点必然是你的技术足够优秀,知识的深度和广度足够,遇到问题能很快从脑海中寻找出最合适的解决之道.其次,架构师会从整体上领导项目,与人打交道必不可少,因此与人沟通这些软技能也必不可少,当然,这个因人而异,有些人天生更会与人打交道,但无论如何,技术足够优秀是基本条件.当然,想成为一名优秀的架构师,实际开发经验是必不可少的,没有多年架构师的经验也不行,但至少,我们想成为一名架构师,理论知识得先掌握不是吗?否则谈何实践呢?因此,我总结了一张JAVA架构师进阶学习图谱:

  当然还有许多技术和技能也是需要的,比如:架构师要进行文档输出,会需要画相关的图,常见的比如:流程图/用例图/时序图/泳道图/状态图/协作图等等(回忆一下这些课程在大学的时候是不是老师都讲过?只是我们当时不在意罢了,至少笔者是这样的,哈哈~).再比如java反射机制及其相关API,高性能NIO---Netty框架等等.如果是大数据相关还需要我们了解flink/blink/spark/hadoop/hbase,不一定全都要会,但是至少脑子里面要有个概念,这个技术是干嘛用的,以至于别人说的时候能听得懂.至于为什么没有画在上面的图中,是因为笔者后续的文章只准备写图中的内容,其余的留给童鞋们自己去学习吧.当然,因为博客篇幅所限,每种技术不可能百分百把所有知识点都讲到,但是保证讲的全部都是干货,能让读完的童鞋有所收获!

架构师应该关注什么?

  这个问题,换句话说,是我们在进行架构设计的时候应该关注什么,笔者认为从大的层面来讲分两类,功能性需求以及非功能性需求,细分的话有以下六个方面:

1.功能

  记得我的老师曾说过,功能是0,其余的是1,再牛逼的架构师,如果不满足功能,再牛逼的设计也是没用的,只有在满足功能的前提下,其他的设计才有用.

2.性能

  对现代系统来说,响应时间越短就越可能留住用户,毕竟谁会忍受打开一个页面要等待10秒甚至几分钟呢?至少笔者在访问任何网站的时候,一个网页加载5秒以上就直接关了.常用的性能指标有QPS(每秒查询速率)/TPS(每秒事务处理率).当然,性能需要在系统开发完成后进行预发环境(和生产环境一样的环境)测试,常用的性能测试工具有apachebench(简称ab)/http_load/jmeter等等.QPS也遵循28原则,一天中80%的访问量集中在20%的时间内,可以据此估算网站的QPS,从而规划服务器配置,如果性能不达标,则需要优化,常见的优化手段有加机器(简单粗暴),前端优化(CDN/动静分离/减少请求次数/),后端代码优化,缓存(如redis),JVM优化.

3.可用性

  可用性是对现代分布式系统来说,当其子系统有一个或几个节点宕机的时候,是否还能继续提供正常的服务.常用的手段是集群以及自动故障转移,几乎所有分布式系统中使用的技术都支持高可用,比如缓存redis官方提供redis-cluster集群,MongoDB分片集群,消息中间件(ActiveMQ/RabbitMQ/kafka/RocketMQ)集群,数据库MySQL集群等等,如果对以上全部都了解的童鞋,总结一下,会发现它们的核心思想都一样,通过集群提供数据冗余,再通过自动发现并且故障转移机制保证组件的高可用.

4.伸缩性

  伸缩性是指当系统容量不够或者多余的时候,是否能方便的进行扩容/缩容处理,很多大公司这方面都做的很好,比较好的策略是容器化,使用docker+k8s进行部署管理,可以方便的进行扩容或者缩容处理,能更好的合理利用资源.

5.扩展性

  扩展性是指当有需求发生变更或者新增的时候,是否能在不改代码或者改动很少代码的情况下就能实现功能.扩展性相当考验一个架构师的功力,笔者看来,想设计一个扩展性很好的系统,除了事先考虑,在合适的情景下使用设计模式也是相当好的方案,因此对架构师而言,设计模式很重要!举个例子,有一个上传服务,使用FTP协议进行上传,我们基于apach ftpClient封装了一套接口,此时另外有一个需求,是需要使用SFTP协议,我们又使用jsch封装了另一套接口,那假如后续又有新的协议呢?每新增一个协议就需要我们新增代码来适配,这个时候使用适配器模式是不是就能很好的解决问题呢?这也符合设计模式的思想,面向接口编程,以后新增一个协议,我们只需要新增一个实现类,而不会改动原有代码,是不是在代码改动最少的情况下满足了需求呢?

6.安全性

  一个网站,如果是用户访问量很大的情况下,很容易遭到网络黑客的攻击,常见的攻击手段包括:

6.1 XSS攻击

  常见的防御手段是消毒(不信任用户输入,对输入进行严格校验和过滤,比如使用"&lt"代替"<"等等).

6.2 SQL注入攻击

  以前我们使用JDBC的时候,使用State

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值