谷粒商城筆記-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.pswp.cn/web/40355.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40355.shtml
英文地址,請注明出處:http://en.pswp.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…