前端视角:读《分布式微服务架构原理与实战》的一份总结

Posted 前端巅峰

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端视角:读《分布式微服务架构原理与实战》的一份总结相关的知识,希望对你有一定的参考价值。



写在开头:


得到这本书的时候,大概在去年年底,当时还在做即时通讯桌面端的跨平台桌面软件开发,由于当时技术难点还是特别多,只能把这本书的学习计划排期往后,后来由于某些原因,公司出了些问题,换了一份工作,于是开始看这本书了




我的后端启蒙老师,是国内的一位亿级用户量的平台技术总监,通过第一次在深圳高新园附近的一个咖啡厅首次面对面授课交流,开启了我的后端学习里程,当然其实我的大学专业是金融,这里很感谢上家公司对我对培养,无法想象我获得了多大的投入,虽然最终的结局不太好。




正式开始:


分布式微服务架构原理这本书,是以JAVA为基础,里面包含了spring Boot,dubbo等一些JAVA特色东西,我不喜欢JAVA,我比较喜欢TS、Node.js、GoLang,于是也跳过了一些内容,但是里面的像同步阻塞模式、异步非阻塞模式这些,跟前端是很像的,技术里面大都是相通的,后面会讲





重要内容:


  • Docker

  • Redis的使用、集群、哨兵、缓存穿透和雪崩

  • 序列化和反序列化

  • RPC

  • 微服务的上下游调用、容错降级

  • 限流算法

  • 主流、私有协议的设计

  • nginx的负载均衡、各种算法实现

  • 蓝绿部署、滚动发布、金丝雀发布

  • Memcache

  • messagequeue - kafka

  • session与cookie,存储共享问题

  • 注册中心Zookeeper

  • 服务降级、熔断、调度

  • 分布式微服务监控体系

  • 分布式数据库分表、分库等

。。。




还有一些内容就没有列举出来,接下来我总结一些技术点,跟前端结合起来


一、Redis的使用、集群哨兵、缓存穿透、雪崩


Redis是缓存层,数据存储在内存中,默认启动端口6379,属于进程外缓存,单线程异步IO,key-value格式存储,类似前端的Map数据类型,key值可以是各种类型,相比memcache来说它的key值更丰富多样,这里偷懒,借一下树上的图,实在不想画图了,最近画图写计划都到吐了




对于知识点的学习,我觉得要么不学,要学就系统的学,不然很快就达到天花板。我们平时说的缓存,只要不需要xxx命令启动端口监听的库,大都是进程内缓存,就是比如new一个对象(可是对象真的能new出来吗?小伙子,太年轻了)


前端视角:读《分布式微服务架构原理与实战》的一份总结




Redis跟Node.js很像,他们都很快,可是有一个问题,redis需要回吐一个很大的value,怎么办?那被阻塞住了,怎么办?这个问题可以百度一下~很简单我就不多说了


Redis是通过启动进程监听,然后将数据存储到内存中的,可是有一个问题, 如果突然这台redis挂了,那么数据怎么办,没了?不可能的,那就没人用了




redis也可以做数据持久化,一种是rdb模式,一种是AOF持久化模式。


前者是将数据定期刷入.rdb文件,当redis重启时,会自动读取rdb文件内的数据刷入内存中(预热)


后者是将我们的每次操作redis的命令追加到日志到,你可以想象到,给你一个对象,然后把你的操作命令都记录到日记中,然后你下次重复操作你的对象,就可以得到一样的结果(疑车无据)


redis的主从、集群、哨兵这些就不讲了


缓存穿透和缓存雪崩


前端视角:读《分布式微服务架构原理与实战》的一份总结


缓存穿透其实就是频繁查询了根本不存在的数据,导致没有命中缓存层,存储层的负载加大。


缓存雪崩,其实就是缓存层崩了,然后所有请求打到了存储层


前端视角:读《分布式微服务架构原理与实战》的一份总结


经过上面讲述,如果你还不是很懂,这里解释下


redis如果内存中数据超量会引发Swap,会把冷数据刷入到磁盘中,但是memcache是用到物理内存,多线程模式,两者并不冲突。对于请求为什么不能直接到db层,因为数据库的读写能力是有一个峰值的,别忘了,mysql这些数据库都是要经过命令启动进程监听对应端口的,那么必然有一个阀值



计算机的世界,如果出现了问题解决不了,那么就加一个缓存层,还不行的话,就加两个






Docker章节


可能相比传统的虚拟机做了对比,然后dockerfile文件编写,以及配合k8s的使用,前端来说我觉得会用docker和travis做ci就很不错了,术业有专攻,这年头做好前端就很不容易了,这些就是你的加分项


用docker做ci,我之前有一篇文章







序列化和反序列化


ProtoBuffer的使用,这个项目里也一直在用




RPC 远程调用


其实就是服务器之间通信,互相调用,分同步和异步调用,一般主要都是异步调用


前端视角:读《分布式微服务架构原理与实战》的一份总结


服务器之间相互调用,通信


一般基于http、TCP协议,我跟书上都认为基于TCP的二进制协议传输会比较好,服务器跟服务器之间通信也是基于这些网络协议,所以网络协议这个章节很重要。推荐某金的张师傅《TCP协议》小册




Nginx的负载均衡,单线程、异步,几种负载均衡算法,配合session、cookie共享,集中化管理  这些章节我是一起学习的




由于真正的线上用户如果特别多,不可能只有一台服务器,然后就需要负载均衡,各种数据的共享,鉴权问题,这些东西是需要系统学习的,一个前端,是应该非常了解SSO的原理和流程,这个是做网站开发的基础,如果这个都不清楚,那么你肯定在摸鱼!




messageQueue,消息队列 、kafka


前端视角:读《分布式微服务架构原理与实战》的一份总结


所谓消息队列,书上的例子讲得很棒了,一些不重要,不需要立马知道结果的,可以异步调用,由消息队列统一分发处理,事务方式。(只有所有成功才是成功,类似前端的promise.all这个API,所以说技术其实大都是相通的)





总体来说,这本书是一本分布式微服务入门的好书,其他的内容,可能更偏向后端知识,就不一一讲述。作为一个前端,你要知道你的请求是发到了哪里,经过了什么处理,然后返回给你。我觉得这是一个基本,对接后端时候可能效率更高,特别是你对mysql、mongodb、sqlite这些数据库比较了解时候,可以为你省去很多麻烦


建议大家学习的:mysql、tcp知识、redis、sso、session和cookie的管理、消息队列的概念




或者你可以加我的微信:CALASFxiaotan,我拉你进群交流技术,给你提供源码资料


我的gitHub里面有自己实现的react和webpack等源码


觉得有帮助可以点个在看~谢谢


https://github.com/JinJieTan


 前端视角:读《分布式微服务架构原理与实战》的一份总结

            


来都来了,点个在看再走吧~~~



以上是关于前端视角:读《分布式微服务架构原理与实战》的一份总结的主要内容,如果未能解决你的问题,请参考以下文章

深入浅出Seata原理及实战「入门基础专题」带你透析认识Seata分布式事务服务的原理和流程

深入浅出Seata原理及实战「入门基础专题」带你透析认识Seata分布式事务服务的原理和流程

架构成长之路:分布式微服务架构设计原理

分布式微服务架构设计原理_读书笔记_1

微服务架构 *2.3 Spring Cloud 启动及加载配置文件源码分析(以 Nacos 为例)

分布式微服务架构下网络通信的底层实现原理