架构师成长之路

想要成为架构师,对技术的深度和广度都有很高的要求,本文列举出成为一个架构师必备的技能和学习路线。
对于学习途径有疑惑或苦恼,或者有优秀资料可以提供的同学,可加微信,共同交流学习 

架构师成长之路
wx_qcode.jpg

1. 阅读源码

说到阅读源码,可能很多同学都尝试过去阅读一些开源框架的源码,但是很难找到一个入口点;即便找到入口点,又会觉得源码中好绕,看着看着把自己都看晕了。其实,阅读源码是需要基础的。开源框架的源码中都使用了大量的设计模式,所以在阅读源码之前,我们首先要熟悉常见的设计模式

1.1 常用设计模式

  • Proxy 代理模式
  • Factory 工厂模式
    • 简单工厂模式
    • 工厂方法模式
    • 抽象工厂模式
  • Singleton 单例模式
  • Delegate 委派模式
  • Strategy 策略模式
  • Prototype 原型模式
  • Template 模板模式

推荐书籍
《大话设计模式》 程杰 著

1.2 Spring源码走读

Spring 源码主要又分为一下几大块:

1.2.1 spring-beans包

  • 接口示例化
  • 代理Bean操作

1.2.2 spring-context包

  • IOC容器设计原理及高级特性
  • AOP设计原理
  • FactoryBean与BeanFactory

1.2.3 spring-tx包

  • 声明式事务底层原理
  • Spring事务处理机制
  • 事务的传播与监控
  • 基于SpringJDBC手写ORM框架

1.2.4 spring-webmvc

  • MVC原理介绍
  • 与IOC容器整合原理
  • HandlerMapping实现原理
  • HandlerAdapter实现原理
  • ViewResolver实现原理
  • Controller实现原理
  • 动态参数匹配原理
  • SpringMVC与Struts2对比分析
  • 手写实现SpringMVC框架

1.2.5 Spring5新特性

  • Spring 5.x的兼容性
  • 分析自带通用日志框架
  • 多序列化数据格式绑定API
  • 函数式风格的ApplicationContext
  • Kotlin表达式的支持
  • WebFlux模块介绍
  • Testing改进

阅读指引
spring源码学习 - 一个简单bean的实例化过程
spring源码学习 - 注解bean的解析注册过程

1.3 MyBatis

  • 代码自动生成器:Generator
  • MyBatis下1对多,多对多嵌套结果、嵌套查询
  • 一级缓存、二级缓存使用场景及选择策略
  • MyBatis与Spring集成spring-mybatis.jar分析
  • Spring集成下的SqlSession与Mapper
  • MyBatis的事务
  • 分析MyBatis的动态代理的真正实现
  • 一步一步手写实现MyBatis 1.0到2.0

2. 分布式架构

2.1 漫谈分布式架构

  • 初识分布式架构及意义
  • 如何把应用从单机扩展分布式
  • 大型分布式架构演进过程
  • 构建分布式架构最重要因素
    • CDN加速静态文件访问
    • 分布式存储
    • 分布式搜索引擎
    • 应用发布与监控
    • 应用容灾及机房规划
    • 系统动态扩容
  • 分布式架构设计
    • 主流架构模型-SOA架构和微服务架构
    • 领域驱动设计及业务驱动划分
    • 分布式架构的基本理论CAP、BASE以及其应用
    • 什么是分布式架构下的高可用设计
    • 分布式架构下的可伸缩设计
    • 构建高性能的分布式架构

2.2 分布式架构策略-分而治之

  • 从简到难,从网络通信探究分布式通信的原理
  • 基于消息方式的系统间通信
  • 理解通信协议传输过程中的序列化和反序列化机制
  • 基于框架的RPC通信技术
    • WebService/Apache CXF
    • RMI/Spring RMI
    • Hessian
  • 传统RPC技术在大型分布式架构下面临的问题
  • 分布式架构下的RPC解决方案
  • 分布式系统的基石-Zookeeper、
    • 从0开始搭建3个节点的zookeeper集群
    • 深入分析Zookeeper在disconf配置中心的应用
    • 基于Zookeeper的分布式锁解决方案
    • Zookeeper Watcher 核心机制深入源码分析
    • Zookeeper集群升级、迁移
    • 基于Zookeeper实现分布式服务器动态上下线感知
    • 深入分析Zookeeper Zab协议及选举机制源码解读
  • 使用dubbo对单一应用服务化改造
    • dubbo管理中心及监控平台安装部署
    • dubbo分布式服务模块划分(领域驱动)
    • 基于dubbo分布式系统架构实践
    • dubbo负载均衡策略分析
    • dubbo服务调试之服务只订阅及服务只注册配置
    • dubbo服务接口的设计原则(实战经验分享)
    • dubbo设计原理及源码分析
    • 基于dubbo构建大型分布式电商平台实战雏形
    • dubbo容错机制及高扩展性分析

