微服务介绍

232 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第19天,点击查看活动详情

前言

在平时学习中,我们有时候会提到微服务,分布式等,那么什么是微服务呢?这时候百度的作用就提醒了

image.png

根据定义,我们可以get一个新词语————云原生,当然这个不是我们重点,重点是:微服务是一种架构方法,在单个应用中包含众多松散耦合而且可单独部署的小型组件或服务。

微服务架构通俗点说就是对原来庞大的项目进行拆分,每一个拆分后的模块独立形成一个新的项目(即服务),拆分后的服务和服务之间可按照一定方式(分布式)进行通信的架构。微服务拆分如下图所示 :

image.png

微服务架构优点

项目复杂度降低:微服务通过拆分巨大的单体式应用,从而解决了单体式架构中的复杂性问题。

单体式架构介绍

单体式架构是将项目中所有的源码都放置在一个总项目中进行开发、部署和维护。项目可以分为多个模块,但多个模块的源码均属于一个项目,不同模块的开发者共同维护一份项目源码。

image.png

团队界限明确:微服务架构模式的每个服务都可以由专门的开发团队来完成

扩展灵活:微服务架构模式使得每个服务可以独立扩展。你可以根据每个服务的特点来部署满足需求的规模,也可以使用更适合于服务需求的硬件资源。

image.png

为啥会出现微服务

我们最先想到,肯定是以前的架构不能满足现在要求,那现在什么要求?

比较项传统软件行业互联网软件行业
用户群体企业内部用户互联网线上用户
用户量庞大
并发考虑少/几乎不用考虑必须考虑
数据量海量数据
架构方式单体式架构分布式微服务架构
部署单个服务器集群服务器
项目代码量多而复杂
运维复杂度

从上面这些区别可以看出,面对如今用户量庞大的互联网行业,传统的单体式架构并不能满足如今互联网场景下的高并发需求了,所以如今互联网下的软件架构基本都是分布式微服务架构。

通过学习计算机网络,我们知道,通信最常见的是http模式

微服务架构给各个单服务之间进行通信提供了两种常用的方式:

  • 一种是基于 HTTP 的 RESTful 风格的远程服务通信。

REST,是一组架构约束条件和设计原则。在微服务中,项目之间可以采用 RESTful 风格的 HTTP 方式互相调用。常用的微服务框架 Spring Cloud 及 Dubbox 均支持 RESTful 的调用方式。

  • 一种是基于 RPC 的远程服务通信。

RPC,即远程过程调用。简单点说,就是可以在一个项目中像调用本地服务一样去调用其他项目的服务。常见的微服务框架 Dubbo 以及升级版的 Dubbox 均支持 RPC 的调用方式。

我们通常把微服务架构中调用服务的一方称为 Consumer(消费者) ,被调用的一方称为 Provider(提供者)

开发中常用的两种微服务框架:Dubbo/Dubbox、Spring Cloud。

Dubbo使用查看微服务框架 Dubbo简单学习 - 掘金 (juejin.cn)

spring cloud看上去和spring,springboot类似,其实Spring Cloud 是基于 Spring Boot 的一整套实现微服务的框架,Spring Boot 专注于快速、方便集成的单个微服务个体,而 Spring Cloud 关注全局的服务治理框架。

image.png

微服务架构设计原则

  • 围绕业务切分:在决定将该项目拆分成多少个子项目时,需要按照对应业务进行拆分,避免业务过多交叉,接口实现复杂。
  • 单一职责:在服务设计上,每一个服务职责尽可能单一。这样可以保证服务的模块化协作,即多个服务可以互相搭配完成一个整体功能。
  • 谁创建,谁负责:由对应的项目组负责对应项目的创建和维护。一般微服务项目由其开发团队,直接对项目的开发、维护、部署进行负责,这样可以减少沟通成本