目录
1.什么是微服务?谈谈你对微服务的理解?
2.什么是Spring Cloud?
3.Springcloud中的组件有哪些?
3.具体说说SpringCloud主要项目?
5.SpringCloud项目部署架构?
微服务
以前所有的代码都放在同一个工程中、部署在同一个服务器、同一项目的不同模块不同功能互相抢占资源,微服务就是将工程根据不同的业务拆分成微服务,部署在不同的服务器上,服务之间相互调用,Java中有的微服务有dubbo(只能用来做微服务),Springcloud(提供了 服务的发现,断路器等)。
微服务的特点
1.按业务划分为一个独立运行的程序,即服务单元
2.服务之间通过HTTP协议相互通信
3.自动化部署
4.可以用不同的编程语言
5.可以用不同的存储技术
6.服务集中化管理
7.微服务是一个分布式系统
微服务的优势
1.将一个复杂的业务拆分成若干小的业务,将复杂的业务简单化,新人只需要了解他所接管的服务代码,减少新人的学习成本。
2.由于微服务是分布式服务,服务于服务之间没有任何耦合。微服务系统的微服务单元具有很强的横向扩展能力。
3.服务与服务之间采用HTTP网络通信协议来通信,单个服务内部高度耦合,服务与服务之间完全独立,无耦合。这使得微服务可以采用任何开发语言和技术来实现,提高开发效率,降低开发成本。
4.微服务是按照业务进行拆分的,并有坚实的服务边界,若要重写某一业务代码,不需了解所有业务,重写简单。
5.微服务的每个服务单元是独立部署的,即独立运行在某个进程中,微服务的修改和部署对其他服务没有影响。
6.微服务在CAP理论中采用的AP架构,具有高可用分区容错特点。高可用主要体现在系统7*24不间断服务,他要求系统有大量的服务器集群,从而提高系统的负载能力。分区容错也使得系统更加健壮。
微服务的不足
1.微服务的复杂度:构建一个微服务比较复杂,服务与服务之间通过HTTP协议或者其他消息传递机制通信,开发者要选出最佳的通信机制,并解决网络服务差时带来的风险。
2.分布式事务:将事务分成多阶段提交,如果一阶段某个节点失败仍会导致数据不正确。如果事务涉及的节点很多,某一节点的网络出现异常会导致整个事务处于阻塞状态,大大降低数据库的性能。
3.服务划分:将一个完整的系统拆分成很多个服务,是一件非常困难的事,因为这涉及了具体的业务场景。
4.服务部署:最佳部署容器Docker。
微服务和SOA的关系
微服务相对于和ESB联系在一起的SOA轻便敏捷的多,微服务将复杂的业务组件化,也是一种面向服务思想的体现。对于微服务来说,他是SOA的一种体现,但是他比ESB实现的SOA更加轻便,敏捷和简单。
Spring Cloud是一系列框架的有序集合。他利用SpringBoot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册,配置中心,智能路由,消息总线,均衡负载,断路器,数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。
Spring Cloud并没有重复制造轮子,他只是将各家公司开发的比较成熟,经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终个开发者留出了一套简单易懂,易部署和易维护的分布式系统开发工具包。
SpringCloud的优点
1.耦合度比较低。不会影响其他模块的开发。
2.减轻团队的成本,可以并行开发,不用关注其他人怎么开发,先关注自己的开发。
3.配置比较简单,基本用注解就能实现,不用使用过多的配置文件。
4.微服务跨平台的,可以用任何一种语言开发。
5.每个微服务可以有自己的独立的数据库也有用公共的数据库。
6.直接写后端的代码,不用关注前端怎么开发,直接写自己的后端代码即可,然后暴露接口,通过组件进行服务通信。
SpringCloud的缺点
1.部署比较麻烦,给运维工程师带来一定的麻烦。
2.针对数据的管理比较麻烦,因为微服务可以每个微服务使用一个数据库。
3.系统集成测试比较麻烦。
4.性能的监控比较麻烦。
1.Spring Cloud Eureka,服务注册中心,特性有失效剔除,服务保护。
2.Spring Cloud Zuul,API服务网管,功能有路由分发和过滤。
3.Spring Cloud Config,分布式配置中心,支持本地仓库,SVN,Git,Jar包配置等模式。
4.Spring Cloud Ribbon,客户端负载均衡,特性有区域亲和,重试机制
5.Spring Cloud Hystrix,客户端容错保护,特性有服务降级,服务熔断,请求缓存,请求合并,依赖隔离。
6.Spring Cloud Feign,声明式服务调用本质上就是Ribbon+Hystrix.
7.Spring Cloud Stream,消息驱动,有Sink,Source,Processor三种通道,特性有订阅发布,消息组,消息分区。
8.Spring Cloud Bus,消息总线,配合Config仓库修改一种Stream实现。
9.Spring Cloud Sleuth,分布式服务追踪器,需要搞清楚TraceID和SpanID以及抽样,如何与ELK整合。
SpringCloud的子项目,大致分成两类,一类是对现有成熟框架”SpringBoot化:的封装和抽象,也是数量最多的项目,第二类是开发了一部分分布式系统的基础设施的实现,如Spring Cloud Stream扮演的就是Kafka,ActiveMQ这样的角色。
Spring Cloud Config Config能够管理所有微服务的配置文件
集中配置管理工具,分布式系统中统一的外部配置管理,默认使用Git来存储配置。可以支持客户端配置的刷新以及加密,解密操作。
Spring Cloud Netflix
Netflix OSS 开源组件集成,包括Eureka,Hystrix,Ribbon,Feign,Zuul等核心组件。
1.Eureka:服务治理组件,包括服务端的注册中心和客户端的服务发现机制;
2.Ribbon:负责均衡的服务调用组件,具有多种负载均衡调用策略。
3.Hystrix:服务容错组件,实现了断路器模式,为依赖服务的出错和延迟提供了容错能力。
4.Feign:基于Ribbon和Hystrix的声明式服务调用组件。
‘5.Zuul:API网关组件,对请求提供路由以及过滤功能。
Spring Cloud Bus
1.用于传播集群状态变化的消息总线,使用轻量级消息代理链接分布式系统中的节点,可以用动态刷新集群中的服务配置信息。
2.简单来说就是修改了配置文件,发送一次请求,所有客户端便会重新读取配置文件(需要利用中间插件MQ)。
Spring Cloud Consul
Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,Consul的方案更“一站式”,内置了服务注册与发现框架,分布一致性协议实现,健康检查,Key/Value存储,多数据中心方案,不再需要依赖其他工具(比如Zookeeper等)。使用起来比较简单。Consul使用Go语言编写,因此具有天然可移植性(支持Linux,Windows和Mac OS X);安装包仅包含一个可执行文件,方便部署,与Docker等轻量级容器可无缝配合。
Spring Cloud Security
Spring Cloud Security提供了一组原语,用于构建安全的应用程序和服务,而且操作简便。可以在外部(或集中)进行大量配置的声明性模型有助于实现大型协作的远程组件系统,通常具有中央身份管理服务。他也非常易于在Cloud Foundry等服务平台中使用。在SpringBoot和Spring Security OAuth2的基础上,可以快速创建实现常见模式的系统,如单点登录,令牌中继和令牌交换。
Spring Cloud Sleuth
在微服务中,通常根据业务分模块,项目中前端发起一个请求,后端可能跨几个服务调用才能完成这个请求(如下图)。如果系统越来越庞大,服务之间的调用与被调用关系就会变得复杂,假如一个请求中需要跨几个服务调用,其中一个服务由于网络延迟等原因挂掉了,那么这时候我们需要分析具体哪一个服务出现问题了就会显得困难。Spring Cloud Sleuth服务链路跟踪功能就可以帮助我们快速的发现错误根源以及监控分析每条请求链路上的性能等等。
Spring Cloud Stream
轻量级事件驱动微服务框架,可以使用简单的声明式模型来发送以及接收消息,主要实现为Apache Kafka以及RabbitMQ。
Spring Cloud Task
Spring Cloud Task的目标是为Spring Boot应用程序提供创建短运行期微服务的功能。在Spring Cloud Task中,我们可以灵活的动态运行任何任务,按需分配资源并在任务完成后检索结果。Tasks是Spring Cloud Data Flow中的一个基础项目,允许用户将几乎任何Spring Boot应用程序作为一个短期任务执行。
Spring Cloud Zookeeper
Spring Cloud 支持三种注册方式Eureka,Consul(go语言编写),zookeeper Spring Cloud Zookeeper是基于Apache Zookeeper的服务治理组件。
Spring Cloud GateWay
Spring Cloud Gateway是Spring官方基于Spring 5.0,SpringBoot2.0和Project Reactor等技术开发的网关,Spring Cloud GateWay旨在为微服务架构提供简单,有效和统一的API路由管理方式,Spring Cloud GateWay作为Spring Cloud生态系统中的网关,目标是替代Neflix Zuul,其不仅提供统一的路由方式,而且还基于Filer链的方式提供网关基本的功能,例如:安全,监控/埋点,限流等。
Spring Cloud OpenFeign
Feign是一个声明性的Web服务客户端。他使编写Web服务客户端变得更容易。要使用Feign,我们可以将调用的服务方法定义成抽象方法保存在本地添加一点点注解就可以了,不需要自己构建http请求了,直接调用接口就行了,不过要注意,调用方法要和本地抽象方法的签名完全一致。