008.OpenShift Metric應用

来源:https://www.cnblogs.com/itzgr/archive/2020/06/22/13175659.html
-Advertisement-
Play Games

一 METRICS子系統組件 1.1 metric架構介紹 OpenShift metric子系統支持捕獲和長期存儲OpenShift集群的性能度量,收集節點以及節點中運行的所有容器的指標。 metric子系統被由以下開源項目的容器組件構成: Heapster 從Kubernetes集群中的所有節點 ...


一 METRICS子系統組件

1.1 metric架構介紹

OpenShift metric子系統支持捕獲和長期存儲OpenShift集群的性能度量,收集節點以及節點中運行的所有容器的指標。 openshift metrics subsystem architecture_v1 metric子系統被由以下開源項目的容器組件構成:
  • Heapster
從Kubernetes集群中的所有節點收集指標,並將其轉發給存儲引擎進行長期存儲。OCP使用Hawkular作為Heapster的存儲引擎。 Heapster項目是由Kubernetes社區孵化的,目的是為第三方應用程式提供一種從Kubernetes集群捕獲性能數據的方法。
  • Hawkular Metrics
提供用於存儲和查詢時間序列數據的REST API。Hawkular Metrics組件是更大的Hawkular項目的一部分。Hawkular Metrics使用Cassandra作為其數據存儲。 Hawkular是作為RHQ項目(Red Hat JBoss Operations Network product)的繼承者創建的,是Red Hat CloudForms產品中間件管理功能的一個關鍵部分。
  • Hawkular Agent
從應用程式收集自定義性能指標,並將其轉發到Hawkular Metrics進行存儲。應用程式為Hawkular agent提供度量標準。 Hawkular OpenShift Agent (HOSA)目前是一個技術預覽功能,預設情況下沒有安裝,Red Hat不支持技術預覽功能,也不建議將其用於生產。
  • Cassandra
將時間序列數據存儲在非關係分散式資料庫中。 OpenShift Metrics子系統獨立於其他OpenShift組件工作。OpenShift只有三個部分需要metrics子系統來提供一些可選特性:
  • web控制台調用Hawkular Metrics API來獲取數據,以呈現項目中pod的性能圖形。如果沒有部署度量子系統,則不顯示圖表。
註意,這些調用是從用戶web瀏覽器發出的,而不是從OpenShift主節點發出的。
  • oc adm top命令使用Heapster API來獲取關於集群中所有pod和節點的當前狀態的數據。
  • Kubernetes的autoscaler控制器調用Heapster API來從部署中獲取關於所有pod當前狀態的數據,以便決定如何伸縮部署控制器。
OCP並不強制一定部署完整的度量子系統,如果已經有一個監視系統,並且希望使用它來管理OpenShift集群,那麼可以選擇只部署Heapster組件,並將度量的長期存儲委托給外部監視系統。 如果現有的監視系統只提供警報和健康功能,那麼監視系統可以使用Hawkular API捕獲指標來生成警報。 Heapster收集節點及其容器的指標,然後聚合pod、namespace和整個集群的指標。 Heapster為一個節點收集的指標包括: working set:節點中運行的所有進程有效使用的記憶體,以bytes為單位度量。 CPU usage:節點中運行的所有進程使用的CPU數量,以millicores單位度量,十個millicores相當於一個CPU繁忙時間的1%。 Heapster還支持對記憶體中保留的指標進行簡單查詢,這些查詢允許獲取在特定時間範圍內收集和聚合的度量。

1.2 訪問Heapster和Hawkular

