SpringCloud 微服务简单了解

Spring Cloud 微服务简单了解

进入 Spring Cloud 阶段,就要研究如何使用分布式的微服务了。在此之前,需要了解一下和微服务到底是什么,以及它的作用。

1. 微服务简介

首先是概念上的问题:什么是微服务?

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

微服务和整体架构之间的区别在于,微服务由许多较小的,松散耦合的服务组成一个应用程序,与大型,紧密耦合的应用程序的整体方法相反。

微服务强调的是服务的大小,关注的是某一个点,是具体解决某个问题的服务应用。狭义地说,微服务可以看做 IDEA 中一个 Maven 项目中的不同 Module 模块,它们都由 SpringBoot 构建,为了解决不同的问题而生。

2. 微服务架构

微服务架构是一种架构形式,由 Martin Fowler 在 2014 年提出。

微服务架构有四个核心问题,应用微服务的过程就是解决这些问题的过程:

  1. 服务很多,客户端该如何访问;
  2. 这么多服务之间要怎么通信;
  3. 这么多服务要如何管理(服务注册与发现);
  4. 如果某个服务出现问题(挂了)怎么办?

目前的解决方案也有几种,也是构建微服务用到的技术栈:

  1. Spring Cloud Netflix 一站式解决方案:

    客户端如何访问服务:使用 API 网关 Zuul 组件;

    服务之间的通信:使用 Feign 组件,基于 HTTP 的通信,同步并阻塞;

    服务注册与发现:使用 Eureka 组件;

    服务出现问题:使用 Hystrix 组件,熔断机制;

    除此之外还有一些其他的组件。

  2. Apache Dubbo ZooKeeper 半自动解决方案,某些部分需要引入其他框架:

    客户端如何访问服务:没有自己的组件,需要额外整合,或自己实现;

    服务之间的通信:使用 Dubbo 框架,基于 RPC 的通信,异步不阻塞,已经使用过了;

    服务注册与发现:使用 ZooKeeper 组件作为注册中心,也使用过了;

    服务出现问题:没有自己的解决方案,一般整合 Hystrix;

    可以看出 Dubbo 的这个方案并不是很完善。

  3. Spring Cloud Alibaba 一站式解决方案,更简单,相当于简化了 Netflix。

不同的解决方案就是提供了不同解决四个核心问题的方法,万变不离其宗。在微服务中,出现问题的根本原因还是网络的不可靠。

3. 微服务的优缺点

优点

  1. 符合单一职责原则,且每个服务足够内聚,足够小,更易于理解;
  2. 开发效率高,一个服务只需专注于一件事;
  3. 微服务是松耦合的,是具有具体意义的服务应用,在开发阶段或部署阶段都是独立的;
  4. 微服务能使用不同的语言开发;
  5. 微服务易于被一个开发人员理解、修改和维护,使开发人员可以专注于自己的工作,减少团队合作带来的效率影响;
  6. 微服务易于和第三方集成,易于融合新技术;
  7. 每个微服务都有自己的存储能力,可以有独立的数据库,也可以共用数据库。

缺点

  1. 开发时需要处理分布式系统的复杂性;
  2. 多服务时运维的难度增大;
  3. 系统集成测试难度增大;
  4. 服务之间通信需要成本;
  5. 数据一致性需要保障······

4. 微服务相关技术栈

微服务技术 相关技术栈
服务开发 Spring Boot、Spring、Spring MVC 等
服务配置与管理 Netflix 的 Archaius、阿里的 Diamond 等
服务注册与发现 Eureka、ZooKeeper、Consul 等
服务调用 Rest、RPC、gRPC
服务熔断 Hystrix、Envoy 等
负载均衡 Ribbon、Nginx 等
服务接口调用 Feign 等
消息队列 Kafka、RabbitMQ、ActiveMQ 等
服务路由(API 网关) Zuul 等
服务配置中心管理 Spring Cloud Config、Chef 等
服务监控 Zabbix、Nagios、Metrics 等
全链路追踪 Zipkin、Brave、Dapper 等
服务部署 Docker、Kubernetes、OpenStack 等
数据流操作开发包 Spring Cloud Stream
事件消息总线 Spring Cloud Bus

5. Spring Cloud简介

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

简单来说,Spring Cloud 是分布式微服务架构下的一站式解决方案,是各个微服务架构技术落地技术的集合体,相当于微服务全家桶!

Spring Cloud 与 Spring Boot 的关系:

  1. Spring Boot 主要用于快速便捷地开发一个微服务;
  2. Spring Cloud 关注全局的微服务协调管理,它负责将由 Spring Boot 开发的微服务集合起来并管理,同时为各个微服务之间提供配置管理、服务发现与注册、路由、事件总线、消息队列、分布式会话等集成服务;
  3. Spring Boot 可以离开 Spring Cloud 单独使用,开发项目,但 Spring Cloud 离不开 Spring Boot;
  4. 总而言之,Spring Boot 用于开发微服务,而 Spring Cloud 用于协调管理微服务!

6. Spring Cloud对比Dubbo

在微服务架构上,比起 Dubbo 这个单独的 RPC 框架,Spring Cloud 更加全面。

Dubbo Spring
服务注册中心 ZooKeeper Spring Cloud Netflix Eureka
服务调用方式 RPC REST API
服务监控 Dubbo-monitor Spring Boot Admin
服务熔断 不完善 Spring Cloud Netflix Hystrix
服务网关 Spring Cloud Netflix Zuul
分布式配置 Spring Cloud Config
服务跟踪 Spring Cloud Sleuth
消息总线 Spring Cloud Bus
数据流 Spring Cloud Stream
批量任务 Spring Cloud Task

其中最大的区别是:Spring Cloud 放弃了 Dubbo 的 RPC 通信方式,采用基于 HTTP 的 REST 方式进行通信

这两种方式各有优劣,REST 方式牺牲了服务调用的性能,但避免了原生 RPC 带来的问题。且 REST 比 RPC 更加灵活,服务提供者和服务消费者的依赖仅依赖于协议,不存在代码级别的强依赖,在强调快速演化的微服务环境下更加合适。

总结一下:Dubbo 的定位是 RPC 框架,而 Spring Cloud 的定位是微服务架构下的一站式解决方案。

7. 常见面试题

  1. 什么是微服务?
  2. 微服务之间是如何独立通讯的?
  3. Spring Cloud 和 Dubbo 有什么区别?
  4. 对 Spring Boot 和 Spring Cloud 的理解?
  5. 什么是服务熔断和服务降级?
  6. 微服务的优缺点是什么?
  7. 微服务技术栈有哪些?
  8. Eureka 和 ZooKeeper 都可以提供服务注册与发现的功能,它们有什么区别?

8. 总结

从概念上了解了一下微服务和微服务架构,同时了解了微服务对应的技术栈,有些第一次见到,有些则是早已听闻了😕。

美好的风景,望不到头。

// 人总要认识到自己的有限。

posted @   Qirror  阅读(125)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
Live2D
欢迎阅读『SpringCloud 微服务简单了解』
点击右上角即可分享
微信分享提示