第十二课:微服务基本知识-微服务组件

2. 微服务组件

2.1 微服务组件包括哪些

一个完整的微服务包括的组件:注册中心,配置中心,熔断,限流,链路跟踪,路由
在微服务中,有些组件为必须组件(必须启动存在),客户端才能正常调用

  • 必须组件:注册中心,后台服务(Provider)
  • 非必须组件:配置中心,熔断,限流,链路跟踪,路由

2.2 课程学习的组件

  1. 注册中心 Nacos
  2. 配置中心 Nacos
  3. 网关 Spring Cloud Gateway
  4. 熔断,限流 Sentinel
  5. 分布式追踪系统 SkyWorking

2.3 注册中心组件

https://nacos.io/zh-cn/

2.3.1 什么是注册中心

注册中心可以说是微服务架构中的地址簿,它记录了服务和服务地址的映射关系,在分布式架构中,服务会注册到这里,当服务需要调用其他服务时,就在这里找到服务的地址,进行调用。

2.3.2 为什么需要注册中心

服务注册中心给客户端提供可供调用的服务列表,客户端在进行远程服务调用时,根据服务列表然后选择服务提供方的服务地址进行服务调用。服务注册中心在分布式系统中大量应用,是分布式系统中不可获取的组件。
注册中心是整个服务调用的核心部分,如果服务不存在注册中心,那么通过网关会调用不到,导致失败。

2.3.3 注册中心分类

注册中心分两大类

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

2.3.4 常见的注册中心

Netflix Eureka
Nacos
Consul
Zookeeper
CoreDNS

2.3.4.1 consul,eureka,nacos对比

功能对比 eureka consul nacos
配置中心功能 不支持 支持,但是用起来偏麻烦,不太符合spring Boot框架的命名风格,支持动态刷新 支持,用起来简单,符合springBoot的命名风格,支持动态刷新
依赖 依赖zookeeper 不依赖其他组件 不依赖其他组件
应用内/外 直接集成到应用中,依赖于应用自身完成服务的注册与发现 属于外部应用,侵入性小 属于外部应用,侵入性小
ACP原则 遵循AP(可用性+分离容忍)原则,有较强的可用性,服务注册块,单牺牲了一定的一致性 遵循CP原则(一致性+分离容忍)服务注册稍慢,由于其一致性导致了在leader挂掉重新选举期间整个consul不可用 通知遵循CP原则(一致性+分离容忍)和AP原则(可用性+分离容忍)
版本迭代 目前已经不进行升级 目前仍然进行版本迭代 目前仍然进行版本迭代
集成支持 只支持SpringCloud集成 支持SpringCloud K8S集成 支持Dubbo,SpringCloud,K8S集成
访问协议 HTPP HTTP/DNS HTTP/动态DNS/UDP
雪崩保护 支持 不支持 支持
界面 英文界面 英文界面,不符合国人习惯 中文界面
上手 容易 复杂一点 极易,中文文档,案例,社区活跃

2.4 配置中心组件

2.4.1 什么是配置中心

管理各个环境的配置文件参数,比如说数据库,缓存,存储,业务应用并且支持管理每个不同的环境的配置。

2.4.2 为什么需要配置中心

  • 本地配置在服务启动加载,修改配置不需要重启服务
  • 多个环境(dev,prod,sit,uat)容易混淆,会产生错误,导致服务运行异常
  • 出现配置错误时,不容易回滚到指定的版本

2.4.3 配置中心演进

从单一的单机部署到多机的负载均衡,以及后来应用的微服务容器化,不可避免的使用多个环境的配置。

2.3.4 常见配置中心功能对比

功能 Spring Cloud Config Apollo Nacos
实效性 SpringCloudBus HTTP长轮询 HTTP长轮询
权限控制 支持 支持 支持
灰度发布 支持 支持 不支持
版本管理 支持 支持 支持
版本回滚 支持 支持 支持
多环境支持 支持 支持 支持

2.5 API路由网关组件

2.5.1 什么是API网关

