谷粒商城笔记-04-项目微服务架构图简介

文章目录

  • 一,网络
  • 二,网关
    • 1,网关选型
    • 2,认证鉴权
    • 3,动态路由
    • 4,限流
    • 5,负载均衡
    • 6,熔断降级
  • 三,微服务
  • 四,存储层
  • 五,服务治理
  • 六,日志系统
  • 七,自动化部署

这一节的内容是介绍项目的架构图,这是从上帝视角看整个项目,非常重要、非常关键。

这一节应该不止看一遍,在学习的过程中经常回过头来温习一遍,看看自己当前学习的是架构图中的哪部分,做到胸中有数。

这是一个结构非常完整的微服务架构图,基本上所有的微服务都类似,掌握其中精髓,万变不离其宗,无论是以后架构新的项目还是重构旧的项目,都可以参考这个架构。

谷粒商城-微服务架构图原图如下。

在这里插入图片描述

根据各部分作用的不同,我将这个架构图分为7个部分,接下来逐一介绍。

在这里插入图片描述

一,网络

虽然网络主要是运维同事负责,作为开发人员也应该了解项目的网络部署,在排查线上问题时,可能会起到关键作用。

从图中可以看出,整个项目的网络部署有内外网之分,绝大部分都部署在内网,极少数部署在外网。

内网无法通过公网直接访问,这是出于安全考虑,包括网络安全、数据安全等等。

前端项目一般部署在外网,因为前端是整个系统的入口,是开放给公网用户访问的。

后端服务包括所有的商城服务、数据存储、日志、数据治理服务、K8S等等,全部都部署在内网,与外网隔离,拒绝外网直接访问。

二,网关

网关相当于商城系统的后台门户,是极其重要的一部分。

商城页面上所有的后台请求都要经过网关,网关担负的主要职责如下:

  • 认证鉴权
  • 动态路由
  • 限流
  • 负载均衡
  • 熔断降级

1,网关选型

这个项目选用SpringCloud Gateway作为网关。

2,认证鉴权

商城的有些操作是需要客户登录后操作的,比方说加购物车、下单、付款,这些操作都需要鉴权,判断用户是否登录。

再比如后台管理系统,涉及到库存、商品的管理,所有的操作都有对应的权限,库存管理员只能管理库存,商品管理员只能管理商品。类似这种权限控制都在网关进行。

3,动态路由

大多数服务都是集群部署,分布在多台机器上。

比如商品服务,可能部署在10台服务器上,当前端发出一个商品服务请求时,只需要一台服务器接收请求,从多台服务器中选取一台服务器接收响应,称之为路由

网关具备路由的能力,可以配置多种路由策略,比如随机路由、轮询、最小连接数、Hash等等。

4,限流

限流是指在高峰期或者发现黑客攻击,就要对请求进行流量控制,或者让请求排队等候处理,或者直接拒绝请求,避免整个系统瘫痪失去响应。

限流有很多种方式,常见的有令牌限流、漏桶限流。

  • 令牌限流。系统生成固定数量的令牌,给每个请求发放令牌,只有得到令牌的请求才能进入系统,没有令牌的请求将被拒绝。
  • 漏桶限流。漏桶相当于一个缓存,请求先进入漏桶等待,后端服务以恒定速率从漏桶中取出、处理请求,超出桶容量的请求会被丢弃。

5,负载均衡

因为网关是后台服务的门户,有动态路由的能力,所以也可以实现负载均衡,将请求均匀的分发到后台服务器上。

6,熔断降级

网关可以收集后台服务的响应情况,在满足某种规则的情况下,拦截熔断请求,避免后台服务资源耗尽。

三,微服务

这是业务核心,包括商品服务、订单服务、库存服务、描述服务、搜索服务等等,这些服务在启动后,会将自身信息包括服务名称和IP注册到注册中心。

这些服务之间也需要相互调用,这个项目使用feign完成内部服务间的相互调用。

四,存储层

这个项目中,存储层选用多个中间件。

  • 持久化存储选用了MySQL,搭建了MySQL集群,采用读写分离的策略。
  • 缓存选用了Redis,搭建了Redis集群。
  • 消息中间件选用了RabbitMQ。
  • 日志存储选用了Elasticsearch。
  • 商品搜索存储选用了Elasticsearch。
  • 图片存储使用阿里云的OSS。

