1.SpringCloud概念
springcloud微服务,实际上是整合了其他组件来解决微服务架构的一些问题
2.项目架构演变过程
单体应用架构--->垂直应用架构--->分布式结构--->SOA架构--->微服务架构
下面来分别介绍一下:
单体应用架构:所有功能都在同一个项目中;
垂直应用架构:所谓的垂直应用架构,就是将原来的一个应用拆成互不相干的几个应用,以提升效率。
为什么需要采用垂直应用架构?随着项目的访问量增大,并不是所有模块的访问量都增大,增加的可能只是某一两个模块,此时只需要对这一两个模块进行拓展,此时单体应用架构就无法实现了。
优点:
- 系统拆分实现了流量分担,解决了并发问题,可以针对不同模块进行优化和水平扩展
- 一个系统的问题不会影响到其他系统,提高容错率
缺点:
- 系统之间相互独立, 无法进行相互调用
- 系统之间相互独立, 会有重复的开发任务
分布式架构:垂直应用架构下,各个系统相互独立,但是对于某些功能每个系统中都会拥有,这样一来,随着拓展的内容越来越多,重复的代码或功能可能就会随着增加,此时我们就可以将重复的内容抽取出来形成一个独立的业务层,再通过一个控制器进行调用,这种模式就是分布式架构,将整个工程划分为表现层和服务层。
其中表现层负责与客户交互,具体的实现则是调用具体的服务层实现;
优点:抽取公共的功能为服务层,提高代码的复用性
缺点:调用关系错综复杂,难以维护
SOA架构(阿里dubbo):在分布式架构下,当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心对集群进行实时管理。此时,用于资源调度和治理中心(SOA Service Oriented Architecture,面向服务的架构)是关键。
优点:使用注册中心解决了服务间调用关系的自动调节
缺点:
- 服务间会有依赖关系,一旦某个环节出错会影响较大,例如:服务雪崩
- 服务关系复杂,运维、测试、部署困难。
微服务架构:把一个项目拆分成若干个项目,并且每一个工程都可以独立运行和部署,进行了物理拆分,逻辑上还是一个项目;
例如:京东:整体都叫京东项目,但是它之下却分割成:京东金融,京东生鲜,京东客服,京东会员等等各个小工程。
微服务中的每个小工程都可以独立运行,并且可采用不同的语言开发,也可以由不同的团队开发,适用于大型项目的功能拓展。同时适用于敏捷开发。每一个功能的上线不需要等待其他功能实现就可以直接上线。
微服务的实现是基于spring boot框架创建执行的。
优点:
- 服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展
微服务之间采用Restful等轻量级http协议相互调用
缺点:不适用于小型项目、开发技术成本高
3.微服务需要解决的问题
1.如何管理众多的小服务
2.众多的小服务之间要如何通讯和调用
3.客户端如何准确的访问对应的服务
4.每个小服务如果出现了问题如何进行自处理
5.项目一旦出错了,将如何排错?
SpringCloud就是利用了各种组件来解决以上的问题。
4.微服务架构的常见概念
4.1服务治理
服务治理就是进行服务的自动化管理,其核心就是服务的自动注册和发现
服务注册:服务实际将自身服务信息注册到注册中心;
服务发现:服务实例通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提供的服务。
服务剔除:服务注册中心将出问题的服务自动剔除到可用列表之外,使其不会被调用到。
4.2服务调用
在整个微服务架构中,通常需要多个服务之间进行远程调用来完成某些功能。这个过程就是服务调用。
目前常用的服务调用技术有:基于HTTP的RESTful接口以及基于TCP的RPC协议;
REST(Representational State Transfer):是一种HTTP调用格式,更标准、更通用,无论哪种语言都支持http协议;
RPC(Remote Promote Call):
Rpc @Autowire Bservice bservice.方法()
一种进程间通信方式。允许像调用本地服务一样调用远程服务。RPC框架的主要目标就是让远程服务调用更简单、透明。RPC框架负责屏蔽底层的传输方式、序列化方式和通信细节。开发人员在使用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节和调用过程。
二者的区别
比较项 | RESTful | RPC |
通讯协议 | HTTP | 一般使用TCP |
性能 | 略低 | 较高 |
灵活度 | 高 | 低 |
应用 | 微服务架构 | SOA架构 |
4.3 服务网关
随着服务的增多,不同的服务一般对应着不同的网络地址,而用户的某个需求可能需要同时调用多个服务才能完成,此时如果直接让客户端与服务进行通信可能会出现各种问题,例如:跨域问题、身份认证问题、调用url地址增多增大难度等问题。
而API网关的出现让这些问题得以解决。
API网关直面意思是将所有API调用统一接入到API网关层,由网关层统一接入和输出。一个网关的基本功能有:统一接入、安全防护、协议适配、流量管控、长短链接支持、容错能力。有了网关之后,各个API服务提供团队可以专注于自己的的业务逻辑处理,而API网关更专注于安全、流量、路由等问题。
4.4 服务容错
在微服务当中,一个请求经常会涉及到调用几个服务,如果其中某个服务不可用,没有做服务容错的话,极有可能会造成一连串的服务不可用,这就是雪崩效应。
预防雪崩效应的核心思想:
- 不被外界环境影响
- 不被上游请求压垮
- 不被下游相应拖垮
4.5 链路追踪
随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要对一次请求涉及的多个服务链路进行日志记录,性能监控即链路追踪
5.SpringCloud微服务常见组件
未完待续