API网关是微服务架构中提供路由转发与鉴权等功能,首先,它会提供最基本的路由服务,将客户端请求转发后台业务服务;其次,作为一个入口,它还可以进行认证,鉴权,限流等操作。

2.5.2 为什么需要API网关

  • 客户端访问的统一对接接口
  • 防止内部接口直接暴露给外部客户端(隐藏内部服务)
  • API网关通过提供一个额外的保护层来防止恶意攻击,例如SQL注入,XML解析器漏洞和拒绝服务
  • 服务网关的前置过滤器中,所有请求过来进行权限校验
  • 日志访问与审计

2.5.3 网关架构说明

调用之前所有的客户端通过7层负载均衡反向代理后台的服务
调用之后所有的客户端通过微服务框架网关负载到后台的服务

2.5.4 常用的网关组件

  • KONG是一个通过lua-nginx-module实现的在nginx中运行的lua应用程序
  • Spring Cloud Gateway是由Spring官方基于Spring5.0等技术开发的网关,目的是代替原先版本中的Zuul
  • Zuul

2.6 服务限流组件

2.6.1 什么是服务限流

  • 服务限流:指当系统资源不够的情况下,不足以应对大量的用户与数据接口请求时,为了保证优先的资源能够正常服务,因此对系统按照预设的规则进行流量限制或功能限制的一种方法。

2.6.2 为什么需要服务限流

  • 发生错误或者超时,不让调用接口,调用本地fallback(容错)
  • 解决高并发请求,一旦达到规定请求,熔断,报错

2.6.3 常用限流组件

Sentinel(阿里 哨兵)
Hystrix (Spring Cloud 豪猪)

2.6.4 图解说明熔断作用

  • 如果未接入熔断处理,在客户端直接返回500错误,程序会抛异常,有可能会导致其他服务也不可用(消耗系统资源)
  • 启用熔断处理,在客户端返回200正常??
    avator

2.7 链路跟踪(调度链)组件

2.7.1 什么是调用链

调用链是整个分布式系统中跟踪一个用户请求的过程,包括数据采集,数据传输,数据存储,数据分析和数据可视化展示工具,也是微服务中代码的调试和服务监控的性能分析工具。

2.7.2 为什么需要调用链

分布式web系统中,客户端的一次请求操作,可能需要经过系统中多个模块,多个中间件,多台机器的相互协作才能完成,并且这一系列调用请求中,有些是串行处理的,有些是并发执行的,那么如何确定客户端的一次操作背后调用了哪些应用,哪些模块,经过了哪些节点,每个模块的调用先后顺序是怎样的,每个模块的性能问题如何?随着业务系统模型的日趋复杂化,分布式系统中继续一套链路追踪(trace)系统来解决这些问题(快速定位)。

2.7.3 常见组件

  • SkyWalking 用于追踪,监控和诊断分布式系统,特别是使用微服务架构,云原生或容积技术

http://skywalking.apache.org/zh/

  • Zipkin的一个叫Brave的组件来实现对应用内部的性能分析数据采集,通过实现一系列的java拦截器,来做到对http请求,数据库访问的调用过程跟踪。
  • Pinpoint是开源在github上的一款APM监控工具,用java编写,用于大规模分布式系统的监控,它对性能的影响最小(只增加约3%资源利用率),安装agent是无侵入式的。

2.7.4 调用链调用过程

  • 通过调用接口可以查看到每个接口所调用的层次,并且可以查看调用的方法名。
    在本例中,客户端访问网关服务在调用系统中会显示,服务端先启动tomcat,如果程序调用auth方法,最后对外服务,也可以看到接口调用时间。

2.8 小结

  • 本节讲述了在微服务中涉及的5大组件,分类为必须组件和非必须组件
  • 大致阐述每个组件的原由北京以及典型的组件代表
  • 每个组件功能总结:
    注册中心 所有服务注册与调用查询
    配置中心 微服务配置项集中管理
    网关 自动路由与负载均衡至微服务
    熔断,限流 防止服务崩溃的保护机制
    分布式追踪系统 判断程序性能与调用关系
posted @ 2020-08-30 14:53  Doc-Yu  阅读(3643)  评论(0编辑  收藏  举报