前言
为什么要写这本书
我在年少时也曾做过许多梦,有些梦实现了,有些梦忘却了,这些梦大多都是我一个人的梦。2017年我开始从事数据库连接池中间件的研发和架构工作,并在公司内部写了一系列原创的数据库连接池HikariCP源码解析和实战的文章。在老板张聪的建议下,我申请了微信公众号并坚持分享技术,公众号的初心是:“写的内容要有人阅读,这样才会引起互动交流;有朋友就不会觉得孤独,而且互相的探讨也有助于自身提高”。
也许是注定的安排,我从事的底层数据库中间件采用了HikariCP这款数据库连接池,这让我和HikariCP结下了不解之缘。非常幸运的是,在长达近一年的时间内,每天都有大量的业务开发人员向我咨询数据库连接池的各项问题,最多的时候可以达到十多位同学排队咨询问题,颇有老中医开堂坐诊的感觉。我是一个细心的人,大家的疑问和最后的解决方式都会一一记录下来,我也会协助网友以及其他公司的技术人员分析定位数据库连接池问题,帮助他们的项目顺利上线我也同样可以分享喜悦,这段经历是我技术之路上宝贵的财富。
我毕业于哈工大,哈工大的校训是“规格严格、功夫到家”,母校影响着我的做事风格,我是一个追求极致的人。但每当我协助业务开发排查问题时,却常常发现糟糕的事情。比如很多业务项目里充斥着HikariCP、Druid、BoneCP、c3p0、Tomcat JDBC等多种数据库连接池依赖项,而开发人员却并不知道自己究竟使用的是哪款数据库连接池,而将依赖做到精简是中间件岗位最基本的素养,美国童子军也有一条 “让营地比你来时更干净”的军规,这也是《Clean Code》这本经典书强烈建议的;再比如,我发现很多业务开发同学咨询的问题如果总结下来是可以分门别类的,但是部分人解决了问题并不会分享、传播、传承,进而造成其他人接二连三的因为类似的问题再度陷入费时费力的排查之中;再比如,很多技术人员在学习使用数据库连接池之后想对更深入的技术进行探索,然而市面上却没有任何一本体系、深入地介绍数据库连接池的书,导致他们遗憾得继续投入到其他项目中从而没有完成深入了解数据库连接池的梦。因此,我决定著书立说,这是全中国抑或是全世界第一本介绍数据库连接池的书,由于这本书中凝结的更多的是我多年的实践经验、我对于社区数据库连接池上千条问题讨论的研读等等,所以这本书称之为《HikariCP实战》。
HikariCP日语意思是光,代表了极致。极致无处不在,极致可以小到一次代码提交,可以大到整个研发流程;极致可以小到一行JDK底层代码,也可以大到整个电商系统架构;极致可以运用在技术选型,也可以运用在团队管理。极致也是分场景的,有些是大规模高并发的极致要求,有些原则上不到一定的数量级轻易勿用。极致的追求,不仅仅需要对基础技术原理有足够深入了解,还需要配套的中间件支持,相关的业务协助改造。极致之路,没有银弹,不要想一招毙命,一口吃成个胖子,而是要审时度势,根据当前的现状来裁定。在和HikariCP打交道的期间,我发现这是数据库连接池届一款以追求极致为追求的艺术作品。不论是从相关文献资料、问题讨论、源码更新,还是从HikariCP多年来不辞辛劳一步一个脚印的社区贡献,我都能深深感受到HikariCP在极致之路上一次又一次得超越自我,以狼心追求卓越并面对未来的抉择。
光不但是极致,更是希望。这些年,尤其是写这本书的期间,我承受了不少的委屈,也遭遇了很多的坎坷,经历了生离,也经历了死别。然而我坚持将自己的梦实现,希望能活成一束光,能够温暖到别人能够照亮别人,这才是真正的正能量。《HikariCP实战》,是我的孩子,也是我梦想的实现,但我希望它不再是属于我一个人的梦,更希望能够将HikariCP的光亮照进每一名读者心中,最后送大家一段话:“在一无所有时,也请坚持做一名追光者,愿大家都能找到自己内心深处的光,接近它成为它,去发光去发亮,成为别人眼中的和照亮别人的光,用更亮的光芒照亮世界的每一个角落。你就是太阳,蒸发了彷徨,有你的地方就是天堂。”
读者对象
本书适合所有Java程序员阅读,尤其适合以下读者:
❑Java初中级开发者。
❑系统架构师。
❑中间件开发者。
❑Java多线程、并发开发者。
❑使用HikariCP参与工作流程的公司与集体。
❑开设Java相关课程的大专院校。
❑其他对数据库连接池技术感兴趣的人员。
本书特色
本书是国内抑或是全球第一本系统介绍数据库连接池HikariCP的书,在本书写作的过程中,我尽量避免让这本书成为“代码书”或者“概念书”,全部用自己的实战经验和大量文献涉猎将其凝结为一本高内涵高价值的实战书籍。这本书准确的说写了两年的时间,第一年是我数据库连接池的实践工作以及零散的文字记录,第二年是较为体系化的书籍的梳理成册。本书的目录结构也经过了好几个版本的迭代修改,旨在让读者用最短的时间循序渐进的学完相关知识点;本书的篇幅也做过很多的压缩、删减,聚焦核心内容,像“瑞士军刀”一样短小锋利,可以帮助读者快速学习并解决问题。
本书以阿里大型消息中间件的无池化TCP调优开篇,这也是我在阿里晋升答辩的内容之一,在扩展性能调优知识的同时顺带引出Java平台下性能调优的利器——数据库连接池,这样的开头可以让读者真真切切感受到数据库连接池出现的必要性。接着,从数据库连接池出现的背景、原因入手,循序渐进的一步步为大家盘点了主流的数据库连接池并进行了对比,这也弥补了市面上并没有一本书体系收录介绍各种数据库连接池的遗憾。
当然,这还只是“前戏”,本书最精彩的部分在于对数据库连接池已经有了基本的认识之后,我们将一起剖析HikariCP这款数据库连接池的设计理念和原理,并对其重点功能和模块逐一进行讲解。在分析之余,这本书还会将HikariCP的关联技术、具体实战、扩展内容等等进行补充说明,旨在帮助读者能够举一反三、触类旁通。本书最后以一个疑难杂症问题为例,通过排查问题,帮助大家一起对HikariCP的相关内容回顾和展望,以求融会贯通、温故而知新。
如何阅读本书
本书分为四大部分:
第一部分为准备篇,以阿里连接池极致优化案例引入,帮助读者了解数据库连接池的背景、原理,并全面了解主流的数据库连接池,包含本书的主角HikariCP。
第二部分为基础篇,着重讲解HikariCP参数配置、JDBC等核心模块。这些内容都是HikariCP重中之重的基础,除了原理性介绍以外,为了帮助读者夯实数据库连接池的基础,本书还特地对技术细节、设计理念、实战扩展等方面进行了小知识点的补充。
第三部分为原理篇,首先,全方位的剖析了HikariCP性能极致的原因,这些都会成为读者面试、工作中的谈资;其次,从连接原理、参数原理、动态代理与字节码技术等三个维度作为切入口,分别对HikariCP进行了源码级别的解析,这样全方位的剖析不同于单视角的源码解析,更能将HikariCP的原理立体化的展示在读者面前。
第四部分为实战篇,这是本书精华的部分。HikariCP的监控、扩展技术、常见问题等都是读者工作中较为迫切了解到、使用到的知识点,这些内容大多来自我实战经验的积累及大量文献资料的收集整理,内容包罗万象、精妙绝伦。本部分可以独立阅读,做为案头的工具书使用。
勘误和支持
由于作者的水平有限,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正。为此,我再在GitHub网站上专门新建了一个issue项目(https://github.com/CharlesMaster/Hikari/issues)。你可以将书中的错误、疑问、改进建议以GitHub Issue的形式发布在Bug勘误表页面中,我将尽量在线上为读者提供最满意的解答。当然,更希望大家可以通过issue关于HikariCP展开讨论,互相切磋和共同成长。如果你有更多的宝贵意见,也欢迎发送邮件至邮箱just_love_zzk@126.com,期待能够得到你们的真挚反馈。
致谢
首先要感谢伟大的HikariCP作者Brett Wooldridge,他开创了一款影响我整个人生的软件。
感谢Apache ShardingSphere PPMC张亮、Apache SkyWalking PPMC吴晟在我从事数据库连接池工作过程中给予的指导与帮助。感谢奇点云应用研发总监、首席架构师张聪做为引路人将我领入了数据库连接池的领域,在你的支持与鼓励下才促成了这本书的撰写与出版。
感谢技术圈子中每一位充满创意和活力的朋友——何涛、程超、右军、李艳鹏、杨俊,以及名单之外的更多朋友,感谢你们长期对我的帮助与信任。
感谢机械工业出版社华章公司的编辑杨福川老师和孙海亮老师,在这一年多的时间中始终支持我的写作,你们的鼓励和帮助引导我能顺利完成全部书稿。
感谢加工编辑王玉婵老师为本书付出的劳动。
最后感谢我的爸爸、妈妈、小姨、姨夫、爷爷、奶奶、外公、外婆,感谢你们将我培养成人,并时时刻刻为我灌输着信心和力量!
谨以此书献给我最亲爱的家人,以及众多热爱HikariCP的朋友们!