五,服务治理

  • 注册中心Nacos
  • 配置中心Nacos
  • 链路追踪Sleuth、Zipkin
  • 降级熔断限流Sentinal

六,日志系统

日志记录了系统运行过程中的各种信息,是排查线上问题的必备资料。

这个项目使用ELK作为日志采集、管理、查询系统。

  • Logstash收集日志
  • 存储到Elasticsearch中
  • 用可视化工具Kibana作为前端工具搜索、展示日志

七,自动化部署

  • K8S提供容器管理功能
  • Jenkins实现从Git代码仓库拉取代码,自动打包,生成Docker容器
  • KubeSphere提供简单易用的容器编排功能

流水线作业的原理和流程示例:

  • 源代码变更:

    • 开发者提交代码到版本控制系统,触发 Jenkins pipeline。
  • 构建和测试:

    • Jenkins 根据 pipeline 规则拉取最新代码,构建 Docker 镜像,并运行测试。
    • 如果测试通过,Jenkins 将构建的镜像推送到私有或公共的 Docker Registry,如 Harbor 或 Docker Hub。
  • 部署到 Kubernetes:

    • Jenkins 使用 Kubernetes 的 API 或 CLI (kubectl) 将更新后的镜像部署到目标环境(如开发、测试或生产环境)。
    • 这一步可能涉及更新 Kubernetes 的 Deployment、StatefulSet 或其他资源。
  • 监控和反馈:

    • 部署完成后,Jenkins 可以通知相关人员,同时 KubeSphere 提供监控和日志功能,便于跟踪应用状态和问题排查。

通过这种方式,Jenkins、Kubernetes 和 KubeSphere 形成一个紧密合作的体系,实现了从代码变更到应用部署的自动化流程,大大提高了开发效率和运维的灵活性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/40355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Apache HTTP服务器上配置 TLS加密

安装mod_ssl软件包 [rootlocalhost conf.d]# dnf install mod_ssl -y此时查看监听端口多了一个443端口 自己构造证书 [rootlocalhost conf.d]# cd /etc/pki/tls/certs/ [rootlocalhost certs]# openssl genrsa > jiami.key [rootlocalhost certs]# openssl req -utf8 -n…

你的机器人购物新体验——安全、高效、无忧

如果你跟我一样,对找到那些“恰到好处”的商品充满渴望,那么,让我来告诉你为什么BFT会成为你的下一个购物“心头好”。 BFT的优势 高效安全的支付体系:BFT交易系统保障了交易的安全性和透明性,让你的每一笔消费都安全…

Build a Large Language Model (From Scratch)附录B(gpt-4o翻译版)

来源:https://github.com/rasbt/LLMs-from-scratch?tabreadme-ov-file https://www.manning.com/books/build-a-large-language-model-from-scratch

【宠粉赠书】UML 2.5基础、建模与设计实践

为了回馈粉丝们的厚爱,今天小智给大家送上一套系统建模学习的必备书籍——《UML 2.5基础、建模与设计实践》。下面我会详细给大家介绍这本书,文末留有领取方式。 图书介绍 《UML 2.5基础、建模与设计实践》以实战为主旨,结合draw.io免费软件…

verilog行为建模(三):块语句

目录 1.块语句2.延迟赋值语句 微信公众号获取更多FPGA相关源码: 1.块语句 块语句用来将多个语句组织在一起,使得他们在语法上如同一个语句。 块语句分为两类: 顺序块:语句置于关键字begin和end之间,块中的语句以顺…

鸿蒙‘ohpm‘ 不是内部或外部命令,也不是可运行的程序-解决方案

🔥 博客主页: 小韩本韩! ❤️ 感谢大家点赞👍收藏⭐评论✍️ 在鸿蒙的DevEco Studio的终端下输入 onpm -v 或者 你需要下载第三方ohpm包的时候提示‘ohpm‘ 不是内部或外部命令,也不是可运行的程序- 主要是因为我们…

学习测试1

计算机基础 1、计算机范式:冯诺依曼机 2、存储单元 bit、byte、KB、MB、GB3、网络 ip、域名、ping 域名、 ipconfig测试工作的流程 ------------------------------------------------------------------------------------------- 一 编写测试大纲 罗列测试…

文化创新与社交媒体:探索Facebook的足迹

