主頁 > 軟體設計 > 如何監控Nginx(看完這篇就會了)

如何監控Nginx(看完這篇就會了)

2021-08-18 07:36:39 軟體設計

文章目錄

    • 一、簡介
    • 二、監控的主要指標
      • 1、基本活躍指標
      • 2、每秒請求數–QPS
      • 3、服務器錯誤率
    • 三、指標收集
      • 1、Nginx stub 模塊監控
        • (1)模塊安裝
        • (2)Nginx 狀態查看
        • (3)Stub Status 引數說明
      • 2、Nginx Reqstat 模塊監控
        • (1)模塊安裝
        • (1)Reqstat監控配置
        • (2)Nginx 狀態查看
    • 四、補充(擴展):
      • 1、日志分析
      • 2、常用分析命令
        • (1)相關概念
        • (2)具體命令
      • 3、公司監控nginx需要的指標
        • (1)請求時長
        • (2)nginx是否存活
        • (3)請求回傳錯誤
        • (4)流量
        • (5)服務損耗

一、簡介

web 服務器 nginx 以其高性能與抗并發能力越來越多的被用戶使用,Nginx 提供了 ngx_http_stub_status_modulengx_http_reqstat_module模塊,這兩個模塊提供了基本的監控功能,

  • 行程監控
  • 埠監控

注意: 這兩個是必須要加在zabbix監控,加觸發器有問題及時告警,

二、監控的主要指標

即主要監控物件:

1、基本活躍指標

名稱描述指標型別
Accepts (接受)NGINX 所接受的客戶端連接數資源: 功能
Handled (已處理)成功的客戶端連接數資源: 功能
Dropped (已丟棄,計算得出)丟棄的連接數(接受 - 已處理)作業:錯誤*
Requests (請求數)客戶端請求數作業:吞吐量

2、每秒請求數–QPS

通過持續的 QPS 監控,可以立刻發現是否被惡意攻擊或對服務的可用性進行評估,雖然當問題發生時,通過 QPS 不能定位到確切問題的位置,但是他卻可以在第一時間提醒你環境可能出問題了,

3、服務器錯誤率

通過監控固定時間間隔內的錯誤代碼(4XX代碼表示客戶端錯誤,5XX代碼表示服務器端錯誤),可以了解到客戶端收到的結果是否是正確的錯誤率突然的飆升很可能是你的網站漏洞發出的信號,
如果你希望通過 access log 分析錯誤率,那么你需要配置 nginx 的日志模塊,讓 nginx 將回應碼寫入訪問日志,

三、指標收集

1、Nginx stub 模塊監控

(1)模塊安裝

確保Linux上已安裝配置好Nginx,一定要有--with-http_stub_status_module這個模塊,可以在Nginx的sbin目錄下輸入./nginx -V進行查看,如果沒有可以在編譯時加上此模塊,

./configure –with-http_stub_status_module

默認情況下,status是關閉的,我們需要開啟,并指定uri來訪問資料,通過配置,在nginx組態檔中的server塊中增加

server {
        listen 80;
        server_name localhost;
        location /nginx-status {
                stub_status     on;
                access_log      on;
                }
}

(2)Nginx 狀態查看

配置完成后在瀏覽器中輸入http://10.0.105.207/nginx-status 查看

(或者用 curl localhost/nginx-status),顯示資訊如下:

Active connections: 2 
server accepts handled requests
 26 26 48 
Reading: 0 Writing: 1 Waiting: 1 
  • Active connections:與后端建立的服務連接數
  • server accepts handled requests:Nginx總共處理了26個連接,成功創建了26次握手,總共處理了48個請求
  • Reading:nginx讀取到客戶端的Header資訊數
  • Writing:nginx回傳到客戶端的Header資訊數
  • Waiting:開啟Keep-alive的情況下,這個值等于 Active -(Reading + Writing),表示nginx已經處理完成,正在等候下次一次請求的連接數,

