谷粒商城笔记-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,一经查实,立即删除!

相关文章

前端面试题3-浅谈http协议及常见的面试题

1、浅谈http协议 HTTP(Hypertext Transfer Protocol)超文本传输协议,是互联网上应用最为广泛的一种网络协议,所有的WWW文件都必须遵守这个标准。它是基于TCP/IP通信协议来传递数据(HTML文件、图片文件、查询结果等&am…

在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…

OLED示波器的实现

OLED示波器是一种使用有机发光二极管(OLED)显示屏来显示波形的仪器。它可以实时显示电压、电流、频率等信号的波形。 OLED显示屏具有高对比度、高亮度、广视角和快速响应时间等优点,使得OLED示波器在波形显示方面具有更好的表现。与传统的液…

鸿蒙开发设备管理:【@ohos.usb (USB管理)】

USB管理 本模块主要提供管理USB设备的相关功能,包括查询USB设备列表、批量数据传输、控制命令传输、权限控制等。 说明: 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import …

【JavaScript脚本宇宙】优化你的Web色彩:精选JavaScript颜色工具对比

万能色彩助手:详解最受欢迎的JavaScript颜色库 前言 在现代Web开发中,颜色处理和转换是一个不可忽视的环节。无论是网站设计、数据可视化还是用户界面开发,都离不开对颜色的精确控制和转换。为了满足这一需求,众多JavaScript库应…

Toocaa Studio已开发的功能

2024年07月01日 Toocaa Studio 一个激光切割雕刻机的上位机, 未来会对标Xtool的xTool Creative Space和LightBurn,同时它也是一款图形编辑器,矢量图形编辑器。 工具类 鼠标画矩形或正方形 鼠标画椭圆或画圆 鼠标画直线或轨迹路径 往画布中…

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

如果你跟我一样,对找到那些“恰到好处”的商品充满渴望,那么,让我来告诉你为什么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

《More Effective C++》《杂项讨论——34、如何在同一个程序中结合C++和C》

文章目录 1、Terms34:如何在同一个程序中结合C和C1.1 名称重整1.2 statics的初始化1.3 动态内存的分配1.4 数据结构的兼容性 2、总结3、参考 1、Terms34:如何在同一个程序中结合C和C 在大型项目中一般都用C进行开发,但是不可避免会用一些C语言进行底层的调用。在确…

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

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

匿名内部类

下面代码中,Person24 是一个抽象类,这意味着它不能被直接实例化,只能通过继承它的子类来实现其抽象方法。代码片段中展示了如何使用匿名内部类来实现一个抽象类的实例。 package chapter04;public class Java24_Object_匿名内部类 {public s…

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测试工作的流程 ------------------------------------------------------------------------------------------- 一 编写测试大纲 罗列测试…

C++STL函数对象的应用

STL函数对象 文章目录 STL函数对象1.基本概念2.使用方法1. 简单函数对象示例2. 函数对象作为算法参数3. Lambda表达式作为函数对象 2.一元谓词和二元谓词1.一元谓词2.二元谓词3.总结 3.算术仿函数1.使用示例2.Lambda表达式的替代 4.关系仿函数5.逻辑仿函数 C中的函数对象&#…

文化创新与社交媒体:探索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 问题 是什么? 生活中也…

2024 最新docker仓库镜像,6月,7月

目前下面的docker仓库镜像源还能使用。 vi /etc/docker/daemon.json添加如下配置{"registry-mirrors": ["https://hub.uuuadc.top", "https://docker.anyhub.us.kg", "https://dockerhub.jobcher.com", "https://dockerhub.icu&…

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

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