《小白学微服务》之,什么是Spring Cloud Netflix

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 上篇简单的介绍了一下微服务的发展过程及何为微服务的一些简单概念没看的小伙伴可以点这里👉《小白学微服务》之,什么是微服务。本篇呢,主要来说说微服务架构的统一实现方案,因为微服务架构毕竟是一个抽象的概念,而我们知道每一个概念(理念)在技术上都是有一个落地的实现方案,其中微服务的实现方案之一就有SpringCloud。那废话不多说,往下看吧!


一、千篇一律的介绍


官网:https://spring.io/projects/spring-cloud


原话:Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.


译文:


Spring Cloud为开发人员提供了一些工具,用于快速构建分布式系统中的一些常见模式(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。分布式系统的协调导致了样板模式,使用Spring Cloud开发人员可以快速建立实现这些模式的服务和应用程序。它们在任何分布式环境中都能很好地工作,包括开发者自己的笔记本电脑、数据中心、云计算和管理平台。


虽然翻译的不是很贴切但我们以然可以从中得知,SpringCloud不是一个技术,而是一个技术的集合体,是一系列集合框架的组合。


在这里我不得不提一下SpringBoot,因为SpringCloud是基于SpringBoot实现的。SprinBoot 秉持约定优于配置的思想,因此可以利用这些组件基本的默认行为来快速入 门,并在需要的时候可以配置或扩展,以创建自定义解决方案。


SpringCloud利用SpringBoot的开发便利性,巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以基于SpringBoot 组件进行开发,做到一键启动和部署SpringCloud并没有重复制造轮子,它只是将目前比较成熟、经得起实际考验、优秀的开源服务框架组合起来,通过SpringBoot进行封装,屏蔽掉复杂的配置和实现原理,最终给我们留出了一套简单易懂、易署和易维护的分布式系统开发工具包。


二、唠一下版本


SpringCloud 不同于其他独立项目,它是拥有众多子项目的项目集合,其所有版本由版本名和版本号组成。


而且它的版本名字是以伦敦地铁站命名并且遵循字母顺序的;版本号通常有M和SR两种,M表示里程碑版本,SR表示稳定版。


例如:Finchley.M9;Finchley.SR3,Finchley表示版本名,M9表示第九个里程碑版,SR3表示第三个稳定版。


以Finchley RELEASE版本为例,其对应的组件和版本如下。


image.png


三、再说一下组成


SpringCloud包含的组件众多,各个组件都有各自不同的特色和优点其技术架构如图:


image.png


组件介绍:


服务注册与发现组件:


Eurek、Zookeeper和Consul等,其中Eureka是一个REST风格的服务注册与发现的基础服务组件。


服务调用组件:


Hystrix、Ribbon和OpenFeign;其中Hystrix能够使系统在出现依赖服务失效的情况下,通过隔离系统依赖服务的方式,防止服务级联失败,同时提供失败回滚机制,使系统能够更快速地从异常中恢复;Ribbon用于提供客户端的软件负载均衡算法,还提供了一系列完善的配置项如连接超时、重试等;OpenFigen是一个声明式RESTful网络请求客户端,它使编写Web服务客户端变得更加方便快捷。


路由和过滤组件:


包括 Zuul、SpringCloud Gateway;SpringCloud Gateway 提供了一个构建在Spring生态之上的API网关,其旨在提供一种简单而有效的途径来发送 API, 为他们提供横切关注点 ,如: 安全性、监控指标和弹性。


配置中心组件:


SpringCloud Config实现了配置集中管理、动态刷新等配置中心的功能 。通过Git或者简单文件来存储,支持加解密。


消息组件:


SpringCloud Stream、SpringCloud Bus。SpringCloud Stream对于分布式消息的各种需求进行了抽象,包括发布订阅、分组消费和消息分区等功能 ,实现了微服务之间的异步通信。SpringCloud Bus主要提供了服务间的事件通信(如刷新配置)。


安全控制组件:


SpringCloud Security基于OAuth2开放网络的安全标,提供了微服务环境下的单点登录、资源授权和令牌管理等功能。


链路监控组件:


SpringCloud Sleuth 提供了全自动、可配置的数据埋点,以收集微服务调用链路上的性能数据,可以结合 Zipkin 进行数据存储、统计和展示。


除了这些组件之外, SpringCloud还提供了以命令行工具SpringCloud Cli和集群工具SpringCloud Cluster。SpringCloud Cli提供了以命令行和脚本的方式来管理微服务及SpringCloud组件的方式, SpringCloud Cluster提供了集群选主、分布式锁和一次性令牌等分布式集群需要的技术组件。


四、最后说说特性


由于SpringCloud的组件大部分都是由SpringBoot提供的,所以SpringCloud在此基础上添加了分布式系统相关的特性。


SpringCloud的特性依赖于SpringCloud Context和SpringCloud Commons两个公共库:


SpringCloud Context为SpringCloud应用程序上下文(ApplicationContext )提供了大量的实用工具和特性服务。

SpringCloud Common 针对不同的SpringCloud的实现(如SpringCloud Netflix Eureka和SpringCloud Consul 两种不同的服务注册与发现实现)提供上层抽象和公共类。


4.1 SpringCloud Context应用上下文

SpringCloud区别于SpringBoot最大的一个配置就是添加了Bootstrap上下文配置。


它引入了一个更高级别的上下文类BootStrapContext,它是ApplicationContext的父级上下文。


官网对它介绍:


A Spring Cloud application operates by creating a “bootstrap” context, which is a parent context for the main application. It is responsible for loading configuration properties from the external sources and for decrypting properties in the local external configuration files. The two contexts share an Environment, which is the source of external properties for any Spring application. By default, bootstrap properties (not bootstrap.properties but properties that are loaded during the bootstrap phase) are added with high precedence, so they cannot be overridden by local configuration.


翻译下意思:

Spring云应用程序bootstrap context进行操作(bootstrap context是主应用程序的父上下文)。bootstrap context负责从外部源加载配置属性,并解密本地外部配置文件中的属性。这两个上下文共享一个环境,该环境是任何Spring应用程序外部属性的来源。默认情况下,bootstrap属性(不是bootstrap.properties而是引导阶段加载的属性)具有较高的优先级,因此不能被本地配置覆盖。


注意一下:


在bootstrap.yml(bootstrap.properties)与application.yml(application.properties)配置文件中它的加载顺序是:


bootstrap.yml > application.yml > application-dev(prod).yml


所以子级上下文(application)的属性可以覆盖父级(bootstrap)中的具有相同名称和属性源名称的属性。


4.2 SpringCloud Commons公共抽象

SpringCloud 将服务发现、负载均衡和断路器等通用模型封装在一个公共抽像中,可以被所有的SpringCloud客户端使用,不依赖于具体的实现(例如服务发现就有Eureka和Consul等不同的实现),这些公共抽象位于SpringCloud Commons项目中。


几个基本抽象有:


  1. 服务发现:DiscoveryClient,从注册中心发现微服务。
  2. 服务注册:ServiceRegistry,注册微服务到注册中心。
  3. 负载均衡:LoadBalancerClient,客户端调用负载均衡。其中,重试策略从spring-cloud-commons-2.2.6加入了负载均衡的抽象中。
  4. 断路器:CircuitBreaker,负责什么情况下将服务断路并降级
  5. 调用 http 客户端:内部 RPC 调用都是 http 调用
  6. 这个公共组件中涉及的知识是非常多的,这里主要就是提一下,以后有时间我们在深入进去。


好了,今天的内容到这里就结束了,关注我,我们下期见


相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
3天前
|
JSON Java API
利用Spring Cloud Gateway Predicate优化微服务路由策略
Spring Cloud Gateway 的路由配置中,`predicates`​(断言)用于定义哪些请求应该匹配特定的路由规则。 断言是Gateway在进行路由时,根据具体的请求信息如请求路径、请求方法、请求参数等进行匹配的规则。当一个请求的信息符合断言设置的条件时,Gateway就会将该请求路由到对应的服务上。
99 69
利用Spring Cloud Gateway Predicate优化微服务路由策略
|
22天前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
142 68
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
2月前
|
Dubbo Java 应用服务中间件
Spring Cloud Dubbo:微服务通信的高效解决方案
【10月更文挑战第15天】随着信息技术的发展,微服务架构成为企业应用开发的主流。Spring Cloud Dubbo结合了Dubbo的高性能RPC和Spring Cloud的生态系统,提供高效、稳定的微服务通信解决方案。它支持多种通信协议,具备服务注册与发现、负载均衡及容错机制,简化了服务调用的复杂性,使开发者能更专注于业务逻辑的实现。
75 2
|
19天前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
177 13
Spring Cloud Alibaba:一站式微服务解决方案
|
6天前
|
Java 关系型数据库 Nacos
微服务SpringCloud链路追踪之Micrometer+Zipkin
SpringCloud+Openfeign远程调用,并用Mircrometer+Zipkin进行链路追踪
71 20
|
5天前
|
运维 监控 Java
为何内存不够用?微服务改造启动多个Spring Boot的陷阱与解决方案
本文记录并复盘了生产环境中Spring Boot应用内存占用过高的问题及解决过程。系统上线初期运行正常,但随着业务量上升,多个Spring Boot应用共占用了64G内存中的大部分,导致应用假死。通过jps和jmap工具排查发现,原因是运维人员未设置JVM参数,导致默认配置下每个应用占用近12G内存。最终通过调整JVM参数、优化堆内存大小等措施解决了问题。建议在生产环境中合理设置JVM参数,避免资源浪费和性能问题。
26 3
|
26天前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
32 6
|
26天前
|
负载均衡 Java 开发者
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
深入探索Spring Cloud与Spring Boot:构建微服务架构的实践经验
89 5
|
26天前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
47 5
|
26天前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
36 5