由于新的工作马上要使用SpringCloud了,加上也是市场上很流行得微服务了。所以这里开始学习一下SpringCloud了
先来理解一下几个概念
什么是微服务?
微服务就是一些协同工作的小而自治的服务。
微服务的优点?
异构性
在整个系统中,不同的微服务可以选择不同的语言,可以存储在不同的数据库等等。
弹性
一个组件不可用,不会导致级联故障
扩展
单体应用不易扩展,多个较小的服务可以按需扩展
易于部署
与组织结构对齐 : 比如有一组交易的服务,一组账户服务,一组会员服务,这些服务可以有到对应的团队,每个团队对自己 服务负责(单一职责)
可组合性
可替代性
微服务的缺点?
分布式系统的复杂性
开发、测试等研发过程中的复杂性
部署、监控运维复杂性
Cloud Native
云原生技术有利于各组织在公有云、私有云和混合云等新型动态环境中,构建和运行可弹性扩展的应用。
云原生应用要求?
DevOps : 开发与运维一同致力于交付高品质的软件服务于客户
持续交付: 软件的构建、测试和发布、要更快、更频繁、更稳定
微服务 : 以一组小型服务的形式来部署应用
容器 : 提供比传统虚拟机更高的效率
SpringCloud的组成部分
服务发现
服务熔断
配置服务
服务安全
服务网关
分布式消息
分布式跟踪
各种云平台支持
Eureka (不常使用)
什么是Eureka : Eureka是AWS上定位服务的REST服务
Netflix OSS
Spring对Netflix套件的支持。
在本地启动一个简单的Eureka服务
Starter
- spring.cloud-dependencies
- spring-cloud-starter-netflix-eureka-starter
声明
- @EnableEurekaServer
注意事项
- 默认端口8761
- Eureka自己不要注册到Eureka了
将服务注册到Eureka Server
Starter
- spring-cloud-starter-netflix-eureka-client
声明
- @EnableDiscoveryClient
- @EnableEurekaClient
一些配置项
- eureka.client.service-url.default-zone
- eureka.client.instance.prefer-ip-address
关于BootStrap属性
Bootstrap属性
- 启动引导阶段加载的属性
- bootstrap.properties|.yml
- spring.cloud.bootstrap.name=bootstrap
常用配置
- spring.application.name=应用名
- 配置中心相关
如何获取服务地址?
DiscoveryClient
- getInstances();
Load Balancer Client (实现负载均衡)
RestTemplate与WebClient
- @LoadBalaced
- 实际是通过ClientHttpRequestInterceptor实现的
- LoadBalancerInterceptor
- LoadBalancerClient
- RibbonLoadBalancerClient