目录
3.系统升级——分布式微服务(Dubbo + Nacos + Redis)
技术栈
数据库:MySQL(索引、分库分表)
后端:Spring、SpringMVC、Mybatis、多线程编程、网络编程、设计模式、算法设计、JVM
前端:JavaScript、CSS、HTML、Vue(起码要懂一些前端甚至熟悉)
分布式微服务RPC框架:Dubbo或spring cloud(或其他)
注册中心:Nacos或Zookeeper(或其他)
缓存中间件:Redis(或其他)
消息中间件:RabbitMQ(或其他)
本地缓存:Caffine Cache或Guava Cache(或其他)
其他:linux、操作系统、JVM调优
学习目的
为什么要如此设计学习内容?分析学习这些技术的目的,需要从系统出发。
1.原始系统——数据库 + 前端 + 后端
2.系统优化——本地缓存(Caffine Cache)
系统运行的所有操作基本都是围绕着增删查改,需要频繁访问数据库,就是要频繁IO。IO是操作系统发送读写指令到磁盘操作数据的过程,首先需要进行磁盘寻道,磁盘在当前扇区开始扫描数据,经过不断切换磁道和盘面,找到数据所在位置,然后将磁盘的磁性材料的磁极信息转换为电信号,返回给操作系统转化为机器语言0/1。这个过程非常耗时,假设我们一个查询操作是一秒钟,这部分耗时可能要消耗0.9秒,即IO操作占了90%的时间。
缓存技术就是使用内存c减少IO操作,极大提高系统性能(起码快100倍以上)
DDR4内存读写速度大概50G每秒(50000M)
固态硬盘速度是300M每秒,是内存的1/200
机械硬盘的速度是100M每秒,是内存的1/500
Ps:使用缓存要注意数据入库处理,例如用一条线程设计定时入库策略
3.系统升级——分布式微服务(Dubbo + Nacos + Redis)
解决互联网三高(高并发、高可用、高性能)有效途径
当我们的系统过于复杂和庞大的时候,想要进行部分功能升级改造的时候,就比较麻烦了。牵一发而动全身,出一点问题都会是比较大的损失。这个时候就需要用到微服务把系统拆分成多个小系统,独立开发升级优化,升级的时候也只需要关闭某些部分服务的系统,而不需要整个系统关闭。
与单体应用程序相比,微服务组织更好、更小、更松耦合,并且是独立开发、测试和部署的。由于微服务可以独立发布,因此修复错误或添加新功能所需的时间要短得多,并且可以更有效地将更改部署到生产中。此外,由于微服务很小且无状态,因此更容易扩展。
微服务系统一定是分布式系统;分布式系统不一定是微服务系统。
那么除了微服务还有什么其余的系统也是分布式的呢?举个比较简单的例子——集群。例如我们系统不大,但是用户量非常庞大,单体机器CPU、内存等硬件资源不足怎么办?一是提升硬件条件,但硬件有上限,不是长久之计,那么就要用到集群了。集群就是系统复制粘贴到多个机器上面单独运行,在客户端访问的时候进行分流,理论上可以无限拓展。集群可以访问同一个数据库,也可以每个系统单独运行数据库保存数据然后用RPC通信联系。
4.系统通信——消息队列(RabbitMQ)
主要作用表现为解耦、异步、削峰。
由于分布式微服务已经实现了系统间的高内聚低耦合、并且Dubbo也可以实现异步通信,所以这里侧重说明一下削峰。
削峰就是客户端大量请求进行排队操作。例如秒杀活动,假如系统极限只能同时承担1000 QPS(每秒查询率),那么在一秒内进入10W个请求,如果没有消息队列进行排队削峰处理,则有可能造成网络错误,甚至宕机。
其他
linux部署项目、操作系统是如何运行系统的(线程、进场、用户态、内核态、内存、硬盘、IO)
总结
使用前端+后端+数据库写一个商城系统
使用Caffine Cache在内存操作数据
使用Dubbo + Nacos +Redis把每个功能点进行微服务拆分分别维护开发
使用RabbitMQ + Redis开发商品秒杀活动
一个固若金汤的系统就完成了!
学习路径是根据一整个系统的架构来安排的。掌握以上全部技术,基本可以保证你一个人完成从开发、优化、升级、部署到上线一个健壮系统的整个流程了。有完整搭建一个健壮系统的能力,每一部分的部署、优化和升级都掌握,就是一个及格的高级程序员了(我猜。还有个Netty,有空再学了😤😤)。
路漫漫而修远兮,吾将上下而求索。学无止境!(卷死你们😄😄😄)