OpenShift用戶需要區分聲明的資源請求(和限制)與實際的資源使用情況。pod聲明的資源請求用於調度,聲明的資源請求從節點容量中減去,其差值是節點的剩餘可用容量。 節點的可用容量不反映在節點內運行的容器和其他應用程式使用的實際記憶體和CPU。 oc describe node命令,在OCP 3.9中,只顯示與pods聲明的資源請求相關的信息。如果pod沒有聲明任何資源請求,則不會考慮pod的實際資源使用情況,節點的可用容量可能看起來比實際容量大。 web控制台顯示的信息與oc describe node命令相同,還可以顯示Hawkular Metrics的實際資源使用情況。但是,OCP 3.9的web控制台只顯示pod和項目的指標,web控制台不顯示節點指標。 要獲得節點的實際資源使用情況,並確定節點是否接近其全部硬體或虛擬容量,系統管理員需要使用oc adm top命令。如果需要更詳細的信息,系統管理員可以使用標準的Linux命令,比如vmstat和ps。 OpenShift不向集群外部公開Heapster組件。外部應用程式需要訪問Heapster必須使用OpenShift master API代理。master API代理確保對內部組件API的訪問遵從OpenShift集群身份驗證和訪問控制策略。 將Hawkular暴露給外部訪問涉及到一些安全方面的考慮。如果系統管理員認為使用Heapster和Hawkular api過於複雜,那麼Origin和Kubernetes開源項目的上游社區還提供了與Nagios和Zabbix等流行的開源監控工具的集成,或者當前最火熱的Prometheus。

1.3 Metrics subsystem大小

OpenShift度量子系統的每個組件都使用自己的dc進行部署,並且獨立於其他組件進行伸縮。它們可以計劃在OpenShift集群的任何地方運行,但是建議為生產環境中的metrics子系統pod特定保留一些node0。 Cassandra和Hawkular是Java應用程式。Hawkular運行在JBoss EAP 7應用伺服器中。Hawkular和Cassandra都利用了大規模的優勢,預設值是為中小型OpenShift集群設置的大小。測試環境可能需要更改預設值,以減少記憶體和CPU資源。 Heapster和Hawkular部署使用標準的OpenShift工具部署size、比例和調度。少量Heapster和Hawkular pods可以管理數百個OpenShift節點和數千個項目的指標。 可以使用oc命令配置Heapster和Hawkular部署。例如增加每個pod請求的副本數量或資源數量,但是推薦的配置參數的方法是修改為安裝Metrics的Ansible劇本中的變數。 Cassandra不能使用標準oc命令進行伸縮和配置,因為Cassandra(大多數資料庫都是這樣)不是無狀態雲應用程式。Cassandra有嚴格的存儲要求,每個Cassandra pod都有不同的部署配置。必須使用Metrics安裝playbook來伸縮和配置Cassandra部署。

1.4 CASSANDRA配置持久存儲

Cassandra可以部署為單個pod,使用一個持久捲。但至少需要三個Cassandra pod才能為度量子系統實現高可用性(HA)。每個pod都需要一個獨占捲:Cassandra使用“無共用”存儲架構。 儘管Cassandra可以使用enptyDir存儲進行部署,但這意味著存在永久數據丟失的風險。通常生產環境不推薦使用臨時存儲(即emptyDir捲類型)。 每個Cassandra捲使用的存儲量不僅取決於預期的集群大小(節點和pod的數量),還取決於度量的時間序列的粒度和持續時間。 Metrics安裝劇本支持使用靜態供應的持久捲或動態捲。無論選擇哪種方法,playbook都基於首碼創建持久捲聲明,首碼後面附加一個序列號。對於靜態供應的持久捲,請確保使用相同的命名約定。

二 METRICS子系統

2.1 部署metrics子系統

OpenShift Metrics子系統由Ansible playbook部署,可以選擇使用基本playbook或單獨用於Metrics的playbook進行部署。 大多數Metrics子系統配置是使用用於高級安裝方法的Inventory文件中的Ansible變數執行的。儘管可以使用-e選項覆蓋或自定義某些變數的值,更建議在Inventory中定義metrics變數。如果需要更改度量Metrics配置,可更新Inventory中的變數並重新運行安裝劇本。 metrics子系統在許多生產環境中不需要認定配置,可直接通過運行metrics安裝劇本使用預設設置安裝。 示例:Ansible結合主配置文件和Metrics子系統playbook安裝。 Ansible主配置文件如下:
  1 [defaults]
  2 remote_user = student
  3 inventory = ./inventory
  4 log_path = ./ansible.log
  5 [privilege_escalation]
  6 become = yes
  7 become_user = root
  8 become_method = sudo
  9 Metrics子系統劇本:
 10 # ansible-playbook \
 11 /usr/share/ansible/openshift-ansible/playbooks
