SpringCloud 微服务简单了解
Spring Cloud 微服务简单了解
进入 Spring Cloud 阶段,就要研究如何使用分布式的微服务了。在此之前,需要了解一下和微服务到底是什么,以及它的作用。
1. 微服务简介
首先是概念上的问题:什么是微服务?
微服务是一种架构的思想,维基上对其定义为:微服务是一种架构风格,它提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API)。每个服务都围绕着具体业务进行构建,并且能够独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据上下文,选择合适的语言、工具对其进行构建。
微服务和整体架构之间的区别在于,微服务由许多较小的,松散耦合的服务组成一个应用程序,与大型,紧密耦合的应用程序的整体方法相反。
微服务强调的是服务的大小,关注的是某一个点,是具体解决某个问题的服务应用。狭义地说,微服务可以看做 IDEA 中一个 Maven 项目中的不同 Module 模块,它们都由 SpringBoot 构建,为了解决不同的问题而生。
2. 微服务架构
微服务架构是一种架构形式,由 Martin Fowler 在 2014 年提出。
微服务架构有四个核心问题,应用微服务的过程就是解决这些问题的过程:
- 服务很多,客户端该如何访问;
- 这么多服务之间要怎么通信;
- 这么多服务要如何管理(服务注册与发现);
- 如果某个服务出现问题(挂了)怎么办?
目前的解决方案也有几种,也是构建微服务用到的技术栈:
-
Spring Cloud Netflix 一站式解决方案:
客户端如何访问服务:使用 API 网关 Zuul 组件;
服务之间的通信:使用 Feign 组件,基于 HTTP 的通信,同步并阻塞;
服务注册与发现:使用 Eureka 组件;
服务出现问题:使用 Hystrix 组件,熔断机制;
除此之外还有一些其他的组件。
-
Apache Dubbo ZooKeeper 半自动解决方案,某些部分需要引入其他框架:
客户端如何访问服务:没有自己的组件,需要额外整合,或自己实现;
服务之间的通信:使用 Dubbo 框架,基于 RPC 的通信,异步不阻塞,已经使用过了;
服务注册与发现:使用 ZooKeeper 组件作为注册中心,也使用过了;
服务出现问题:没有自己的解决方案,一般整合 Hystrix;
可以看出 Dubbo 的这个方案并不是很完善。
-
Spring Cloud Alibaba 一站式解决方案,更简单,相当于简化了 Netflix。
不同的解决方案就是提供了不同解决四个核心问题的方法,万变不离其宗。在微服务中,出现问题的根本原因还是网络的不可靠。
3. 微服务的优缺点
优点:
- 符合单一职责原则,且每个服务足够内聚,足够小,更易于理解;
- 开发效率高,一个服务只需专注于一件事;
- 微服务是松耦合的,是具有具体意义的服务应用,在开发阶段或部署阶段都是独立的;
- 微服务能使用不同的语言开发;
- 微服务易于被一个开发人员理解、修改和维护,使开发人员可以专注于自己的工作,减少团队合作带来的效率影响;
- 微服务易于和第三方集成,易于融合新技术;
- 每个微服务都有自己的存储能力,可以有独立的数据库,也可以共用数据库。
缺点:
- 开发时需要处理分布式系统的复杂性;
- 多服务时运维的难度增大;
- 系统集成测试难度增大;
- 服务之间通信需要成本;
- 数据一致性需要保障······
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 的关系:
- Spring Boot 主要用于快速便捷地开发一个微服务;
- Spring Cloud 关注全局的微服务协调管理,它负责将由 Spring Boot 开发的微服务集合起来并管理,同时为各个微服务之间提供配置管理、服务发现与注册、路由、事件总线、消息队列、分布式会话等集成服务;
- Spring Boot 可以离开 Spring Cloud 单独使用,开发项目,但 Spring Cloud 离不开 Spring Boot;
- 总而言之,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. 常见面试题
- 什么是微服务?
- 微服务之间是如何独立通讯的?
- Spring Cloud 和 Dubbo 有什么区别?
- 对 Spring Boot 和 Spring Cloud 的理解?
- 什么是服务熔断和服务降级?
- 微服务的优缺点是什么?
- 微服务技术栈有哪些?
- Eureka 和 ZooKeeper 都可以提供服务注册与发现的功能,它们有什么区别?
8. 总结
从概念上了解了一下微服务和微服务架构,同时了解了微服务对应的技术栈,有些第一次见到,有些则是早已听闻了😕。
美好的风景,望不到头。
// 人总要认识到自己的有限。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)