笔记——spring cloud
分布式 微服务 集群
去饭店吃饭就是一个完整的业务,饭店的厨师、配菜师、传菜员、服务员就是分布式;厨师、配菜师、传菜员和服务员都不止一个人,这就是集群;分布式就是微服务的一种表现形式,分布式是部署层面,微服务是设计层面。
- 分布式:一个业务分拆多个子业务,部署在不同的服务器上
- 集群:同一个业务,部署在多个服务器上
分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率。
微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。在所有情况下,每个任务代表着一个小的业务能力。
网站架构
分布式、集群、高并发、负载、缓存、云端(掌握)
分布式
不同的功能、不同的业务、不同的模块,分别部署到不同的服务器
应用(工程代码)、数据、缓存、文件、消息、IP等
Dubbo、Cloud、Dubbox等
集群
相同的功能,相同的业务,相同的模块,分别部署到不同的服务器
应用、数据库、静态资源文件
nginx、mycat中间件
并发
同一个时刻,N人访问同一个功能
抢购、秒杀、红包等
负载
在线使用人数
负载量:求平均值
缓存
减轻服务器压力,提高用户体验
不经常变化的数据、经常查询使用、关联的数据
NOSQL、磁盘、内存等
云
服务器扩展
阿里云、腾讯云、百度、七牛…
微服务框架
Spring Cloud与Dubbo
Eureka
在自我保护模式下,Eureka服务器会保护服务注册表中的信息,不会注销任何服务实例。当开启自我保护模式时,会以红色字体显示以下告警信息。
Eureka服务器自我保护模式开启的条件是:当Eureka服务器每分钟收到的心跳续约数量低于一个阈值,就会触发。当收到的心跳数恢复到阈值以上,则会自动退出自我保护模式。
可以通过eureka.server.enable_selft_preservation=false禁用。
Feign
基于Feign的动态代理机制,根据注解和选择的机器,拼接请求URL地址,发起请求
Ribbon
Hystrix
Zuul
不管是来自于客户端(PC或移动端)的请求,还是服务内部调用。一切对服务的请求都会经过Zuul这个网关,然后再由网关来实现 鉴权、动态路由等等操作。Zuul就是我们服务的统一入口。
这可以看出Zuul在整个架构中扮演着什么样的角色,其实zuul的主要作用有两个:过滤(鉴权)和路由
Spring Cloud Config
配置文件是我们再熟悉不过的了,尤其是 Spring Boot 项目,除了引入相应的 maven 包之外,剩下的工作就是完善配置文件了,例如 mysql、redis 、security 相关的配置。除了项目运行的基础配置之外,还有一些配置是与我们业务有关系的,比如说七牛存储、短信相关、邮件相关,或者一些业务上的开关。
对于一些简单的项目来说,我们一般都是直接把相关配置放在单独的配置文件中,以 properties 或者 yml 的格式出现,更省事儿的方式是直接放到 application.properties 或 application.yml 中。但是这样的方式有个明显的问题,那就是,当修改了配置之后,必须重启服务,否则配置无法生效。
目前有一些用的比较多的开源的配置中心,比如携程的 Apollo、蚂蚁金服的 disconf 等,对比 Spring Cloud Config,这些配置中心功能更加强大。有兴趣的可以拿来试一试。
接下来,我们开始在 Spring Boot 项目中集成 Spring Cloud Config,并以 github 作为配置存储。除了 git 外,还可以用数据库、svn、本地文件等作为存储。主要从以下三块来说一下 Config 的使用。
*1.*基础版的配置中心(不集成 Eureka);
*2.*结合 Eureka 版的配置中心;
*3.*实现配置的自动刷新;
Spring Cloud Bus
Spring cloud bus通过轻量消息代理连接各个分布的节点。这会用在广播状态的变化(例如配置变化)或者其他的消息指令。Spring bus的一个核心思想是通过分布式的启动器对spring boot应用进行扩展,也可以用来建立一个多个应用之间的通信频道。目前唯一实现的方式是用AMQP消息代理作为通道,同样特性的设置(有些取决于通道的设置)在更多通道的文档中。
大家可以将它理解为管理和传播所有分布式项目中的消息既可,其实本质是利用了MQ的广播机制在分布式的系统中传播消息,目前常用的有Kafka和RabbitMQ。利用bus的机制可以做很多的事情,其中配置中心客户端刷新就是典型的应用场景之一,我们用一张图来描述bus在配置中心使用的机制。
根据此图我们可以看出利用Spring Cloud Bus做配置更新的步骤:
- 提交代码触发post给客户端A发送bus/refresh
- 客户端A接收到请求从Server端更新配置并且发送给Spring Cloud Bus
- Spring Cloud bus接到消息并通知给其它客户端
- 其它客户端接收到通知,请求Server端获取最新配置
- 全部客户端均获取到最新的配置
Spring Cloud Security
Spring Cloud Security提供了一组原语,用于构建安全的应用程序和服务,而且操作简便。可以在外部(或集中)进行大量配置的声明性模型有助于实现大型协作的远程组件系统,通常具有中央身份管理服务。它也非常易于在Cloud Foundry等服务平台中使用。在Spring Boot和Spring Security OAuth2的基础上,可以快速创建实现常见模式的系统,如单点登录,令牌中继和令牌交换。
功能:
- 从Zuul代理中的前端到后端服务中继SSO令牌
- 资源服务器之间的中继令牌
- 使Feign客户端表现得像
OAuth2RestTemplate
(获取令牌等)的拦截器 - 在Zuul代理中配置下游身份验证
Spring Cloud Zookeeper
速创建实现常见模式的系统,如单点登录,令牌中继和令牌交换。
功能:
- 从Zuul代理中的前端到后端服务中继SSO令牌
- 资源服务器之间的中继令牌
- 使Feign客户端表现得像
OAuth2RestTemplate
(获取令牌等)的拦截器 - 在Zuul代理中配置下游身份验证