暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

微服务架构概述

一叶扁舟 2022-03-07
1303

image.png

一、架构演进

随着互联网的发展,网站规模也在不断扩大,进而导致系统架构也在不断的进行变化。

从互联网兴起到现在,系统架构大体经历了下面几个过程:

单体应用架构 --> 垂直应用架构 --> 分布式架构 --> SOA架构 --> 微服务架构 --> Service Mesh(服务网格化)

1.1、单体应用架构

【简述】

互联网早期,网站流量较小,只需一个应用即可

image.png

【优点】

  • 对于小型项目来讲,开发、维护简单(项目部署在单节点上,便于维护)

【缺点】

  • 对于大型项目来讲不易开发和维护

  • 项目模块间耦合度较高,无法针对不同模块进行优化和水平扩展

1.2、垂直应用架构

【简述】:互不相干的独立服务

随着访问量增大,单一应用的服务能力只能靠整体增加节点来应对,但并不是所有模块访问量并不大,不需要那么多节点来应对。

所谓垂直应用架构,就是讲原来的应用拆分成互不相干的几个应用,从而可以针对不同模块进行优化和水平扩展

image.png

【优点】

  • 可以针对不同模块进行优化和水平扩展

  • 各系统能够分担整体访问的流量,解决了并发问题。

  • 一个系统发生了故障,不影响其他系统的运行情况,提高了整体的容错率。

【缺点】

  • 拆分后的各系统之间相对比较独立,无法进行互相调用。

  • 各系统难免存在重叠的业务,会存在重复开发的业务,后期维护比较困难。

1.3、分布式架构

【简述】系统拆分,相互通信

分布式系统就是将不同的服务模块部署在多台不同的服务器上,然后通过远程调用协同工作,共同对外提供服务。对于用户来说,就像是一台计算机在服务一样。

系统演变为垂直应用架构之后,当垂直应用越来越多,重复编写的业务代码就会越来越多。

此时,我们需要将系统中重复的部分拆分出来,形成统一的服务供其他系统或者业务模块来进行调用。此时,系统就会演变为分布式架构。

image.png

1.3.1、SOA架构

【简述】系统按服务粒度拆分,提供通信统一调度

SOA(面向服务)架构是一种分布式架构,将系统按照服务粒度拆分,并增加一个统一的调度中心来对集群进行实时管理服务间通信。

image.png

【优点】

  • 将重复的业务代码抽象出来,形成公共的服务,提高了代码的复用性、可维护性
  • 可针对不同服务特点按需伸缩
  • 增加了注册中心,解决了各个服务之间的自动注册与发现,方便了服务间通信

【缺点】

  • 系统拆分粒度较大,服务间还是有较多的功能复用

1.3.2、微服务架构

【简述】根据功能细粒度拆分,使用轻量级的RPC框架进行通信,独立部署

微服务架构更强调服务的彻底拆分,是将系统根据功能细粒度拆分为一个个小的可以独立部署的微服务,服务间通过轻量级的RPC框架进行通信。每个服务可以使用不同的语言、使用不同的数据库。

image.png

【优点】

  • 服务彻底拆分,各服务独立打包、独立部署和独立升级。
  • 微服务之间可以采用轻量级RPC框架进行通信。

【缺点】

  • 分布式系统开发的技术成本高(容错、分布式事务等)
  • 多服务运维难度增大

二、微服务架构概念

2.1、什么是微服务

1、【架构思想】微服务是一种项目架构思想

2、【组件化与多服务】微服务是以开发一组小型服务的方式来开发一个独立的应用系统。

3、【独立进程、轻量级通信】其中每个小型服务都运行在自己的进程中,并采用HTTP这样轻量的机制来相互通信。

4、【独立开发、独立维护、独立部署】这些服务围绕业务功能进行构建(围绕业务功能拆分),并能通过全自动的部署机制来进行独立部署。

5、【跨语言、跨平台】这些微服务可以使用不同语言来编写,并使用不同的数据存储技术。

2.2、RPC框架

2.2.1、什么是RPC?

Remote Procedure Call 远程过程调用

【核心功能】:像调用本地方法一样,调用远程方法

2.2.2、RPC原理

image.png

2.2.3、一些概念区分

RPC与HTTP啥关系?

两个都是协议,用于解决tcp传输粘包问题。
HTTP是通用协议,RPC的定制化更高,比如可以将HTTP存储数据用到的json换为体积更小的protobuf,从而提升性能
HTTP一般用于客户端与服务端之间的请求,因为协议比较通用
RPC一般应用于内部服务之间的请求,可以自定义相关规则,提升传输性能

image.png

Okhttp、RestTemplate、Dubbo、OpenFeign是RPC吗?为什么?

Dubbo、OpenFeign是RPC框架,Okhttp、RestTemplate不是RPC框架

因为,Dubbo、OpenFeign是通过调用本地方法,从而达到实现调用远程方法。而Okhttp、RestTemplate是直接发送了http请求,调用远程的方法(浏览器直接请求后端接口也是如此)。

三、常见问题及解决方案

3.1、微服务常见问题

核心问题:网络不可靠

  • 服务较多,如何部署运维?(docker、k8s
  • 服务很多客户端如何访问?(nginx、网关
  • 服务之间如何相互高效通信?(RPC、注册与发现、负载均衡
  • 服务如何治理?(熔断、限流
  • 服务如何监控?(日志监控、调用链监控、指标监控
  • 分布式问题?(分布式事务、分布式任务调度

3.2、常见解决方案

针对微服务面临的问题和挑战,谷歌、阿里、Netflix等内部都有自己的一套成熟解决方案,并提供给我们选择和使用。

image.png

最后修改时间:2023-11-07 11:45:05
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论