微服务框架Spring Cloud
一:什么是Spring Cloud
Spring Cloud是一个基于Spring Boot实现的微服务架构开发工具,是一系列框架的有序集合。它为微服务架构中设计的配置管理,服务治理,断路器,智能路由,微代理,控制总线,全局锁,决策竞选,分布式会话和集群状态管理等操作提供了一种简单的开发方式。
二:Spring Cloud组件
Spring Cloud Netflix
它是核心组件,对多个Netflix OSS开源套件进行整合。
包含组件
- Eureka:eureka是一个服务注册和发现模块。
- Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和为故障提供强大的容错能力
- Ribbon:是一个负载均衡客户端,可以很好的控制HTTP和TCP的一些行为,Feign默认集成了Ribbon
- Feign: 基于Ribbon和Hystrix的声明式服务调用组件
- Zuul:网关组件,提供智能路由、访问过滤等功能
- Archaius:外部化配置组件
Spring Cloud Config
配置管理工具,支持使用Git存储配置内容,可以使用它实现应用配置的外部化存储,并支持客户端配置信息刷新,加密/解密配置内容等。
Spring Cloud Bus
事件、消息总线,用于传播集群中的状态变化或事件,以触发后续的处理,比如用来动态刷新配置。
Spring Cloud Cluster
针对ZooKeeper、Redis、Hazelcast、Consul的选举算法和通用状态模式的实现。
Spring Cloud Consul
服务发现与配置管理工具。
Spring Cloud Stream
通过Redis、Rabbit或者Kafka实现的消费微服务,可以通过简单的声明式模型来发送和接收消息。
Spring Cloud Security
安全工具包,提供在Zuul代理中对OAuth2客户端请求的中继器。
Spring Cloud Sleuth
Spring Cloud 应用的分布式跟踪实现,可以完美整合 Zipkin。
Spring Cloud ZooKeeper
基于ZooKeeper 的服务发现与配置管理组件
Spring Cloud Starters
Spring Cloud 的基础组件,它是基于Spring Boot 风格项目的基础依赖模块。
Spring Cloud优缺点
优点
- 每个服务直接足够内聚,代码易理解
- 开发效率高,一个服务只做一件事,适合小团队开发
- 松耦合,有功能意义服务
- 可以用不同语言开发,面向接口编程
- 易于第三方集成
- 微服务只是业务逻辑的代码,不会和HTML、CSS或其他界面结合
- 可以灵活搭配,连接公共库/连接独立库
缺点
- 分布式系统的责任性
- 多服务运维难度加大
- 系统部署依赖,
- 服务间通信成本高
- 数据一致性,
- 系统集成测试
- 性能监控
Spring Cloud和dubbo的区别
- 服务调用方式不同:dubbo是RPC,Spring Cloud是Rest Api
- 注册中心:dubbo是zookeeper,Spring Cloud可以是eureka,也可以是zookeeper
- 服务网关:dubbo本身没有实现,只能通过其他第三方技术整合,Spring Cloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,Spring Cloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素
微服务技术栈
- 维度(Spring Cloud)
- 服务开发:Spring Spring MVC Spring Boot
- 服务配置与管理:Netflix公司Archaiusm,阿里的Diamond
- 服务注册与发现:Eureka,Zookeeper
- 服务调用:Rest,RPC,gRPC
- 服务接口调用:Fegin
- 服务熔断器:Hystrix
- 服务负载均衡:Nginx,Ribbon
- 消息队列:kafka,RabbitMQ , ActiveMQ
- 服务配置中心管理:Spring Cloud Config
- 服务路由(API网关):Zuul,Gateway
- 事件消息总线:Spring Cloud Bus
Spring Cloud如何实现服务的注册
- 服务发布时,指定对应的服务名,将服务注册到注册中心eureka zookeeper
- 注册中心加 @EnableEurekaServer,服务用 @EnableDIscoveryClient,然后用ribbon或feign进行服务直接的调用发现