谷粒商城笔记-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.mfbz.cn/a/776134.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【网络安全】Host碰撞漏洞原理+工具+脚本

文章目录 漏洞原理虚拟主机配置Host头部字段Host碰撞漏洞漏洞场景工具漏洞原理 Host 碰撞漏洞,也称为主机名冲突漏洞,是一种网络攻击手段。常见危害有:绕过访问控制,通过公网访问一些未经授权的资源等。 虚拟主机配置 在Web服务器(如Nginx或Apache)上,多个网站可以共…

软件测试面试题总结(超全的)

前面看到了一些面试题,总感觉会用得到,但是看一遍又记不住,所以我把面试题都整合在一起,都是来自各路大佬的分享,为了方便以后自己需要的时候刷一刷,不用再到处找题,今天把自己整理的这些面试题…

力扣热100 滑动窗口

这里写目录标题 3. 无重复字符的最长子串438. 找到字符串中所有字母异位词 3. 无重复字符的最长子串 左右指针left和right里面的字符串一直是没有重复的 class Solution:def lengthOfLongestSubstring(self, s: str) -> int:# 左右指针leftright0ans0#初始化结果tablecolle…

ctfshow-web入门-文件包含(web82-web86)条件竞争实现session会话文件包含

目录 1、web82 2、web83 3、web84 4、web85 5、web86 1、web82 新增过滤点 . ,查看提示:利用 session 对话进行文件包含,通过条件竞争实现。 条件竞争这个知识点在文件上传、不死马利用与查杀这些里面也会涉及,如果大家不熟悉…

JavaScript高级程序设计(第四版)--学习记录之对象、类和面向对象编程(中)

创建对象方式 工厂模式:用于抽象创建特定对象的过程。可以解决创建多个类似对象的问题,但没有解决对象标识问题。(即新创建的对象是什么类型) function createPerson(name, age, job) { let o new Object(); o.name name; o.age…

广和通 OpenCPU 二次开发(二) ——通过linux编译

广和通 OpenCPU 二次开发(二) ——通过linux编译 一、编译命令总结 1.编译环境配置 . tools/core_launch.sh cout cmake ../.. -G Ninja 2.编译 ninja 二、命令解释 1. 执行 tools/core_launch.sh 这是一个脚本文件 core_launch.sh,通…

技术赋能政务服务:VR导视与AI客服在政务大厅的创新应用

在数字化转型的浪潮中,政务大厅作为服务民众的前沿阵地,其服务效率和质量直接影响着政府形象和民众满意度。然而,许多政务大厅仍面临着缺乏智能化导航系统的挑战,这不仅增加了群众的办事难度,也降低了服务效率。维小帮…

内核错误定位

内核打印出如下: 在代码目录输入: ./prebuilts/gcc/linux-x86/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb kernel/vmlinux 进入gdb 命令模式 输入 l *(rk628_csi_probe0xf0) 能定位到出现问题地方。 最后就…

PLM系统:PLM系统如何重塑产品生命周期管理

PLM系统:重塑产品生命周期管理的未来 在当今快速变化的商业环境中,产品生命周期管理(PLM)系统正逐渐成为企业提升竞争力、加速创新并优化运营流程的关键工具。随着技术的不断进步和市场需求的日益复杂化,传统的手动或…

试用笔记之-汇通窗口颜色显示软件(颜色值可供Delphi编程用)

首先下载汇通窗口颜色显示软件 http://www.htsoft.com.cn/download/wdspy.rar 通过获得句柄颜色,显示Delphi颜色值和HTML颜色值

Python:Pycharm安装指南

三、Pycharm安装指南 在开始之前今天内容之前,将上篇的初体验练习题公布如下: 初体验练习题:输入两个字符,将他们组合后输出。 str1 input("请输入名字:") str2 input("请输入城市:&qu…

Vue iview-ui 被tooltip包裹的标题,点击跳转后,提示框不消失

tooltip包裹的标题,点击跳转后,提示框不消失 就会有这种显示问题 下面这种错误方法不可行,解决办法往下翻 css写得没错,问题出在Javascript当中的 getElementsByClassName(“xxabc”), 这个方法得到的是一个由class&q…

Python | Leetcode Python题解之第213题打家劫舍II

题目: 题解: class Solution:def rob(self, nums: List[int]) -> int:def robRange(start: int, end: int) -> int:first nums[start]second max(nums[start], nums[start 1])for i in range(start 2, end 1):first, second second, max(fi…

PHP基础教程——总结W3school

1、<?php ?> 2、$ 声明变量 3、变量大小写敏感 关键字&#xff08;if、else、echo&#xff09;和用户定义的类、函数大小写不敏感 4、三种注释 // # /* */ 5、echo "<br>"; 换行 6、global(关键字) 函数内访问全局变量 $GLOBALS[index] …

7寸微型FPV无人机技术详解

对于7寸微型FPV&#xff08;First Person View&#xff0c;第一人称视角&#xff09;无人机技术的详解&#xff0c;可以从以下几个方面进行介绍&#xff1a; 一、定义与基本概念 FPV无人机&#xff0c;全称为“第一人称视角无人机”&#xff0c;它利用安装在无人机上的摄像头…

[单master节点k8s部署]19.监控系统构建(四)kube-state-metrics

kube-state-metrics 是一个Kubernetes的附加组件&#xff0c;它通过监听 Kubernetes API 服务器来收集和生成关于 Kubernetes 对象&#xff08;如部署、节点和Pod等&#xff09;的状态的指标。这些指标可供 Prometheus 进行抓取和存储&#xff0c;从而使你能够监控和分析Kubern…

科研绘图系列:R语言STAMP图(STAMP Plot)

介绍 STAMP图(STAMP plot)并非一个广泛认知的、具有特定名称的图表类型,而是可能指在STAMP(Statistical Analysis of Metagenomic Profiles:“STAMP: statistical analysis of taxonomic and functional profiles”)软件使用过程中生成的各种统计和可视化图表的总称。ST…

使用OpenCV对图像进行三角形检测、颜色识别与距离估算【附代码】

文章目录 前言功能概述必要环境一、代码结构1. 参数定义2. 距离估计3. 颜色转换4. 图像处理函数4.1 读取图像和预处理4.2 轮廓检测4.3 过滤面积并检测三角形4.4 提取边框并计算距离 二、效果展示红色三角形绿色三角形蓝色三角形黄色三角形 三、完整代码获取总结 前言 本文将介…

通过 Parallels Desktop 虚拟机安装运行 macOS 15 Sequoia

在 Apple 的 WWDC 24 大会上&#xff0c;macOS Sequoia 15 成为全场热议的焦点。 作为科技爱好者和开发者&#xff0c;我们都迫不及待想要体验这些最新功能。但如果直接把整个 Mac 升级到测试版&#xff0c;可能不太现实&#xff0c;特别是当你需要保持主系统稳定的时候。 幸…

Alpha2:使用深度强化学习挖掘公式化的超额收益因子(附论文及源代码)

原创文章第577篇&#xff0c;专注“AI量化投资、世界运行的规律、个人成长与财富自由"。 今天说说因子挖掘&#xff0c;我们之前交付的Deap遗传算法因子挖掘&#xff0c;大家可以前往温习一下&#xff1a; 源码发布Quantlab4.2&#xff0c;Deap因子挖掘|gplearn做不到的…