作者:路路
热爱技术、乐于分享的技术人,目前主要从事数据库相关技术的研究。不定时更新个人公众号WU双。
本文来源:原创投稿
爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。
前言
一个好的开源产品,首先需要有一个成熟稳定的版本,其次需要有一个活跃的社区。成熟稳定的软件能够吸引用户使用,从而构建产品的社区,社区反过来也能够促进产品的进一步发展完善。
所以说,产品与社区是相互作用,相辅相成的关系。
今天想为大家介绍下中间件开发所需的技能,说不定能够吸引对中间件开发感兴趣的同学,进而成为DBLE的源码贡献者呢。
本文首先介绍中间件开发所需的通用技能,这些技能不光光是DBLE开发所需要的,而是所有中间件开发都需要的通用技能。然后更进一步,介绍数据库中间件开发所需的特殊技能,这些技能可能与其他中间件开发技能有所不同。
中间件开发所需的通用技能
中间件是一种独立的系统软件服务程序,对上服务于具体的应用,常见的中间件有数据库中间件、消息中间件、缓存中间件等。
中间件开发对于技术的要求可以说还算是较高的,以下是我总结的中间件开发所需的比较重要的技术。
1、 多线程
多线程技术是中间件开发所必须掌握的核心技术之一,原因在于其对性能的提升作用。
多线程能够充分利用多核CPU的性能,从而提高系统的吞吐量,而线程池技术又能够减少线程创建及销毁的开销,从而更进一步提升系统的性能。
当然多线程也同样带来了一些问题,可见性、有序性、活跃性,这些都是多线程技术带来的问题,也有人说性能的提升是他可以忍受多线程带来这些问题的唯一理由。
无论如何,多线程技术都是中间件开发所必须的技能。当然多线程技术的学习也不是那么的容易,不要相信网上所说的什么一篇文章精通多线程这些内容,永远没有一篇文章能让你精通多线程,知识的学习没有捷径。
对于JAVA的多线程学习,我推荐《JAVA并发编程实践》,毕竟作者都是JCP的专家组成员,另外JAVA程序员可以通过完整的阅读JUC源码包来学习多线程。
2、 网络编程
网络编程对于中间件的开发而言,也可以说是最重要的技术之一了。
网络连接的建立及网络数据包的读写、网络协议的处理,是中间件的基础也是难点。当然现在有一些网络框架比如Netty能够帮我们很好的处理这些问题,但对于中间件开发者而言,对网络编程还是越熟悉越好,这样在面对一些网络问题的时候,我们也能够不慌不乱,知其然知其所以然的底气,在这时应该能够很好的体现出来。
对于DBLE的网络处理,我之前写过一系列的源码解读文章,DBLE的网络模块都是用JDK原生IO包实现的,通读一遍应该可以帮助大家大概了解网络编程。
3、 设计模式
中间件不同于业务开发,不能一遇到新需求就简单的加代码加逻辑进行处理,而是要从整体架构角度考虑,必要时还需要重构现有模块,以便添加新的功能扩展。
所以对于中间件开发,就需要我们掌握各类设计模式,同时也需要掌握重构相关的技能。
设计模式推荐《设计模式:可复用面向对象软件基础》这本书,重构技能推荐《重构:改善既有代码的设计》这本书。同样,知识的学习没有捷径,还是需要你耐心读完,另外通过实践去理解,才能有所掌握。
4、 异步编程
高性能框架一般都有很多的异步逻辑,通过异步回调来实现流程控制。异步编程在获得高性能的同时,也失去了一定的可读性,因为代码的逻辑可能被碎片化了。但对于高性能应用来讲,异步编程也是需要去学习的。
5、 算法及数据结构
算法及数据结构是计算机的基础学科,所以对于中间件来讲,自然也离不开它们。
6、 测试
如何保证产品的质量,除了软件开发流程的标准化,代码review等,测试可以说是最重要的一环了。
测试有最基本的单元测试、集成测试,还有性能测试,疲劳测试等。对于中间件开发人员来说,这些都是需要掌握的测试技能。
7、性能调优
决定系统性能瓶颈的是系统中的串行部分,以及与外部系统的交互部分。
性能调优的第一步是定位出系统的性能瓶颈点,这当然需要你对系统有很深的理解,同样也需要度量工具的辅助。
性能调优的思路包括将串行任务并行化,任务异步化等。
以上是个人认为的中间件开发所需要的通用技能,可能不一定很全,但最基础最重要的内容应该都包括了。
数据库中间件开发所需的特殊技能
数据库中间件与中间件对比多了哪几个关键字,回答是“数据库”。所以数据库中间件开发所需的特殊技能,其实是与数据库技术相关的技能。
实际上,对于数据库中间件开发人员来讲,越往后越会发现自己离数据库越来越近。
数据库中间件开发所需的特殊技能如下。
1、 SQL
数据库中间件的SQL路由,SQL改写等功能都是基于对SQL的理解来进行的。所以SQL解析是数据库中间件的重要功能之一。
SQL作为数据库查询语言,对SQL的解析与其他任何一门语言的解析都一样,包括词法分析、语法分析。我之前也写过一篇关于DBLE SQL解析的文章,大家可以在公众号中搜索进一步阅读了解。
SQL完成解析后,下一步自然是执行,数据库中间件虽然大部分场景可以将SQL下推到数据库节点执行,但有一些复杂SQL还是需要在中间件这一层进行处理的,这里又涉及到执行计划的优化,返回结果处理算法等,这些内容可以说是属于重难点内容了。
2、 事务
事务是数据库的核心概念,对于数据库中间件来讲事务也同样重要。尤其是在分布式事务的场景下,数据库中间件作为事务协调器的角色,对事务的理解,能帮助你理解该场景下数据库中间件是如何保证数据的一致性的。
3、 数据库协议
数据库中间件对外实际表现为数据库服务端。这里就涉及到数据库协议的处理。
DBLE实现了MySQL协议,所以你连接DBLE会发现和连接MySQL的效果一样。
对于DBLE的开发,你需要对MySQL协议有一定的了解,MySQL的协议,大家可以参考下面的链接。
https://dev.mysql.com/doc/internals/en/client-server-protocol.html
4、 复制
对于数据库的高可用,只能通过复制的方式来实现。
对于数据库中间件来讲,读写分离功能能够利用数据库从节点进行读取,进而提升应用的吞吐量,降低主节点的负载。所以数据库的主从复制,对于数据库中间件开发人员也是需要了解的。
最后
本文列举了中间件开发所需要的一些技能,希望能让大家对于中间件开发有一定的了解,更进一步希望能帮助对中间件开发感兴趣的同学如何开始学习有个方向上的帮助。
可能有同学会觉得要学习的东西这么多,什么时候才能真正具备开发中间件的技能呀。
其实我们不需要等事情完全准备好了再去做,因为你可能会觉得准备工作永远都不够充分。所以不妨找一个简单的切入点开始实践,例如对于DBLE一个小小的bug修复,一个配置的修改,尝试去参与修改源码,在此过程中相信DBLE的官方团队也会给予你相应的帮助。
希望今天的文章能帮助大家了解中间件的开发。