2.3 分布式架构-中间件

2.3.1 消息中间件(分布式消息通信)

2.3.1.1 消息中间件在分布式框架中的应用

2.3.1.2 消息中间件ActiveMQ

  • ActiveMQ高可用集群企业级部署方案
  • ActiveMQ P2P及PUB/SUB模型详解
  • ActiveMQ消息确认及重发策略
  • ActiveMQ基于Spring完成分布式消息队列实战

2.3.1.3 消息中间件Kafka

  • Kafka基于Zookeeper搭建高可用集群实践
  • Kafka消息处理过程剖析
  • Java客户端实现Kafka生产者与消费者实例
  • Kafka的副本机制及选举原理剖析
  • 基于Kafka实现应用日志实时上报统计分析

2.3.1.4 消息中间件RabbitMQ

  • 初步认识RabbitMQ及高可用集群部署
  • 详解RabbitMQ消息分发机制及主题消息分发
  • RabbitMQ消息路由机制分析
  • RabbitMQ消息确认机制

2.3.2 分布式缓存(Redis)

  • 从入门到精通,Redis的数据结构分析
  • Redis主从复制原理及无磁盘复制分析
  • Redis管道模式详解
  • Redis缓存与数据库一致性问题解决方案
  • 基于Redis实现分布式锁
  • 图解Redis中的AOF和RDB持久化策略的原理
  • Redis读写分离架构实践
  • Redis烧饼架构及数据丢失问题分析
  • Redis Cluster 数据分布算法之Hash slot
  • 使用Redis常见问题及性能优化思路
  • Redis高可用及高伸缩架构实战
  • 缓存击穿、缓存雪崩预防策略
  • Redis批量查询优化
  • Redis高性能集群之twemproxy or codis

2.3.3 数据存储

2.3.3.1 非结构化数据NoSQL

  • NoSQL简介及MongoDB基本概念
  • MongoDB支持的数据类型分析
  • MongoDB可视化客户端及Java API实践
  • 手写基于MongoDB的ORM框架
  • MongoDB企业级集群解决方案
  • MongoDB聚合、索引及基本执行命令
  • MongoDB数据分析 、转存及恢复策略

2.3.3.2 mysql数据库

  • MySQL主从符合及读写分离实战
  • MySQL + keepalived实现双主高可用方案实践
  • MySQL 高性能解决方案之分库分表

2.3.3.3 分库分表中间件(Mycat)

  • 初识数据库中间件Mycat
  • 基于Mycat实现mysql数据库读写分离
  • 基于Mycat实战之数据库切分策略剖析
  • Mycat全局表、ER表、分片策略分析

2.3.4 后台服务

  • 基于OpenResty部署应用层Nginx以及Nginx+lua实践
  • Nginx反向代理服务器及负载均衡服务配置实战
  • 利用keepalived + Nginx实践Nginx高可用方案
  • 基于Nginx实现访问控制、连接限制
  • Nginx动静分离实战
  • Nginx Location、Rewrite等语法配置及原理分析
  • Nginx提供https服务
  • 基于Nginx+lua完成访问流量实时上报kafka的实战

2.3.5 高性能的NIO框架(Netty)

  • IO的基本概念、NIO、AIO、BIO深入分析
  • NIO的核心设计思想
  • Netty产生的背景及应用场景分析
  • 基于Netty实现高性能IM聊天工具
  • 基于Netty实现Dubbo多协议通信支持
  • Netty无锁化串行设计及高并发处理机制
  • 手写实现多协议RPC框架

2.4 分布式解决方案

  • 分布式全局ID生成方案
  • session跨域共享及企业级单点登录解决方案实战
  • 分布式事务解决方案实战
  • 高并发下的服务降级、限流
  • 基于分布式架构下分布式锁的解决方案
  • 分布式架构下实现分布式定时调度

推荐书籍
《大型网站系统与Java中间件实践》曾宪杰 著
《分布式服务框架原理与实践》 李林峰 著

3. 微服务架构

3.1 微框架(Spring Boot)

  • Spring Boot与微服务之间的关系
  • Spring Boot热部署实战
  • 核心组件之starter、actuator、auto-configuration、cli
  • Spring Boot集成MyBatis实现多数据源路由实战
  • Spring Boot集成Dubbo实战
  • Spring Boot 集成Redis实战
  • Spring Boot集成Swagger2 构建API管理及测试体系
  • Spring Boot实现多环境配置动态解析

3.2 Spring Cloud

  • Eureka注册中心
  • Ribbon集成REST实现负载均衡
  • Fegion声明式服务调用
  • Hystrix服务熔断降级方式
  • Zuul实现微服务网关
  • Config分布式统一配置中心
  • Sleuth调用链路跟踪
  • BUS消息总线
  • 基于Hystrix实现接口降级实战
  • Spring Boot集成Spring Cloud实现统一整合分离

