IT:后端进阶技术路线图(初级→中级→高级)、后端开发工程师(技术方向分类之后台业务开发/中间件/内核/分布式架构)基础知识简介、技术路线/技术趋势指南(如何选择自己的技术方向)之详细攻略
目录
后端进阶技术路线图(初级→中级→高级)
初级(技术基础、编程工具)
技术基础(网络/操作系统/基本前端知识/编程语言/算法与数据结构/数据库)
编程工具(版本管理/构建工具/编辑器/IDE)
相关学习资源
中级(编程框架/JVM/消息队列/存储/工程)
高级(编程范式/设计原则/分布式系统)
一、后台业务开发大佬——后台架构/业务目标/编程语言的演进
1.0、数据层→服务层→通讯层→展现层
1.1、后台技术架构演进:局域网→广域网→单体多层架构→SOA/EDA →虚拟机→云计算→微服务→云原生
1.2、业务目标演进:高并发/高性能→稳定性→自动运维
1.3、后台开发语言演进:C++语言→PHP语言→JAVA语言→Go语言→Python语言→Rust语言
二、中间件高手——消息中间件、缓存中间件、RPC框架、负载均衡
2.1、消息中间件:提供可靠的消息传输
ActiveMQ、RabbitMQ、RocketMQ、Kafka
各种特点以及选择技巧
Apache Pulsar(新一代消息中间件)VS Kafka
2.2、缓存中间件:提高访问性能
Redis
2.3、RPC提供调用服务
RPC框架:允许像调用本地服务一样调用远程服务
grpc、Thrift、HSF(阿里)、Dubbo、SOFA-RPC——微服务时代
2.4、负载均衡
未来发展方向
三、内核大师——探究底层奥秘:云计算、浏览器内核、数据库内核、操作系统、嵌入式、JDK
3.1、云计算:一切皆服务
Cloud Computing:云计算的简介之云计算的三层服务类型(从服务的层次)——IaaS、PaaS、SaaS的简介、核心技术之详细攻略
3.2、web内核:浏览器方向
Webkit
Chromium
3.3、数据库内核
DBMS/Database:数据库管理的简介、安装(注意事项等)、学习路线(基于SQLSever深入理解SQL命令语句综合篇《初级→中级→高级》/几十项代码案例集合)之详细攻略
3.4、操作系统
3.5、嵌入式
3.6、JDK—主要用于移动设备、嵌入式设备上的Java开发工具包
四、分布式架构专家——中台架构、微服务、云原生
4.1、中台架构—业务前台、业务中台/数据中台、技术中台
4.2、微服务、云原生
CloudNative:云原生(分布式云)的简介(发展&演变/为什么需要/优势&价值/安全/对比传统企业应用)、四大核心技术、CNCF云原生交互景观、云原生技术的使用经验及方法之详细攻略
后端进阶技术路线图(初级→中级→高级)
初级(技术基础、编程工具)
技术基础(网络/操作系统/基本前端知识/编程语言/算法与数据结构/数据库)
网络 | 网络:DNS、TCP&IP、浏览器、HTTP |
操作系统 | 操作系统: |
基本前端知识 | 基本前端知识:HTML、CSS、JavaScript |
编程语言 | 编程语言:Java、Go、Kotlin、Bash、C/C++ |
算法与数据结构 | 算法与数据结构:性能分析、基本数据结构(列表. 树等)、排序、查找、图 |
数据库 | 数据库:索引、事务、分库分表 |
编程工具(版本管理/构建工具/编辑器/IDE)
版本管理 | 版本管理:Git、版本控制系统、代码托管服务 |
构建工具 | 构建工具:Maven、Gradle |
编辑器 | 编辑器:VS Code、Emacs、VIM |
IDE | IDE:IntelliJ IDEA |
相关学习资源
图书推荐 | 陈鸣译,《计算机网络:自顶向下方法(原书第6版)》 龚奕利,贺莲译,《深入理解计算机系统(原书第3版)》 谢路云译,《算法(第4版)》 陈昊鹏译,《Java编程思想》 李道兵等译,《Go程序设计语言》 《ProgrammmingKotlin》 刘晓霞等译,《MySQL必知必会》 《Pro Git》 许晓斌,《Maven实战》 李松峰等译,《JavaScript高级程序设计(第3版)》 Cameron Newham等,《学习bash(第二版)》 |
中级(编程框架/JVM/消息队列/存储/工程)
编程框架 | 应用框架:Spring、play 网络框架:Netty 持久化:MyBatis、Hibernate RPC:gRPC、Dubbo |
JVM | 执行系统:类结构与字节码、类加载机制 内存管理:内存区域与溢出、垃圾收集器与内存分配策略、性能监控与故障处理工具 并发:内存模型与线程、线程安全与锁优化 |
消息队列 | Kafka RocketMQ |
存储 | Redis MySQL |
工程 | 测试:单元测试、集成测试、功能测试 安全:OAuth、HTTPS、CORS(Cross-origin resource sharing)、内容安全策略 持续集成: |
相关学习资源 | Brian Goetz等,《Java并发编程实战》 张卫滨译,《Spring实战》 何品译,《Netty实战》 周志明,《深入理解Java虚拟机》 Neha Narkhede等,《Kafka: The Definitive Guide》 黄健宏,《Redis设计与实现》 《计算机程序的构造和解释》 |
高级(编程范式/设计原则/分布式系统)
编程范式 | 函数式编程 面向对象编程 泛型编程 类型系统 装饰器模式 代理模式 |
设计原则 | DRY(Dont Repeat Yourself) KISS(Keep is Simple, Stupid) S.O.L.I.D.:SRP、OCP、LSP、ISP、DIP |
分布式系统 | 基础理论:节点与网络、时间与顺序、ACID、CAP/FLP/DLS、一致性理论 设计模式:网关模式Gateway、边车模式Sidecar、服务网格Service Mesh、防腐层Anti-corruption Layer、布式锁、配置中心、异步通讯、幂等性 弹性(容错)设计:服务降级、服务限流、熔断设计、补偿事务、隔离设计、异步通讯、幂等性设计、重试设计、Bulkhead 工程:监控追踪、服务/资源调度、流量控制、数据调度、开发与运维自动化、负载均衡&健康检查、服务发现&动态路由&健康检查、自动化运维 |
相关学习资源 | 赵军平等译,《数据密集型应用系统设计》 Marko Luksa,《Kubernetes in Action》 Distributed systems theory for the distributed systems engineer 孙宇聪译,《SRE:Google运维解密》 崔力强等译,《微服务设计》 |
参考文章:https://codechina.gitcode.host/developer-roadmap/backend/intro/
一、后台业务开发大佬——后台架构/业务目标/编程语言的演进
1.0、数据层→服务层→通讯层→展现层
后台路线,都是面对后台服务器业务,比如web后台服务器,视频后台服务器,搜索后台服务器,游戏后台服务器,直播后台服务器,社交IM后台服务器等等,大部分代码和业务逻辑相关,想成为大佬,必须精通专业领域业务知识。
但同时也存在一些通用的技术要求, 比如熟悉编程语言,数据结构与算法,网络编程,TCP/IP协议,数据库,中间件,高性能、高可用技术。
展现层 | Web:HTML、HTMLS、VGA、Vue App:ios、Android) 微信公众号:微信小程序) Restfu接口: |
通讯层 | CDN、SLB、Netty、Socket、HTTP/HTTPS |
服务层 | 监控&保护:Sleuth链路跟踪、Turbine集群监控、Hystrix容错保护 Zuul 业务集群:服务 治理&配置:Consul服务治理、Eureka服务治理、Clonfig配置管理 Spring Cloud Bus消息总线、Cloud Data Flow大数据操作、Cloud Task任务调度、Cloud Data Stream数据流操作 Netflix Eureka、Netflix Zuul、Spring Cloud Config、Spring Cloud Bus … |
数据层 | mongodb、mysql、HDSF、ElasticSearch |
1.1、后台技术架构演进:局域网→广域网→单体多层架构→SOA/EDA →虚拟机→云计算→微服务→云原生
随着 PC 局域网,特别是关系型数据库的应用,基础架构发展成了两层架构;随后是广域网的发展,由单体多层架构,出现了SOA/EDA 架构盛行;接下来是虚拟机,再到今天的云计算基础架构,又出现了微服务,之后是 Container as a Service、Serverless ,到最近很火云原生架构等,可以看到架构的变化都是要充分利用 IT 基础设施。
1.2、业务目标演进:高并发/高性能→稳定性→自动运维
以往互联网流量爆发时代,先抗住流量峰值,高并发/高性能,支持水平扩展是后台设计的重要目标 ;
当前互联网流量见顶,存量竞争加剧,后台服务的稳定性变得愈发重要;
企业降本增效决心变强,研发效率,监控运维平台,自动化测试,CI/CD流水线等也变得重要起来。
1.3、后台开发语言演进:C++语言→PHP语言→JAVA语言→Go语言→Python语言→Rust语言
C++语言 | 服务器硬件资源昂贵年代,C++语言既能高性能,又能代码复用(OOP编程),成了很多大厂后台开发的主力语言; |
PHP语言 | 第一代web后台开发主流是PHP语言,那时候互联网主流的后台架构是LAMP架构; |
JAVA语言 | 随着电商兴起,Android 手机普及,大数据出现,推动JAVA语言技术栈发展,JAVA成了互联网主流后台编程语言。 |
Go语言 | 随着云计算时代到来,云原生计算兴起,Go语言生态发展稳健,兼顾性能和开发速度,越来越多企业在生产中使用 Go语言落地业务,目前很多大厂后台开发语言已经开始转向Go。 |
Python语言 | 人工智能发展,也推动Python语言发展,简单,上手快,开发效率高,成了一些不在乎性能后台组件的开发语言。 |
Rust语言 | 由于安全性,稳定性越发重要,Rust语言有可能成后台关键组件开发语言,兼顾性能和内存安全性,用来替换后台系统核心的C++组件; |
目前国内各个大厂主流后台语言不尽相同:
●腾讯偏向C++,Go等,Go越来越流行
●阿里,拼多多,美团,京东偏向Java
●字节偏向Go/Python
●百度偏向C++
●华为偏向C/C++
对于未来,Python、Go、Rust 成为后端未来最先考虑学习编程语言。
二、中间件高手——消息中间件、缓存中间件、RPC框架、负载均衡
中间件(Middleware)一种应用于分布式系统的基础软件,自上世纪80年代诞生以来,在分布式环境中,低调地发挥着重要作用。基于中间件,系统软件与应用软件之间实现了高效连接与沟通,应用开发得以提速。
2.1、消息中间件:提供可靠的消息传输
ActiveMQ、RabbitMQ、RocketMQ、Kafka
ActiveMQ | RabbitMQ | RocketMQ | Kafka | |
性能(单台) | 6000+ | 万级(12000+) | 十万级 | 百万级 |
消息持久化 | 支持 | 支持 | 支持 | 支持 |
多语言支持 | 支持 | 支持 | 很少 | 支持 |
社区活跃度 | 高 | 高 | 中 | 高 |
支持协议 | 多(JMS,AMQP..) | 多(AMQP,STOMP,MQTT….) | 少 | 少 |
综合评价 | 优点:社区比较成熟,已经在很多公司得到应用。较多的文档。各种协议支持较好,有多个语言的成熟客户端。 缺点:性能较弱。缺乏大规模吞吐的场景的应用,而且版本迭代很慢,有江河日下之感。不推荐使用 | 优点:性能较好,管理界面较丰富,在互联网公司也有较大规模的应用,有多个语言的成熟客户端。 缺点:内部机制很难了解,也意味很难定制和掌控。集群不支持动态扩展。 | 优点:模型简单,接口易用。在阿里有大规模应用。分布式系统,性能很好,版本更新很快。 缺点:文档少,支持的语言较少,尚未主流。 | 优点:天生分布式,性能最好,常见用于大数据领域。 缺点:运维难度大,偶尔有数据混乱的情况对ZooKeeeper强依赖。多副本机制下对带宽有一定的要求。 |
各种特点以及选择技巧
RabbitMQ | (1)、在吞吐量方面虽然稍逊于 Kafka 和 RocketMQ ,但是由于它基于 erlang 开发,所以并发能力很强,性能极其好,延时很低,达到微秒级。 (2)、但也因为 RabbitMQ 基于 erlang 开发,所以国内很少有公司有实力做erlang源码级别的研究和定制。 |
RocketMQ | (1)、阿里出品,Java 系开源项目,源代码我们可以直接阅读,然后可以定制自己公司的MQ,并且 RocketMQ 有阿里巴巴的实际业务场景的实战考验。(2)、RocketMQ 社区活跃度相对较为一般,不过也还可以,文档相对来说简单一些。 (3)、还有就是阿里出台的技术,你得应对这个技术万一被抛弃,社区黄掉的风险,如果你们公司有技术实力我觉得用RocketMQ 挺好的。 |
Kafka | (1)、特点很明显,就是仅仅提供较少的核心功能,但是提供超高的吞吐量,ms 级的延迟,极高的可用性以及可靠性,而且分布式可以任意扩展。 (2)、同时 Kafka 最好是支撑较少的 topic 数量即可,保证其超高吞吐量。Kafka 唯一的一点劣势是有可能消息重复消费,那么对数据准确性会造成极其轻微的影响,在大数据领域中以及日志采集中,这点轻微影响可以忽略。 (3)、Kafka天然适合大数据实时计算以及日志收集。 |
选择方法 | (1)、如果业务场景对并发量要求不是太高(十万级、百万级),那这四种消息队列中,RabbitMQ 一定是你的首选; (2)、如果是大数据领域的实时计算、日志采集等场景,用 Kafka 是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界这个领域的事实性规范; |
Apache Pulsar(新一代消息中间件)VS Kafka
Apache Kafka | Apache Pulsar | |
存储中心区分 | 以分区为存储中心 | 以 Segment为存储中心 |
Apache Pulsar 这种独特的基于分布式日志存储的以 Segment 为中心的发布/订阅消息系统可以提供许多优势,例如可靠的流式系统,包括无限制的日志存储,无需分区重新平衡的即时扩展,快速复制修复以及通过最大化数据放置实现高写入和读取可用性选项。
2.2、缓存中间件:提高访问性能
CPU的缓存的作用是为了减少对内存访问,同样扩展到分布式系统里面,缓存中间件可以提高对组件数据的访问性能。
Redis
简介 | 比较流行缓存中间件,根据局部性原理,冷热数据分离,一般用来加快数据库的高频数据访问: |
未来优化方向 | 高可用、持久化优化、安全加密、IO&连接优化、多线程优化、数据结构优化&支持更多数据结构 |
2.3、RPC提供调用服务
RPC框架:允许像调用本地服务一样调用远程服务
RPC远程过程调用协议,Remote Procedure Call Protocol,允RPC是指远程过程调用,也就是说两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法,由于不在一个内存空间,不能直接调用,需要通过网络来表达调用的语义和传达调用的数据。
grpc、Thrift、HSF(阿里)、Dubbo、SOFA-RPC——微服务时代
框架 | 微服务时代的远程服务调用框架,如grpc、Thrift、HSF(阿里)、Dubbo、SOFA-RPC; |
未来发展方向 | ●支持微服务技术演进; ●框架侵入性改进,语言无关,通信协议无关; ●Service Mesh,Service Mesh是一个基础设施层,其独立运行在应用服务之外,提供应用服务之间安全、可靠、高效的通信,并为服务通信实现了微服务运行所需的基本组件功能,包括服务注册发现、负载均衡、故障恢复、监控、权限控制等等; ●性能优化,序列化协议优化,消息编码优化,网络IO优化等; |
2.4、负载均衡
负载均衡(Load Balancing),是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器,来提高网站、应用、数据库或其他服务的性能和可靠性。
硬件:F5、Redware…
软件:lvs(四层)、haproxy(四,七层)、nginx(七层)…
未来发展方向
支持更智能调度算法 | 循环:请求按顺序分布在服务器组中。 最少的连接:一个新的请求被发送到与客户端的当前连接最少的服务器。每个服务器的相对计算能力被考虑到确定哪个服务器的连接最少。 最短时间:将请求发送到由结合了 最快响应时间和最少活动连接的公式选择的服务器。NGINX Plus 独有。 Hash:根据您定义的密钥分发请求,例如客户端 IP 地址或 请求 URL。 如果上游服务器集发生变化,NGINX Plus 可以选择应用一致的哈希来最小化负载的重新分配。 IP Hash:客户端的 IP 地址用于确定哪个服务器接收请求。 |
业务上云 | 云上负载均衡(LaaS,PaaS服务) |
高性能优化 | 降低成本,大流量(IO优化,DPDK,FPGA,P4演进),硬件。 |
高可用 | 可观测,监控统计,告警系统,平滑扩容,服务剔除,无状态化。 |
三、内核大师——探究底层奥秘:云计算、浏览器内核、数据库内核、操作系统、嵌入式、JDK
3.1、云计算:一切皆服务
云计算进程提速,一切皆服务,导致原来不挣钱底层技术,可以卖钱了,技术可以通过云计算向外输出,这是底层技术人赚钞票春天的到来。
Cloud Computing:云计算的简介之云计算的三层服务类型(从服务的层次)——IaaS、PaaS、SaaS的简介、核心技术之详细攻略
Cloud Computing:云计算的简介之云计算的三层服务类型(从服务的层次)——IaaS、PaaS、SaaS的简介、核心技术之详细攻略_一个处女座的程序猿的博客-CSDN博客
3.2、web内核:浏览器方向
C++是主要语言,约占代码库的一半。这包括Blink和V8 引擎、HTTP和其他协议的实现、内部缓存系统和其他基本浏览器组件。
一些用户界面是用HTML、CSS和JavaScript 实现的。大量的网络平台测试也是用这些语言编写的。大约 10% 的代码库是用C编写的。这主要来自提供基本功能的第三方库,例如SQLite和众多编解码器。支持移动操作系统需要特殊的语言:Java的用于Android的,和iOS的两个斯威夫特和Objective-C的。(Apple的WebKit引擎的副本也在代码库中,因为 iOS 浏览器需要它)
Webkit
WebKit是Safari、Mail、App Store 和 macOS、iOS 和 Linux 上的许多其他应用程序使用的网络浏览器引擎。
Chromium
Chromium是一个用于网络浏览器的免费开源 代码库,主要由Google开发和维护。Google 使用该代码制作其Chrome网络浏览器,该浏览器具有附加功能。
Chromium代码库被广泛使用。Microsoft Edge、Opera,QQ浏览器,UC浏览器等国内浏览器,和许多其他浏览器都基于该代码。此外,代码的重要部分被多个应用程序框架使用。
3.3、数据库内核
DBMS/Database:数据库管理的简介、安装(注意事项等)、学习路线(基于SQLSever深入理解SQL命令语句综合篇《初级→中级→高级》/几十项代码案例集合)之详细攻略
DBMS/Database:数据库管理的简介、安装(注意事项等)、学习路线(基于SQLSever深入理解SQL命令语句综合篇《初级→中级→高级》/几十项代码案例集合)之详细攻略_一个处女座的程序猿的博客-CSDN博客
3.4、操作系统
简介 | 目前国家大力发在新基建,鼓励和政策支持企业开发基础技术,操作系统当前就是一个重要方向,目前各大公司要么自研OS,要么基于开源OS进行二次开发。 |
目前热门技术方向 | 鸿蒙开源OS,自研OS 嵌入式OS,自研和基于嵌入式Linux 手机OS,基于Android二次开发 云计算OS,基于Linux 内核, Redhat发行版等二次开发 开发OS,主要是适配新硬件,性能优化(调度性能,内存分配性能,协议栈处理性能,文件系统优化),稳定性优化,虚拟化技术等。 |
如果对OS有情怀,喜欢和底层硬件打交道,可以选择操作系统方向,目前前景还不错!
3.5、嵌入式
简介 | 由于5G,AI发展,手机,智能硬件,自动驾驶,IoT领域又焕发新春,各种智能硬件起飞。 |
目前热门技术方向 | 嵌入式OS:Vxworks,Alios, TencentOS tiny, Huawei LiteOS、RT-Thread等; 智能家居系统: 手机OS:鸿蒙,Android等; 手机性能优化:性能和节能更强; 自动驾驶技术: |
3.6、JDK—主要用于移动设备、嵌入式设备上的Java开发工具包
自1995年Sun公司推出Java至今,Java这门编程语言已经风光了25年。最近关于Java要没落的言论甚嚣尘上,但Java仍然是国内中国互联网公司首选的编程语言,诸如阿里巴巴、京东、百度、腾讯、美团等。
随着互联网、大数据、AI的迅猛发展,国内JAVA生态已逐渐划分成了几大阵营,J2EE企业级应用传统领域是大厂商(甲骨文、微软)主导,互联网领域是pivotal,互联网中间件是阿里云和pivotal在推spring cloud,大数据、移动安卓又分别是另一个独立生态。
OpenJDK(开放 Java 开发工具包)是Java 平台标准版(Java SE)的免费开源实现。目前各个大公司都在发展自己JDK版本,如果想在Java领域深耕且想转为底层开发,可以选择JDK这条路!
四、分布式架构专家——中台架构、微服务、云原生
4.1、中台架构—业务前台、业务中台/数据中台、技术中台
当前企业做大做强后,业务必然会增多,开始出现重复造轮子,由于业务扩张,本身人力就不足,所以长期方案还是会采用类似中台的技术,这样节约人力,具体怎么落地,这个是考验团队和公司从上到下的推动能力了。
4.2、微服务、云原生
CloudNative:云原生(分布式云)的简介(发展&演变/为什么需要/优势&价值/安全/对比传统企业应用)、四大核心技术、CNCF云原生交互景观、云原生技术的使用经验及方法之详细攻略
CloudNative:云原生(分布式云)的简介(发展&演变/为什么需要/优势&价值/安全/对比传统企业应用)、四大核心技术、CNCF云原生交互景观、云原生技术的使用经验及方法之详细攻略_一个处女座的程序猿的博客-CSDN博客
参考文章
后端进阶技术路线图(初级→中级→高级)
后端技术趋势指南|如何选择自己的技术方向_极客重生的博客-CSDN博客