SpringCloud 微服务简单了解
SpringCloud 微服务简单了解
进入 SpringCloud 阶段,就要研究如何使用分布式的微服务了。在此之前,需要了解一下和微服务到底是什么,以及它的作用。
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. 微服务相关技术栈
| 微服务技术 | 相关技术栈 |
|---|---|
| 服务开发 | SpringBoot、Spring、SpringMVC 等 |
| 服务配置与管理 | Netflix 的 Archaius、阿里的 Diamond 等 |
| 服务注册与发现 | Eureka、ZooKeeper、Consul 等 |
| 服务调用 | Rest、RPC、gRPC |
| 服务熔断 | Hystrix、Envoy 等 |
| 负载均衡 | Ribbon、Nginx 等 |
| 服务接口调用 | Feign 等 |
| 消息队列 | Kafka、RabbitMQ、ActiveMQ 等 |
| 服务路由(API 网关) | Zuul 等 |
| 服务配置中心管理 | SpringCloud Config、Chef 等 |
| 服务监控 | Zabbix、Nagios、Metrics 等 |
| 全链路追踪 | Zipkin、Brave、Dapper 等 |
| 服务部署 | Docker、Kubernetes、OpenStack 等 |
| 数据流操作开发包 | SpringCloud Stream |
| 事件消息总线 | SpringCloud Bus |
5. 常见面试题
- 什么是微服务?
- 微服务之间是如何独立通讯的?
- SpringCloud 和 Dubbo 有什么区别?
- 对 SpringBoot 和 SpringCloud 的理解?
- 什么是服务熔断和服务降级?
- 微服务的优缺点是什么?
- 微服务技术栈有哪些?
- Eureka 和 ZooKeeper 都可以提供服务注册与发现的功能,它们有什么区别?
6. 总结
从概念上了解了一下微服务和微服务架构,同时了解了微服务对应的技术栈,有些第一次见到,有些已经是久仰大名了??。
美好的风景,望不到头。