1.什么是微服务
微服务是一种架构风格,它是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。
2.微服务的优点
(1)易于开发和维护
由于微服务单个模块就相当于一个项目,开发这个模块我们就只需关心这个模块的逻辑即可,代码量和逻辑复杂度都会降低,从而易于开发和维护。
(2)启动较快
这是相对单个微服务来讲的,相比于启动单体架构的整个项目,启动某个模块的服务速度明显是要快很多的。
(3)局部修改容易部署
在开发中发现了一个问题,如果是单体架构的话,我们就需要重新发布并启动整个项目,非常耗时间,但是微服务则不同,哪个模块出现了bug我们只需要解决那个模块的bug就可以了,解决完bug之后,我们只需要重启这个模块的服务即可,部署相对简单,不必重启整个项目从而大大节约时间。
(4)技术栈不受限
微服务每个模块都可以使用不同的开发技术,开发模式更灵活。
(5)按需伸缩
单体架构在想扩展某个模块的性能时不得不考虑到其它模块的性能会不会受影响,对于微服务来讲,完全不是问题,一个模块通过什么方式来提升性能不必考虑其它模块的情况。
3.微服务的缺点
(1)运维要求较高
对于单体架构来讲,我们只需要维护好这一个项目就可以了,但是对于微服务架构来讲,由于项目是由多个微服务构成的,想要知道是哪个模块造成的问题往往是不容易的,因为我们无法一步一步通过Debug的方式来跟踪,这就对运维人员提出了很高的要求。
(2)分布式的复杂性
对于单体架构来讲,我们可以不使用分布式,但是对于微服务架构来说,分布式几乎是必会用的技术,由于分布式本身的复杂性,导致微服务架构也变得复杂起来。
(3)接口调整成本高
一个微服务发生变化,那么所有依赖它的微服务都要做相应的调整,由于微服务可能非常多,那么调整接口所造成的成本将会明显提高。
(4)重复劳动
对于单体架构来讲,如果某段业务被多个模块所共同使用,我们便可以抽象成一个工具类,被所有模块直接调用,但是微服务却无法这样做,因为这个微服务的工具类是不能被其它微服务所直接调用的,从而我们便不得不在每个微服务上都建这么一个工具类,从而导致代码的重复
4.Spring Cloud 5大组件
服务注册与发现——Nacos
服务调用—Feign
熔断器–Hystrix
负载均衡——Ribbon
网关——Gateway