摘要: 心血经验分享,架构师更多的是一个不断学习,不断积累的过程,希望可以帮到同行业的朋友们
前言
成为优秀的架构师是大部分初中级工程师的阶段性目标。优秀的架构师往往具备七种核心能力:编程能力、调试能力、编译部署能力、性能优化能力、业务架构能力、在线运维能力、项目管理能力和规划能力。
这几种能力之间的关系大概如下图。编程能力、调试能力和编译部署能力属于最基础的能力。不能精通掌握这三种能力,很难在性能优化能力和业务架构能力方面有所成就。具备了一定的性能优化能力和业务架构能力之后,才能在线运维能力和项目管理能力方面表现优越。团队管理能力是最高能力,它对项目管理能力的依赖度更大。
基本知识
1.学会分析源码
程序员每天都和代码打交道。经过数年的基础教育和职业培训,大部分程序员都会「写」代码,或者至少会抄代码和改代码。但是,会读代码的并不在多数,会读代码又真正读懂一些大项目的源码的,少之又少。这种怪状,真要追究起来,怪不得程序员这个群体本身 —— 它是两个原因造成的:
我们所有的教育和培训都在强调怎么写代码,并没有教大家如何读代码
大多数工作场景都是一个萝卜一个坑,我们只需要了解一个系统的局部便能开展工作,读不相干的代码,似乎没用
读源码三问:“为什么要有这样的架构”,“他是什么样子的”,“他是怎么工作的”。
那么阿里程序员是如何去读代码的呢?
2.分布式架构特点及设计理念
首先需要说明的是,分布式系统是一个复杂且宽泛的研究领域,学习一两门在线课程,看一两本书可能都是不能完全覆盖其所有内容的。介于这篇文章是引导初学者入门,所以我个人觉得为初学者介绍一下当前分布式系统领域的全貌,也许比直接推荐论文和课程更有帮助。当初学者对这个领域建立起一个大的 Picture 之后,可以根据自己的兴趣,有选择性的深入不同领域进行进一步的学习。
3.为什么微服务会这么火?
要学习微服务,首先,我们要了解为什么使用微服务。
代码难以理解?
构建和部署耗时长,难以定位问题,开发效率低?
单体只能按整体横向扩展,无法分模块垂直扩展?
一个bug有可能引起整个应用的崩溃?
受技术栈限制,团队成员使用同一框架和语言?
那么如何解决单体的不足呢,通过迁移到微服务架构来解决,我们看一下什么是微服务。
微服务架构:将单体应用拆分为多个高内聚低耦合的小型服务,每个小服务运行在独立进程,由不同的团队开发和维护,服务间采用轻量级通信机制,独立自动部署,可以采用不同的语言及存储。
单体架构整个团队维护开发一个大工程及一个单库,到了微服务架构,用户请求经过API Gateway被路由到下游服务,服务之间以轻量级通信协议进行通信,服务通过注册中心发现彼此,每个服务都有专门的开发维护团队,每个服务对应独立的数据库,服务独立开发,独立部署和上线。
接下来我们总结下微服务的优点。
易于开发与维护
微服务相对小,易于理解
启动时间短