架构师所需要具备的技术栈与能力

探索技术,追求本源,我是倾城之夏。

本期我们就来一起探讨要成为 Java 架构师,要驾驭大型互联网的架构与落地,我们一起来看一看我们应该要掌握哪些的技术和能力呢?

先说一下我们整体的架构是一个前后端分离的架构,所以我们会从用户访问一起开始来说。

首先,一开始用户会通过我们的浏览器或者手机端等等,然后访问到我们具体的内容,这是一块前端的内容。用户请求经过前端那发送到我们的后端,所以对于这样的一个请求来讲的话,会进入到我们的负载均衡器,也就是 Nginx。

一般我们有多台 Nginx,那么为什么会有多台呢?主要是因为我们的 Nginx 也是一个服务器,它也会有可能会宕机,会挂掉。所以我们通过 LVS +KeepAliveTime 做了一个储备,那么就保证了我们的一个 Nginx 是不会宕机,就算宕机了有备用机给替换掉。

随后负载均衡器会把我们的请求经过了一些处理以后会发送到我们的后端,那么在我们的后端,我们后端其实就已经不再是一个单体,它是有很多个服务组成。比如像用户服务集群、商品服务集群以及是订单服务集群。

每一个服务的话,它都是一个单独的系统,也是一个单独的服务。服务会向外提供一些相应的结接口。当然我们服务和服务之间也是可以相互去进行通讯的。

那对于我们的微服务来讲,其实它自己本身就是一个系统。那么一个系统就会对应到一个相应的数据库。所以说相应的它会有用户数据库、商品数据库以及是订单数据库。它们每一个数据库的话,在我们的用户请求量非常庞大的时候,各自对自己的库又可以做一个读写分离,主从的分离。

在我们的一个应用层到我们数据层之间,它们会有一个缓存,这个缓存我们一般会通过 Redis 来进行一个构建。这个主要也是因为我们用户请求,其实有一部分的数据访问的时候,我们是完全的可以从我们的 Redis 里面,从我们的缓存里面去获取的。因为这部分数据在我们的数据库里面,它几乎是不会去动的。所以我们往往把这些数据放到缓存里面,让我们的用户去读取就可以了。这样子的话也是对我们数据库减轻了一些负担。

在我们服务和服务之间,其实是可以进行相互通信的。另外我们的服务也可以去调用我们一些相应的公共资源。公共的服务资源,它包含可以是一些像不管是推送,还有是短信以及是邮件的话,它们都可以去作为一些公共的服务,或者当我们去对接的一些第三方的物流等等,这些都可以作为我们的一些相应的公共服务资源去使用。那么要去掉的时候,往往我们都会通过中间件,比如 RabbitMQ。我们可以通过一些 MQ 机制,消息队列,也就是生产者和消费者模式来进行一个相应的 解耦,并且它们之间的调用是一个异步调用。

当然在我们目前的一个系统来讲的话,其实它本身是一个大型的分布式系统。在分布式系统里面我们所必须要去关注的。比如一个像分布式锁,要保证我们数据是统一的,像我们的商品数据是不可以超美的。或者说我们通过锁的机制来控制我们的数据的唯一性、数据的一致性。另外在我们的用户会话里面,其实如果我们在使用单体的时候,我们会有一个 session,session 其实它本身是一种有状态的会话。当我们在集群和分布式系统里面,我们用户的会话,它是属于无状态的,所以在我们整个分布式环境里面,我们必须会采用一种分布式会话技术,来实现我们的一个用户会话。

既然我们的会话是存在于整个分布式系统里面的,我们会实现单点登录。单点登录就是保证当我们用户在某一端登录了以后,其余所有的系统都会认为我们当前用户已经是登录过了。

对于我们的数据一致性,另外还有是在高并发下的一个限流,以及是分布式日志。我们都会通过相应的知识手段去实现。另外,在分布式系统里面,幂等性也是我们所必须要去进行考虑的。

在我们的这整个服务集群里面,其实各个服务那么它们都会涉及到一些相应的文件。比如在我们用户服务里面,它可能会涉及到一些用户的头像上传,在我们的商品服务里面会涉及到一些商品图片的上传,这些内容都是和文件有关的。所以我们会有一个分布式文件系统,可以通过 FastDFS 来构建。对于这样的一个分布式文件系统来讲,是可以为我们整个系统提供一个非常好的一种服务机制。我们所有的文件都可以保存到我们这样的一个系统里面,并且我们的 FastDFS 本身也是可以去构建成一个集群的。

分布式搜索引擎一般会采用 ElasticSearch,简称为 ES。ES 是一种搜索引擎,也是因为我们的用户的一些检索请求是多样化的。在数据库查询里面,模糊查询在现如今不太符合用户的一种检索需求。所以我们会通过 ES 来实现用户的一个检索,而且它是一种海量数据的检索,不仅可以去检索出数据,同时其实也是相当于为我们的数据库来分担的一些检索查询的压力。

另外,Kafka 日志收集。其实在我们整个系统里面,像不管是阿里还是京东,当我们的一个服务器到达上百台甚至上千上万台的时候。其实我们的每一个服务器,每一个系统它都会有日志的产生,这个时候我们如何去管理我们的日志呢?其实我们应该要对日志去进行收集,去监控,去排错。所以这对于我们运维来讲的话,也是一个非常大的挑战。如果在很早以前,在传统开发的时候,我们要去排查错误的时候,往往只需要去打开我们的服务器,去看一下我们 Tomcat 里面报了哪些错,这个是在单体情况下,一旦我们的系统无限扩张,有很多服务器,那么我们就必须要通过日志收集来去监控我们的一个日志了。这样子就可以做到所有分布式系统里面所有节点的日志的一个监控。