/openshift-metrics/config.yml \ -e openshift_metrics_install_metrics=True 提示:OpenShift metrics劇本由openshift-ansibl -playbooks包提供,該包是作為atom-openshift-utils包的依賴項安裝的。 openshift_metrics_install_metrics Ansible變數配置劇本用來部署metrics子系統,playbook為metrics子系統創建dc、service和其他支撐metrics的Kubernetes資源,還可以在用於部署集群的Inventory文件中定義該變數。 metrics子系統安裝playbook會在openshift-infra項目中創建所需Kubernetes資源。安裝playbook不配置任何節點選擇器來限制pod所運行的node。

2.2 卸載metrics子系統

卸載OpenShift metrics子系統的一種方法是手動刪除OpenShift-infra項目中的所有Kubernetes資源。通常需要多個oc命令,且容易出錯,因為其他OpenShift子系統也被部署到這個項目。 卸載metrics子系統的推薦方法是運行安裝劇本,但是將openshift_metrics_install_metrics Ansible變數設置為False,如下麵的示例所示,-e選項覆蓋庫存文件中定義的值。
  1  # ansible-playbook \
  2 /usr/share/ansible/openshift-ansible/playbooks/openshift-metrics/config.yml \
  3 -e openshift_metrics_install_metrics=False

2.3 驗證metrics子系統

OpenShift metrics子系統playbook完成後,應該創建所有Cassandra、Hawkular和Heapster pod,並可能需要一些時間進行初始化。可能由於Cassandra pod初始化時間過長,會重新啟動Hawkular和Heapster pod。 除非另外配置,否則安裝程式劇本應該為每個組件創建一個dc,其中包含一個pod,並且openshift-infra項目的oc get pod能顯示相應pod。

2.4 部署metrics子系統常見錯誤

造成部署錯誤的常見原因通常有:
  • image缺失;
  • metrics所需資源過高,節點無法滿足;
  • Cassandra pod所需的持久捲無法滿足。

2.5 其他配置

在所有pod準備好並運行之後,需要執行一個特定配置以便於和web對接。如果跳過此步驟,OpenShift web控制台將無法顯示項目的metrics圖形,儘管底層metrics子系統正在正常工作。 OpenShift web控制台是一個JavaScript應用程式,它直接訪問Hawkular API,而不需要經過OpenShift master service。 但由於內部使用TLS訪問API,預設情況下,TLS證書不是由受信任的認證機構簽署的。因此web瀏覽器拒絕連接到Hawkular API endpoint。 在OpenShift安裝之後,web控制台本身也會出現類似證書不信任的問題。與metrics同樣的方式解決,配置瀏覽器接受TLS證書。為此,在web瀏覽器中打開Hawkular API歡迎頁面,並接受不受信任的TLS證書。 https://hawkular-metrics.<master-wildcard-domain> 主通配符域DNS尾碼應該與OpenShift主服務中配置的尾碼相同,並用作新路由的預設域。 playbook從Ansible hosts文件中獲取主通配符域值,由openshift_master_default_subdomain變數定義。如果更改了OpenShift master service配置,則它們將不匹配。在本例中,為metrics劇本中的openshift_metrics_hawkular_hostname變數提供新值。2.6

2.6 metrics涉及變數

OCP安裝和配置文檔提供了metrics安裝劇本使用的所有可能變數的列表,它們控制著各種配置參數。常見有: 每個組件的pod比例:
  • openshift_metrics_cassandra_replicas
  • openshift_metrics_hawkular_replicas
每個組件對pod的資源請求和限制:
  • openshift_metrics_cassandra_requests_memory
  • openshift_metrics_cassandra_limits_memory
  • openshift_metrics_cassandra_requests_cpu
  • openshift_metrics_cassandra_limits_cpu
對於Hawkular和Heapster,有類似配置:
  • openshift_metrics_hawkular_requests_memory
  • openshift_metrics_heapster_requests_memory
用於duration和resolution參數:
  • openshift_metrics_duration
  • openshift_metrics_resolution
Cassandra pods的持久捲聲明屬性:
  • openshift_metrics_cassandra_storage_type
  • openshift_metrics_cassandra_pvc_prefix
  • openshift_metrics_cassandra_pvc_size
