扫码关注公众号:芋道源码

发送: 百事可乐
获取永久解锁本站全部文章的链接

《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 jianshu.com/p/ed7a263a436c 「莫那一鲁道」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

前言

本文主要是写给那些想从事中间件开发的同学看的 :)

如果你没有这个打算,那么本文的学习路线非但不实用,还可能会影响你正常的工作 :)

什么是中间件开发?

随着国内软件行业的发展,国内互联网公司规模越来越大,业务越来越复杂,随之使用大量的中间件来提高后台服务性能。由此产生了中间件开发和维护人员。

诚然,在小公司,中间件,例如缓存,MQ,RPC 等服务,极大可能是由业务开发人员自己维护,或者委托第三方云平台运维(支付一些费用)。但,如果后台开发超过 200 人,基本就会组建自己的中间件或者基础架构团队,用于维护后台服务器基础架构和中间件。

更大规模的公司,则由于各种各样的原因(性能,KPI),会自己开发中间件,简称自研。这要求中间件团队需要更多的人员。

中间件开发人员需要哪些素质?

既然需要中间件开发人员,那么中间件开发人员一般从哪里招聘呢?招聘的要求是什么?

通常,一个公司在刚开始组建中间件团队的时候,都会从公司内部挑选精英人才,或者挑选对中间件感兴趣的人才。这时候,可能你没有相关经验,但你仍然有机会参与到中间件开发中。反之,如果你没有中间件开发经验,想通过招聘的方式进入中间件行业,那么相对而言,会有些曲折。

那么,假设,你想从事中间件开发,但,你没有中间件开发经验,且,你的公司也没有组建中间件团队的打算。

该怎么突破?

答: 跳槽。跳槽到别的公司的中间件团队。

这里就涉及到了一个中间件团队需要哪些技能。因为跳槽肯定就要面试,如果你面试的是中间件岗位,那么自然,就需要准备中间件的相关知识。

另外,还有一点,在这个分工明确的时代,即使是中间件,也有很多种类,我这里稍微分一下,可能不是很准确。

  1. 服务治理中间件,例如 RPC 相关中间件,限流熔断,链路追踪,分布式配置中心等等。你可以从 SpringCloud 里找到相关的产品。当然国内也有很多优秀的产品。
  2. 存储中间件,例如缓存,MQ等等,如果存储涉及到分布式(通常都会涉及),那么要求相对较高。
  3. 各种 Proxy,不论是数据库,还是 Cache,还是各种存储,通常单机无法承载海量数据,比较简单的办法就是使用 Proxy 进行代理,让应用透明的使用集群。出于性能考虑,这里通常会使用性能较高的产品,例如 goLang,C++ 等。Java 的长处——开发效率,在这个地方权重不大。
  4. 各种分布式中间件,例如 ZK 这种,这个我个人认为难度是较大的。分布式向来是软件开发中比较困难的一个点。特别是涉及到存储和一致性。
  5. 容器相关,k8s,docker等,容器化已经是大势所趋,其实我也不是很懂😀(听大佬们说的)。

回到之前的话题: 一个中间件开发者需要哪些素质?

  1. 语言基础。从 Java 程序员的角度,基础通常就是:集合,并发,JVM,Netty,IO、NIO(mmap,sendfile)
  2. 计算机基础,由于中间件开发人员经常和 OS 打交道,所以计算机基础也必不可少,例如文件系统(IO/磁盘),进程线程,内存管理。
  3. 网络基础,搞后台的人员,肯定要对网络熟悉了,熟悉在 Linux 下排查网络问题,熟悉 Epoll 原理等。
  4. 分布式相关知识,互联网海量数据背景下,分布式知识必不可少,CAP, Paxos,Raft,zab,2pc,3pc,base等等。最好能根据这些理论写出实现代码。
  5. 熟悉开源实现,即使你是业务开发人员,你也 100% 会接触开源项目,例如 Spring,那么,通常你需要对这种常用的开源代码有深刻的理解,不仅知晓其原理,也领会其设计。从大的角度看,你得看清整个框架的背景,设计和取舍,从小的角度看,你得看清框架的内部实现细节,有哪些有趣的地方(通常这种框架都会进行性能优化)。
  6. 了解行业风向标,中间件行业和业务开发稍有不同,每个中间件的版本升级都会让该领域的开发者们侧目(类似 iPhone 发布会),了解其特性,进而了解行业趋势,最后成为行业引领。

如何成为中间件开发人员?

好,说完了中间件开发人员需要哪些素质,自然,如何成为中间件开发人员,就不言自明了。

说白了,以上 6 个点,都是硬骨头。

  • 对于已经开始工作的人来说,需要平时深刻的积累,说的难听一点,如果你的业务开发任务很重,你很难搞定上门的这些内容。
  • 对于还在上学的同学来说,很爽,你可以用学校(不仅仅指大学,据我所知的大神,通常是初中/小学就开始编程,但这不是必须的)里大把的时间来学习,一个个的搞定这些知识点,和社招不同,如果你的知识达到上面的水平,那么 SP offer 应该是随便拿了 :)

我这里重点和那些平时开发任务不重,想搞中间件的同学聊聊。

我假设你是一个工作 3 年以内的 Java 开发人员,且你可能是培训生,半路出家,科班生,大专生,初中生,且你不在大厂,通常在一个后台开发不超过 200 人的创业公司,title 是 “Java 开发工程师”,并且有一个程序员的梦想,不想 get、set,不想 crud,不想 html 填空,不想和产品同学讨论,也不想和测试同学点点点……(感觉这里会得罪人 =_=||)

你可能想跳槽。

那么你大概需要做以下准备:

  1. 巩固 Java 基础,集合源码,并发源码,JVM 原理,Netty 原理源码,IO 相关(涉及到零拷贝文件存储),这些都是 Java 基础,通常是必须的。
  2. 分布式原理,最起码知晓理论知识,最好能写一个,哪怕参照开源的也行。
  3. 源码,Spring Mybatis Tomcat 等等,这些代码通常是你最先接触的,不妨从这里开始。RPC 中间件相关的,Dubbo,Motan,SOFA,挑一个吧,推荐 SOFA。
  4. 再熟悉熟悉(熟悉指源码和设计)分布式的相关产品,假设你是 Java 开发,推荐 RocketMQ,Apollo 配置中心等等中间件,其实都可以,MQ 相对复杂。
  5. 操作系统,通常,你在研究上面的内容时,会遇到操作系统的疑问,遇到不要绕过,尽量弄明白。
  6. 自己的产品,有就最好了,例如公众号,博客,教学视频,GitHub 项目等等,总之,是拿得出手的东西。
  7. 加大牛好友,了解行业风向标。也许你是一个矜持的人,但从事了这个行业,你有必要和行业里优秀的人学习(看看朋友圈就好)。

结语

通常看完本文,你会有一丝疲惫,甚至带有那么一丝难过:太他么难了!

如果你看完了本文内容,觉得 so easy,那么请左转阿里,或右转美团。

我假定你是前者。那么请你尊重你的梦想。

这里引用一段台词:

如果你有梦想的话,就要去捍卫它。那些一事无成的人想告诉你你也成不了大器。如果你有理想的话,就要去努力实现。就这样。

实际上,这句话也是写给我自己的。与君共勉。

最后,我所说的,都是错的。

文章目录
  1. 1. 前言
  2. 2. 什么是中间件开发?
  3. 3. 中间件开发人员需要哪些素质?
  4. 4. 如何成为中间件开发人员?
  5. 5. 结语