转载

后端的轮子(一)

最近读了一下kafka的源码,真的是很蛋疼,本来准备写一篇长的关于消息队列的文章,结果看到某团的技术团队有一篇文章了,而且消息队列的东西基本上写全了,就不凑热闹了。

作为一个之前做底层的服务器后端人员,对造轮子这事还是比较有吸引力的,虽然说现在几乎所有的东西都有成熟的开源实现,但是造轮子总有一种魅力,勾引着我们去创造自己的轮子,这个系列就叫轮子系列吧。

前言

首先,看看这个,想必大家对下面这种简历看得比较多了吧?

精通JAVA,Python,熟练掌握C++

精通Redis,Memcached,Mysql

精通Nginx配置,模块开发

精通Kafka,ActiveMQ 等消息队列

精通多线程,多进程,IO复用编程

这里面每个都是轮子,如果都是精通,那能精通这些轮子得多强大,至少我hold不住这么多东西。但是,这并不妨碍爱学习的我们来了解和制造这些轮子。

我们这里造轮子并不是真的是为了造轮子,现在的轮子非常多也非常好用,不到万不得已,完全没有必要去造自己的轮子,我们造轮子,只是为了了解轮子的构造,知道为什么这东西会成为轮子,还有就是这个轮子是怎么造出来的,在造轮子的过程中,用到的知识基本上会涵盖整个后端需要涉及到的知识,所以自己造轮子或者了解轮子还是很有必要的。

后端的轮子们

说起后端的轮子们,大家都可以说出一大串来,我们大致来数一数啊。

  • 抗在最前面的:LVS,F5,HAProxy这类负载均衡

  • 接下来有Nginx,Apache,Lighttpd这类Http服务

  • 后面还有Redis,Memcached这一类KV存储器和缓存系统

  • 如果是多机部署,肯定还有Kafka,ActiveMQ这种负责解耦的消息队列

  • 当然也少不了Thrift这种RPC框架和Protobuf这种序列化技术

  • 如果够高端,到了分布式领域了,zookeeper也是轮子了

恩,感觉上差不多也就这些了吧?和上面的简历出现的东西差不多能对上了吧?后端的轮子们,排得上号的也就是这些个方面了吧,可以做一个 技能树 出来, 精通 了上面这些轮子和轮子的使用,基本上后端的工作就游刃有余了,剩下的就是一些业务逻辑了,哦,当然,放心,你 精通 不了全部的,但 了解 甚至 熟悉 还是能做到的,好了,接下来的一段时间,让我们一起来点亮这棵技能树吧。

这里没有写数据库这个东西,一是我认为他不是轮子了,他比轮子复杂多了,属于像操作系统一样的基础结构了,二是这系列文章都是会对应代码的, 数据库我写不出来 ,这才是关键原因。

接下来的文章更新不会很频繁了,我会按照上面这个技能树,一个技能一个技能的点亮这个技能树,有些我了解得多的就说详细点,有些了解不深的就少说点,反正都会点出来,每个技能树都会配上 最最最 基础的代码实现这个轮子,当然这些代码是不能用在生产环境拉。

最后,我会使用实现的轮子们, 打造一个简单的推荐引擎 ,也算物有所用了。

恩。。。代码还没有写一行,所以这个系列文章更新会比较慢。望耐心:)

另外,不要对代码抱有很大的希望,都只会是最最基础的测试代码,不能用在生产环境,比如http服务器的话,不会实现整个http服务,可能只会实现后面会用到的GET方法, 请把关注点聚焦到每篇文章上

轮子的轮毂

既然要造轮子,那首先还是要有点基础技术才行,也就是先要知道哪些东西是轮子的轮毂,哪些东西是轮子的胎了,代码说到底就是数据结构和算法了,所以无论什么轮子也逃不开这两个东西,除了这个还需要一些操作系统和网络相关的知识,要实现上面的那些个轮子,需要用到哪些知识呢?我们捡最基础的和最常用的说说,后面的文章会一一说到这些东西。

  • 哈希表,这个是很多轮子都要用到的东西,之前有一篇介绍哈希表的文章,后面还会继续这个算法和对应的数据结构。

  • 树,栈,队列这些个最基础的数据结构也是会经常用到的,其中包括了各种各样的树的实现。

  • 数据编码的基本知识。

  • 计算机网络知识,包括一些网络协议,不仅仅是http协议,还有底层一点的tcp协议,因为有些轮子需要在tcp上实现自己的协议。

  • 操作系统和计算机体系结构的一些知识也是必不可少的。

  • 分布式的一些知识也是需要知道的,最后一个轮子是zookeeper,实际上是paxos协议了,我觉得我实现不了一个最简的paxos(因为这玩意就没有最简可言,必须要全实现出来),但是这部分知识还是会说到的。

好了,大约上面这一些知识就差不太多了,毕竟只是一个最简的实现,别看每个也就一句话,要真正了解这些也不是一件简单的事情,更别说精通了,所以看到那种全屏 精通 的简历,肯定是扯淡的,找准一个你了解的领域,一顿虐吧。

轮子的胎

除了轮子的轮毂,那是支撑整个轮子的,还有一些外围的基础技术,构成了轮子的轮胎,这部分东西就是一些编程上的技术了,都包括:

  • 多协程,多线程,多进程编程。

  • 网络编程,多路复用技术,还有相应的事件轮询模型。

  • 共享内存,内存映射,管道技术。

这里也就简单的三行,要都了解并且精通也很不容易,所以这些东西我也不可能讲得很好,肯定有不正确的地方,欢迎大家指正出来,共同进步哈:)

造轮子的材料

造轮子的材料选 golang ,有时候可能会直接使用 C ,因为啊,Java不怎么会,其他语言来造轮子也不太常见。

结尾

本篇就是开了个头,后面我们一个一个来说。

原文  https://segmentfault.com/a/1190000005895523
正文到此结束
Loading...