微服务学习笔记(二):Spring Cloud

2. Spring Cloud

Spring Cloud作为Java语言的微服务框架,依赖于Spring Boot,具有快速开发、持续交付、易于部署等特点。

2.1 微服务应该具备的功能

微服务的特点:

  • 按照业务划分服务。每个微服务运行在独立的进程中,有独立的数据库等组件。
  • 通过轻量级机制如HTTP通信。
  • 有一套服务治理解决方案,服务之间不耦合。
  • 单个微服务能够集群化部署,有负载均衡能力。
  • 有一个完整的安全机制。
  • 有链路追踪能力。
  • 有一套完整的实时日志系统。

微服务的功能主要体现在:

  • 服务注册和发现
  • 服务负载均衡
  • 服务容错
  • 服务网关
  • 服务配置统一管理
  • 链路追踪
  • 实时日志
2.1.1 服务的注册和发现

微服务系统由大量微服务构成,每个微服务有众多实例,服务之间相互依赖成网状,需要服务注册中心来统一管理微服务实例。

服务注册是指向服务注册中心一个服务实例,服务提供者将服务信息(服务名、IP地址等)告知服务注册中心。

服务发现是指当服务消费者需要消费另一个服务时,服务注册中心告知服务消费者其消费的服务的实例信息。

通常情况下,一个服务既是服务提供者也是服务消费者。

服务注册中心提供服务的健康检查方式。通常一个服务实例注册后会定时向服务注册中心发送心跳,表明处于可用状态。当一个服务实例停止向服务注册中心提供心跳一段时间后,服务注册中心认为该服务实例不可用,将其剔除服务注册列表。如果服务实例继续向注册中心提供信条,服务注册中心会将其重新加入服务注册列表。

2.1.2 服务的负载均衡

微服务系统中,所有的服务向服务注册中心注册,服务注册中心持有每个服务的服务名和IP地址等信息,同时每个服务也会获取服务注册列表信息。服务消费者集成负载均衡组件向服务消费者获取服务注册列表信息,每隔一段时间刷新获取该列表。当服务消费者消费服务时,负载均衡组件获取服务提供者所有实例注册信息,并通过一定的负载均衡策略选择一个服务提供者实例,向该实例进行服务消费,这样就实现了负载均衡。

由于服务注册中心不但需要定时接收服务的心跳,还需要向服务提供注册列表信息,当服务实例数量较大时服务注册中心负载较重,此时需要实现服务注册中心高可用。一般做法是将服务注册中心集群化,每个服务注册中心的数据实时同步。

2.1.3 服务的容错

这里主要指分布式系统为解决雪崩效应引进的熔断器机制。当一个服务处理用户请求失败次数超过设定阀值时,打开熔断器,所有的请求不执行业务逻辑而直接执行快速失败。处于打开状态的熔断器,一段时间后会处于半打开状态,熔断器检测一部分请求是否正常,如果执行的请求成功,则关闭熔断器正常提供服务。

熔断器机制的优点:

  • 将资源进行隔离。某服务的某个API借口故障只会隔离该API接口而不会影响到其他API接口。
  • 服务降级。如果大量的请求短时间内涌入超过了服务的处理能力,打开熔断器将服务降级。
  • 自我修复能力。自动检查请求处理情况控制熔断器开闭。
2.1.4 服务网关

微服务系统接口资源通常由服务网关统一暴露,内部服务不直接对外提供API接口。API网关通常有请求转发的作用,并可能负责一定的安全验证。服务网关层之前可能需要加负载均衡层(Nginx双机热备),通过一定的路由策略将请求转发到网关层,经过一系列的身份验证和权限判断转发到具体的服务。

网关层的功能特性:

  • 将所有服务API接口统一聚合、对外暴露,保护内部微服务单元API借口。
  • 可以作用户身份认证、权限验证。
  • 监控功能,记录日志。
  • 流量监控。
  • 便于执行测试。
2.1.5 服务配置统一管理

微服务架构中需要有统一管理配置文件的组件。

首先,Config Server配置服务读取配置文件仓库的配置信息,配置文件仓库可以是本地仓库也可以是远程Git仓库;启动服务时,服务向配置服务读取配置信息;当服务配置信息执行修改后,向配置服务发送Post请求进行刷新,此时服务会向配置服务重新读取配置文件。

对于集群化的服务可以使用消息总线来刷新多个服务实例。

2.1.6 服务链路追踪