(3)Stub Status 引數說明

正常情況下waiting數量是比較多的,并不能說明性能差,如果reading+writing數量比較多說明服務并發有問題,
在這里插入圖片描述

2、Nginx Reqstat 模塊監控

可以監控Nginx的性能、主要監控、連接數、請求數、各種回應碼范圍的請求數、輸入輸出流量、rt、upstream訪問等,現在通過ngx_req_status_module能夠統計Nginx中請求的狀態資訊,需要安裝第三方模塊,

./configure  --add-module=/usr/local/ngx_req_status-master

(1)模塊安裝

1.下載ngx_req_status_module 模塊, 這是第三方模塊需要添加
[root@nginx-server ~]# wget https://github.com/zls0424/ngx_req_status/archive/master.zip -O ngx_req_status.zip
[root@nginx-server ~]# unzip ngx_req_status.zip
[root@nginx-server ~]# cp -r ngx_req_status-master/ /usr/local/ #與解壓的nginx在同一級目錄下
[root@nginx-server ~]# cd /usr/local/nginx-1.16.0/
[root@nginx-server nginx-1.16.0]# yum -y install pcre pcre-devel openssl openssl-devel gcc gcc-c++   zlib zlib-devel
[root@nginx-server nginx-1.16.0]# yum -y install patch.x86_64
[root@nginx-server nginx-1.16.0]# patch -p1 < ../ngx_req_status-master/write_filter-1.7.11.patch
[root@localhost nginx-1.16.0]# ./configure 添加上原來的引數 --add-module=/usr/local/ngx_req_status-master

2.由于原先已有nginx,所以不能執行make install
否則會覆寫掉以前的組態檔及內容
[root@localhost nginx-1.16.0]# make 

3.更換二進制檔案
[root@localhost nginx-1.16.0]# mv /usr/sbin/nginx /usr/sbin/nginx_bak
[root@localhost nginx-1.16.0]# cp objs/nginx /usr/sbin/
[root@localhost nginx-1.16.0]# systemctl restart nginx 
[root@localhost nginx-1.16.0]# nginx -V   
如果發現編譯的組態檔有變化就成功了!

(1)Reqstat監控配置

[root@localhost ~]# vim /etc/nginx/nginx.conf
req_status_zone server_name $server_name 256k;(開啟的req監控)
req_status_zone server_addr $server_addr 256k;
req_status_zone server_url  $server_name$uri 256k;
req_status server_name server_addr server_url;
server {
        server_name localhost;
        location /req-status {
        req_status_show on;
        }
}

指令介紹

 req_status_zone
語法: req_status_zone name string size
默認值: None
配置塊: http
定義請求狀態ZONE,請求按照string分組來排列,例如:
req_status_zone server_url  $server_name$uri 256k;
域名+uri將會形成一條資料,可以看到所有url的帶寬,流量,訪問數

req_status
語法: req_status zone1[ zone2]
默認值: None
配置塊: http, server, location
在location中啟用請求狀態,你可以指定更多zones,

req_status_show
語法: req_status_show on
默認值: None
配置塊: location
在當前位置啟用請求狀態處理程式

(2)Nginx 狀態查看

192.168.187.164/req-status

zone_name	key	max_active	max_bw	traffic	requests	active	bandwidth
server_addr	192.168.187.164	2	 432	17K	18	1	 0
server_name	192.168.187.164	2	 432	17K	18	1	 0
server_url	192.168.187.164/	1	 0	 0	8	0	 0

請求狀態資訊包括以下欄位:

  • zone_name - 利用req_status_zone定義的分組標準,例如,按照服務器名稱對請求進行分組后;
  • key - 請求按分組標準分組后的分組標識(即組名),例如按服務器名稱分組時,組名可能是localhost;
  • max_active - 該組的最大并發連接數;
  • max_bw - 該組的最大帶寬;
  • traffic - 該組的總流量;
  • requests - 該組的總請求數;
  • active - 該組當前的并發連接數;
  • bandwidth - 該組當前帶寬,

