微服务调用
### http状态码
HTTP响应状态代码指示特定HTTP请求是否已成功完成。响应分为五类:信息响应(100-199), 成功响应(200 -299),重定向(300 -399),客户端错误(400- 499)和服务器错误(500 -599)。状态代码由section 10 of RFC 2616定义

### 微服务调用基础
#### 什么是api
API由一组定义的协议组合而成,可用于构建和集成应用软件。API是"应用编程接口"的缩写。
简而言之,客户端在访问服务端某个业务时,需要知道服务端的的访问地址(通信协议)与需要发送的数据类型与结构,从而从服务端获取到需要的数据。
#### Api 访问调用过程
在TCP/IP协议中,我们知道不同应 用之间要获取数据的大致流程
※物理网络连接
※数据链路层交换机连接
※相同的IP协议,与服务端的IP 地址
※服务端的端口
※服务端连接 API的方式(Rpc/Rest)

**※ Rpc调用方式**
客户端代码需要集成服务端SDK,然创建对象,调用获取数据的方法,通信效率高,集成与更新不方便

**※Rest 调用方式**
只需要简单的支持http客户端支持http 请求即可访问服务端api. 使用方便,无需更新,效率相对于rpc而言,没有其高

## 微服务组件
### 微服务组件包括哪些?
一个完整的微服务包括的组件:注册中心、配置中心、熔断、限流、链路跟踪、路由。
在微服务中,有些组件为必须组件, (必须启动存在).客户端才能正常调用.
※必须组件:注册中心、后合服务(Provider)
※非必须组件:配置中心、熔断、限流、链路跟踪、路由
#### 注册中心
##### 什么是注册中心
注册中心可以说是微服务架构中的“地址簿",它记录了服务和服务地址的映射关系。在分布式架构中,服务会注册到这里,当服务需要调用其它服务时,就这里找到服务的地址,进行调用。
##### 为什么需要注册中心?
服务注册中心给客户端提供可供调用的服务列表,客户端在进行远程服务调用时,根据服务列表然后选择服务提供方的服务地。
址进行服务调用。服务注册中心在分布式系统中大量应用,是分布式系统中不可或缺的组件。
注册中心是整个服务调用的核心部分,如果 服务不存在注册中心,那么通过网关会调用不到,导致失败。

##### 注册中心分类
注册中心分为两大类。
※临时实例在nacos中Java客户端自动注册的服务实例一般为临时实例并且客户端会间隔几秒发送心跳到注册中心,告诉注册中心是否还存活,如果不存在,那么注册中心会自动从列表中去掉此节点。
※永久实例可以通过api的方式人工填写客户端信息.注册中心不会去掉节点(不管是否在线)。注册中心会主动检查客户端是否在线(手工注入)

##### 常见的注册中心

###### consul、eureka、 nacos 对比
配置中心
eureka不支持
consul支持但用起来偏麻烦.不太符合springBoot框架的命名风格,支持动态刷新
nacos支持用起来简单.符合springBoot的命名风格,支持动态刷新
注册中心
**eureka**
依赖:依赖ZooKeepere
应用内/外直接集成到应用中,依赖于应用自身完成服务的注册与发现,
ACP原则:遵循AP (可用性+分离容忍)原则,有较强的可用性.服务注册快.但牺牲了一定的一致性。
版本迭代:目前已经不进行升级
集成支持:只支持SpringCloud集成
访问协议: HTTP
雪崩保护:支持雪崩保护
界面:英文界面,不符合国人习惯
上手:容易
**consul**
依赖:不依赖其他组件
应用内/外:属于外部应用,侵入性小
ACP原则:遵循CP原则(一致性+分离容忍)服务注册稍慢, 由于其一致性导致了在Leader挂掉时重新选举期间真个consul
不可用。。
版本迭代:目前仍然进行版本迭代
集成支持:支持SpringCloud K8S集成
访问协议: HTTP/DNS4
雪崩保护:不支持雪崩保护
**nacos**
依赖:不依赖其他组件
应用内/外:属于外部应用,侵入性小
ACP原则:通知遵循CP原则(一致性+分离容忍)和AP 原则(可用性+分离容忍)。
版本迭代:目前仍然进行版本迭代
集成支持:支持Dubbo、SpringCloud、 K8S 集成
访问协议: HTTP/动态 DNS/UDP
雪崩保护:支持雪崩保护
#### 配置中心组件
##### 什么是配置中心
管理各个环境的配置文件参数、比如说数据库,缓存,存储。业务应用并且支持管理每个不同的环境的配置。
##### 为什么需要配置中心
*本地配置在服务启动加载.修改配置不需要重启服务.
*多个环境(dev、prod、 sit、 uat) 容易混淆,会产生错误.导致服务运行异常,
*出现配置错误时.不容易回滚到指定的版本.
##### 配置中心演进
从单一的单机部署到多机的负载均衡,以及后来应用的微服务容器化.不会不可以避免的使用多个环境的配置

常见配置中心功能对比

### API路由网关组件。
#### 什么是API网关
API网关是微服务架构中提供路由转发与鉴权等功能。首先,它会提供最基本的路由服务,将客户端请求转发后台业务服务。其次,作为一个入口,它还可以进行认证,鉴权,限流等操作。
缺点:有性能瓶颈。
#### 为什么需要网关?
客户端访问的统一对接的接口。
防止内部接口 直接暴露给外部客户端(隐藏内部服务)
API网关通过提供一个额外的保护层来防止恶意攻击,例如SQL注入. XML解析器漏洞和拒绝服务
服务网关的前置过滤器中,所有请求过来进行权限校验。
日志访问与审计(获取客户端真实ip)。
#### 网关架构说明~
调用之前所有的客户端通过7层负载均衡反向代理后台的服务.
调用之后所有的客户端通过微服务框架网关负载到后台的服务。

#### 常见网关组件
* KONG 是一个通过lua nginx-module实现的在Nginx中运行的Lua应用程序
* Spring Cloud Gateway是由Spring官方基于Spring5.0 等技术开发的网关,目的是代替原先版本中的Zuul
* Zuul
### 服务限流组件
#### 什么是服务限流
※服务限流:指当系统资源不够的情况下,不足以应对大量的用户与数据接口请求时,为了保证有限的资源能够正常服务,因此对系统按照预设的规则进行流量限制或功能限制的一种方法。
#### 为什么需要限流?
※发生错误或者超时,不让调用接口,调用本地fallback (容错)熔断
※解决高并发请求,一旦达到规定请求,熔断,报错