怎样解析微服务架构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 OAuth3 保护微服务系统
OAuth3是一个标准授权协议
OAuth3认证流程,获取Token过程,拿token去请求认证,认证通过走用户权限
框架的缺陷是每次都要远程请求auth-service验证token的有效性
JWT(JSON WEB TOKEN)一种开放标准,数据体积非常小
应用场景:认证、信息交换,可以利用JWT实现单点登录
大量api访问日志可以使用ELK组件进行处理
关于怎样解析微服务架构SpringCloud问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。