在我们部署大型网站,我们会涉及到一个 Docker 容器化。所以其实我们在前期的话,如果说我们节点比较少的话,我们需要很多的中间件这样一些服务在我们进行部署上线的时候,我们都可以去单独的去进行配置和安装。容器化其实也是现如今非常流行的一种手段,我们的微服务,我们的一些中间件也可以通过 Docker 去进行一些部署和安装,都是没有问题的。

做架构师不仅是要有相应的技术栈,其实也是需要有一定的其他的能力。

  • 第一点,我们要技术全面有广度。作为架构师,我们需要了解更多的一些技术,使用更合适更匹配业务的技术选型。当产品经理设计了一个模块的时候,我们就应该要想到使用怎样的合适的技术方案来解决问题,来实现问题。

  • 第二点,关注前沿技术,这个主要是为了让我们自己保持饥饿感,要关注前沿技术,了解前沿技术动态。比如每天花 1 ~ 2 个小时来阅读一些英文的技术文档,或者说是一些英文的基础资讯。

  • 第三点,全局观预判,在我们工作开发过程中,每个业务都是一些细小的点,把这些细小的点放在整体的时候,它可能会显得微不足道。但是我们也是需要去全局的把控各个业务点,就像军事在沙盘上指点做战略。我们要会预判,会预估提前做好很多的方案。

  • 第四点,把控团队忙而不乱,作为架构师不仅要有技术担当,而且我们也要会管理和会管人,排兵布阵,人多而不乱,会指导作战。

  • 第五点,系统分解与模块拆分,拆分和解耦是一个最基本最常见的模式。很好的把业务去分离,那么才能够把代码更好的解耦。这些也能够在微服务阶段都得到体现。

  • 第六点,指导和培训,指导开发的同时我们也是需要去培训,去培养一些新人,保持我们团队的整体综合水平的一个一致性。这样子你才能够更好的带领团队去做一些事情。

  • 第七点,沟通和协调能力,架构师是不仅是一个技术能力担当的人,同时也是一个管理者,是一个组织者。你是需要去和老板进行沟通的,同时也需要和下属去沟通。合格的架构师会综合考虑上下级的一些想法,才能够做出更好的决策。

  • 第八点,抽象、举例和画图,我们是需要去把技术高度抽象。因为在平时的工作过程中,肯定会和老板去进行交流,谈一些事情。作为老板,肯定不懂技术的,所以在这个时候就需要去解释给领导听,我们就需要去抽象,多举例,多画图。把一些技术更好的更简洁的形式去解释给领导听,让领导更好的去理解你的意图。当然我们也是需要去把自己的思想注意给我们的下属,同时我们也应该要让我们的下属来理解,来领会到我们的想法和意图。

  • 最后一点,软技能,软技能其实它有一点会偏向于项目管理。首先我们来说一下针对于我们的下属,其实作为每一个架构师,你都希望你的下属能够理解你,来信任你。这个的时候,在我们平时下了班以后或者是在业余的时候,我们可以去更好的组织一些活动,比如聚餐、KTV、去爬山,这些其实都是为我们以后的工作做好一个更好的铺垫,当我们团队的凝聚力高了,你的下属就会更好的去支持你的工作,这一点是非常有必要的。其次针对于我们的上属,就是一些领导以及老板,其实你应该要去在合适的时候,要去适当的说一些好话。可能有一些程序员会说,当你自己的一个本职工作做好了,并且你的技术也非常牛的时候,你是不需要去做类似一些拍马屁,其实是不对的。只要我们在职场,不管你是不是程序员,拍马屁是少不了的。对领导多说好话,那么在某一些情况下,你的领导是会支持你的,因为在公司里面,架构师可能不是一个,可能会有多个,架构师之间也是会有冲突,也是会有一些竞争的。所以这个时候,如果说你的领导愿意帮你的话,是最好不过。还有一点就是谈判能力,谈判其实也是属于软技能的。所以我们在平时的日常工作中,我们不管是针对于下属,还是领导,还是我们的一些第三方公司竞争对手,我们的谈判能力都是会体现,主要是体现在我们的沟通上。如果你的下属要离职,这个时候你就需要去和你的下属去进行谈判,去进行沟通,你要留住他,这个其实就属于是谈判。如果你针对于你的领导,假设你的工作,你需要你领导的支持,你需要去谈判。如果你要求给团队进行涨薪去加薪,你也应该要和你的领导去进行谈判。这些过程中,你的沟通能力其实是少不了。其次,在遇到一些第三方公司,遇到一些竞争对手的时候,谈判肯定也是少不了的。另外在我们平时工作的过程中,其实我们遇到最多的对手就是产品人员,产品人员会向我们开发人员提出很多需求和功能。当然有一些需求其实是不合理的,所以在这个时候,如果你的谈判能力非常强的时候,就可以去把控一些相应的业务边界。

点关注,防走丢

文章持续更新,可以微信搜一搜 it后台之路,可以获取更多 面试资源学习视频等,感兴趣的小伙伴欢迎关注

如果你觉得本篇文章对你有点用的话,感谢你为本文章点个赞,非常感谢!!

你可能感兴趣的:(架构师所需要具备的技术栈与能力)