四、補充(擴展):

1、日志分析

nginx 的 access log 中可以記錄很多有價值的資訊,通過分析 access log,可以收集到很多指標,制作nginx的日志切割,每天凌晨切割并壓縮,

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
           '$status $body_bytes_sent "$http_referer" '
           '"$http_user_agent" "$http_x_forwarded_for" $request_time $upstream_response_time';

列印的日志實體

39.105.66.117 - mp [11/Sep/2019:19:03:01 +0800] "POST /salesplatform-gateway/users HTTP/1.1" 200 575 "-" "Apache-HttpClient/4.5.5 (Java/1.8.0_161)" "-" 0.040 0.040
39.105.66.117 - mp [11/Sep/2019:19:03:08 +0800] "POST /salesplatform-gateway/users HTTP/1.1" 200 575 "-" "Apache-HttpClient/4.5.5 (Java/1.8.0_161)" "-" 0.008 0.008

引數詳情

  • $remote_addr: 客戶端的ip地址
  • $remote_user: 用于記錄遠程客戶端的用戶名稱
  • $time_local: 用于記錄訪問時間和時區
  • $request: 用于記錄請求的url以及請求方法
  • $status: 回應狀態碼
  • $body_bytes_sent: 給客戶端發送的檔案主體內容位元組數
  • $http_referer: 可以記錄用戶是從哪個鏈接訪問過來的
  • $http_user_agent: 用戶所使用的瀏覽器資訊
  • $http_x_forwarded_for: 可以記錄客戶端IP,通過代理服務器來記錄客戶端的ip地址
  • $ request_time: 指的是從接受用戶請求的第一個位元組到發送完回應資料的時間,即$request_time包括接收客戶端請求資料的時間、后端程式回應的時間、發送回應資料給客戶端的時間
  • $upstream_response_time: 用于接收來自上游服務器的回應的時間

2、常用分析命令

(1)相關概念

  • PV:PV(訪問量): 即Page View, 即頁面瀏覽量或點擊量,用戶每次重繪即被計算一次,

  • UV:UV(獨立訪客):即Unique Visitor,訪問您網站的一臺電腦客戶端為一個訪客,00:00-24:00內相同的客戶端只被計算一次,

(2)具體命令

1、根據訪問IP統計UV

awk '{print $1}' paycenteraccess.log | sort -n | uniq | wc -l

2、查詢訪問最頻繁的IP(前10)

awk '{print $1}' /var/log/nginx/access.log | sort -n |uniq -c | sort -rn | head -n 10

3、查看某一時間段的IP訪問量(1-8點)

awk '$4 >="[25/Mar/2020:01:00:00" && $4 <="[25/Mar/2020:08:00:00"' /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c| sort -nr |wc -l

4、查看訪問100次以上的IP

awk '{print $1}' /var/log/nginx/access.log | sort -n |uniq -c |awk '{if($1 >100) print $0}'|sort -rn

5、查看指定ip訪問過的url和訪問次數

grep "39.105.67.140" /var/log/nginx/access.log|awk '{print $7}' |sort |uniq -c |sort -n -k 1 -r

6、根據訪問URL統計PV

cat /var/log/nginx/access.log |awk '{print $7}' |wc -l

7、查詢訪問最頻繁的URL(前10)

awk '{print $7}' /var/log/nginx/access.log | sort |uniq -c | sort -rn | head -n 10

8、查看訪問最頻的URL([排除/api/appid])(前10)

grep -v '/api/appid' /var/log/nginx/access.log|awk '{print $7}' | sort |uniq -c | sort -rn | head -n 10

9、查看頁面訪問次數超過100次的頁面

cat /var/log/nginx/access.log | cut -d ' ' -f 7 | sort |uniq -c | awk '{if ($1 > 100) print $0}' | less

10、查看最近1000條記錄,訪問量最高的頁面

