首页 > 其他分享 >【微服务】一张图搞懂微服务架构设计

【微服务】一张图搞懂微服务架构设计

时间:2024-09-27 15:12:50浏览次数:5  
标签:架构设计 存储 服务 Redis 网关 搞懂 日志 分布式

1.前言

当前,微服务架构在很多公司都已经落地实施了,下面用一张图简要概述下微服务架构设计中常用组件。不能说已经使用微服务好几年了,结果对微服务架构没有一个整体的认知,一个只懂搬砖的程序员不是一个好码农!

 

 

2.流量入口 Nginx

在上图中可以看到,Nginx 作为整个架构的流量入口,可以理解为一个外部的网关,它承担着请求的 路由转发、负载均衡、动静分离 等功能。作为一个核心入口点,Nginx 肯定要采用多节点部署,同时通过 keepalived 来实现高可用,从而保障整个平台的高可用。

3.网关

网关是在 Nginx 后的另外一个核心组件。它承担着 请求鉴权,路由转发,协议转换,流量监控 等一系列功能,上图中网关是采用 Spring Cloud Gateway 来实现业务网关的功能,在网关选型中,我们还有其他的选择,比如 Zuul1、Zuul2、Kong 等等,这些方案都有自己的优势和局限性,我们可以根据他们的特点来抉择到底选用哪一个方案。

上图中,Spring Cloud Gateway下面有 JWT 和 OAuth2,其实这两个就是基于 Token 的认证鉴权,一般互联网项目中,在登录模块都是支持微信或者 QQ 登录,这就是用到 OAuth2 的授权登录。

4.业务组件

从上面的架构图中可以看到,网关之后就是我们的业务组件了,可以理解就是拆分之后的微服务了,比如电商平台常见的 账号服务、订单服务、发票服务、收银台服务 等等。服务组件之间通过 Feign 来进行 http 调用,Feign 集成 Ribbon 来实现客户端侧负载均衡。具体的服务领域划分,服务限界上下文的设定,这就另外的知识了,如果想做好服务划分,DDD 领域驱动设计这块可以深入了解下。

5.服务注册中心

不管是基于 Dubbo 实现的 SOA,还是基于 Spring Cloud 拆分的微服务架构,服务注册中心都是必须的,我们把所有的服务组件都注册到注册中心,进而实现服务的动态调用。常见能实现注册中心功能的有 Zookeeper、Eureka、Nacos。Zookeeper 在 Dubbo 中使用比较多,目前公司服务微服务架构是基于 Eureka 的,Eureka 好像目前不维护了。一般新的平台建议直接集成 Nacos,Nacos 除了能做注册中心来使用,也可以作为分布式配置中心来使用,比 Sping Cloud Config 更好使。

6.缓存和分布式锁

在图中左下角,我们可以看到 Redis 组件,我们可以把 Redis 作为缓存来使用,把一些查询慢,使用率高的热点数据做缓存处理,能快速提高接口响应时间。同时 Redis 在微服务中的一大使用场景就是分布式锁,传统的 Sychronized 和显示 Lock 锁显然是不能解决分布式并发问题。

为了保障 Redis 的高可用,可以采用哨兵部署,不是三个 Redis节点,一主二从,同时部署三个哨兵节点,来实现故障转移,避免单点问题,如果 Redis 存储的数据量很大,达到了单节点的 Redis 的性能瓶颈,我们也可以用 Redis 集群模式来实现分布式存储。

7.数据持久层

不管单体服务,还是微服务,数据持久层都是必须的,我们是选用互联网项目经常使用的 MySQL 作为 DB,为了保证服务读写效率以及高可用性,我们 主从分离 模式,同时实现读写分离,来保障 MySQL 的读写性能。

随着业务量增长,单表的数据量达到性能瓶颈之后,我们就要采用分库分表来对数据库表进行水平拆分和垂直拆分了,具体如何进行合理的拆分,以及技术选型,这些和项目现有的表结构设计是息息相关的,要考虑后续的可拓展性,不能短期拆了一时爽,后续业务量增暴涨之后,服务器的性能不足以维持数据库的性能时,这时候要拆分服务器部署了。当然,一般企业的数据量级达不到那样的量级。

