在了解微服务之前我们需要了解两个概念,单体架构与分布式架构
单体架构
单体架构就是一个项目作为一个整体,所有的功能模块封装到一个项目中,最终打包成一个包,部署到服务器上。
这是中小型公司常常采取的架构方式
我们下面以一个单体架构的系统为例
单体架构的优缺点如下:
优点:
- 部署简单
- 部署成本低
缺点:
- 耦合度高(维护困难,升级困难)
分布式架构
分布式架构就是将单体项目的多个模块拆出来,根据业务功能对系统做拆分,每个业务功能可以作为一个独立的项目开发,称为一个服务,每个服务部署在单独的服务器上。
分布式架构的优缺点:
优点:
-
降低服务的耦合
我们将服务拆开了,不再是把所以代码塞入一个项目,自然就降低了耦合度。
-
有利于服务的升级和拓展
当我需要添加新的服务的时候,直接添加,无需在整个项目上改代码,单独创建一个项目进行开发,让项目之间互相调用就好。
缺点:
-
服务的调用关系错综复杂
比如 当服务一多,可能出现A调用B,B调用C或者A有时调用D,有时调用E服务而E服务也可能调用其他服务
对于分布式项目的思考
分布式项目虽然有诸多好处,降低了耦合,增强了整个程序的扩展性,但是对于服务的拆分我们还有很多问题需要思考:
- 服务拆分的粒度如何界定? 要拆分服务,怎么拆分才算合理的拆分?
- 服务之间如何调用?
- 服务的调用关系如何进行管理?即如何解决调用关系错综复杂的问题?
人们需要一套行之有效的标准来约束分布式架构。
微服务
微服务的架构特征:
- 单一职责:微服务的拆分粒度更小,每一个服务对应唯一的业务,单一职责。
- 独立:一个小的服务模块,可以由一个团队负责,自己选择技术,单独的服务模块由团队负责部署,有利于增强开发效率。
- 面向服务:服务提供统一的标准接口,与语言和技术无关
- 隔离性强:服务调用做好隔离、容错、降级、避免出现级联问题。
单独的服务,使用独立的数据库,将数据也隔离出来,不同的服务无法访问别的服务中的数据
微服务的上述特征其实是在给分布式指定一个标准,进一步的给分布式架构降低耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。
因此,微服务可以说是一种经过良好架构设计的分布式架构方案。
但这种微服务方案该怎么落地?选用什么样的技术栈?全球的互联网公司都在积极尝试自己的微服务落地方案。
其中在Java领域最引人注目的就是SpringCloud提供的方案了!
让我们回到从从Springboot入门微服务,了解第一个SpringCloud的组件,继续学习微服务的相关知识吧!
本文参考黑马程序员视频,SpringCloud微服务技术栈,部分图文资料引用于该视频相关资料。