Spring Cloud【转】

以下内容转载和参考自:Spring Cloud开发 - 廖雪峰的官方网站

1、  概述

  Spring是JavaEE的一个轻量级开发框架,主营IoC和AOP,集成JDBC、ORM、MVC等功能。

  Spring Boot是基于Spring,提供开箱即用的积木式组件,目的是提升开发效率。

  Spring Cloud用来创建分布式应用程序,它提供了一组基础设施(其核心是Spring框架,利用Spring Boot的自动配置),力图实现最简化的分布式应用程序开发。

2、Spring Cloud Config

   比如对于分布式应用,有多个Spring Boot应用,它们可以使用一个通用的配置文件。可以使用Spring Cloud Config来提供一个通用的分布式应用配置解决方案,它包括Config Server和Config Client,使用Config Server作为配置服务器拥有配置文件,各个Spring Boot应用在启动时使用Config Client向服务器请求配置,Config Server读取配置并向Spring Boot应用发送配置。Spring Cloud Config的具体应用可以参考搭建Spring Cloud项目这篇文章中Spring Cloud Config部分。

3、Spring Cloud Gateway

  一般我们不是将服务直接暴露给用户,可以选择一个反向代理充当网关,比如Nginx(相应的功能则需要由Lua脚本实现),将服务部署在网关所在的内网。关于反向代理的更多内容,可以参考:与http协作的web服务器 中反向代理相关内容。也可以使用Spring Cloud Gateway来实现网关,它是基于Netty的异步服务器,允许我们编写一系列过滤器来实现黑名单、权限检查、限流等功能。

4、Spring Cloud OpenFeign

  如果接口比较多,可以考虑使用RPC调用,比如gRPC或者Spring Cloud OpenFeign。pring Cloud OpenFeign把REST请求封装为Java接口方法,实现了一种声明式的RPC调用。Spring Cloud OpenFeign把REST请求封装为Java接口方法,实现了一种声明式的RPC调用。

  RPC(Remote Procedure Call Protocol)即远程过程调用,它使一台计算机可以调用另一台计算机上的方法以得到结果,就像一次普通的函数调用一样。使用RPC屏蔽了网络编程细节,调用远程方法就像调用本地方法一样,使我们可以专注于业务逻辑。网络传输的数据必须是二进制数据,但方法请求的出入参数一般都是对象,所以需要把对象序列化成二进制数据,服务方再把二进制反序列化成对象。gRPC使用Protobuf序列化,比如序列化JSON数据的话,其会比原JSON数据小。一次RPC调用如下所示:

Spring Cloud【转】_第1张图片

  对于Java来讲,RPC通过springAOP动态代理的技术,对RPC方法的调用进行监控拦截,比如在方法调用之前完成网络初始化和连接操作。

5、Spring Cloud Vault

  我们可以在SpringBoot项目的配置文件中配置相关的密码,如下所示的数据库密码,程序会先从环境变量中查找PASSWORD来使用,查找不到的话再使用123456对PASSWORD赋值后使用。可以在测试环境中使用默认值123456,在正式环境使用环境变量中设置的PASSWORD值。可以在启动程序时传入环境变量来使用,如java -D PASSWORD=123456 -jar app.jar。

# application.yml
 
 
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/my_database?serverTimezone=GMT&useUnicode=true&characterEncoding=UTF-8&useSSL=false
    username: sa
    password: ${PASSWORD:123456}

    将密码直接存放在配置文件或数据库中都是不安全的,使用专业的密钥管理软件如Vault可以更安全地管理密钥。Spring Cloud Vault就是用于从Vault读取密钥,适合对安全性要求特别高的项目。 

6、Spring Cloud Sleuth  

  微服务架构下,一个请求可能会经过多个服务才会得到结果,如果在这个过程中出现了异常,就很难去定位问题。必须要实现一个分布式链路跟踪的功能,直观的展示出完整的调用过程。比如一个分布式调用,UI调用API,API调用Engine,可以使用Spring Cloud Sleuth来监控这个链路,它通过在入口调用每次生成一个唯一ID来跟踪链路。

  使用Spring Cloud Sleuth采集数据可以直接与前面在JMX中说过的StatsD集成。

你可能感兴趣的:(Java,Web,spring,cloud,spring,微服务)