本文中我们主要介绍微服务开发框架——SpringCloud。尽管SpringCloud带有"Cloud"的字样,但它并不是云计算解决方案,而是SpringBoot的基础上构建的,用于快速构建分布式系统的通血刑严用模式的工具集。
SpringCloud有以下特点:
来自由上图可知,SpringCloud是以英文单词+SR+数字的形式命名版本号的。那么英文单词和SR分别表示什么呢?
因为SpringCloud是一个综合项目,它包含很多子项目。由于子项目也维护着自己的版本号,SpringCloud采用了这种命名方式,从而避免与子项目的版本混淆。其中英文单词如Edware是伦敦某地铁站名,它们按照字母顺序发行,可以将其理解为主版本的演进。SR表示"ServiceRelease",一般表示Bug修复。
版本兼容性如下
版本内容
可参考官方文档:https://***.io/projects/spring-cloud#overvi妈企晶ew
我的上一篇博客(微服务理论篇)中谈到,对单体应用进行服务拆分360问答得到各个微服务,而这些服务又是相互独立的,那么我们如何知道各个微服务的健康状态、如何知道某个微曲孩内面著曾福移客诗创服务的存在呢?由此、一个拥有服务发现的框架显得尤为重先粮许害英倒还要。这也就是Eureka诞生的原因。
综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
通过使用Eureka已经实现了微服务的注册与发现。启动各个微服务时,Eure放翻kaClient会把自己升档的网络信息注册到EurekaServer上。似乎一切更美好了一些。然而,粉油连这样的架构依然有一些问题,如负载均衡隐笑销。一般来说,各个微服务都会部署多个实例。那么服务消费者要如何将请求分摊到多个服务提供实例上正胞呢?
如果服务提供者相应非常慢,那么消费者对提供者的请求就会被强制等待,知道提供者响应或超时。在高负载场景下,如果不作任何处理,此类问题可能会导致服务消费者的资源耗竭甚至整个系统崩溃。
微服务架构成的应用系统通常包含多个服务层。微服务之间通过网络进行通信,从而支撑起整个应用系统,因此,微服务之间难免存在依赖关系。而这种由于"基础服务故障"导眼重核圆协山花致"级联故障"的现福氧晶合伟模须老象称为雪崩效应。
如图所示,A最为服务提供调短每着密流者(基础服务),B为A的服务消费者,C和D是B的服务消费者。当A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。
那么Hystrix是如何容错的呢?
以下对该图做个简单讲解:
Zuul作为微服务架构中的微服务网关。微服务架构经过前几个组件的组合,已经有了基本的雏形了,那么我们为什么还要使用微服务网关呢?我们可以想象,一般情况下我们一个业务并不是只调用一个接口就可以完成一个业务需求灶游。
如果让客户端直接与各个微服务通信,会有以下问题:
如图,微服务网关封装了应用程序的内部结构,客户端只须跟网关交互,而无须直接调用特定卫的极保晚微服务接口。同时,还有以下优点:
为什么要同一管理微研服务配置?
对于传统的单体应用,常常使用配置文件管理所有配置。例如一个取记宪律害室思独味战SpringBoot项目开发的单体应用,可以将配置内容放到application.yml文件中。如果需要切换环境,可以设置多个Profile,并在启用应用时指定spring.profile.active={profile}。
而在微服务架构中,微服务的配置管理一般有以下需求: