微服务之Sping Cloud
版本说明
Finchley SR2
价值简要
微服务之间是松耦合,跨不同业务部门,提供非常充分的灵活性,加快项目开发完成效率,方便组件化独立可扩展性及复用.
微服务应用结构表现
组件简要
1. Eureka(注册中心)
提供服务注册与发现,服务端依赖spring-cloud-starter-netflix-eureka-server,然后用@EnableEurekaServer来标注该应用程序的配置类,在yml 文件中配置服务注册地址,配置相关的参数,客户端依赖 spring-cloud-starter-netflix-eureka-client,然后用
@EnableEurekaClient来标注该应用程序的配置类,通过注册中心,服务之间关系对等,通过部署多台实现高可用,注册中心的元数据基于内存,不提供服务调用,只是同步服务之间实例数据,Eureka Client通过向Eureka Serve发送心跳(默认每30秒)来续约服务的,如果客户端持续不能续约,那么它将在大约90秒内从服务器注册表中删除。 注册信息和续订被复制到集群中的Eureka Serve所有节点, 以此来确保当前服务还“活着”,可以被调用,另外推荐关闭自我保护属性,强制无效的服务从注册中剔除,保证服务之间调用的实例一定程度上是实时的有效的.
2. Feign(声明式Rest客户端)
提供基于REST访问调用,使用方式是通过接口定义服务内容,然后通过服务实例名称进行访问如:
@FeignClient(name="app-user",fallback=UserControllerFeignClientFailCallBack.class )
内部默认集成了负载均衡,算法默认轮询,可通过配置修改算法,但有个缺点就是访问的服务实例名称无法动态配置,在某些应用场景下显得不灵活,如果有根据数据库配置的实例名称来动态调用服务的需求可推荐使用RestTemplate+LoadBalancerClient ; 当然Feign的优点也很名称,简洁,高效.
3. Ribbon(客户端负载均衡器)
提供客户端负载均衡组件,是对系统的高可用,网络压力的缓解和处理能力扩容的重要组件之一,区别于nginx ,ribbon 通常微服务之间访问负载,nginx通常在应用接入层负载或反向代理;Ribbon 使用也很简单,使用 @LoadBalancerClient 声明即可, 在yml 文件里面可以配置 负载算法,重试规则,响应时间权重等默认是轮询方式,还有其它的负载算法:如
1. 随机
2. 最小并发请求
3. 过滤一直访问失败的并过滤掉高并发的
4. 根据响应时间分配权重,根据权重来请求
server, 权重越小,被请求的可能越低
4. Hystrix(熔断器)
提供熔断机制,解决的问题主要避免服务出现雪崩效应,使用方式引入依赖
spring-cloud-starter-netflix-hystrix , 在启动程序上声明@EnableCircuitBreaker, 然后在需要熔断的方法上声明@HystrixCommand(fallbackMethod ="createFailCallBack" ),注意feign默认是已经集成了Hysrix; 熔断的触发条件服务端超时,服务端线程池满等 , 很重要的一点是设置熔断的超时时间一定要根据实际业务设置合理的时间阀值,另外在实践的过程中发现熔断和异常的优先级问题,如果代码中发生异常catch的返回值优先级低于HytrixCommand中的返回值优先级,这个在开发中需要格外注意,否则给用户或接口返回会出现差异.
代码实例
推荐使用开发工具
IDEA 打开,源码包名称:xxxx-yyyyy-platform,详细可参考实践编写源代码.
代码结构截图:
1. -abc 微服务应用
2. -def 微服务应用
3. -config 微服务服务端配置
4. -discover eureka 服务端
5. -hystrix hystrix 熔断监控服务端
6.-zipkin 链路跟踪
扫码或长按关注查看更多文章