tail -1000 /var/log/nginx/access.log |awk '{print $7}'|sort|uniq -c|sort -nr|less

11、統計每小時的請求數,top10的時間點(精確到小時)

awk '{print $4}' /var/log/nginx/access.log |cut -c 14-15|sort|uniq -c|sort -nr|head -n 10

12、統計每分鐘的請求數,top10的時間點(精確到分鐘)

awk '{print $4}' /var/log/nginx/access.log |cut -c 14-18|sort|uniq -c|sort -nr|head -n 10

13、統計每秒的請求數,top10的時間點(精確到秒)

awk '{print $4}' /var/log/nginx/access.log |cut -c 14-21|sort|uniq -c|sort -nr|head -n 10

14、查找指定時間段的日志

awk '$4 >="[25/Mar/2020:01:00:00" && $4 <="[25/Mar/2020:08:00:00"' /var/log/nginx/access.log

15、列出傳輸時間超過 0.6 秒的url,顯示前10條

cat /var/log/nginx/access.log |awk '(substr($NF,2,5) > 0.6){print $4,$7,substr($NF,2,5)}' | awk -F '"' '{print $1,$2,$3}' |sort -k3 -rn | head -10

16、列出/api/appid請求時間超過0.6秒的時間點

cat /var/log/nginx/access.log |awk '(substr($NF,2,5) > 0.6 && $7~/\/api\/appid/){print $4,$7,substr($NF,2,5)}' | awk -F '"' '{print $1,$2,$3}' |sort -k3 -rn | head -10

17、獲取前10條最耗時的請求時間、url、耗時

cat /var/log/nginx/access.log |awk '{print $4,$7,substr($NF,2,5)}' | awk -F '"' '{print $1,$2,$3}' | sort -k3 -rn | head -10

3、公司監控nginx需要的指標

Nginx 處理請求的程序被詳細地記錄在 access.log 以及 error.log 檔案中

監控專案所屬性質指標
請求時長服務性質從發出請求到結束需要的時間$request_time 和 $upstream_response_time
服務存活性服務性質nginx是否存活
請求回傳錯誤服務性質服務器日志方式錯誤碼4xx和5xx
流量服務性質pv 和 流量
服務損耗服務性質連接數 打開檔案數 cpu使用率和系結cpu核心的使用率

(1)請求時長

自定義日志中添加上"$request_time" 和"$upstream_response_time"
這樣在后面顯示請求體和時間,根據自己請求的時長容忍度來實作程式層面的請求介面優化或者快取

(2)nginx是否存活

檢查nginx訪問 是否回傳值和自己的理想的資料回傳是否一致 或者狀態碼是否一致

(3)請求回傳錯誤

必須添加對諸如 500/502/504 等 5xx 服務類錯誤狀態碼的監控,它們告訴我們服務本身出現了問題,

  • 5xx 類錯誤每分鐘出現的頻率應該在個位數,太多的 5xx 應及時排查問題并解決;
  • 4xx 類錯誤,在協助解決一些非預期的權限錯誤、資源丟失或性能等問題上可以給予幫助,

例如:

connection refused 用戶請求超時用戶請求超時
connection timed outnginx與后端服務器連接超時
while connection upstreamnginx與后端服務器連接出現問題

(4)流量

可以適當的監控網路介面的流量

(5)服務損耗

location /nginx-status {
        stub_status on;
        access_log  off;
        allow      10.1.1.1/24;
        deny        all;
    }
  • 檔案打開數:lsof |grep nginx|wc -l
  • cpu損耗: 監控cpu的使用率即可
active connection當前正在處理的活躍連接數
reading正在讀取的客戶連接數
writing處理回應資料到客戶端的數量
waitingNginx等待下次請求的駐留的客戶連接數

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/294437.html

標籤:其他

上一篇:(保姆級步驟!)Vue專案打包部署到Linux服務器

下一篇:分布式微服務Spring Cloud框架搭建詳細流程

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more