前言
最近读了一本书《分布式缓存-原理、架构及Go语言实现》作者:胡世杰
代码是go语言实现的,这本书不是很厚,这本书在排版上字体比较大,代码占用了较大的篇幅,读起来很快。这本书可以带我们去很快的学习一个缓存框架,整个过程中主要学习作者的一些想法和用的一些技术框架
作者从一个简单的基于http满足基本的set
、get
、del
操作的In Memeory
缓存服务,然后通过自己编写的性能测试工具,对这个缓存服务进行性能测试并与redis做对比,给出两个框架结果的差异,整本书就是通过找出性能差异
、提出问题
、解决问题
、验证结果
,这样的思路,逐步的对框架进行优化,最终实现一个高性能的分布式缓存
个人的一些见解
- 作者可以很轻松的驾驶分布式缓存框架,单从get、set、del来说性能高于redis
- 基于开源的高性能框架去扩展,可以很快去设计一款适合自己业务发展的框架,降底很大的开发成本,比如作者选择RockDB来做数据持久化
- 去了解
RockDB
、ABNF(Augmented Backus-Naur Form)
、gossip协议
- 整个阅读过程中,可以验证一些自己对缓存框架的思考
- 在高性能框架开发时,选择合适的语言很有必要,比如作者实现的分布式缓存框架高于redis,部分原因归于go语言对多线程很好的支持、
- 去实现一个go语言开发的版本redis,性能更上一层
- 高性能框架的实现,需要发挥多种语言的优势
- 框架中的技术点很多都是类似的,通信协议选择、pipeline技术、异步提或读取性能、批量写入提升写入性能等,对他们的原理有了解,可以指导框架的设计
对于一个好的框架,需要涉及到各方各面的技术点,对设计者的技术广度有很高的要求,在平时工作中,大多数IT开发还是偏向于业务系统开发,大量的CRUD。我们可以对这些技术不太了解,但是我们一定要知道它,知道每种技术的原理、可以解决什么样的问题,这对我们的职业发展很有帮助,包括你去理解一些框架设计也会感觉很轻松。
从书中整理的一些问题
- 设计中如何选择通信协议?
- pipeline的原理,在哪些框架中应用了
- 高性能的数据持久化的框架
- 如果提升写入速度?
- 如何提升查询速度
- 如何保证命令被服务端按顺序处理?
- 为什么要集群?实现方式?
- 分布式集群中扩容和缩容时,如何避免全量数据迁移?如何去做数据迁移?
- CAP理论,如何实现CP ? 如何实现AP?
- 什么是节点再平衡,如何实现?其它分布式框架怎么实现?
- 缓存的TTL如何实现?redis怎么实现的?
- 如何提供一套框架自身的性能测试工具?
- In memory有哪些缺陷?怎么解决?
闲聊几句
在平时工作中,大多数IT开发偏向于业务系统开发,大量的CRUD,因为在工作中接触到的技术是有限的,在工作多年之后,就会出现工作年限和能力不匹配的情况,之前听一个老师说过一句话,印象挺深的。
“有些人有10年的工作经验,却达不到10年的能力,对于企业这种人是把1年的工作能力用了10年”
这句话特别有道理,现在培训机构很多,每几个月就会培训出大量的IT人员,想在众多人脱颖而出就需要你比其它人知道的更多,更深。
企业招聘你是为了公司业务向前推进,不是让你来学习的,当然好的企业对于员人的个人发展也是很看重的,大多数企业招聘人员,还是希望来了可以直接上手的。
在工作中接触的知识是有限的,这就需要我们在工作以外的时间去了解一些未接触过的技术,提升自己技术的知识面,技术广度好的同学,在读这本书时候会发现,作者在上一章尾巴留下疑问的时候,就会在读者脑海中想出相应的解决方案,在下一章阅读时会发现和作者所想一致,整个阅读过程中会行云流水,读起来很快,相关的go代码可以不用仔细去看,但是整个过程和设计思路是我们一定要深思一下,作者为什么要这样做,有哪些优势劣势,
整本书中对于细节的描述不是很多,我们在阅读中可以多问几个问题,自己多想一想,这样的过程会促使我们成长,当一个问题出现了,解决之后要多围绕当前问题多发散一下,出现的其它问题怎么解决,当自己都想明白了,会有满满的成就感,对于每个问题我们都这样做,我们会很快成长起来。
其实在平时面试中,一些连环炮的问题都是从一个问题点儿,向外发散的,技术深度都可以通过这些问题反映出来的,多思考是好事儿,
图书推荐
- Java特种兵
- 实战Java高并发程序设计
- Java多线程编程实战指南(核心篇)
- java并发编程的艺术
- 深入理解 Java虚拟机 JVM高级特性与最佳实践 周志明
- 大话设计模式 程杰
- 漫画算法 小灰的算法之旅 魏梦舒
- Redis深度历险 核心原理与应用实践
- 从Paxos到Zookeeper分布式一致性原理与实践
- Mysql技术内幕 InnoDB存储引擎 第二版 姜承尧
结束语
相同各类的书可以多搞几本,都穿插着看一下,因为部分知识重叠,不会浪费太多时间。同一个知识点从多作者的角度去看,对自己的理解会有很大的帮助
偏基础的书,要不定时的拿出来多看一下,看完第一遍后面再看的话会很快,加深一下印象,要不时间长了还是会忘记的,多看几次让它成为自己的知识。
扫码关注公众号
albk
,相关文章会先在公众号发布