微服务框架SpringBoot、SpringCloud

  • 微服务架构 (一般采用AP架构)

A:服务可用性

P:分区容错

C:数据的强一致性

  • 领域驱动设计:通过代码和数据分析找到合理的切分点,并通过数据分析来判断服务的划分边界和划分粒度。
  • 微服务核心:Docker为容器中心,DevOps是一种部署手段或理念(DevOps就是开发(Development)和运维(Operations)这两个领域的合并)
  • 微服务架构中的三大难题:服务故障的传播性、服务的划分、分布式事务
  • 雪崩效应:服务不可用导致系统处于瘫痪状态(通过熔断器解决)
  • 微服务具备功能:

服务的注册与发现

服务的负载均衡

服务的容错

服务网关

服务配置中心

服务链路追踪

  • 与其他服务框架比较

Dubbo:非常优秀的服务治理和服务调用框架

Kubernets:通过容器编排实现所有的微服务功能,更像一个平台

  • Maven配置

.settings.xml 本地仓库目录、远程下载服务器(国外服务器、阿里云镜像库、自己搭建镜像库--Sonatype Nexus Repository Manager)

pom.xml文件:groupid、artifactid、version、parent、properties、dependencies、build

maven命令:mvn clean 、mvn package、mvn compile、mvn install

  • spring boot:

三大特点:自动配置、起步依赖、Actuator对运行状况监控

//@RestController = @Controller+@ResponseBody

@RestController

public class HelloController {

@RequestMapping("/hello")

public String index(){

return "hello spring boot";

}

}

springboot 配置文件

application.yml 配置文件装载到配置类,自定义配置文件装载到类

多个环境的配置文件:application-{profile}.properties test、dev、prod

需要在application.yml 中添加spring.profiles.active = dev 配置

  • Actuator监控

配置application.yml 属性支持 management.port 和management.security.enabled

http://localhost:9091/health 查看程序运行状态

/beans 查看运行程序的bean

  • springboot 整合jpa、redis

springboot 整合swagger2,搭建RestfulAPI在线文档,@Api、@ApiOperation(value="用户列表",notes="用户列表")

  • 服务注册和发现Eureka

Register Service:服务注册中心

Provider Service 服务提供者 application server

Consumer Service 服务消费者 client sever

一些概念:

Register:服务注册 -ip、duank、状况、主页访问地址

Renew:服务续约 client默认情况下30秒发送一次心跳进行服务续约

Fetch Registries:获取服务注册列表信息 client 默认30更新一次

Cancel:服务下线

Eviction:服务剔除 ,默认client 90秒没有发送续约服务,sever从服务列表剔除

构建高可用Eureka Server集群:application.yml 采用多profile格式,分host和端口

//*****************防止自己注册自己************

eureka:

client:

register-with-eureka: false

fetch-registry: false

//******************

  • 负载均衡Ribbon

负载均衡有两种实现方式:一种是独立进程单元,通过负载均衡转发到不同的执行单元上,eg:nginx,另一种是将负载均衡逻辑以代码的方式封装到服务消费者的客户端上,eg:Ribbon

RestTemplate与Ribbon进行结合,在resttemplate bean 上加上@LoadBalanced注解就开启了负载均衡功能

2个eureka-client 服务消费者根据Eureka 服务名访问就可以

  • 声明书调用Feign

Feign目标是将java Http 客户端调用过程变得简单

@FeignClient(value="eureka-client",configuration=FeignConfig.class)

  • 熔断器Hystrix

具有自我修复功能

@EnableHystrix

@HystrixCommand(fallbackMethod=“hiError”)

Hystrix Dashboard 监控

  • 路由网关Spring Cloud zuul

所有api接口统一聚合

可以做用户身份和权限认证

实时监控、日志书瑞

流量监控

Zuul包括4种过滤器:

PRE过滤器:请求到具体服务之前执行,可以用于身份认证、参数验证

ROUTING过滤器:请求路由到具体微服务实例时执行

POST过滤器:请求已被路由到微服务后执行的,可以用于收集日志信息、指标、响应

ERROR过滤器:在其他过滤器发生错误时执行

路由分发,支持版本号

路由上可以配置熔断器

Zuul很容易实现负载均衡、智能路由、熔断器,横向扩展能力非常好

常用实现方式:1、不同渠道使用不同路由(app、web、其它)

2、与nginx相结合,暴露在最外面是Nginx 主从双热备份进行keepalive,Nginx通过某种策略将请求转发到Zuul集群上,Zuul最终将请求分发到具体服务上。

  • 配置中心Spring Cloud Config

@EnableConfigServer

1、从本地读取配置文件

2、从git服务器读取配置文件

使用Spring Cloud Bus 刷新配置,可选的消息代理组件包括RabbitMQ、AMQP和Kafka。

更改配置文件,Bus一个功能让这个过程变得简单,只需要向一个微服务实例发送一个Post请求,通过消息组件通知其他微服务实例重新拉取配置文件。

config-client,通过RabbitMQ实现,需要搭建MQ服务,client主类添加@RefreshScope,通过Postman或者其它工具发送一个请求,http://ip:port/bus/refresh

  • 服务链路追踪SpringCloud Sleuth

使用Zipkin 提供UI展示,使用Http或者RabbitMQ传递链路数据,使用mysql、ElasticSearch(适用于大数据量访问,可以使用Kibana展示链路数据)、Cassandra数据库存储链路数据

  • 微服务监控Spring Boot Admin

监控Spring Cloud 微服务、聚合监控微服务系统中熔断器状况、集成Security安全登录界面

  • Spring Boot Security 安全组件

系统安全也需要考虑传输层和系统层,eg:https、服务器防火窗

同行优秀安全框架 Apache Shiro ,一般用于单体应用。

用户信息可以存内存里也可以存数据库

  • Spring Cloud OAuth2 保护微服务系统

OAuth2是一个标准授权协议

OAuth2认证流程,获取Token过程,拿token去请求认证,认证通过走用户权限

框架的缺陷是每次都要远程请求auth-service验证token的有效性

JWT(JSON WEB TOKEN)一种开放标准,数据体积非常小

应用场景:认证、信息交换,可以利用JWT实现单点登录

大量api访问日志可以使用ELK组件进行处理

猜你喜欢

转载自blog.csdn.net/chechelove886/article/details/84308381