• 从使用elasticsearch做开发,到写elasticsearch源码


      2020.05.06 进入中科院工作,做elasticsearch开发。

      2022.04.25 晚上十点收拾完东西,正式从中科院“毕业”(离职)。

      2022.04.26 早上无缝衔接进入新公司办理入职。新公司连工卡都没有,直接刷脸进入。 

      我实现了从使用elasticsearch开发搜索系统,到写elasticsearch源码的转变。以前是用es,现在是在es的基础上舔砖加瓦,去完善优化它。

    谈谈我这两个月的真实感受

      现在是2022.06.26,这两个月的时间都在适应新的环境,停更整整两个月了!我开始慢慢接收把自己的兴趣当做工作,慢慢的接收更长的工作时间,慢慢的接收较长的通勤时间,慢慢的接收新的工作相处模式。

      一天全部时间干喜欢的事,是蛮幸福的一件事,但是真的感觉到了一点点疲惫,可能这是一个慢慢适应的过程。两个月了,八点多到家,做完饭,吃完快九点了,第二点八点多还有出门。我一下子不能接收全部时间都拿来搞自己本来的兴趣(elasticsearch)。但是两个月的不输出(写文章),让我感觉到很空虚,不安,不踏实。

      不过现在好了,重操结业,我又回来了!我准备把之前的flag实现(两年的时间,把elasticsearch的核心部分的每一行代码都看一遍),除此之外,我还想做另外一件事情,在elasticsearch源码的学习过程中,因为没有太多资料,所以感觉学起来很难,主要是需要磨时间。有时候我觉得,以大家的智商,看一遍es源码应该也不难,但是大家做起来可能会比较浪费时间,因为看源码本身就是一个磨时间的事情。我相信大家都能看懂,只是没有时间罢了。为什么关于源码的部分,网上的学习资料很少?难道这真的是一件前不见古人后不见来者的事情吗?不见得,只不过是大家懒得分享罢了。

    新的flag

      我想做一件事,将elasticsearch源码作为我这两年深耕的方向。先自己把源码吃透了,然后去录制一些免费的讲解视频,分享出去。我希望有很多的人能够参与到elasticsearch 的开发中来。我愿意去做一个开拓者,去分享自己的成长经验,我愿意用一偏偏文章,来帮助大家一起熟悉es的源码。我有一个愿望,希望每个人都能在elastic源码中添加一个自己写的小功能。

      以前我的志向是提升搜索引擎的搜索能力,提升响应速度。我有过两年的使用elasticsearch开发的经验,我有过elasticsearch优化的经历,同时我也带着很多的疑问开始学习elasticsearch源码。我觉得我比别人的优势就是,我带着一堆的问题在前进,我每学到一些内容,都能或多或少的解决一些的的疑问。这给我带来了很多刺激感。

    跳槽到新的公司

      先介绍一下我现在是做 elasticsearch引擎开发的,负责给elasticsearch添加一些新的功能,换句话说,是改elasticsearch源码。这就比较感谢我的组长,他说改源码是最好的熟悉源码的方式。的确是这样,源码你看半天觉得你懂了,你改改试试!一堆问题,一堆和你本来理解不一样的问题。源码其实还是有点晦涩的,主要是别人写的,我觉得这很正常,等你看一段时间,磨一段时间自然而然的就觉得容易了。

      最近给elasticsearch添加了一个回收站的功能,删除的索引,并没有被物理删除,而是暂存在磁盘上。并且提供了恢复数据的API,查询回收站中索引的API。这个过程中,让我真的熟悉了es的删除索引的源码,我必须将它的处理过程完全吃透,这样才能在它的基础上去修改,和添加新的功能。这个练手的功能,我熟悉了很多:

    • elasticsearch的源码包的结构,每个包里边都是一些什么功能
    • 让我熟悉了elasticsearch的删除索引的逻辑
    • 熟悉了elasticsearch的调用链路,一个rest请求进来以后是如何一步一步的执行并返回结果的。
    • 因为是新加功能,所以要自定义API,这让我知道应该如何条件一个自己的API。
    • 我添加了回收站墓碑,改了elasticsearch的集群元数据结构。
    • 如何在elasticsearch源码中写单元测试。
    • 如何在elasticsearch源码中写集成测试。
    • 如何跑elasticsearch基准测试,性能测试。

      目前已经完成了回收站新功能的开发,我会将这个开发过程分享出来。我是如何一步一步的去分解中任务并完成开发的,以及遇到了哪些问题,我又是如何一步一步解决的,解决这些问题都需要哪些es源码中的知识点。这些我在做开发的时候都有记录下来,明天下班我再整理一下,分享出来。

      

  • 相关阅读:
    【后端框架】MyBatis(2)
    golang convert json string to map
    数据结构学习笔记——前、中、后缀表达式的转换(栈的应用)
    JAVA基础(三十六)——常用类之StringBuffer类和StringBuilder类
    Docker以只读挂载磁盘命令
    Error: 0x800701bc WSL 2 ?????????????????? https://aka.ms/wsl2kernel
    Netcode for Entities如何添加自定义序列化,让GhostField支持任意类型?以int3为例(1.2.3版本)
    Java commons-net FTP服务器文件操作
    yolov5量化注意事项
    【猿创征文|Unity开发实战】—— 2D项目1 - Ruby‘s Adventure 游戏地图绘制(2-1)
  • 原文地址:https://blog.csdn.net/star1210644725/article/details/125419122