8.结构型数据存储

MySQL 比较擅长存储关系型数据,项目中有需要存储结构性数据的场景,比如存储 JSON 字符串,这种场景通过 MySQL 来存储显然事不合适的。一般我们会采用 Elasticsearch 或者 MongoDB 来进行存储,如果业务中需要检索功能,更建议使用 Elasticsearch。Elasticsearch 支持 DSL,有比较丰富查询检索功能,甚至能实现 GIS 空间检索功能。

9.消息中间件

前面说到,微服务架构中,服务之间同步调用是通过 Feign 来实现的,那服务间的异步解耦就要通过 MQ 来实现了。虽然我们可以通过多线程来实现异步调用,但是这种异步调用不支持持久化,可能会造成消息丢失,所以一般都集成 RabbitMQ 或者 RocketMQ。

10.日志收集

在微服务架构中,通过一个组件,比如说订单服务都是多节点分布式部署,每个节点的 Log 日志都是存储在节点本地,如果要查询日志,我们难道要登录到各个节点找到对应的日志信息?这种查看日志肯定是不行的。所以一般会引入 ELK 来做日志收集,和可视化展示查询。

Logstash 用来做日志收集工作,通常在 Logstash 前会加一个 Filebeat,由 Filebeat 来收集日志,Logstash 做数据转换工作。
Elasticsearch 做数据存储,以及生成索引数据,便于 Kibana 做检索。
Kibana 做数据的展示,以及查询检索功能,我们通过检索关键词就能快速的查询到想要日志信息。

11.任务调度中心

项目中经常会用到定时功能,单体应用中,我们使用 Spring 自带的 Schedule,或者使用 Quartz 即可,在分布式应用中,我们就要集成分布式定时器,比如 Quartz(Quartz 配合数据库表也是支持分布式定时任务的),还有 Elastic-Job、XXL-JOB 等等。

Elastic-Job 是当当网基于 Quartz 二次开发的 弹性分布式任务调度系统,功能丰富强大,采用 Zookeeper 实现分布式协调,实现任务高可用以及分片。Elastic-Job 是一个分布式调度的解决方案,由当当网开源,它由两个相互独立的子项目 Elastic-Job-Lite 和 Elastic-Job-Cloud 组成,使用 Elastic-Job 可以快速实现分布式任务调度。

XXL-JOB 是一个 分布式任务调度平台(XXL 是作者徐雪里姓名拼音的首字母),其核心设计目标是开发迅速、学习简单、轻量级、易扩展。将调度行为抽象形成 “调度中心” 公共平台,而平台自身并不承担业务逻辑,“调度中心” 负责发起调度请求。将任务抽象成分散的 JobHandler,交由 “执行器” 统一管理,“执行器” 负责接收调度请求并执行对应的 JobHandler 中业务逻辑。因此,“调度” 和 “任务” 两部分可以相互解耦,提高系统整体稳定性和扩展性。

12.分布式对象存储

项目中经常会有文件上传功能,比如图片,音频视频。在分布式架构中,我们将文件存储在节点服务器上显然是不行的,这时候,我们就需要引入分布式文件存储。常见方案有 MinIO、阿里的 OSS(收费),阿里 FastDFS 等等。

MinIO 是一款基于 Go 语言开发的高性能、分布式的 对象存储系统。客户端支持 Java、Net、Python、Javacript、Golang 语言。

FastDFS 是一个开源的 轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储、文件同步、文件访问(文件上传、文件下载)等,解决了大容量存储和的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等。

标签:架构设计,存储,服务,Redis,网关,搞懂,日志,分布式
From: https://www.cnblogs.com/datacenter/p/18435778

