首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SpringCloud架构入门学习和使用

SpringCloud架构入门学习和使用

作者头像
全栈工程师修炼指南
发布2022-09-29 14:31:49
2880
发布2022-09-29 14:31:49
举报

[TOC]

0x00 前言介绍

什么是SpringCloud? 答:SpringCloud是在SpringBoot的基础上构建的,目标是协调任何服务,简化分布式系统开发

SpringCloud的作用是什么? SpringCloud对常见的分布式系统模式提供了简单易用的编程模型,帮助开发者构建弹性、可靠、协调的应用程序;

SpringCloud是一系列框架的有序集合,它基于SpringBoot的便利性融合了一整套实现微服务的框架并提供了服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等组件。 SpringCloud的官网:https://spring.io/projects/spring-cloud

SpringCloud优点:

  • 轻松入门并快速提高工作效率
  • 约定优于配置,适用于各种环境
  • 快速构建分布式系统架构的工具,例如轻量级的组件配置管理,服务发现,断路器,智能路由,微代理,控制总线,一次性令牌,全局锁定,领导选举,分布式会话,集群状态等。
  • 组件支持丰富,功能齐全

Spring整体架构:

  • API 网关 / 微服务
  • 断路器面板/设置面板/服务注册/分布式跟踪
WeiyiGeek.整体架构
WeiyiGeek.整体架构

WeiyiGeek.整体架构

SpringCloud的版本关系 描述:SpringCloud是一个由许多子项目组成的综合项目,各子项目有不同的发布节奏。为了避免SpringCloud版本号与子项目版本号混淆,SpringCloud版本采用了名称而非版本号的命名; 比如当前SpringCloud版本Greenwich SR3,其中SR3是当SpringCloud的发布内容积累到临界点或者一个重大BUG被解决后,会发布一个”service releases”版本,简称SRX版

SpringCloud和SpringBoot版本对应关系

SpringCloud SpringBoot 
Hoxton     	2.2.x
Greenwich	  2.1.x
Finchley  	2.0.x
Edgware	    1.5.x
Dalston   	1.5.x

SpringCloud子项目简介:

Spring Cloud Config

  • 集中配置管理工具,分布式系统中统一的外部配置管理,默认使用Git来存储配置,可以支持客户端配置的刷新及加密、解密操作。

Spring Cloud Netflix

Netflix OSS 开源组件集成,包括Eureka、Hystrix、Ribbon、Feign、Zuul等核心组件。

Eureka:服务治理组件,包括服务端的注册中心和客户端的服务发现机制;
Ribbon:负载均衡的服务调用组件,具有多种负载均衡调用策略;
Hystrix:服务容错组件,实现了断路器模式,为依赖服务的出错和延迟提供了容错能力;
Feign:基于Ribbon和Hystrix的声明式服务调用组件;
Zuul:API网关组件,对请求提供路由及过滤功能。
Archaius:配置管理API,包含一系列配置管理API,提供动态类型化属性、线程安全配置操作、轮询框架、回调机制等功能。

Spring Cloud Bus

  • 用于传播集群状态变化的消息总线,使用轻量级消息代理链接分布式系统中的节点,可以用来动态刷新集群中的服务配置。

Spring Cloud Consul

  • 基于Hashicorp Consul的服务治理组件。

Spring Cloud Security

  • 安全工具包,对Zuul代理中的负载均衡OAuth2客户端及登录认证进行支持。

Spring Cloud Sleuth

  • SpringCloud应用程序的分布式请求链路跟踪,支持使用Zipkin、HTrace和基于日志(例如ELK)的跟踪。

Spring Cloud Stream

  • 轻量级事件驱动微服务框架,可以使用简单的声明式模型来发送及接收消息,主要实现为Apache Kafka及RabbitMQ。

Spring Cloud Task

  • 用于快速构建短暂、有限数据处理任务的微服务框架,用于向应用中添加功能性和非功能性的特性。

Spring Cloud Zookeeper

  • 基于Apache Zookeeper的服务治理组件。

Spring Cloud Gateway

  • API网关组件,对请求提供路由及过滤功能。

Spring Cloud OpenFeign

  • 基于Ribbon和Hystrix的声明式服务调用组件,可以动态创建基于Spring MVC注解的接口实现用于服务调用,在SpringCloud 2.0中已经取代Feign成为了一等公民。s

SpringCloud子项目组织架构

WeiyiGeek.
WeiyiGeek.

WeiyiGeek.

注意事项:

  • Greenwich版本是基于SpringBoot 2.1.x版本构建的,不适用于1.5.x版本。随着2019年8月SpringBoot 1.5.x版本停止维护,Edgware版本也将停止维护。
SpringCloud config

描述:配置文件中有些敏感数据需要加密处理,在使用SpringCloud中实现SpringCloud config配置文件加密

#下载jce替换java_home/jre/lib/security下的两个jar包
http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

