文章目录
- 一、分布式系统
- 二、微服务
- 1、何为微服务?
- 2、微服务与分布式系统有什么关系?
- 3、微服务与微服务架构
- (1)微服务
- (2)微服务架构
- 4、微服务的优缺点
- (1)优点
- (2)缺点
- 5、微服务架构的问题
- 6、微服务技术栈
- 7、微服务解决方案
一、分布式系统
定义:分布式系统(distributed system)是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。------《分布式系统原理及范型》
一般来说,分布式系统是由一组通过网络进行通信,为了完成共同的任务而协调工作的计算机节点组成的系统。
分布式系统是建立在网络上的软件系统。
分布式系统出现的目的是为了什么?
答:是为了用廉价的普通机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器去处理更多的数据。
注:首先要明确,只有当单个节点的处理能力满足不了日益增长的计算存储任务时,且硬件提升高昂到得不偿失时,应用程序不能进一步优化时,我们才考虑分布式系统。
二、微服务
1、何为微服务?
微服务化的核心就是将传统一站式应用,根据业务拆分成一个一个服务,彻底地去耦合,每个微服务提供单个业务功能,一个服务做一件事情。从技术的角度看就是一个小而独立的处理过程,类似进程的概念。能够自行启动和销毁,拥有自己独立的数据库。
2、微服务与分布式系统有什么关系?
因为分布式非常复杂,所以一直以来都没有权威的架构和设计,更多的只是前人的积累和实践。前人总结出了许多有用的理念,积累了许多经验,开发了很多实施分布式的软件。近几年来,最热门的分布式架构非微服务架构莫属。它是由美国科学家Eric Brewer在其博客上发表的概念。
微服务是分布式系统设计和架构的理念之一。但是从微服务的风格来看,它并不是为了克服所有的分布式系统的缺陷而设计的,而是为了追求更高的可读性、可用性和简易性。但与此同时,也弱化了其一致性,正如这句老话——“两害相较取其轻者”。
所以,微服务并不能解决所有的分布式系统的问题,它只是寻求一个平衡点,让架构师能够更为简单、容易地构建分布式系统。但微服务并非金科玉律,对于一些特殊的分布式需求,还需要我们使用其他的方法来得以实现,正如方法是死的,而人是活的,需要实事求是地解决问题。
3、微服务与微服务架构
(1)微服务
强调的是一个服务的大小,他关注的点是具体解决某一个问题提供对应服务的一个服务应用,狭义的看,可以看作是IDEA中的一个微工程或者Moudle。
(2)微服务架构
是一种架构模式,提倡的是单一程序划分成一组小的服务,服务于服务之间相互协调,相互配合,为用户提供最终价值。
模块化、功能化
4、微服务的优缺点
(1)优点
- 单一职责原则。
- 每个服务足够内聚,足够小,代码容易理解。
- 开发简单,效率高,一个服务只干一件事(一般情况下)。
- 小团队开发。
- 松耦合,开发与部署相对独立,有功能意义的服务。
- 能使用不同语言开发。
- 易于与第三方集成。
- 已被理解,修改和维护。
- 允许利用融合最新技术。
- 只是业务逻辑代码,不与前端融合。
- 每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库。
(2)缺点
- 开发人员要处理分布式系统的复杂性。
- 运维难度随着服务的增加而增大。
- 系统部署依赖性大。
- 服务间通信成本大。
- 数据一致性。
- 系统集成测试复杂。
- 性能监控难。
5、微服务架构的问题
(1)这么多服务,客户端如何访问?(服务路由问题–API网关)
(2)这么多服务,服务之间如何通信?(服务通信问题–同步/异步调用)
(3)这么多服务,如何治理?(服务高可用问题–服务的注册与发现)
(4)服务挂了怎么办?(服务降级问题–熔断机制)
6、微服务技术栈
微服务条目 | 落地技术 |
服务开发 | SpringBoot、Spring、SpringMVC… |
服务配置与管理 | Netflix Archaius、Alibaba Diamond… |
服务注册与发现 | Netflix Eureka、Consul、Zookeeper、Alibaba Nacos… |
服务调用 | Rest、RPC、gRPC… |
服务熔断器 | Netflix Hystrix、Envoy、Resilience4j、sentinel… |
负载均衡 | Netflix Ribbon、Nginx… |
服务接口调用(客户端调用服务的简化工具) | Feign… |
消息队列 | Kafka、RabbitMQ、ActiveMQ、RocketMQ… |
服务配置中心管理 | Spring Cloud Config、Chef… |
服务路由(API网关) | Netflix Zuul、Spring Cloud Gateway … |
服务监控 | Zabbix、Nagios、Metrics、Specatator… |
全链路追踪 | Zipkin、Brave、Dapper… |
服务部署 | Docker、OpenStack、Kubernetes… |
数据流操作开发包 | Spring Cloud Stream |
事件消息总线 | Spring Cloud Bus |
7、微服务解决方案
针对上面第5条的四个问题,衍生出很多微服务解决方案
(1)Spring Cloud Netfilx -------一站式解决方案
- 服务路由:ZUUL组件
- 服务通信:Fegin(基于HTTP,同步并阻塞)
- 服务注册与发现:Eureka
- 熔断机制:Hystrix
- ……
2018年底,Netflix宣布无限期停止维护,生态不再维护,就会脱节!
(2)Apache Dubbo + Zookeeper-------半自动解决方案,需要整合 - 服务路由:无,需要自己实现或使用第三方组件
- 服务通信:Dubbo,高性能的Java RPC框架(通信框架)
- 服务注册与发现:Zookeeper
- 熔断机制:无,需借助Hystrix
- ……
不完善,但胜在自由度高,适合能自己实现组件功能的大公司使用
(3)Spring Cloud Alibaba -------一站式解决方案 - 服务路由:Gateway
- 服务通信:Dubbo
- 服务注册与发现:Nacos
- 熔断机制:Sentinel
- ……
目前又提出一种解决方案:服务网格(Service Mesh)
或成为下一代微服务标准,代表方案:istio
微服务架构之所以会产生这四个问题的根本原因是——网络不可靠