谈谈中间件开发,给想从事中间件开发的同学

本文涉及的产品
性能测试 PTS,5000VUM额度
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 本文主要是写给那些想从事中间件开发的同学看的 :)如果你没有这个打算,那么本文的学习路线非但不实用,还可能会影响你正常的工作 :)什么是中间件开发?

前言

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

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

什么是中间件开发?

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

诚然,在小公司,中间件,例如缓存,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,那么请左转阿里,或右转美团。

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

这里引用一段台词:

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

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

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

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
7月前
|
自然语言处理 中间件 编译器
C语言的编译器和中间件开发
C语言的编译器和中间件开发
|
消息中间件 开发框架 运维
J2EE开发中消息中间件的介绍和选择
J2EE开发中消息中间件的介绍和选择
180 0
|
7月前
|
缓存 中间件 PHP
【PHP开发专栏】PHP框架中的路由与中间件
【4月更文挑战第29天】本文探讨了PHP框架中的路由和中间件概念。路由负责将HTTP请求映射到控制器方法,提供灵活的请求处理和URL管理。中间件则是在请求处理前后插入的代码,用于实现如身份验证、日志等功能,与业务逻辑解耦。通过Laravel框架的示例展示了如何定义路由和创建中间件,以实现代码的模块化和可维护性。
88 0
|
7月前
|
缓存 中间件 Python
Python Web 开发: 解释 Django 中的中间件是什么,以及如何使用?
Python Web 开发: 解释 Django 中的中间件是什么,以及如何使用?
95 0
|
Java 中间件 API
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
356 10
【分布式技术专题】「Zookeeper中间件」给大家学习一下Zookeeper的”开发伴侣”—Curator-Framework(基础篇)
|
存储 缓存 JSON
一个C#开发的非常实用的缓存中间件
*这是一个用C#开发的.Net开源的缓存中间件,他支持各种缓存并提供了很多高级功能。它的主要目标是让开发人员开发更简单、特别是一些复杂的缓存场景。
229 8
一个C#开发的非常实用的缓存中间件
|
消息中间件 Java Kafka
SpringCloud微服务实战——搭建企业级开发框架(三十六):使用Spring Cloud Stream实现可灵活配置消息中间件的功能
在以往消息队列的使用中,我们通常使用集成消息中间件开源包来实现对应功能,而消息中间件的实现又有多种,比如目前比较主流的ActiveMQ、RocketMQ、RabbitMQ、Kafka,Stream等,这些消息中间件的实现都各有优劣。   在进行框架设计的时候,我们考虑是否能够和之前实现的短信发送、分布式存储等功能一样,抽象统一消息接口,屏蔽底层实现,在用到消息队列时,使用统一的接口代码,然后在根据自己业务需要
458 60
SpringCloud微服务实战——搭建企业级开发框架(三十六):使用Spring Cloud Stream实现可灵活配置消息中间件的功能
|
消息中间件 数据采集 Java
开发神技!阿里消息中间件进阶手册限时开源,请接住我的下巴
相信大家在实际工作中都用过消息中间件进行系统间数据交换,解决应用解耦、异步消息、流量削峰等问题,由此消息中间件的强大功能想必也不用我多说了!目前业界上关于消息中间件的实现多达好几十种,可谓百花齐放,所用的实现语言同样也五花八门。不管使用哪一个消息中间件,我们的目的都是实现高性能、高可用、可伸缩和最终一致性架构。
|
JavaScript NoSQL 中间件
【Node.js实战】一文带你开发博客项目之初识Express(安装Express,处理路由,中间件机制)
【Node.js实战】一文带你开发博客项目之初识Express(安装Express,处理路由,中间件机制)
134 0
|
安全 中间件 开发者
【Django学习笔记 - 9】:装饰器在类视图中的使用、中间件(开发中间件)、知识点小补充(子应用的集中管理)
【Django学习笔记 - 9】:装饰器在类视图中的使用、中间件(开发中间件)、知识点小补充(子应用的集中管理)
390 8
【Django学习笔记 - 9】:装饰器在类视图中的使用、中间件(开发中间件)、知识点小补充(子应用的集中管理)