Spring Cloud 微服务(2)
微服务与 Spring Cloud

应用是可以独立运行的程序代码,提供相对完善的业务功能。
架构分为:业务架构、应用架构、技术架构。业务架构决定应用架构,技术架构支撑应用架构。
架构的发展历程:单体架构 --> 分布式架构 --> SOA 架构 --> 微服务架构

微服务概述

单体应用架构

单体架构可以理解为一个 Java Web 工程,包含:表现成、业务层、数据访问层。从 Controller 到 Service 到 Dao,没有任何应用拆分,开发完毕后打包成一个大型的 war 部署。

单体应用架构

优点

  • 便于发开:开发人员使用当前开发工具在短时间内就可以完成开发
  • 便于测试:不需要依赖其他接口,节约时间
  • 便于部署:只需将 war 部署到运行环境即可

缺点

  • 灵活度不够:如果程序有任何修改,需要自上而下全部修改,测试的时候也不要整个程序部署完才能看到效果。在开发过程中,可能会需要等待其他开发人员开发完成才能进行自己开发的内容。
  • 降低系统性能:原本可以直接访问数据库,但多出了一个 Service 层
  • 启动慢:一个进程中包含了所以的业务逻辑,涉及的模块过多
  • 扩展性差:增加新的功能不能针对单个点增加,要全局性的增加,牵一发动全身

分布式架构

按照业务垂直切分,每个应用都是单体架构,通过 API 互相调用

分布式架构

面向服务的 SOA 架构

SOA 架构有两个主要角色:服务的提供者(provider)、服务的消费者(consumer)。阿里的 Dubbo 的 SOA 的一个典型实现

优点

  • 模块拆分,使用接口通信,降低了模块之间的耦合度
  • 把一个大项目拆分成多个子项目,可以并行开发
  • 增加功能时只需要增加一个子项目,调用其他系统接口即可
  • 可以灵活分布式部署

缺点

  • 系统之间需要远程通信,增加了开发的工作量

微服务架构

微服务架构是一种架构风格,对于大型复杂的业务系统,可以将业务功能拆分成多个相互独立的微服务,各个微服务之间是松耦合的,通过各种远程协议进行同步/异步通信,各个微服务可单独部署扩容/缩容以及升级/降级

微服务技术选型对比

Spring CloudDubboMotanMSEC其他
功能微服务完整方案服务治理框架服务治理框架服务开发运营框架
通信方式REST / httpRPC 协议RPC / Hessian2Protocol BuffersgRPC、thrift
服务发现 / 注册Eureka(AP)ZK、NacosZK / Consul只有服务发现Etcd
负载均衡Ribbon客户端负载客户端负载客户端负载Ngnix + Lua
容错机制6 种6 种2 种自动容错keepalived、heartbeat
熔断机制Hystrix过载保护
配置中心Spring Cloud ConfigNacosApollo、Nacos
网关Zuul、GatewayKong、自研
服务监控Hystrix + TurbineDubbo + MonitorMonitorELK
链路监控Sleuth + ZipkikPinpoint
多语言REST 支持多语言JavaJavaJava、C++、PHPJava、PHP、Node.js
社区活跃度高(Spring)高(阿里)一般未知

基于 Spring Cloud 的微服务解决方案

组件方案1方案2方案3
服务发现EurekaConsuletcd、Nacos
共用组件服务调用:Feign、负载均衡:Ribbon、熔断器:Hystrix
网关Zuul:性能低,SpringCloud Gateway:性能高自研
配置中心SpringCloud Config、携程 Apollo、阿里 Nacos
全链路监控Zipkin、Pinpoint、SkyWalking(推荐)
其他分布式事务、Docker、gRPC、领域驱动 Halo

基于 Dubbo 的解决方案使用 Dubbo + Nacos。Nacos 是阿里开源的一个构建云原生应用的动态服务发现、配置、服务管理平台。


Spring Cloud

Spring Cloud 介绍

中间件:中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。
常见的中间件分别是:服务治理(如 RPC)配置中心全链路监控分布式事务分布式定时任务消息中间件API 网关分布式缓存数据库中间件等。

Spring Cloud 像是一个中间件,基于 Spring Boot 开发,提供一套完整的微服务解决方案。包括服务注册与发现配置中心全链路监控API 网关熔断器 等选型的中立的开源组件,可以随需扩展和替换组装。

Spring Cloud 项目模块

组件名称所属项目组件分类
Eurekaspring-cloud-netflix注册中心
Zuulspring-cloud-netflix第一代网关
Sidecarspring-cloud-netflix多语言支持
Ribbonspring-cloud-netflix负载均衡
Hystrixspring-cloud-netflix熔断器
Turbinespring-cloud-netflix集群监控
Feignspring-cloud-openfeign声明式的 HTTP 客户端
Consulspring-cloud-consul注册中心
Gatewayspring-cloud-gateway第二代网关
Sleuthspring-cloud-sleuth链路监控
Configspring-cloud-config配置中心
Busspring-cloud-bus总线
Pipelinespring-cloud-pipelines部署管道
Dataflowspring-cloud-dataflow数据处理
Streamspring-cloud-stream消息驱动

服务治理中间件

服务治理中间件包含:服务注册与发现服务路由负载均衡自我保护管理机制等。
其中,服务路由包含:服务上下线在线测试机房就近选择AB测试灰度发布等。
负载均衡包含:支持根据目标状态和目标权重进行负载均衡。
自我保护包含:服务降级优雅降级流量控制

注册中心对比

特性ConsulZookeeperetcdEureka
服务健康检查服务状态、内存、硬盘等(弱)长连接、keepalive连接心跳可配置支持
多数据中心支持---
kv 存储服务支持支持支持-
一致性raftpaxosraft-
CAPCACPCPAP
多语言支持https、dns客户端http/grpchttp(sidecar)
watch支持全量/支持long polling支持支持long polling支持 long polling/大部分增量
自身健康metrics-metricsmetrics
安全acl/httpsaclhttps支持(弱)-
Spring Cloud 集成支持支持支持支持

Spring Cloud 配置中心功能需求

场景支持:

面向全公司,充分考虑各部门需求,支持不同语言接入,充分考虑兼容性

运维集成:

统一数据源
标准化运维流程

权限管理:

接入权限、审核权限、下发权限…

Spring Cloud API 网关

API 网关是出现在系统边界上的一个面向 API 的、串行集中式的强管控服务,可以理解为应用的防火墙,主要起隔离外部访问与内部系统的作用。主要为了解决访问认证报文转发访问统计等问题。

API 网关需要提供的功能:

统一接入功能:为各种服务提供统一接入服务,提供三高(高可用、高并发、高可靠)的网关服务,还需要支持负载均衡、容灾切换、异地多活
协议适配:对外提供 HTTP、HTTPS 访问,对内提供各种协议,如:HTTP、HTTPS、RPC、REST 等
流量监控:当大流量请求时,进行流量监控流量挑拨;当后端出现异常时,需要进行服务熔断服务降级;在异地多活中,需要进行流量分片等。
网关防护:所有请求进行安全过滤,对 IP 黑名单、URL 黑名单封禁、风控防刷、防恶意攻击等。

Zuul、Gateway 的比较

ZuulGateway
实现难度
底层http、https、restNetty
灰度、降级、标签路由、限流、WAF封禁需要自定义 Filter配置
安全、监控/埋点自定义 Intercepter自定义配置

Spring Cloud 全链路监控

全链路监控需要包含的功能:

定位慢调用:慢 web 服务、慢 rest/rpc 服务、慢 SQL
定位错误:4XX、5XX、Service Error
定位异常:Error Exception、Fatal Exception
展现依赖和拓扑:域拓扑、服务拓扑、trace 拓扑
trace 调用链:将端到端的调用以及附加的上下文信息、异常日志信息、每个调用点的耗时都进行展示
应用警告:根据设置的警告规则,扫描指标数据,并进行信息上报


-------------本文结束 感谢您的阅读-------------
0%