《微服务架构实战》周立 课本
版本定义为伦敦地铁站,按字母顺序A-B-C-D,本实验用的是Camden版本。
Spring Boot 单实例
Eureka 微服务注册发现
Ribbon 客户端负载均衡
Feign 声明式调用
Hystrix 容错处理
Zuul 网关
Config 统一管理配置
Sleuth 微服务跟踪
Actuator 监控端点,info,beans,env,trace,mapping,autoconfig。
Eureka基本思想:包含两个组件,Eureka Server和Eureka Client分别作为服务发现和注册,心跳来续约租期,可缓存注册表信息,可集群部署,提高系统灵活性,可伸缩性和可用性。默认端口8761.注意实例ID的配置信息。添加security实现用户认证功能。自我保护模式即节点在短时间丢失,会保护注册表信息,不再删除信息,网络故障恢复后退出自我保护模式。@EnableEurekaServer @EnableDiscoveryClient
Ribbon基本思想:控制HTTP和TCP客户端行为,获取服务提供者列表后,基于某种负载均衡算法,自动地帮助服务消费者去请求,比如轮询,随机等。@LoadBalanced,对某个方式实现负载均衡,采用restTemplate.getForObject(url,结果)。可配置负载均衡算法。
Feign基本思想:代替拼接的Url,采用声明式,模板化的HTTP客户端,@FeignClient(name=实例名)修饰一个接口,接口里面是对应请求的方法,多参数采用Map存储。
Hystrix基本思想:防止雪崩效应,有依赖关系的两个服务,前服务出现延迟或者调用失败,后面出现阻塞并一直等待,最后导致资源耗尽并崩溃。容错的实现方式有为网路请求设置超时,请求不到就尽快释放资源;断路器模式,短时间内失败的请求数超过一定阈值,打开断路器,一段时间后进入“半开”状态,允许一个请求访问,成功就关闭断路器,否则继续打开断路器。Hystrix实现由包裹请求(@HystrixCommand),包裹对依赖的调用逻辑;跳闸机制,错误率超过阈值,自动跳闸,停止请求;资源隔离,为每个依赖维护一个小型线程池,若满,发往该依赖的请求被立即拒绝,而不是排队;监控,实时监控运行指标;回退机制,请求失败或拒绝,执行回退逻辑,执行回退方法;自我修复,打开一段时间后,进入半开状态,尝试对一个请求响应,修改断路器状态。8030 Dashboard监控。
Zuul基本思想:不同微服务有不同地址,网站介于客户端和服务端之间的中间层,外部请求都会走微服务网关,无需直接调用特定接口;易于控制,易于认证,减少了客户端和微服务之间的交互次数。实现功能有身份认证和安全,动态路由,压力测试,负载分配,静态资源处理。@EnableZuulProxy,8040,声明一个代理,整合Ribbon和Hystrix,所有经过Zuul的请求都会在Hystrix中执行。暴露一个管理端点/routes,方便直观查看路由信息。http://ZUUL_HOST:ZUUL_PORT:微服务在Eureka上的serviceId/**会转发到serviceId对应的微服务。设置过滤器,Header操作等等。
Config基本思想:配置管理的需求有集中管理配置,不同环境不同配置,运行期可动态调整,配置修改后自动更新。分为Config Server是一个可横向扩展,集中式的配置服务器,Config Client是获取或修改存储在Config Server的配置属性,可缓存在自己的服务器中。@EnableConfigServer,8080端口,配置git仓库的目录地址。在Client端要配置文件bootstrap.yum,内容包含config的url,profile,label。这个文件具有更高的优先级,所以不会被覆盖。
Bus基本思想:自动刷新配置,使用消息代理连接分布式节点,微服务A的配置信息一更新,其所有的实例都会更新。
Sleuth基本思想:分布式更早,查看微服务在执行过程中的指标等信息,有助于更好的分析系统效率。加入依赖,设置打印日志信息级别。可与ELK配合使用,可视化分析日志信息。
常见问题:
1.Eureka注册服务慢,,设置心跳时间短,加快客户端和其他服务之间的连接。
2.Eureka自我保护模式会保存实例信息,在开发阶段可关闭保护模式。
3.Eureka自定义InstanceID,在配置文件中设置。
4.Hystrix出现的首次请求失败,默认的超时时间为1秒,第一次加载会比较慢,导致的超时。解决方案为延长超时时间为5s。
学习经历,深刻体会到Spring Cloud的作者真的skr,我们只是在用创造好的工具,差距好大,等到咱自己研发这一套架构,那才是真的强。加油。