用於pull metrics子系統容器image的倉庫:
  • openshift_metrics_image_prefix
  • openshift_metrics_image_version
其他配置參考:
  • openshift_metrics_heapster_standalone
  • openshift_metrics_hawkular_hostname
示例1:使用自定義配置安裝metrics子系統,用於覆蓋Inventory中定義的Cassandra配置。
  1 [OSEv3:vars]
  2 ...output omitted...
  3 openshift_metrics_cassandra_replicas=2
  4 openshift_metrics_cassandra_requests_memory=2Gi
  5 openshift_metrics_cassandra_pvc_size=50Gi
示例2:使用自定義配置,用於覆蓋Cassandra定義的屬性。
  1 # ansible-playbook \
  2 /usr/share/ansible/openshift-ansible/playbooks/openshift-metrics/config.yml \
  3 -e openshift_metrics_cassandra_replicas=3 \
  4 -e openshift_metrics_cassandra_requests_memory=4Gi \
  5 -e openshift_metrics_cassandra_pvc_size=25Gi
提示:大多數配置參數都可以使用OpenShift oc命令進行更改,但是推薦的方法是使用更新Inventory中變數值運行metrics安裝劇本進行修改。

三 安裝metrics子系統

3.1 前置準備

準備完整的OpenShift集群,參考《003.OpenShift網路》2.1。

3.2 本練習準備

  1 [student@workstation ~]$ lab install-metrics setup

3.3 驗證image

  1 [student@workstation ~]$ docker-registry-cli registry.lab.example.com \
  2 search metrics-cassandra ssl
  3 [student@workstation ~]$ docker-registry-cli registry.lab.example.com \
  4 search ose-recycler ssl

3.4 驗證NFS

  1 [root@services ~]# ll -aZ /exports/metrics/
  2 drwxrwxrwx. nfsnobody nfsnobody unconfined_u:object_r:default_t:s0 .
  3 drwxr-xr-x. root      root      unconfined_u:object_r:default_t:s0 ..
  4 [root@services ~]# cat /etc/exports.d/openshift-ansible.exports
clipboard

3.5 創建PV

  1 [student@workstation ~]$ cat /home/student/DO280/labs/install-metrics/metrics-pv.yml
  2 apiVersion: v1
  3 kind: PersistentVolume
  4 metadata:
  5   name: metrics
  6 spec:
  7   capacity:
  8     storage: 5Gi			#定義capacity.storage容量為5G
  9   accessModes:
 10   - ReadWriteOnce			#定義訪問模式
 11   nfs:
 12     path: /exports/metrics		#定義nfs.path
 13     server: services.lab.example.com	#定義nfs.services
 14   persistentVolumeReclaimPolicy: Recycl	#定義回收策略
  1 [student@workstation ~]$ oc login -u admin -p redhat https://master.lab.example.com
  2 [student@workstation ~]$ oc create -f /home/student/DO280/labs/install-metrics/metrics-pv.yml
  3 [student@workstation ~]$ oc get pv
  4 NAME        CAPACITY    ACCESS MODES    RECLAIM POLICY    STATUS    CLAIM    STORAGECLASS    REASON    AGE
  5 metrics     Gi          RWO             Recycle           Available                                    14s

3.6 規劃安裝變數

openshift_metrics_image_prefix:指向服務VM上的私有倉庫,並添加openshift3/ose-作為映像名稱首碼。 openshift_metrics_image_version:要使用的容器image標記,私有倉庫為image添加一個v3.9標記。 openshift_metrics_heapster_requests_memory:本環境配置300mb記憶體。 openshift_metrics_hawkular_requests_memory:本環境配置750mb記憶體。 openshift_metrics_cassandra_requests_memory:本環境配置750mb記憶體。 openshift_metrics_cassandra_storage_type:使用pv選擇一個持久捲作為存儲類型。 openshift_metrics_cassandra_pvc_size:本環境配置5gib容量。 openshift_metrics_cassandra_pvc_prefix:使用metrics作為pvc名稱的首碼. 提示:生產環境中建議根據實際規划進行配置,可適當調大配置規格。

