java微服务项⽬简历_微服务框架-SpringCloud简介
前⾯⼀篇⽂章谈到微服务基础框架,⽽Netflix的多个开源组件⼀起正好可以提供完整的分布式微服务基础架构环境,⽽对于Spring Cloud 正是对Netflix的多个开源组件进⼀步的封装⽽成,同时⼜实现了和云端平台,和Spring Boot开发框架很好的集成。
Spring Cloud是⼀个相对⽐较新的微服务框架,今年(2016)才推出1.0的release版本. 虽然Spring Cloud时间最短, 但是相⽐Dubbo等RPC框架, Spring Cloud提供的全套的分布式系统解决⽅案。
Spring Cloud 为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,⼀次性token,全居琐,leader选举,分布式session,集状态)中快速构建的⼯具,使⽤Spring Cloud的开发者可以快速的启动服务或构建应⽤、同时能够快速和云平台资源进⾏对接。
我们先简单阐述下Spring Cloud中⽂社区对四个基础关键组件的描述:
Spring Cloud Config配置中⼼
Spring Cloud Config就是我们通常意义上的配置中⼼。Spring Cloud Config-把应⽤原本放在本地⽂件的配置抽取出来放在中⼼服务器,本质是配置信息从本地迁移到云端。从⽽能够提供更好的管理、发布能⼒。springboot框架的作用
Spring Cloud Config分服务端和客户端,服务端负责将git(svn)中存储的配置⽂件发布成REST接⼝,客户端可以从服务端REST接⼝获取配置。但客户端并不能主动感知到配置的变化,从⽽主动去获取新的配置,这需要每个客户端通过POST⽅法触发各⾃的/refresh。
Spring Cloud Netflix 服务发现
Spring Cloud Eureka提供在分布式环境下的服务发现,服务注册的功能。
Spring Cloud Netflix,该项⽬是Spring Cloud的⼦项⽬之⼀,主要内容是对Netflix公司⼀系列开源产品的包装,它为Spring Boot应⽤提供了⾃配置的Netflix OSS整合。
通过⼀些简单的注解,开发者就可以快速的在应⽤中配置⼀下常⽤模块并构建庞⼤的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。
Spring cloud Hystrix 熔断器
断路器(Cricuit Breaker)是⼀种能够在远程服务不可⽤时⾃动熔断(打开开关),并在远程服务恢复时⾃动恢复(闭合开关)的设施。
断路器(Cricuit Breaker)是⼀种能够在远程服务不可⽤时⾃动熔断(打开开关),并在远程服务恢复时⾃动恢复(闭合开关)的设施,Spring Cloud通过Netflix的Hystrix组件提供断路器、资源隔离与⾃我修复功能。
Spring Cloud Zuul 服务⽹关
Spring Cloud Eureka提供在分布式环境下的服务发现,服务注册的功能。
Spring Cloud Netflix,该项⽬是Spring Cloud的⼦项⽬之⼀,主要内容是对Netflix公司⼀系列开源产品的包装,它为Spring Boot应⽤提供了⾃配置的Netflix OSS整合。通过⼀些简单的注解,开发者就可以快速的在应⽤中配置⼀下常⽤模块并构建庞⼤的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路有(Zuul),客户端负载均衡(Ribbon)等。
当然Spring Cloud还有额外扩展的其它很多组件,包括了服务链路监控和跟踪(很关键的⼀个功能),消息总线,数据流处理,批量任务处理等。⽽对于整个Spring Cloud微服务框架简单来说,即是:
你只要划分到你的微服务组件和模块,并定义好需要暴露的API接⼝,那么剩下的整个开发和传统⽅式没有太⼤的区别,你开发完成的组件集成起来就是⼀个分布式可扩展的微服务环境。⾥⾯设计到的接⼝发布,服务注册,服务调⽤和路由,服务监控,健康检测和流控等都会由微服务框架来帮你完成。
正是有了成熟的微服务框架,我们才更应该将微服务架构设计重⼼从技术底层转移到组件划分和接⼝设计上。
SpringCloud和Dubbo的区别问题
可以看到SpringCLoud能够提供的基础能⼒要多于Dubbo,Dubbo可以看作是SpringCLoud简单实现。
Dubbo是RPC服务治理框架,和Spring Cloud⼀样具备服务注册、发现、路由、负载均衡等能⼒。但是没有配置中⼼,完整的好⽤全链路监控,需要采⽤开源的解决⽅案定制或者⾃研。Spring cloud的配置中⼼,全链路监控等组件。从⽬前来看,Spring Cloud国内中⼩型企业⽤的⽐较多,⼤型企业可能需要对其需要的组件进⾏定制化处理。
但是也需要看到Spring Cloud基于注解的服务发现,服务治理等功能具有代码侵⼊性,dubbo没有代码侵⼊性,业务开发⼈员不需要通过注解的⽅式去关注框架级别的处理。从中间件或者做基础架构的⾓度来看,其实服务治理等功能对普通的业务程序员应该是透明的,业务程序员不需要关注服务治理框架的使⽤,专注于业务代码即可。
基于SpringCLoud微服务框架的实践
对于基于SpringCLoud框架的具体实践,建议参考翟永超博客的系列⽂章,具体如下:
服务注册和发现
注意这⾥仍然使⽤的是SpringBoot框架,并和SpringBoot框架进⾏了集成,在l配置⽂件中增加了对SpringCLoud相关包和组件的依赖。在原有的接⼝API定义的基础上,我们增加@EnableDiscoveryClient注解后,即可以让服务注册中⼼很轻松的发现服务提供⽅以及提供的服务。
服务消费
⽅式1 - Ribbon是⼀个基于HTTP和TCP客户端的负载均衡器。Ribbon可以在通过客户端中配置的ribbonServerList服务端列表去轮询访问以达到均衡负载的作⽤。当Ribbon与Eureka联合使⽤时,ribbonServerList会被DiscoveryEnabledNIWSServerList重写,扩展成从Eureka注册中⼼中获取服务端列表。
⽅式2 - Feign是⼀个声明式的Web Service客户端,它使得编写Web Serivce客户端变得更加简单。我们只需要使⽤Feign来创建⼀个接⼝并⽤注解来配置它既可完成。它具备可插拔的注解⽀持,包括Feign注解和JAX-RS注解。Feign也⽀持可插拔的编码器。Spring Cloud 为Feign增加了对Spring MVC注解的⽀持,还整合了Ribbon和Eureka来提供均衡负载的HTTP客户端实现。
断路器
⾸先在l⽂件中增加引⼊对hystrix依赖,同时在消费端Application主类上增加@EnableCircuitBreaker注解开启断路器功能。注意原有的服务消费⽅式也涉及到修改,增加了服务Callback的回调函数。
服务⽹关
服务⽹关是微服务架构中⼀个不可或缺的部分。通过服务⽹关统⼀向外系统提供REST API的过程中,除了具备服务路由、均衡负载功能之外,它还具备了权限控制等功能。Spring Cloud Netflix中的Zuul就担任了这样的⼀个⾓⾊,为微服务架构提供了前门保护的作⽤,同时将权限控制这些较重的⾮业务逻辑内容迁移到服务路由层⾯,使得服务集主体能够具备更⾼的可复⽤性和可测试性。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论