00:00
好,同学们,我们分布式高级篇的开发我们至此就全部结束了,那接下来对它来做一个简单的总结,那相较于我们分布式基础篇,基础篇呢,我们更注重的是大家来做基本资产改查能力,我通间搭建一个简单的前后分离环境来做我们后台整个管理系统的增产检查,当然穿插了一些我们的整个后台管理系统要用的技术,比如数据校验的对象存储等等,还有我们一些VO数据的封装。而我们这个分布式高级片我们就不是后台管理系统了,我们实现的是我们整个商城功能,那么这个商城功能呢,非常多到购物车结账,我们这个商品详情,那将所有的功能我们都抽取成了相关的微服务,所以我们首先在分布式高级片里边们的服务之间是分布式的,那将一个大型的商城业务们拆分成了各种不同的服务,由这些服务共同组合成我们的这个商城。那在我们这个大型的分。
01:00
幕式开发期间,我们就会有非常多的技术和难点,我们就要解决,那就照着这个课件,我们来做一个一一的总结。首先咱们这个分布式开发期间,我们核心要掌握的就是我们spring cloud这些组件,由spring cloud阿里巴巴配套的这些组件和spring cloud这个原生的组件,我们在这里边呢,Spring cloud这个组件呢,我们用的最多的就是粪,因为我们AB服务之间要远程调用,我们要一直使用份来进行调用,而份调用呢,我们就写一个接口,开启我们这个份客户端,然后声明我们要调哪个微服务,然后把它的目标方法签名我复制过来就行了,所以我们使用份呢也非常简单。希望通过我们整个分布式项目的使用,大家对整个份的这个开发和使用会有一个非常清晰的认识,包括我们在使用spring cloud的时候,我们所有的请求呢,都通过了API网关,当然这个网关我们在后台管理系统的时候就已经有了,然后呢,我们在开发期间就牵扯到了非常多的问题和我们要解决的这些业务,那按照这个文档顺序我们来说一下,然第一个reactive web flex,这是我们说的响应式编程,我们在项目开发期间呢,并没有过多的涉及,只是在最后一次再来编写我们这个网关,S这个容错回调的时候,我们在这儿呢,使用了一下响应式编程,那这个响应式编程呢,可以作为大家后来预习的资料。
02:31
大家持续来关注上硅谷,我们SPRING5以及boot2.0相关的发布,我们就会来讲响应式编程,那接下来我们在分布式开发里边们最需要关注的就是我们的接口密等性,我们无论AB服务的互调,还是我发请求的调,我们只不管怎么调,我们最终呢,希望我们服务里边的所有结口都应该是密等的,那这样呢,我们无论是调多少次还是调一次,我们呢最终结果都是一样的,这是我们整个分布式系统里边。
03:02
业务功能接口的保证我们的密等性,那密等性呢,我们可以通过加锁,也可以通过数据库的乐观锁字段,或者数据库的微观锁字段,我们加事物等等都可以来做这个接口,密等信,而我们在系统里边应用最多的这个密等信就是令牌机制,类似于验证码,我给你发一个令牌,你给我下一次带上来用过一次去销毁,这是我们说的密等性。还有我们说的事物在我们整个分布式系统里边,除了每一个系统自己要解决自己本身的事务外,我们分布式调用一系列,我们还要有分布式事物的存在,那分布式事务里边呢,我们还给大家客串的说了一下s cloud,阿里巴巴里边的C这个组件,他帮我们来解决分布式事务,但我们说它最好用的场景就是我们的后台管理系统,比如我们添加一个商品保存的时候呢,还要把它的优惠,它的库存等等各种信息在各个系统全部都保存,要成功都成功,要失败都失败。
04:02
所以如果是我们整个后台管理系统并发性能要求不高的,我们可以使用C塔来做分布式事务,但如果我们是并发性能超高的,我们这些高并发下单等等,我们都是使用最终一致性,咱们分布式事五的最终解决方案,我们都是使使用re MQ来发一个消息,首先可靠消息的保证,可靠消息呢,就是我们得有发送端确认和接收端确认机制,大家再来回顾一下,发送过去以后呢,我们最终的系统只需要监听我们这些消息,完了以后我们根据消息改变我们系统里边相关的数据,我们不能达到强一致,能达到我们的柔性事物的最终一致,最终你看到这个数据就是你想要的就行,包括我们性能与压力测试,我们如何写一个高并发系统来进行测试?我压力测试是必须的,所以我们使用了解密特来进行了压力测试,那解密塔在压力测试期间,我们还可以监控它GVM的相关性能。
05:02
比如我们使用捷微收控制台,或者呢,我们的解康素,我们都可以来监控我们这个性能,特别在我们这个分布式系统里边,我们要保证我们的接口的吞吐量,我们的性能往上提升,缓存是必须的,所以我们只有有了缓存才能极大的加速我们整个系统,所们高并发里边,缓存是最重要的一个手段,但是我们使用缓存期间呢,我们又说了缓存的一些问题,缓存的击穿,那就是缓存的单点问题,还有缓存的血崩大面积问题,还有缓存的穿透,我们缓存的浪值,然后我们一直去来查数据库的问题,那在这个些问题的最终所有解决里边,我们可以使用分布式锁,当大并发量请求全部要来查数据库,大家先来查缓存的时候,我们使用分布式锁来锁住,然后呢,只有一个请求会来进来,他查不到缓存,再去查数据库,所以们最终呢给数据库只会放一条查询,而其他人得到锁以后,他们呢,只会下次继续来看一下缓存。
06:02
就行了,他也不去来查数据库了,咱们可以使用分布式锁,分布式锁除了我们缓存场景在使用外,我们接口密等性的保证,我们也可以来使用,比如现在呢,并发的几个请求我们都来调用了我们这个接口,这个接口呢只能调一次,这一次数据是什么样就是什么样,那么就可以来使用分布式锁,我们释放锁以后,它再来调用,就来判断一下我们这个数据的状态,如果已被处理了就不处理了,所用来也引入了分布式锁,分是锁的场景呢也非常多,特别在我们说的定时任务里边,我们也有用到,那现在定时启动了,现在三台机器,这三台机器呢,定时同时启动了一个任务,我们比如都来上架我们这个秒杀商品,当然我们只要用了风布式锁,你这个上架过了,我呢就不需要再上架,所用风布式锁可以来锁住我们所有的机器,让只有一个机器去来执行这个事情就行了,还有我们的伊兰和search,我们最终商品的所有检索,我们肯定不。
07:02
能放在my circleql里边来写一些SQ语句,这样性能呢非常低下,我们所有的这个检索功能,我们无论是按照分类检索,按照属性检索,按照名字检索,所有的检索数据我们全部保存在elas search里边,它是一个非常专业的检索引擎,那对于它的使用,安装使用以及和spring boot的整合,大家也要非常清楚。另外就是异步,那在我们这个高并发系统里边,我们异步是必要的,一定呢会编写的,但在这一块呢,我们带大家认识了一下异步跟以前的不一样的方式,以前我们newsre的一个start,就这样轻轻松松简简单单就完成了异步,但如果在我们高并发系统里边,每一个请求进来都new thread start,我们很快资源耗尽,所以呢,我们为了控制住我们整个系统的资源,我们要使用线程池,由所有的异步任务呢都要提交给线程池,这样我们线程池里边可能会有一个最大量,比如我们核心是二。
08:02
这个线程最大呢是200个,排队呢,你可以给我排500个,800个,乃至于1000个,那我们这样呢,通过线程池就控制住了资源,你的峰值也就是200个正在运行的和1000个在队列里边排满的,你再也不能多占用更多的资源了,所以有这种资源控制方案以后,我们就不害怕系统因为一些资源耗尽而导致的崩溃,但是即使我们有了异步和线程池,异步任务提交给线程池,但我们的异步任务之间呢,可能有顺序,我们还可以使用异步编排,Completeliable future在这一块呢,我们也用的非常多,以及我们说的登录,我们的登录呢,我们着重在这里边演示了社交登录,使用微博来做的社交登录,还给大家演示了一下我们单点登录,如果我们是在不同域名系统下如何完成登录,但我们后来呢是相同域名的,所以我们暂时可以不用使用单点登录,但在相同域名下登录一次相当于出出。
09:02
都要实现单点登录效果,要怎么做呢?我们整合了spring session,让一处的登录,让处处都可用,相当于将所有微服务的session进行了同步,只要你登录成功以后,你去哪一个微服务,你的session数据你都可以获取到。我们使用session解决了我们这个分布式系统session不一致的问题。包括我们商城里边的各种业务,特别是我们的一些购物车订单秒杀等等,所有的业务呢,我们都最终做了实现,但细化的这些细节还需要大家呢,在下边慢慢的去填充,我们的核心的这么几大业务,一个是商品的上架,后台管理系统的商品的检索,还有商品的详情,以及我们这个购物车订单秒杀,在商品详情里边,我们最多给大家用的是一个缓存技术,除了把数据缓存到red,那还整合了spring catch来方便的使用缓存,以后我们的全系统都应该使用这种方式来进行缓存,包括我们也说了,缓存出现的不一致问题该怎么解决,缓存的清空,缓存的更新,这些呢,我们使用spring catch都可以很方便的解决这些问题,那我们还有最后我们再来做分布式事务来实现最终一致性的时候,MQ是一个非常必要的工具。我们只需要。
10:25
A服务给B服务来发一个消息,他不用关心最终怎么做,所以我们在很多的订单这个大场景下,我们使用它来做分布式事务,而在秒杀这个情况下,我们加入了re MQ队列来进行消分处理,将所有的流量排队放到队列里边,由我们后台慢慢去来进行消费,而且我们如果引入队列,我们AB服务呢,也不用关心接口调用了,把A都不用调用B,所以我们相当于我们将应用之间来进行了解耦,我们re MQ的使用呢也非常深入,特别是在我们的订单,我们来做关单的时候,我们使用了re MQ的死性队列,保证需要关灯的数据都能被关掉,以及我们整合了支付宝的沙箱来进行支付,还有我们的定时任务,我们秒杀系统的所有上架都需要定时任务来做,我们cloud里边的所有组件,这个都是一定要掌握的,毋庸置疑们spring cloud里边的组件呢,除了NAS作为注册中。
11:25
心我们天天在用外,配置中心我们也做了演示,后来大家应该将所有服务的配置都放给配置中心,这样呢,我们直接通过那斯的控制台也可以动态修改配置,修改完了以后我们微服务就能动态的在不下线的情况下就能应用到我们最新的配置,以及我们最终为了保护我们整个系统引入了spring cloud阿里巴巴。它作为一个流量哨兵,从整个流量入口开始保护我们任意想要保护的资源,当然结合center最好,我们再来加上服务的链路追踪功能,有了slo和ZP,我们对我们整个系统的运行状况,服务的链路追踪我们都能了如指掌,这样呢,我们就可以在里边挑出一些异常问题,我们去用哨兵进行限流或者降级,把我们整个系统呢保护起来,这是我们spring cloud里边,在我们分布式开发里边,首先我们牵扯到的所有组件,以及我们要牵扯到的所有技术,那最重要的就是缓存,我们来加深我们系统的速度,加快速度,还有我们的异步也是来加快速度和控制资源,以及我们的消息队列,我们来进行流量消峰也好,分布式做最终一致也好,我们的呢,都能通过消息队列来降低某一个服务的压力,所有消息存到队列里边,你闲的时候你再来慢慢消费。
12:50
所以我们整个分布式开发期间,我们牵扯到就这么多技术,当然沙丁瑟菲尔分库分表,我们在后来高可用做MYSQ集群的时候再来说分库分表的事情,所以最终我们来在高级片来构建一个高并发系统,除了引入我们这些spring cloud或者cloud阿里巴巴相关的这些组件来作为我们的周边设施外,我们高并发系统里边三大重要手段来总结成一句话,高并发有三保,缓存、异步、对排好缓存就是我们使用我们的red各种作为缓存,保证它的缓存一致性,保证它缓存的机穿穿透等这些不会出现问题。另外就是我们整个系统里边使用异步结合我们的线程池,异步不能只是一个new redread结合线程池,结合我们的异步编排来完成我们整个异步功能,还有我们的对排号,我们使用rabbit的MQ将所有的。
13:50
高峰流量,或者我们要做分布式事务的这些消息,全部放到re MQ这个消息队列里边,让他们排好队,那后台服务呢,一个一个处理,只要加上这三个手段。
14:02
我们构建任何高并发系统都不难,所以大家记住我们的口诀,高并发有三宝,缓存、异步、对排好。那至此我们整个高级篇的所有内容我们就结束了。里边的详细细节大家也可以来参照相关的文档,相关的代码,那么下一次呢,就在这个高可用集群篇,我们再见。在集群篇里边我们会来做K8S的集群,包括我们各种服务的集群,以及我们MYSQ数据库来red他们的集群,我们最终还会要做我们整个服务的自动化部署,这一块呢,运维方面的知识就稍微多一点了,我们可能在这一块再来编码就编得不多了。好,那我们就在高可用集训篇,我们再见。
我来说两句