3.7 配置安裝變數

  1 [student@workstation ~]$ cd /home/student/DO280/labs/install-metrics
  2 [student@workstation install-metrics]$ cat metrics-vars.txt
  3 # Metrics Variables
  4 # Append the variables to the [OSEv3:vars] group
  5 openshift_metrics_install_metrics=True
  6 openshift_metrics_image_prefix=registry.lab.example.com/openshift3/ose-
  7 openshift_metrics_image_version=v3.9
  8 openshift_metrics_heapster_requests_memory=300M
  9 openshift_metrics_hawkular_requests_memory=750M
 10 openshift_metrics_cassandra_requests_memory=750M
 11 openshift_metrics_cassandra_storage_type=pv
 12 openshift_metrics_cassandra_pvc_size=5Gi
 13 openshift_metrics_cassandra_pvc_prefix=metrics
 14 [student@workstation install-metrics]$ cat metrics-vars.txt >> inventory
 15 [student@workstation install-metrics]$ lab install-metrics grade		#本環境使用腳本判斷配置

3.8 執行安裝

  1 [student@workstation install-metrics]$ ansible-playbook /usr/share/ansible/openshift-ansible/playbooks/openshift-metrics/config.yml
clipboard

3.9 驗證安裝

  1 [student@workstation install-metrics]$ oc get pvc -n openshift-infra		#驗證持久捲是否成功掛載
  2 NAME        STATUS    VOLUME    CAPACITY   ACCESS MODES   STORAGECLASS   AGE
  3 metrics-1   Bound     metrics   5Gi        RWO                           5m
  4 [student@workstation install-metrics]$ oc get pod -n openshift-infra		#驗證metric相關pod
  5 NAME                         READY     STATUS    RESTARTS   AGE
  6 hawkular-cassandra-1-6k7fr   1/1       Running   0          5m
  7 hawkular-metrics-z9v85       1/1       Running   0          5m
  8 heapster-mbdcl               1/1       Running   0          5m
  9 [student@workstation install-metrics]$ oc get route -n openshift-infra		#查看metric route地址
 10 NAME                HOST/PORT                                PATH    SERVICES            PORT    TERMINATION    WILDCARD
 11 hawkular-metrics   hawkular-metrics.apps.lab.example.com             hawkular-metrics    <all>   reencrypt
 12 None
瀏覽器訪問: https://hawkular-metrics.apps.lab.example.com clipboard 提示:瀏覽器信任SSL證書。

3.10 部署測試應用

  1 [student@workstation ~]$ oc login -u developer -p redhat \
  2 https://master.lab.example.com				#登錄OpenShift
  3 [student@workstation ~]$ oc new-project load		#創建project
  4 [student@workstation ~]$ oc new-app --name=hello \
  5 --docker-image=registry.lab.example.com/openshift/hello-openshift	#部署應用
  6 [student@workstation ~]$ oc scale --replicas=9 dc/hello			#擴展應用
  7 [student@workstation ~]$ oc get pod -o wide				#查看pod
  8 NAME            READY     STATUS    RESTARTS   AGE       IP            NODE
  9 hello-1-4nvfd   1/1       Running   0          1m        10.129.0.40   node2.lab.example.com
 10 hello-1-c9f8t   1/1       Running   0          1m        10.128.0.22   node1.lab.example.com
 11 hello-1-dfczg   1/1       Running   0          1m        10.128.0.23   node1.lab.example.com
 12 hello-1-dvdx2   1/1       Running   0          1m        10.129.0.36   node2.lab.example.com
 13 hello-1-f6rsl   1/1       Running   0          1m        10.128.0.20   node1.lab.example.com
 14 hello-1-m2hb4   1/1       Running   0          1m        10.129.0.39   node2.lab.example.com
 15 hello-1-r64z9   1/1       Running   0          1m        10.128.0.21   node1.lab.example.com
 16 hello-1-tf4l5   1/1       Running   0          1m        10.129.0.37   node2.lab.example.com
 17 hello-1-wl6zx   1/1       Running   0          1m        10.129.0.38   node2.lab.example.com
 18 [student@workstation ~]$ oc expose svc hello