相关文章

  • 通过MobaXterm操作远程服务器电脑的方法
      本文介绍在Windows电脑中,下载、配置MobaXterm软件,从而连接、操作远程服务器的方法。  因为是在Windows操作系统的电脑中连接服务器,所以建议使用MobaXterm、PuTTY等可视化的远程计算机管理软件,来实现对服务器的连接与后续相关操作。在本文中,我们就选择基于MobaXterm软件来连......
  • NSSM:简化Windows服务配置,提升系统维护效率
    NSSM:简化Windows服务配置,提升系统维护效率在Windows系统环境中,服务的配置与管理是一项复杂而重要的任务。传统的服务管理方式往往涉及繁琐的步骤,不仅效率低下,还容易出错。然而,随着NSSM(Non-SuckingServiceManager)这一强大工具的出现,Windows服务的配置与管理变得前所未有的简单和......
  • 基于Spring Boot的高校心理健康评测与服务系统
    目录前言 一、技术栈二、系统功能介绍三、核心代码1、登录模块 2、文件上传模块3、代码封装前言随着社会的发展,系统的管理形势越来越严峻。越来越多的用户利用互联网获得信息,但各种信息鱼龙混杂,信息真假难以辨别。为了方便用户更好的获得高校心理健康评测与服务,......
  • Springboot老年人社区服务平台设计与实现x45mt程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表志愿者,老人,需求分类,老人需求,需求领取,医疗服务,医疗预约,预约时间段,家政服务,家政预约,配送服务,配送预约开题报告内容一、项目背景与意义随着社会老龄化......
  • uniapp [全端兼容] - 详细实现拍照或相册选取图片后插入水印功能,手机拍照或相册上传图
    前言网上的教程乱七八糟且兼容性太差,本文提供优质示例。在uni-app全平台兼容(H5网页网站、支付宝/微信小程序、安卓App、苹果App、nvue)开发中,详解手机从相册选取上传图像后加入水印功能,手机拍摄照相后也可以加入水印,Uniapp给图片添加水印,获取上传或拍摄的图片信息后,为......
  • 服务器数据恢复—存储中raid硬盘故障导致映射到服务器上的卷挂载不上的数据恢复案例
    服务器存储数据恢复环境&故障:一台存储上有一组由16块FC硬盘组建了一组raid。存储前面板上的对应10号和13号硬盘的故障灯亮起,存储映射到redhatlinux操作系统服务器上的卷挂载不上,业务中断。服务器存储数据恢复过程:1、通过存储的管理后台查看当前存储状态,管理后台报告逻辑卷状态......
  • SVN服务器的优势是什么?
    服务器是一种集中式版本控制系统,它管理着随时间改变的数据,并将这些数据存储在一个中央资料档案库(Repository)中。这个档案库类似于一个普通的文件服务器,但它会记住每一次文件的变动,允许用户将档案恢复到旧版本或浏览文件的变动历史。SVN服务器的工作原理可以概括为以下几个步骤:1......
  • 快速搞懂你是否要做深度合成算法备案
    需要备案的对象《互联网信息服务深度合成管理规定》第十九条指出,具有舆论属性或者社会动员能力的深度合成服务提供者,应当履行备案和变更、注销备案手续。这里我们要分舆论属性和社会动员能力,以及深度合成服务提供者两部分看。什么是舆论属性和社会动员能力?根据《具有舆论......
  • 天地图移动端部署(一):创建一个基础地图服务(uni-app环境)
    前言:在一家测绘公司上班,接手了一个移动端APP项目,用uni-app开发的,地图服务用天地图底层支持,嗯,测绘用天地图十分合理。“这地图看起来糊糊的,你给换成XX地图吧。”老大某天跟我说。圣谕下达,开始拉代码,读代码。嗯,依旧是一坨的“清朝”项目代码,一堆的log,一堆的警告,一堆的if,就......
  • Spring Cloud全解析:服务调用之OpenFeign日志打印
    OpenFeign日志打印OpenFeign提供了日志打印功能,可以配置不同级别的日志级别publicenumLevel{//默认,不显示任何日志NONE,//仅记录请求方法、url、响应状态码及执行时间BASIC,//除记录BASIC信息外,还记录请求头和响应头HEADERS,//除了HEADERS信息外,还有请......