Spring cloud alibaba入门学习笔记
学习视频
黑马程序员
https://www.bilibili.com/video/av89898642?p=6
第一章 微服务介绍
学习原因
- SpringCloud闭源和停止维护
- SpringCloud Alibaba性能更好
适应群体
- 有SpringBoot SpringCloud等一定基础
系统架构演变
- 系统架构大体经历了:单体应用架构–》垂直应用架构–》分布式架构–》SOA架构–》微服务架构
单体应用架构
-
单体应用架构,所有的功能都在一个项目里完成
-
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I7xhdPNW-1584947181126)(en-resource://database/1874:1)]
-
优点:
- 架构简单易懂
- 对于一些小型项目来讲,开发,维护简单
- 部署到一个单点tomcat上,后期维护方便
-
缺点
- 对大型项目来讲,维护困难
- 模块之间紧密耦合,单点容错率低
- 无法针对某一个模块进行水平扩展或优化
垂直应用架构
优点:
- 系统拆分之后,就可以进行水平扩展和优化
- 提高了单点容错率
缺点
- 系统之间无法相互调用
- 会有一部分代码重复
分布式架构
优点
- 抽取公共代码为服务层,增强代码复用性
缺点
- 调用关系复杂,维护困难
SOA架构(面向服务架构)
优点
- 使用服务治理中心帮我们维护复杂的调用关系
缺点
- 服务有依赖性,可能会因为 一个服务有问题导致多个系统不可用(拆分的不彻底,还有耦合)
微服务架构
微服务结构
- 服务的原子化拆分
- 微服务架构在某种程度上是面向服务的架构SOA继续发展的下一步,他更加强调服务的“彻底拆分”
优点
- 服务原子化差分,独立打包,部署和升级,保证每个微服务清晰的任务划分,利于扩展
- 微服务之间采用Restful等轻量级http协议相互调用
缺点
- 分布式系统开发的技术成本高(容错、分布式事务等)
微服务下的问题
- 这么多的小服务,我们如果管理?
- 他们之间如何调用?
- 客户端如何来访问?
- 如果出现问题,那么作为服务自身来讲,应该如何处理
- 如果中间哪个环节出了问题,作为程序员来讲,如何排查
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-c2aVf7AF-1584947181136)(en-resource://database/1890:1)]
微服务构架的常见概念
服务治理
- 服务治理就是进行自动化管理,其核心是服务的自动注册与发现
- 服务注册:服务实例将自身的信息注册到注册中心
- 服务发现:服务实例通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求他们提供服务
- 服务剔除:服务注册中心
服务调用
- 再微服务构架中,通常存在多个服务之间的远程调用的需求。目前主流的远程调用技术有基于HTTP的RESTful接口,以及基于TCP的RPC协议
REST(Representational State Transfer)
是一种HTTP调用的格式,更标准,更通用,无论哪种语言都支持http协议
RPC(Remote Promote Call)
一种进程间的通信方式。允许像调用本地服务一样调用远程服务。RPC框架的主要目标就是让远程服务调用更简单、透明。RPC框架负责屏蔽底层的传输方式,序列化方式和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程
区别与联系
服务网关
随着微服务的不断增多,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信可能出现
- 客户端需要调用不同的url地址,难度增大
- 在一定的场景下,存在跨域请求的问题
- 每个微服务都需要进行单独的身份验证
针对这个问题,API网关顺势而生
- API网关直面意思是将所有API调用统一接入到API网关层,由网关层统一接入和输出。一个网关的基本功能有:统一接口,安全防护,协议适配,流量管控,长短链接支持,容错能力。有了网关之后,各个API服务提供团队可能专注于自己的业务逻辑处理,而API网关更专注于安全、流量、路由等问题
服务容错
在微服务中,一个请求经常会涉及到调用几个服务,如果其中某个服务不可用,没有做服务容错的话,极有可能会造成一连串的服务不可用,这就是雪崩效应
我们设法预防雪崩效应的产生,只能尽可能去做好容错,服务容错的三个核心思想是:
- 不被外界环境影响
- 不被上游请求压垮
- 不被下游影响拖垮
链路追踪
服务按照不同维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发,可能使用不同的编程语言来实现、有可能分布在了几千台服务器,横跨多个不同的数据中心。因此,就需要对一次请求设计的多个服务器链路进行日志记录,性能监控即链路追踪。
微服务构架常见解决方案
ServiceComb
SpringCloud
SpringCloud Alibaba
SpringCloud Alibaba介绍
SpringCloud Alibaba 致力于提供微服务开发的一站式解决方案,此项目包含开发分布式应用微服务的必须组件,方便开发者通过Spring Cloud编程模型轻松使用这些组件来开发分布式应用服务
依托Spring Cloud Alibaba 您只需要添加一些注解和少量配置,就可以将Spring Cloud应用接入案例微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统