#配置文件添加
encrypt:
  key-store:
    alias: mytestkey
    location: server-rsa.jks
    password: pppppppp
    secret: ssssssss

测试加密解密启动eureka、config-server 可以使用curl和postman测试/enrypt、/derypt,如果加密解密结果一致就没问题。

生成证书

keytool -genkeypair -alias mytestkey -keyalg RSA -dname "CN=Web Server,OU=Unit,O=Organization,L=City,S=State,C=US" -keypass ssssssss -keystore server-rsa.jks -storepass pppppppp

在文件夹找到生成的server-rsa.jks,复制到项目classpath。

配置中心加密test

在rsatest-dev.yml添加以下内容

# {cipher}后的内容是待解密内容

profile: '{cipher}AQCjXw/kh/GoWo/rjBB48ISnT1A74hsXg1AaVZRuOfJN0BmoiKSqJYtY/ivwe6mCOXTT3rb6ttI+fmz1zUYkjyomlU2owwz6uG6nBMuMSQdiS2ExMFGPfZwovfYbg/0IijxQ2+UDr51nNzDtTXAvAo6DhlkoCGC1MEHcRyakOg7SD1hYwUoAxls5A2v+8934iKIP2tVd+YEzHkDMYG5BS1XkiXLBV6ctVRerdlNO5XYqR7l9k8KP4uehTkZDYnuF3oJpf3ZMDHnimk9KH0KKgds3CC63X4bPPb9Ytetx/CrdZlpK9/VwQqe6b4HIu7KLM4TfsWKKiyI6n2jZ+8gEuLigfRovFQjCkG+EvMmMJKNDll/x0q47T2S1+CX4JXNAMd0='

访问ip:port/rsatest-dev.yml

key-store配置正确情况下,可以看到profile: test

配置错误,会看到 invalid: profile

另一种配置文件加密 jasypt安全框架继承springboot,可以实现配置加载前解密。 具体操作:

#添加pom
 <dependency>
            <groupId>com.github.ulisesbocchio</groupId>
            <artifactId>jasypt-spring-boot-starter</artifactId>
            <version>1.16</version>
</dependency>

 // 密钥
    private static final String KEY = "1234567a?";
    public static void main(String[] args) {
        String ciphertext1 = encrypt("abcdefg"); // Wu11fsC0gpgSET5aU8GXUA==
        String ciphertext2 = encrypt("abcdefg"); // ESXlHsVk2YM7mGcHy2ccGg==
        System.out.println(ciphertext1);
        System.out.println(ciphertext2);
        String text1 = decrypt(ciphertext1);
        String text2 = decrypt(ciphertext2);
        System.out.println(text1);               // abcdefg
        System.out.println(text2);               // abcdefg
    }
    /**
     * 加密
     *
     * @param text 明文
     * @return 密文
     */
    public static String encrypt(String text) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword(KEY);
        return encryptor.encrypt(text);
    }
    /**
     * 解密
     *
     * @param ciphertext 密文
     * @return 明文
     */
    public static String decrypt(String ciphertext) {
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword("e!Jd&ljyJ^e4I5oU");
        return encryptor.decrypt(ciphertext);

配置加上

jasypt:
  encryptor:
    password: e!Jd&ljyJ^e4I5oU # 密钥
xxx: 
    password: ENC(jWgGELCkuxRuCI2Aqa6cF9VCxYpuKEZr)

ENC()里是待解密内容。

Spring Cloud Security

补充附录

附录1:SpringCloud与Dubbo的比较

核心要素

SpringCloud

Dubbo

服务注册中心(Service Register)

SpringCloud Netflix EureKa(单一)

Zookeeper/Redis

服务调用方式

REST API

RPC

服务网关

SpringCloud Netflix Zuul

断路器(Breaker)

SpringCloud Netflix Hystrix

未完善

分布式配置

SpringCloud Config

分布式跟踪系统

SpringCloud Sleuth

消息总线

SpringCloud Bus

数据流

SpringCloud Stream(Redis/Rabbit/kafka信息微服务)

批量任务

SpringCloud Task

占用带宽

比较多(HTTP协议传输)

较少(二进制传输)

开发依赖

接口协议约定比较自由且松散

发难度较大以及Jar包依赖问题

Spring项目访问日志设置

- --server.tomcat.accesslog.buffered=true
- --server.tomcat.accesslog.directory=/app/tomcat/log
- --server.tomcat.accesslog.enabled=true
- --server.tomcat.accesslog.file-date-format=.yyyy-MM-dd
- --server.tomcat.accesslog.pattern=common
- --server.tomcat.accesslog.prefix=access_log
- --server.tomcat.accesslog.rename-on-rotate=false
- --server.tomcat.accesslog.request-atteributes-enabled=false
- --server.tomcat.accesslog.ratate=true
- --server.tomcat.accesslog.suffix=.log
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 前言介绍
  • SpringCloud config
    • Spring Cloud Security
    • 补充附录
    相关产品与服务
    负载均衡
    负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档