微服务基础相关介绍

引言

为了帮助初学者快速理解入门微服务,这里简单介绍一下微服务的基本概念及常用组件说明,希望能给初学者带来帮助,如有解释不当的地方还望及时指出,谢谢!(对微服务相关知识已有了解的可直接跳过引言部分

系统架构设计

要知道什么是微服务架构,你得先知道什么系统架构设计。

系统架构设计描述了在应用系统的内部,如何根据业务、技术、组织、灵活性、可扩展性以及可维护性等多种因素,将应用系统划分成不同的部分,并使这些部分彼此之间相互分工、相互协作,从而为用户提供某种特定的价值方式。

什么是微服务?

微服务是一个概念、一个项目开发的架构思想。

微服务架构

微服务架构是一种架构模式,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务于服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

微服务架构优势?

复杂度可控、独立部署、轻量级通讯、技术选型灵活、容错、扩展。

SOA与微服务架构区别

SOA实现 微服务架构实现
企业级,自顶向下开展实施 团队级,自底向上开展实施
服务由多个子系统组成,粒度大 一个系统被拆分成多个服务,粒度细
企业服务总线,几种式的服务架构 无集中式总线,松散的服务架构
集成方式复制(ESB/WS/SOAP) 集成方便简单(HTTP/REST/JSON)
单块架构系统,相互依赖,部署复杂 服务能独立部署

Dubbo VS Spring Cloud

核心要素 Dubbo Spring Cloud
服务注册中心 Zookeeper、Redis Spring Cloud Netflix Eureka、Consul
服务调度方式 RPC REST API
服务网关 Spring Cloud Netflix Zuul
断路器 不完善 Spring Cloud Netflix Hystrix
分布式配置 Spring Cloud Config
分布式追踪系统 Spring Cloud Sleuth
消息总线 Spring Cloud Bus
数据流 Spring Cloud Stream(基于Redis、RabbitMQ、Kafka实现的消息微服务)
批量任务 Spring Cloud Task

为什么选用Spring Cloud而不是Dubbo?

Dubbo只是实现了服务治理,而Spring Cloud子项目分别覆盖了微服务架构下的众多部件,而服务治理只是其中的一个方面。
Dubbo提供了各种Filter,可以通过扩展Filter来完善。
我们必须采用与一站式时代、泛 SOA 时代不同的技术栈,而 Spring Cloud 就是其中的佼佼者。

从核心要素来看,Spring Cloud 更胜一筹,在开发过程中只要整合Spring Cloud的子项目就可以顺利的完成各种组件的融合,而Dubbo却需要通过实现各种Filter来做定制,开发成本略高。

什么是Spring Cloud?

Spring Cloud 是一系列框架的有序集合。
它利用 Spring Boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 Spring Boot 的开发风格做到一键启动和部署。
Spring 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 Spring Boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

常用组件说明

Ribbon

Ribbon主要功能是为 REST 客户端实现负载均衡。

工作时候做4件事:

  • 优先选择在同一个 Zone 且负载较少的注册/发现服务;
  • 定期从注册/发现中心更新并过滤服务实例列表;
  • 根据用户指定的策略,在从 Server 取到的服务注册列表中选择一个实例的地址;
  • 通过 RestClient 进行服务调用。

Hystrix

Hystrix 库, 实现了断路器的模式。“断路器” 本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中的蔓延,乃至雪崩。

注解方式:
@EnableHystrix
相当于
@EnableCircuitBreaker

Feign

Feign 是一个声明式的 Web Service 客户端,它的目的就是让 Web Service 调用更加简单。它整合了 Ribbon 和 Hystrix,从而让我们不再需要显式地使用这两个组件。Feign 还提供了 HTTP 请求的模板,通过编写简单的接口和插入注解,我们就可以定义好 HTTP 请求的参数、格式、地址等信息。接下来,Feign 会完全代理 HTTP 的请求,我们只需要像调用方法一样调用它就可以完成服务请求。

Feign 具有如下特性:

  • 可插拔的注解支持,包括 Feign 注解和 JAX-RS 注解
  • 支持可插拔的 HTTP 编码器和解码器
  • 支持 Hystrix 和它的 Fallback
  • 支持 Ribbon 的负载均衡
  • 支持 HTTP 请求和响应的压缩

Zuul

Zuul路由是微服务架构的不可或缺的一部分,提供动态路由、监控、弹性、安全等的边缘服务。Zuul 是 Netflix 出品的一个基于 JVM 路由和服务端的负载均衡器。

Spring Cloud Config

在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件。在Spring Cloud中,有分布式配置中心组件spring cloud config ,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。在spring cloud config 组件中,分两个角色,一是config server,二是config client

Spring Cloud Bus

Spring Cloud Bus 通过轻量消息代理连接各个分布的节点。这会用在广播状态的变化(例如配置变化)或者其他的消息指令。Spring Bus 的一个核心思想是通过分布式的启动器对 Spring Boot 应用进行扩展,也可以用来建立一个多个应用之间的通信频道。目前唯一实现的方式是用 Amqp 消息代理作为通道。
Spring Cloud Bus 被国内很多都翻译为消息总线,也挺形象的。大家可以将它理解为管理和传播所有分布式项目中的消息既可,其实本质是利用了 MQ 的广播机制在分布式的系统中传播消息,目前常用的有 Kafka 和 RabbitMQ。利用 Bus 的机制可以做很多的事情,其中配置中心客户端刷新就是典型的应用场景之一。

推荐阅读更多精彩内容

  • 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥...
    java菜阅读 2,458评论 0 6
  • 前言 现在研发的项目启动今已近一年之久,期间从项目属性、人员规模、系统定位等方面都发生了很大的变化,而且是越变越好...
    孙振强阅读 10,499评论 1 57
  • Spring Cloud 是一系列框架的有序集合。它利用 Spring Boot 的开发便利性巧妙地简化了分布式系...
    Mr_Elliot阅读 1,199评论 1 15
  • 互联网架构微服务已经成为主流,Go 语言如何去打造呢? 万字长文全面解析 GraphQL,携程微服务背景下的前后端...
    flaygo阅读 552评论 0 2
  • 不要让未来的你,讨厌现在的你!这几个月我从心态压抑到改变再到心态平和,慢慢转变。在大好年华,青春尚在的时候去努力,...
    佩奇_阅读 41评论 1 2