3.11 壓力測試

  1 [student@workstation ~]$ sudo yum -y install httpd-tools
  2 [student@workstation ~]$ ab -n 300000 -c 20 http://hello-load.apps.lab.example.com/

3.12 查看資源使用情況

  1 [student@workstation ~]$ oc login -u admin -p redhat
  2 [student@workstation ~]$ oc adm top node \
  3 --heapster-namespace=openshift-infra \
  4 --heapster-scheme=https
  5 NAME                     CPU(cores)   CPU%      MEMORY(bytes)   MEMORY%
  6 master.lab.example.com   273m         13%       1271Mi          73%
  7 node1.lab.example.com    1685m        84%       3130Mi          40%
  8 node2.lab.example.com    1037m        51%       477Mi           6%
提示:保持3.11的壓測程式,重開終端進行查看。

3.13 獲取指標

  1 [student@workstation ~]$ cat ~/DO280/labs/install-metrics/node-metrics.sh	#使用此腳本獲取指標
clipboard
  1 [student@workstation ~]$ ./DO280/labs/install-metrics/node-metrics.sh
clipboard 瀏覽器訪問:https://master.lab.example.com 查看相關性能監控。 clipboard
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 徹底解決Windows不能在本地電腦啟動Windows Firewall問題 問題描述 有些時候我們需要關閉Windows防火牆,但是控制面板中並沒有相應按鈕: Win+R後輸入services.msc,打開服務,發現防火牆也不能手動啟動,提示Windows不能在本地電腦啟動Windows Fi ...
  • 一 資源限制1.1 pod資源限制pod可以包括資源請求和資源限制:資源請求用於調度,並控制pod不能在計算資源少於指定數量的情況下運行。調度程式試圖找到一個具有足夠計算資源的節點來滿足pod請求。資源限制用於防止pod耗盡節點的所有計算資源,基於pod的節點配置Linux內核cgroups特性,以 ...
  • 通配符 用於匹配文件名,完全匹配 通配符 作用 ? 匹配一個任意字元 * 匹配0個或任意多個任意字元,也就是可以匹配任何內容 [] 匹配中括弧中任意一個字元。例如,[abc]代表一定匹配一個字元,或者是a,或者是b,或者是c [-] 匹配中括弧中任意一個字元,-代表一個範圍。例如,[a-z]代表匹配 ...
  • 大家好,我是良許。 隨著電腦的使用,系統里將產生很多垃圾,最典型的就是同一份文件被保存到了不同的位置,這樣導致的結果就是磁碟空間被大量占用,系統運行越來越慢。 所以如果你的電腦空間告急的話,可以試著去刪除這樣的文件,釋放一些空間。在 Linux 下,我們可以通過識別文件的 inode 值來找出系統中 ...
  • 初始化 首先講下UART的初始化 1.聲明UART的初始化結構體,並賦值 2.MX生成的代碼會調用HAL_UART_MspInit();來初始化UART,當然這個代碼也是自動生成,不過用戶可以在這個函數裡面添加自己想要添加的操作,時麵包括了NVIC_Configuration,DMA_Configu ...
  • 本文主要介紹一下如何在Docker中發佈.NET Core 3.x 並對整個過程所遇到的問題加以記錄和分析. 環境、工具、準備工作 伺服器: VM中安裝CentOS, 內核版本3.10.x; 客戶端: Windows 10; IDE: VS2019 SFTP客戶端: FileZilla; 用來進行文 ...
  • 參考自:https://www.cnblogs.com/barfoo/p/4585392.html ls file.img | sed "s:^:`pwd`/:" 保持更新,轉載請註明出處;更多內容請關註cnblogs.com/xuyaowen; https://www.cnblogs.com/ba ...
  • SRAM存儲器是一款不需要刷新電路即能保存它內部存儲數據的靜態隨機存儲器。而DRAM每隔一段時間,要刷新充電一次,否則就會出現內部數據會消失,因此SRAM存儲器具有較高的性能。SRAM雖然只是存儲器,但是使用的方法不一樣,晶元的面積是不一樣的。基於SRAM有兩個事實: (1)1R1W的SRAM面積要 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...