最近在学SpringCloud,之前一直对用视频学嗤之以鼻,觉得只有弱者才会这样,但是其实对于一些已经非常常见的技术
比如SpringCloud这种,已经出来很长一段时间了,而且其实非常杂,用视频学起来其实非常快,当然前提是你要三倍速播放,而且
你得把视频配套的代码找到,这样你就能很快的掌握这个。
我把SpringCloud视频过了一遍,代码也运行了一遍花的时间可能不超过
5个小时吧,假如自己按照原来的做法去看别人博客然后自己慢慢搭建可能入门花的时间远远不止
下面是我学习SpringCloud用到的视频已经代码,推荐你视频三倍速播放,把视频看懂之后去实际运行一下相应代码,这样你能很轻松知道这个东西是什么
目前我就总结一下我入门Spring Cloud的一些心得
什么是微服务 #
其实微服务这个东西是模块化的一种体现,在企业开发中你会发现,好多时候我们要做一个网站如果要暴露在外网地址,
其实最基础就得要有一个登录,每个网站写一个登录其实非常没有必要
第一个是安全,第二个是耦合,假如你想完全独立于其他系统,你必须重新使用数据库存储,这样用户在同一家公司可能得注册两个不同的账号
所以微服务的理念就是模块化,把登录和其他业务给组装成不同模块,这样你就专注于你自己的业务而不用去担心其他的问题了
怎么做 #
微服务一开始也很简单,就是单独起不同的网站,比如我们把登录单独部署在一个网站上面去,
登录完了就给一个token
, 然后其他系统使用token
来验证用户权限
刚开始这样很简单,但是对于系统来说,出现了一个问题,首先是用户登录次数很少(如果他不退出登录),然而其他业务
使用的很多,这时候我们就想多起个实例来跑其他微服务,但是我们之前写死了,所有的业务调用都只是跳转到一个
网址上去了
服务注册 #
所以我们就想到做一个调度中心来把所有的服务都注册在这里,这样你想要的时候过来查就好了,这个服务中心就是我们所说的
服务注册,就是他来监控所有服务实例的,每个实例都得定时发送心跳,如果一段时间没有发送就会默认认为服务下线了
对于服务注册中心来说,其实就是一个登记的作用,就是记录一个服务名,以及他们的实际IP地址
服务调用 #
服务注册核心在于注册,对于真正的调用方来说,他只能从注册中心拿到最新存活的实例的IP,实际上他还得去通过这个IP来远程调用实际服务
所以Spring Cloud就创建了两个调用框架,第一个用来选择选择哪个实例,比如随机选择一个实例,还是说按照实例响应速度等等来选择
这个其实是一个拦截器,他只是帮你在远程调用之前选择哪个服务
第二个就是OpenFeign
,其实这个相当于把远程调用伪装成为一个Service
,你只要把这个Service
名字以及相关配置给配置好就可以像普通
Service
一样调用了
服务调用,这个本质上是给调用方写的HTTP请求库,对于被调用者来说其实什么没有影响
服务降级 #
其实服务降级,我认为说成异常处理更好,对于微服务来说,最大的区别就是原来一个网站,现在好多网站,我以前实现一个功能
一个接口就好了,目前可能需调用很多很多接口,这个调用一多就会出问题,第一个时间变长了,HTTP
请求其实很有冷启动的缺点的,随着你的调用越来越多
其实花在建立链接的时间也越来越多了,而且HTTP
其实非常啰嗦,有很多不需要的头部信息,会重复的发来发去
回到刚才的问题,就是我们调用方最终要实现一个功能的时候,可能得需要很多步骤,假如正常来写,我们得写很多try catch
我们得考虑这个接口调用失败怎么办,我们得返回什么东西
Hystrix
就是一套异常处理框架,他能帮你把接口给管理起来,在调用前他会检查这个接口是否已经熔断,在调用的时候他会检查是否
会抛异常,如果抛异常就调用其他兜底的方法
辅助 #
网关
Spring Cloud还给了我们一些其他可以选择使用的辅助功能,比如假如你想自己做一层网关,那可以使用gateway
做一个网关,
网关能帮我们做一下杂碎但是非常重要的,比如说权限认证,异常流量过滤啊,日志记录啊
你可以用Nginx
来做这些,但是gateway
这些网关是用Java
写的,你很容易就可以进行扩展实现你自己想要的功能
配置中心
对于一个大的公司来说,代码运行的环境非常多,所以Spring Cloud
提出配置中心的概念,你可以让所有的应用接入配置中心
这样当你想临时关闭某些东西的时候,只要修改配置中心,所有的实例都能立刻得到响应,而不需要重启
调用链监控
这个有点调试工具了,就是在调用方和被调用方都安上这个就能很轻松的把整个调用的线给记录下来,第一个方便你监控异常,
第二就是运维也能根据这个及时添加更多实例来面对突发流量
Spring Cloud Stream
其实我感觉这个东西设计的挺失败的,本来想法是把所有的消息队列框架都能用一个框架去调用,但是目前其实只支持两个,那其实我用原生的也没有什么太大的影响,原生的Spring Boot就支持RabbitMQ
等这些所有的消息队列分发和消费
总结 #
微服务架构其实就是将大web系统给模块话,其实本质上每个小的服务还是一个Spring Boot
网站
这个给系统解耦合的同时也带来一个问题,如果去保证一个复杂多模块的安全稳定的运行以及更新,这个也是后面需要去解决的问题
其实Spring Cloud
引进了微服务架构,也引进了一些其他问题,比如说发起服务调用的消耗,以及多系统日志收集等等一系列问题
接下来就是对Spring Cloud Alibaba
的学习,看看Spring Cloud Alibaba
在Spring Cloud的基础上做了什么优化
当然在快速过了一遍实验代码和视频之后我也有一些疑惑,等我把
Spring Cloud Alibaba
过了之后就得解决下面问题
TODO #
- 服务注册中心能否添加报警功能,假如服务实例低于某个值
- 批量启动所有服务的最佳实践是什么,一般企业是怎么做的
- Spring Boot如何实现只添加一个依赖来插入自己想要的插件