1、什么是微服务?
微服务是一种架构风格,它要求我们在开发一个应用的时候,这个应用必须构建成一系列小服务的组合;可以通过http的方式进行互通。要说微服务架构,先得说说过去我们的单体应用架构。
2、单体应用架构
所谓单体应用架构(all in one)是指,我们将一个应用的中的所有应用服务都封装在一个应用中。
无论是ERP、CRM或是其他什么系统,你都把数据库访问,web访问,等等各个功能放到一个war包内。
- 这样做的好处是,易于开发和测试;也十分方便部署;当需要扩展时,只需要将war复制多份,然后放到多个服务器上,再做个负载均衡就可以了。
- 单体应用架构的缺点是,哪怕我要修改一个非常小的地方,我都需要停掉整个服务,重新打包、部署这个应用war包。特别是对于一个大型应用,我们不可能吧所有内容都放在一个应用里面,我们如何维护、如何分工合作都是问题。
3、微服务架构
all in one的架构方式,我们把所有的功能单元放在一个应用里面。然后我们把整个应用部署到服务器上。如果负载能力不行,我们将整个应用进行水平复制,进行扩展,然后在负载均衡。
所谓微服务架构,就是打破之前all in one的架构方式,把每个功能元素独立出来。把独立出来的功能元素的动态组合,需要的功能元素才去拿来组合,需要多一些时可以整合多个功能元素。所以微服务架构是对功能元素进行复制,而没有对整个应用进行复制。
这样做的好处是:
- 节省了调用资源。
- 每个功能元素的服务都是一个可替换的、可独立升级的软件代码。
Martin Flower 于 2014 年 3 月 25 日写的《Microservices》,详细的阐述了什么是微服务。
建议把原文多看几遍,烂熟于心
- 原文地址:http://martinfowler.com/articles/microservices.html
- 翻译:https://www.cnblogs.com/liuning8023/p/4493156.html
4、如何构建微服务
一个大型系统的微服务架构,就像一个复杂交织的神经网络,每一个神经元就是一个功能元素,它们各自完成自己的功能,然后通过http相互请求调用。比如一个电商系统,查缓存、连数据库、浏览页面、结账、支付等服务都是一个个独立的功能服务,都被微化了,它们作为一个个微服务共同构建了一个庞大的系统。如果修改其中的一个功能,只需要更新升级其中一个功能服务单元即可。
但是这种庞大的系统架构给部署和运维带来很大的难度。于是,spring为我们带来了构建大型分布式微服务的全套、全程产品:
- 构建一个个功能独立的微服务应用单元,可以使用springboot,可以帮我们快速构建一个应用;
- 大型分布式网络服务的调用,这部分由spring cloud来完成,实现分布式;
- 在分布式中间,进行流式数据计算、批处理,我们有spring cloud data flow。
- spring为我们想清楚了整个从开始构建应用到大型分布式应用全流程方案。
5、微服务会遇到的问题
分布式架构会遇到的四个核心问题?
- 服务众多,客户端该如何去访问?
- 服务众多,服务之间如何进行通信?
- 服务众多,如何治理呢?
- 服务众多,服务出了故障怎么处理?
6、一系列的解决方案
SpringCloud,是一套生态,就是来解决以上分布式架构的4个问题
想使用SpringCloud,必须要掌握SpringBoot,因为SpringCloud是基 于SpringBoot;
所有的方案只为解决之前提到的四个问题:
- API网关 --> 服务路由
- HTTP、RPC框架 --> 异步调用
- 服务注册与发现 --> 高可用
- 熔断机制 --> 服务降级(服务雪崩)
方案一:
Spring Cloud NetFlix ,出来了一套解决方案! - -站式解决方案。我们都可以直接去这里拿
ApI网关:zuul组件
Feign:使用了HttpClient,当然HttpClient也是基于HTTP的通信方式,同步并阻塞
服务注册与发现:Eurake
熔断机制:Hystrix
2018年年底,NetFlix宣布无限期停止维护。
方案二:
Apache Dubbo zookeeper,第二套解决系统
API :没有(要么找第三方组件,要么自己实现)
通信:Dubbo是一个高性能的基于Java实现的RPC通信框架
服务注册与发现:zookeeper:(动物园管理者),管理着Hadoop、Hive等
熔断机制:没有熔断机制,不过它借助了Hystrix
方案三:
SpringCloud Alibaba 一站式的解决方案
对于那四个问题,拥有自己的一套解决方案
目前,又有一种方案:
服务网格:下一代微服务标准Server Mesh
代表的解决方案:istio(未来可能需要掌握)