springcloud微服务系列教程(一) 什么是微服务?为什么要用springcloud?

前言  

  这两年,“微服务”一词被传得很火,关于微服务的文章在各大技术论坛和博客不断的兴起,不断被转发和评论,技术人员之间的交流也越来越多的青睐微服务这一话题,仿佛不懂微服务就不是一个合格的技术开发者,就连有些公司招聘的要求上都要求应聘者必须掌握至少一门开发“微服务”技术,所以,借着这股东风,笔者前阵子专门学习了一段时间的springcloud,也就是如今最火的微服务框架 (这么说也好像不全对),并在这里开设了一个系列课程来介绍springcloud,希望各位读者多多指教~

什么是微服务

既然springcloud是专门用于开发“微服务”的,那么首先我们来了解一下,什么是“微服务”?

微服务(microservice) 一词最早由Martin Fowler与James Lewis于2014年共同提出来的,它是一种新的软件架构风格,就是把一个大型应用程序分割成可以独立部署的小型服务,每个服务之间都是送耦合的,通过RPC或者是Rest协议来进行通信,可以按照业务领域来划分成独立的单元,比如一个电商系统可以分割成会员、订单、商品等不同的小型服务,有自动化运维、容错、快速演进的特点,它能够解决传统单体架构系统的痛点,同时也能满足越来越复杂的业务需求。

什么是springcloud?

springcloud是由著名的spring团队基于Java语言设计的用于开发微服务应用的一系列组件集合(额。。。以笔者的知识水平,只能这么定义了),它依赖于springboot,拥有非常多的组件,涉及到了微服务的方方面面。springcloud诞生的时间并不长,正式推出第一版的时间是2015年,距今也就三年多一点的时间,但springcloud已经足够强大,知名度也越来越高,随着Netflix等社区的大力推动下越来越完善,将来很大可能会成为微服务的开发标准。

为什么要用springcloud来开发微服务项目?

如果要用一句话来说明为什么springcloud在微服务领域那么广受欢迎的原因,那就是springcloud的组件几乎涵盖了微服务开发中的方方面面,也就是说微服务所需的技术支持springcloud的组件都能提供。

按照Martin Fowler 给出的定义:微服务中的“服务”是一个独立运行的单元组件,每个单元组件运行在独立的进程中,组件与组件之间通常使用HTTP 这种轻量级的通信机制进行通信。基于这样的说法,微服务应该具有以下的特点:    

  • 体积较大,代码较多的大型应用划分成多个服务组件,单个服务代码量小,易于维护;
  • 每个服务能独立部署,也就意味着服务有自己的基础组件,比如数据库,缓存等;
  • 服务之间松耦合,用http或者rpc协议等通信方式进行通信,且具有容错能力;
  • 单个服务能够集群部署;
  • 整个微服务系统有链路追踪的能力,万一其中一个服务挂了影响其他服务可以通过链路查找;
  • 整个微服务系统有一整套安全机制,包括安全校验等;

从这几点可以看出,微服务系统的技术要求是很高的,可以这么说,在springcloud推出之前,市面上是没有一套完整的技术框架能满足微服务开发的要求的 (强如阿里官方推出的dubbo,也存在着很多技术实现上的缺陷),那么springcloud为什么这么受大家青睐呢?原因是因为springcloud提供了一系列组件,这些组件几乎可以满足微服务开发需求中的所有技术要求,只需要技术人员按照自己的业务需要来搭建即可。

下面为大家介绍一个springcloud的常用组件,以及它们的功能。

服务注册和发现组件:Eureka。利用Eureka组件可以很轻松实现服务的注册和消费,一般是搭建一个eureka的注册中心,可以让其他服务在上面注册,并以此作为通信中介来管理微服务之间的联系。

服务的负载均衡:Ribbon。通过和Eureka、Zuul等组件进行搭配,很容易对服务做负载均衡,负载均衡组件获取服务提供者所有实例的注册信息,并通过一定的负载均衡算法,选择一个服务提供者的实例,向该实例消费。

服务的熔断器:Hystrix。在微服务实际项目中,服务之间的调用错综复杂,可能一个服务因为某种原因不可用,然后第二个调用它的服务就处于阻塞状态,然后调用第二个服务的其他服务也不可用,以此类推,会给项目运行带来很严重的后果,基于此种情况,Hystrix继承了分布式系统的熔断器机制,作用就是当用户请求一个服务的失败次数超过一定的阈值后,熔断器会自动启动,停止所有的服务,同时,Hystrix还提供了服务降级功能以及熔断器的健康监测。

路由网关组件:Zuul。内部的API的接口通过Zuul暴露给外界使用,内部的服务调用不直接提供API接口,这样做的好处是可以隐藏内部服务,直接通过网关层来做控制调用哪个服务实例。同时,网关层也可以做一些安全验证,防止非法的请求操作API接口,安全而且容易维护。

服务配置中心:Spring Cloud Config。多个微服务有各自的配置文件,随着服务的增加,配置文件的数量也在不断增多,这时候需要有一个配置中心来统一管理,启动服务实例后直接访问配置中心即可。Spring Cloud Config 包括Server端和Client 端, Server 端读取本地仓库或者远程仓库的配置文件,所有的Client 向Server 读取配置信息,从而达到配置文件统一管理的目的。

链路追踪:Spring Cloud Sleuth。微服务系统中各个服务的调用关系错综复杂,所以微服务系统必须有追踪链路的功能,通过Sleuth可以实时跟进用户的请求有哪些服务参与,出了问题能够马上定位。

安全模块组件:Spring Cloud Security。是对Spring Security 的封装,通常配合0Auth2使用来保护微服务系统的安全。

通过搭配使用上面的组件,一个简单但功能完整的微服务系统就诞生了,架构图如下图所示:

               

   springcloud还有很多功能强大的组件,几乎可以说解决了人们对微服务系统的所有需求,所以,springcloud的火爆也就不难理解了 ,因为篇幅的问题,本文只是讲解了微服务系统和springcloud的一些基础简介,在接下来的系列课程中,笔者会一一给大家展示springcloud的组件使用,期待读者们能跟我一起学习~~

猜你喜欢

转载自blog.csdn.net/yeyazhishang/article/details/80991967