在过去的十多年里,Facebook从一个简单的校园社交网络发展成为全球最大的社交媒体平台之一。它不仅改变了人们的沟通方式,更在许多方面推动了文化的创新和变革。本文将深入探索Facebook如何通过其平台的演进和功能创新,成为文化创新的重要推动…

Ubuntu / Debian安装FTP服务

本章教程,记录在Ubuntu中安装FTP服务的具体步骤。FTP默认端口:21 1、安装 pure-ftpd sudo apt-get install pure-ftpd2、修改默认配置 # 与 centos 不同,这里需要在 /etc/pure-ftpd/conf 文件夹下执行下列命令,增加对应配置文件: # 创建 /etc/pure-ftpd/conf/PureDB 文件…

【数据结构】(6.2)堆的应用——Top-K问题(C语言)

系列文章目录 文章目录 系列文章目录问题引入一、TopK 问题 是什么?二、TopK 问题解决思路2.1 TopK 思路2.2 随机产生数字2.2 完整代码2.3 验证结果 问题引入 TopK 问题 (在一堆数据里面找到前 K 个最大 / 最小的数)。 一、TopK 问题 是什么? 生活中也…

船舶雷达与导航系统选择7/8防水插座的原因分析

概述 船舶雷达与导航系统在现代航海中扮演着至关重要的角色,它们为船舶提供准确的导航信息,确保航行的安全和效率。在这些系统中,7/8防水插座的使用尤为重要,因为它们能够在恶劣的海上环境中提供稳定的电力和信号连接。接下来&am…

Outlook发送大文件的问题是什么?怎么解决?

Outlook不仅是一款电子邮件客户端,还包括日历、任务、笔记、联系人等功能,同时与Microsoft Office套件中的其他应用程序(如Word、Excel、PowerPoint等)集成紧密,方便用户在不同应用程序之间切换,提高工作效…

LLM - 神经网络的组成

1. 一个神经元的结构:即接受多个输入X向量,在一个权重向量W和一个偏执标量b的作用下,经过激活函数后,产生一个输出。 2. 一层神经网络的结构:该层网络里的每个神经元并行计算,得到各自的输出;计算方式是输入…

「植物大战僵尸杂交版」保姆级攻略大全以及下载指南

植物大战僵尸杂交版自推出以来,以其独特的植物组合和策略玩法,迅速赢得了玩家们的喜爱。如果你正准备加入这场植物与僵尸的战斗,或者已经在战斗中寻求突破,那么这份保姆级的攻略大全将是你的得力助手。同时,我们也提供…

【JavaWeb程序设计】Web基础-JavaScript

目录 一、函数与事件的使用 1. 编写一个html页面,使用Javascript完成数字的平方计算。 1.1 运行截图 1.2 JS代码 1.3 HTML代码 2. 要求文本框中只能输入字母 2.1 运行截图 2.2 下载jquery-3.4.1并引用 2.3 JS代码 2.4 HTML代码 3. 在文本框分别输入两个…

基于aardio web.view2库和python playwright包的内嵌浏览器自动化操作

通过cdp协议可以实现playwright操控webview。 新建Python窗口工程 修改pip.aardio 修改pip.aardio,并执行,安装playwright。 //安装模块 import process.python.pip; //process.python.path "python.exe";/* 安装模块。 参数可以用一个字…

Linux系统的基础知识和常用命令

1、什么是Linux? 是一种免费使用和自由传播的类UNIX操作系统,其内核由林纳斯本纳第克特托瓦兹于1991年10月5日首次发布,它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行…

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(十)-git(2)

下面是一些git的常用命令和基本操作,可以当做平常的笔记查询,用于学习!!! 文章目录 前言 一、git 二、git常用命令 总结 前言 下面是一些git的常用命令和基本操作,可以当做平常的笔记查询,用于…

【MindSpore学习打卡】应用实践-计算机视觉-深入解析 Vision Transformer(ViT):从原理到实践

在近年来的深度学习领域,Transformer模型凭借其在自然语言处理(NLP)中的卓越表现,迅速成为研究热点。尤其是基于自注意力(Self-Attention)机制的模型,更是推动了NLP的飞速发展。然而&#xff0c…

pandas,dataframe使用笔记

目录 新建一个dataframe不带列名带列名 dataframe添加一行内容查看dataframe某列的数据类型新建dataframe时设置了列名,则数据类型为object dataframe的保存保存为csv文件保存为excel文件 dataframe属于pandas 新建一个dataframe 不带列名 df pd.DataFrame() 带…