3.3 Docker虚拟化

  • 了解Docker的镜像、仓库、容器
  • Dockerfile构建LNMP环境部署个人博客wordpress
  • Docker Compose构建LNMP环境部署个人博客wordpress
  • Docker网络组成、路由互联、openvswitch
  • 基于swarm构建Docker集群实战
  • Kubernetes简介

3.4 漫谈微服务架构

  • SOA架构和微服务架构之间的区别与联系
  • 如何设计微服务及其设计原则
  • 解惑Spring Boot流行因素及能够解决什么问题
  • 什么是Spring Cloud,为何要选择Spring Cloud
  • 基于全局分析Spring Cloud各个组件所解决的问题

推荐书籍
《Spring Cloud与Docker微服务架构实战》周立 著

4. 并发编程

4.1 Java 内存模型(JMM)

  • 线程通信
  • 消息传递

4.2 内存模型

  • 指令重排序
  • 顺序一致性
  • happens-before
  • as-if-serial

4.3 synchronized

  • 同步、重量级锁
  • synchronized原理
  • 锁优化
    • 自旋锁
    • 轻量级锁
    • 重量级锁
    • 偏向锁

4.4 volatile

  • volatile 实现机制
  • 内存语义
  • 内存模型

4.5 DCL(Double Check Lock)

  • 单例模式
  • DCL(双检锁)
  • 解决方案

4.6 并发基础

  • AQS
    • AbstractQueuedSynchronizer同步器
    • CLH同步队列
    • 同步状态的获取和释放
    • 线程阻塞和唤醒
  • CAS
    • Compare And Swap
    • 缺陷

4.7 锁

  • ReentrantLoak 可重入锁
  • ReentrantLockReadWriteLock 可重入读写锁
  • Condition

4.8 并发工具类

  • CyclicBarrier
  • CountDownLatch
  • Semphore

4.9 并发集合

  • ConcurrentHashMap
  • ConcurrentLinkedQueue

4.10 原子操作

  • 基本类型
    • AtomicBoolean
    • AtomicInteger
    • AtomicLong
  • 数组
    • AtomicIntegerArray
    • AtomicLongArray
    • AtomicReferenceArray
  • 引用类型
    • AtomicReference
    • AtomicReferenceFieldUpdater

4.11 线程池

  • Executor
  • ThreadPoolExecutor
  • CallableFuture
  • ScheduledExecutorService

4.12 其他

  • TheadLocal
  • Fork/Join

推荐书籍
《深入理解Java虚拟机》周志明 著
《实战Java高并发程序设计》 葛一鸣 郭超 编著 墙裂推荐
《Java并发编程实战》Brian Goetz/ Tim Peierls/ Joshua Bloch/ Joseph Bowbeer/ David Holmes/ Doug Lea 著 董云兰等译

5. 性能优化

5.1 理解性能优化

  • 性能基准
  • 性能优化到底是什么
  • 衡量维度

5.2 JVM调优

  • 知其然,知其所以然
  • 什么是JVM运行时数据区
  • 什么是JVM内存模型JMM
  • 各种垃圾回收器使用场景(throughput\CMS)
  • 理解GC日志,从日志看端倪
  • 实战MAT分析dump文件

5.3 Tomcat调优篇

  • 分析Tomcat线程模型
  • Tomcat系统参数认识及调优
  • 基准测试

5.4 MySQL调优

  • 理解MySQL低层B+Tree机制
  • SQL执行计划详解
  • 索引优化详解
  • SQL语句优化

6. 团队协作效率

6.1 Maven

  • 生成可执行jar、理解Scope生产呢过最精确的jar
  • 解决类冲突、包依赖 NoClassDefFoundError问题定位及解决
  • 全面理解Maven的Lifecycle\Phase\Goal
  • 架构师必备之Maven生成Archetype
  • Maven流行插件实战、手写自己的插件
  • Nexus使用、上传、配置
  • 对比Gradle

6.2 Jenkins

持续集成,一次build解决所有手动工作

6.3 Sonar

减少人为疏漏,静态代码检查,让你的代码更健壮

6.4 Git

  • 什么是git以及git的工作原理
  • git常用命令best practise(避坑教学)
  • git冲突怎么引起的,如何解决
  • 架构师职责:git flow规范团队git使用规程
  • 团队案例分享(买不到才是最贵的)

7. 项目实战

未完待续...

其他书籍推荐:
《深入分析Java Web技术内幕》
《Java编程思想》
《Effective Java》
《重构 改善既有代码结构》
《高性能MySQL》

 架构师成长之路
 

相关推荐