我的博客:兰陵笑笑生,欢迎浏览博客!
近年来,随着互联网公司自身的业务体系越来越大,系统复杂度越来越高,导致我们不得不将服务进行拆分,微服务的概念也是迅速在互联网发酵。我们也迫切的需要一套框架、一个生态系统能够健全、稳定的为我们解决问题。本章就简单的介绍一下微服务的概念,以及Spring Cloud的生态组件。
一、微服务架构简介
微服务架构风格是将单体应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务之间通过轻量级的通讯机制(通常是HTTP资源api).。每一个服务是围绕这个业务能力构建,并且可以独立的部署、可独立扩展。不同的服务可以使用不同的语言来编写,也可以使用不同的数据存储。总结如下:
-
服务功能单一
-
可独立部署、独立扩展
-
可跨语言编程
-
服务间良好的通信机制
在https://spring.io/ 官方网站介绍Spring Cloud时,以图的方式展现了微服的架构图:图中包含了网关,各个微服务单元,服务注册,服务配置等
二、SpingCloud 简介
在微服务的发展过程中,随着分布式水平的提高,系统会变得越来越复杂,系统发生的错误率随着系统的复杂性呈指数型增长、因此微服务也出现了反对的声音,认为微服务增加了系统的维护、部署难度、导致一些功能模块和代码很难反复的使用。有没有一种框架可以尽可能的解决上述的问题呢。有,就是Spring Cloud。
这里就介绍一下SpringCloud中微服务常用的功能
2.1 注册与发现
服务的发现是微服务架构中很重要的一个组件,在微服务中,系统之间的依赖非常的频繁,服务调用方A服务调用B服务、C服务等多个服务,这些被调用方为了保证自身的高可用、通常都是以集群的模式部署。如果我们将被调用方的这些信息如果写在了A服务中、这样的配置是会很复杂的,同时如果我们动态的调整服务提供方,这样是不利于服务的管理的。因此我们迫切需要一种服务发现的机制。所有的服务启动时就向注册中心提交自身的信息。比如URL地址、PORT端口等信息。调用方只需要从注册中心请求指定的服务即可、目前的落地的技术有Eureka、Consul、Zookeeper、 Nacos 等 。Eureka是Netflix开源的一款产品、是SpringCloud生态的的重要的一个组件之一。zookeeper是Apache的分布式应用程序协调服务,也是一款经典的 服务注册中心产品、经常是和Dubbo配合使用。 Consul 是 HashiCorp 公司推出的开源产品, 与Eureka相比,保证了强一致性却牺牲了可用性。Nacos 是alibba 2018年开源的、基于了阿里巴巴大规模的生产经验,也是给了用户一个新的选择。关于这些后期会有详细的文章介绍,这里只做一个全面的介绍。
2.2 配置管理
对于传统的单体应用,一个配置文件就可以解决配置问题,但是在微服务中,多个机器部署的时候,修改配置文件是一个相当繁琐的问题。为此、这个时候就需要引入一个组件。SpringCloud提供了这样的组件:Spring Cloud Config.当然国内大的互联网公司都有自己的配置中心、比如百度的DisConf、淘宝的Diamond等等。当然由于各方面的原因,这些产品可能存在一些其他问题。而Spring Cloud Conf是能够和Spring无缝集成。对于大多数的中小企业来说,这样的配置也是够的。
2.3 服务调用方式
在微服架构中,少不了的就是服务间的调用,调用的方式Spring Cloud采用的是基于HTTP的REST方式。Dubbo采用的事RPC方式。在面临微服务基础框架选型时,Spring Cloud和Dubbo只能二选一。这也是大家总是将二者做对比的原因。Dubbo的定位是一款RPC框架,而Spring Cloud的目标是提供微服一站式解决方案。所以Dubbo和Spring Cloud并不是完全的竞争关系。
2.4 负载均衡
LB 即负载均衡,也是微服务或分布式集群中常用的一种应用。简单来讲就是将用户的请求平摊的分配到多个服务上,从而达到高可用的目的。常用的负载均衡有软件Nginx,LVS,硬件F5等。在Sping Coud生态中,Sping Coud Netflix Ribbon 是基于Netflix Ribbon实现的一套客户端负载均衡的工具。负载均衡的算法有很多,比如轮询、随机、权重等等。
2.5 服务熔断
在微服务架构中,是存在着很多的服务的,而且服务之间的调用可能跨网络,因为网络的不可靠性等原因出现调用故障和延迟,如果此时调用方的请求不断的增加,长时间的等待会形成调用方占用很多的资源,甚至造成系统崩溃和瘫痪,即所谓的"雪崩效应"。为了解决这样的问题,需要对故障和延迟进行隔离和管理,便出现了断路器。它的作用就是在发生无法访问、超时、异常等问题时,会通过服务降级的方式,熔断该节点的调用,快速返回“错误”的信息、可处理的备选响应,从而保证故障的蔓延等问题。Hystrix提供了熔断模式和隔离模式用来解决雪崩效应,Hystrix是在服务访问失败时降低阻塞的影响范围,避免整个服务被拖垮。
2.6 服务路由与网关
在微服务架构模式下,后端服务的实例一般是动态的,对应客户端来说很难动态的发现改动的服务实例地址,为此,通常会引入网关API Gateway。 从而简化内部服务的相互调用的复杂度。在Spring Cloud生态中Zull就是一个落地的技术。Zull是Netfix开源的一个基于JVM的路由和服务器负载均衡器,其作用就是服务转发。当然也是可以作为资源统一访问入口。同时。也可以在网关做一些权限的校验。
2.7 调用链路追踪
在微服务架构的生产实践中,经常会遇到这样的案例:客户反馈问题,开发、应急和运维人员从入口服务A开始查起,确定服务A没有问题,然后将问题传递到B服务,依次查询下去,这样的排查多了很多的不必要,基于调用链的服务治理系统可以解决以上的问题。Spring Cloud Sleuth就是Sping Cloud生态中实现调用链追踪的一个子项目,可以结合Zipkin很好的事项故障快速定位问题。
三 、总结
在微服务架构的实践过程中,Spring Cloud 以其独有的生态迅速的扩张,覆盖了整个互联网公司。当然Spring Cloud中的组件不仅仅包含了刚才介绍的,还包括了安全、任务、消息总线、批处理等各种组件。如上图。
本章简单介绍了微服务的架构以及Spring Cloud的生态,在之后的章节中,我将详细的介绍各个功能的具体实现。
以上就是本期的分享,你还可以关注本博客的#Spring Cloud基础教程系列!#
.以就是本期的分享,你还可以关注公众号: 程序员笑笑生,关注更多精彩内容!