微服务架构中需要实现分布式链路追踪,来跟踪一个请求有哪些服务参与、参与的顺序如何,从而使请求链路清晰可见。

Google2010年发表的论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》是业内实现链路追踪的标杆和理论基础。常见的链路追踪组件有Dapper(Google)/Zipkin(Twitter)/Eagleeye(Alibaba)。

2.2 Spring Cloud

Spring Cloud是基于Spring Boot的。Spring Boot简化了Spring复杂的配置和依赖管理,通过起步依赖和内置Servlet容器能够使开发者迅速搭建一个Web工程。Spring Cloud的首要目标就是通过一系列开发组件和框架,帮助开发者迅速搭建一个分布式的微服务系统,通过包装一系列技术框架,实现了一套基于注解、Java配置和基于模板开发的微服务框架,提供了服务注册发现、配置中心、熔断器、智能路由、微代理、控制总线、全局锁、分布式会话等常用组件。

  • 服务注册发现组件Eureka

  • 熔断组件Hystrix

    Hystrix除了基本的熔断器功能外,还能够实现服务降级、服务限流功能,另外还提供了熔断器健康监测。Hystrix Dashboard提供单个服务熔断器的健康状态数据UI,Hystrix Turbine提供多个服务熔断器的健康状态数据UI。

  • 负载均衡组件Ribbon

    Ribbon通常和Eureka、Zuul、RestTemplate、Feign配合使用。

  • 路由网关Zuul

    Zuul有智能路由和过滤的功能。Zuul与Ribbon结合能够做到负载均衡、智能路由。过滤功能是通过拦截请求实现的。

  • Spring Cloud Config

    提供配置文件统一管理功能。通常情况下,Spring Cloud Config和Spring Cloud Bus相互配合刷新指定Client或所有Client的配置文件。

  • Spring Cloud Security

    是对Spring Security的封装,提供用户权限验证。通常会配合Spring Security OAuth2使用。

  • Spring Cloud Sleuth

    分布式链路追踪组件,封装了Dapper、Zipkin、Kibana等。

  • Spring Cloud Stream

    数据流操作包,可以封装RabbitMQ、ActiveMQ、Kafka等消息组件。

一个简单的由Spring Cloud搭建的微服务系统通常由服务注册中心Eureka、网关Zuul、配置中心Config和授权服务Auth构成。

其他组件:

  • Feign 声明式远程调度组件
  • Spring Cloud Bus消息总线组件
  • Spring Cloud Consul/Zookeeper服务注册发现组件
  • Spring Cloud Task 基于Spring Task,提供任务调度和任务管理功能
2.3 Dubbo

Dubbo是阿里巴巴开源的分布式服务框架。包含如下核心内容:

  • RPC远程调用:封装长连接NIO框架如Netty等。
  • 集群容错:提供基于接口方法的远程调用,并实现负载均衡功能。
  • 服务发现:集成Apache Zookeeper。

与Spring Cloud比较:

关注点Spring CloudDubbo
配置管理Spring Cloud Config-
服务发现Eureka/Consul/ZookeeperZookeeper
负载均衡Ribbon自带
网关Zuul-
分布式追踪Spring Cloud Sleuth-
容错Hystrix不完善
通信方式HTTP、MessageRPC
安全模块Spring Cloud Security-
2.4 Kubernetes

Kubernetes是Google开发的容器集群管理系统,具有以下特点:

  • Planet Scale大容量
  • Never Outgrow永不过时
  • Run Anywhere随时随地运行

Kubernetes提供的功能:

  • Automatic Binpacking自动包装
  • Self-healing自我修复
  • Horizontal Scaling横向扩展
  • Service Discovery and Load Balancing服务发现和负载均衡
  • Automated Rollouts and Rollbacks自动部署或回滚
  • Secret and Configuration Management配置管理
  • Storge Orchestration存储编排
  • Batch execution批量处理

Kubernetes完全可以成为构建和部署为服务的一个工具,是从服务编排上实现的。

与Spring Cloud对比:

关注点Spring CloudKubernetes
配置管理Spring Cloud ConfigKubernetes ConfigMap
服务发现Eureka/Consul/ZookeeperKubernetes Services
负载均衡RibbonKubernetes Services
网关ZuulKubernetes Services
分布式追踪Spring Cloud SleuthOpen tracing
容错HystrixKubernetes Health Check
安全模块Spring Cloud Security-
分布式日志ELKEFK
任务管理Spring BatchKubernetes Jobs
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值