1概述
1.1目標
主要的目標是在鯤鵬服務器(aarch64)的機器上基于Java/Python等相關技術棧,完成微服務、監控、大數據、容器、IOT、CI/CD等方案適配實踐,積累相關經驗。
主要的應用方案適配如下圖所示:
1.2適配思路
遷移適配策略選擇:
步驟包括:
1)在鯤鵬機器上安裝合適的操作系統,如CentOS、Ubuntu等;
2)安裝應用編譯運行環境、中間件、數據庫等,并解決安裝過程中出現的問題,做適當記錄;
3)應用的部署、運行,并解決這一過程中出現的問題,做適當記錄;
4)總結并將記錄歸檔;
軟硬件技術遷移適配整體策略:
1.3方案中的適配組件列表
編號 | 名字 | 版本 | 安裝類型 | 操作系統(鯤鵬) |
1 | InfluxDB | 1.7.6 | Docker | CentOS7.6 |
2 | Mysql | 5.6/5.7 | Package (tar) | CentOS7.7 |
3 | Mariadb | 5.5.56 | YUM | CentOS7.5 |
4 | Nginx | 1.16.0 | Source | CentOS7.5 |
5 | Docker | ce 19.03.8 | Package | CentOS7.5 |
6 | Docker-Compose | 1.22.0 | Source | CentOS7.7 |
7 | K8S集群(master): Kubelet Kubectl Kubeadm kubernetes-cni |
docker-ce 18.06.3-ce kubelet=1.15.1-00 kubeadm=1.15.1-00 kubectl=1.15.1-00 kubernetes-cni |
apt-get install | Ubuntu 18.04.4 LTS |
8 | K8S集群(master) – 鏡像 | kube-apiserver-arm64:v1.15.1 kube-controller-manager-arm64:v1.15.1 kube-scheduler-arm64:v1.15.1 kube-proxy-arm64:v1.15.1 pause-arm64:3.1 etcd-arm64:3.3.10 coredns:1.3.1 |
Docker pull | Ubuntu 18.04.4 LTS |
9 | Elasticsearch | 7.4.2 | Package | CentOS7.5 |
10 | Filebeat | 7.4.2 | Package | CentOS7.5 |
11 | Kibana | 7.4.2 | Package | CentOS7.5 |
12 | Logstash | 7.4.2 | Package | CentOS7.5 |
13 | Go | 1.13.9.linux-arm64 | Package | CentOS7.5 |
14 | Openjdk | 1.8.0-222-ea-b03 | Package | CentOS7.5 |
15 | Nodejs | 10.16.0-linux-arm64 | Package | CentOS7.5 |
16 | Php-fpm | 7.2.20 | Source | CentOS7.5 |
17 | Python | 3.7.3 | Source | CentOS7.7 |
18 | yarn | 1.15.0 | Package | CentOS7.7 |
19 | Gitlab | 1.12.x | Docker | CentOS7.7 |
20 | Jekins | 2.x | Docker | CentOS7.7 |
21 | Tomcat for Jenkins | 9.x | Docker | CentOS7.7 |
22 | maven | 3.2 | Package | CentOS7.7 |
23 | Grafana | 6.7.2 | Rpm | CentOS7.5 |
24 | Zabbix | 4.0.0 | Source | CentOS7.5 |
25 | Prometheus | 2.16.0.linux-arm64 | Package | CentOS7.7 |
26 | Node_exporter | 0.18.1.linux-arm64 | Package | CentOS7.7 |
27 | Ambari | 2.7.3 | Package | CentOS7.7 |
28 | HDP | 3.1 | Package | CentOS7.7 |
29 | Spark | 2.3.1.0 | Package | CentOS7.7 |
30 | Anaconda | 4.5.12 | Package | CentOS7.7 |
31 | Kettle | 9.0 | Package | CentOS7.7 |
32 | Rancher(server/client) | 2.4.3-rc2 | Package | Ubuntu 18.04.4 LTS |
33 | Docker portainer | 1.23.2 | Docker | CentOS7.5 |
注:后續有適配軟件安裝,將持續補充該表
2 基礎組件適配
2.1 編譯運行環境適配
2.1.1 java環境
JDK(Java Development Kit)是 Java 開發者進行 Java 開發所必須的軟件包,包含 JRE(Java Runtime Environment)和編譯、調測工具。openEuler在OpenJDK 的基礎上進行了 GC 優化、并發穩定性增強、安全性增強等,提高了 Java 應用程序在 ARM 上的性能和穩定性。
有些操作系統中比如Centos7里可能自帶JRE環境,通過java -version可以看到版本號,但沒有編譯工具,需要安裝JDK但沒必要做JRE的卸載,只需做環境變量設置即可,相關步驟如下:
1)將tar包(jdk-8u232-linux-aarch64.tar.gz)拷貝至想要安裝的目錄;
2)解壓縮軟件包;
3)設置JAVA_HOME;
4)設置環境變量并使之生效;
5)檢查版本:java -version
2.1.2 python環境
Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。Python由Guido van Rossum于1989年底發明,第一個公開發行版發行于1991年。像Perl語言一樣, Python 源代碼同樣遵循 GPL(GNU General Public License)協議。
有些操作系統可能自帶Python,比如CentOS7會自帶Python 2.7.5。如果需要Python 3.7.X則需自行安裝,相關步驟如下:
1)下載tar包(Python-3.7.3.tgz)解壓安裝包;
2)安裝依賴和C編譯器;
3)編譯安裝并創建軟連接(可選);
4)檢查版本:python -V
2.1.3 go環境
Go(又稱 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 開發的一種靜態強類型、編譯型語言。Go 語言語法與 C 相近,但功能上有:內存安全,GC(垃圾回收),結構形態及 CSP-style 并發計算。
安裝步驟如下:
將安裝文件包(go1.13.9.linux-arm64.tar.gz)下載至目錄指定目錄;
解壓縮安裝文件包;
創建gopath目錄;
設置go的環境變量并使之生效;
5, 檢查版本:go version
2.1.4 NodeJS環境
簡單的說 Node.js 就是運行在服務端的 JavaScript。
Node.js 是一個基于Chrome JavaScript 運行時建立的一個平臺。
Node.js是一個事件驅動I/O服務端JavaScript環境,基于Google的V8引擎,V8引擎執行Javascript的速度非???,性能非常好。
而npm是Node.js的包管理工具,用來安裝各種Node.js的擴展程序。
安裝步驟如下:
1)獲取軟件包(node-v10.16.0-linux-arm64.tar.xz);
2)解壓軟件包;
3)為node和npm建立軟鏈接,方便在任意目錄下執行該命令,并設置環境變量;
4)檢測版本號:node -v, npm -v
2.2數據庫適配
編號 | 名字 | 版本 | 安裝類型 | 操作系統(鯤鵬) |
1 | InfluxDB | 1.7.6 | Docker | CentOS7.6 |
2 | InfluxDB | 2.x | Package(tar) | CentOS7.7 |
3 | Mysql | 5.6/5.7 | Package (tar) | CentOS7.7 |
4 | Mariadb | 5.5.56 | YUM | CentOS7.5 |
2.3中間件適配
編號 | 名字 | 版本 | 安裝類型 | 操作系統(鯤鵬) |
1 | Nginx | 1.16.0 | Source | CentOS7.5 |
2 | Elasticsearch | 7.4.2 | Package | CentOS7.5 |
3 | Filebeat | 7.4.2 | Package | CentOS7.5 |
4 | Kibana | 7.4.2 | Package | CentOS7.5 |
5 | Logstash | 7.4.2 | Package | CentOS7.5 |
6 | Php-fpm | 7.2.20 | Source | CentOS7.5 |
7 | Tomcat for Jenkins | 9.x | Docker | CentOS7.7 |
2.4容器適配
編號 | 名字 | 版本 | 安裝類型 | 操作系統(鯤鵬) |
1 | Docker | ce 19.03.8 | Package | CentOS7.5 |
2 | Docker-Compose | 1.22.0 | Source | CentOS7.7 |
3 | Docker portainer | 1.23.2 | Docker | CentOS7.5 |
4 | K8S集群(master): Kubelet Kubectl Kubeadm kubernetes-cni |
docker-ce 18.06.3-ce kubelet=1.15.1-00 kubeadm=1.15.1-00 kubectl=1.15.1-00 kubernetes-cni |
apt-get install | Ubuntu 18.04.4 LTS |
5 | K8S集群(master) – 鏡像 | kube-apiserver-arm64:v1.15.1 kube-controller-manager-arm64:v1.15.1 kube-scheduler-arm64:v1.15.1 kube-proxy-arm64:v1.15.1 pause-arm64:3.1 etcd-arm64:3.3.10 coredns:1.3.1 |
Docker pull | Ubuntu 18.04.4 LTS |
6 | Rancher(server/client) | 2.4.3-rc2 | Package | Ubuntu 18.04.4 LTS |
2.4集成工具適配
編號 | 名字 | 版本 | 安裝類型 | 操作系統(鯤鵬) |
1 | Gitlab | 1.12.x | Docker | CentOS7.7 |
2 | Jekins | 2.x | Docker | CentOS7.7 |
3 | Tomcat for Jenkins | 9.x | Docker | CentOS7.7 |
4 | maven | 3.2 | Package | CentOS7.7 |
2.5其它適配
編號 | 名字 | 版本 | 安裝類型 | 操作系統(鯤鵬) |
1 | yarn | 1.15.0 | Package | CentOS7.7 |
2 | Grafana | 6.7.2 | Rpm | CentOS7.5 |
3 | Zabbix | 4.0.0 | Source | CentOS7.5 |
4 | Prometheus | 2.16.0.linux-arm64 | Package | CentOS7.7 |
5 | Node_exporter | 0.18.1.linux-arm64 | Package | CentOS7.7 |
6 | Ambari | 2.7.3 | Package | CentOS7.7 |
7 | HDP | 3.1 | Package | CentOS7.7 |
8 | Spark | 2.3.1.0 | Package | CentOS7.7 |
9 | Anaconda | 4.5.12 | Package | CentOS7.7 |
10 | Kettle | 9.0 | Package | CentOS7.7 |
3適配方案
3.1 微服務應用方案適配
3.1.1 sop應用環境/場景
應用名 | 應用角色 | 應用組件 | 組件角色 | 組件版本 |
sop-eureka | 注冊中心 | spring-boot-core | 框架載體 | spring-boot-2.x spring-cloud-2.x |
spring-cloud-eureka-server | 注冊中心服務端 | |||
spring-boot-admin-client | 監控客戶端 | |||
sop-gateway | 應用網關 | spring-boot-core | 框架載體 | |
spring-cloud-eureka-client | 注冊中心客戶端 | |||
spring-boot-admin-client | 監控客戶端 | |||
spring-cloud-feign | REST集群服務調用 | |||
spring-cloud-zuul | 集群網關 | |||
spring-cloud-ribbon | 集群LB | |||
spring-cloud-hystrix | 集群斷路器 | |||
sop-admin | 應用后臺 | spring-boot-core | 框架載體 | |
spring-cloud-eureka-client | 注冊中心客戶端 | |||
spring-boot-admin-client | 監控客戶端 | |||
spring-cloud-feign | REST集群服務調用 | |||
spring-cloud-ribbon | 集群LB | |||
sop-story | service-A | spring-boot-core | 框架載體 | |
spring-cloud-eureka-client | 注冊中心客戶端 | |||
spring-boot-admin-client | 監控客戶端 | |||
spring-cloud-feign | REST集群服務調用 | |||
spring-cloud-ribbon | 集群LB | |||
sop-website | service-B | spring-boot-core | 框架載體 | |
spring-cloud-eureka-client | 注冊中心客戶端 | |||
spring-boot-admin-client | 監控客戶端 | |||
spring-cloud-feign | REST集群服務調用 | |||
spring-cloud-ribbon | 集群LB | |||
admin-server | 系統監控 | spring-boot-core | 框架載體 | |
spring-cloud-eureka-client | 注冊中心客戶端 | |||
spring-boot-admin-server | 監控服務端 | |||
spring-cloud-feign | REST集群服務調用 | |||
spring-cloud-ribbon | 集群LB |
SOP是一個開放平臺的解決方案樣例項目,它基于Spring Boot與Spring Cloud實現,目的是為了讓用戶快速搭建自己的開放平臺,它提供了兩種接口調用方式,分別是:支付寶開放平臺的調用方式和淘寶開放平臺的調用方式。 該項目只需要通過簡單的配置,就可以讓現有的項目集成進入開放平臺環境,同時也封裝了開放平臺大部分功能包括:簽名驗證、統一異常處理、統一返回內容 、業務參數驗證(JSR-303)、秘鑰管理等。
SOP的架構松耦合,業務代碼實現在各自微服務上,SOP不參與業務實現,這也是Spring Cloud微服務體系帶來的好處,同時它的接入方式也十分簡單,與老項目不沖突,老項目注冊到注冊中心,然后在對應方法上加上注解即可。
主要服務于以下的需求/用戶/場景:
1、有現成的項目,想改造成開放平臺供他人調用;
2、有現成的項目,想暴露其中幾個接口并通過開放平臺供他人調用;
3、想搭一個開放平臺新項目,并結合微服務的方式去維護;
4、對開放平臺感興趣的朋友。
3.1.2 sop應用結構
3.1.3 sop部署
組件 | 說明 |
sop-common | 公共模塊,封裝常用功能,包含簽名校驗、錯誤處理、限流等功能 |
sop-gateway | 網關,統一訪問入口 |
sop-example | 微服務示例 |
sop-website | 開放平臺對應網站,提供文檔API、沙箱測試等內容 |
sop-auth | 應用授權服務 |
sop-admin | 后臺管理 |
sop-sdk | 基礎sdk |
sop-test | 接口調用測試用例 |
3.1.4 sop運行
3.1.5 sop性能對比測試
// TODO
3.2 監控應用方案適配
為什么要監控?簡單的說主要有以下3點:
1)業務安全性的保障;
2)系統的保障;
3)產品持續性的運行;
對于監控的分類,主要分為硬件、系統、程序的監控,如下所示:
3.2.1 Zabbix + Grafana應用環境
為什么要選擇Zabbix呢?
1)純命令監控比較局限性;
2)可及時發現故障,并在故障恢復的第一時間得到通知;
3)靈活運用,包括Zabbix的閾值定義,自動發現,API接口,觸發動作等功能;
Zabbix是一個基于WEB界面的提供分布式系統監視以及網絡監視功能的企業級的開源解決方案。
Zabbix能監視各種網絡參數,保證服務器系統的安全運行;并提供靈活的通知機制以讓系統管理員快速定位/解決存在的各種問題。
Zabbix由2部分構成,Zabbix server與可選組件Zabbix agent。
Zabbix server可以通過SNMP,Zabbix agent,ping,端口監視等方法提供對遠程服務器/網絡狀態的監視,數據收集等功能,它可以運行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平臺上
Zabbix的工作組件及告警流程如下圖所示:
1)數據采集:Zabbix 通過 SNMP、Agent、ICMP、SSH、IPMI 等對系統進行數據采集。
2)數據存儲: Zabbix存儲在MySQL上,也可以存儲在其他數據庫服務。
3)數據分析:當我們事后需要復盤分析故障時,zabbix能給我們提供圖形以及時間等相關信息,方面我們確定故障所在。
4)數據展示:web界面展示、(移動APP、java_php開發一個web界面也可以)。
5)監控報警:電話報警、郵件報警、微信報警、短信報警、報警升級機制等(無論什么報警都可以)。
6)報警處理:當接收到報警,我們需要根據故障的級別進行處理,比如:重要緊急、重要不緊急,等。根據故障的級別,配合相關的人員進行快速處理。
Zabbix + Grafana架構圖如下:
Zabbix + Grafana適配組件如下:
No. | 組件 | 啟動命令 | 說明 |
1 | gcc version 4.8.5 | - | yum安裝: yum install gcc* -y |
2 | mariadb.aarch64 1:5.5.56-2.el7 | systemctl start mariadb.service | 包安裝,也可以選mysql5.6 /5.7 |
3 | nginx-1.16.0 | systemctl start nginx.service | 源碼編譯安裝 |
4 | PHP 7.2.20 | systemctl start php-fpm | 編譯源碼安裝 |
5 | openjdk1.8.0_232 | - | 可能OS自帶JRE環境,但是需要安裝JDK |
6 | zabbix-4.0.0 | /etc/init.d/zabbix_server start /etc/init.d/zabbix_agentd start |
編譯源碼安裝 |
7 | Grafana-6.7.2 | service grafana-server start / stop | 官方提供arm64的rpm文件,rpm安裝 |
3.2.2 Prometheus+ Grafana應用環境
Prometheus(普羅米修斯)是一個開源系統監控和警報工具,最初是在SoundCloud建立的。它是一個獨立的開放源碼項目,并且獨立于任何公司。不同于傳統的運維監控工具,Prometheus是面向容器和微服務的監控系統,采用基于時間序列的存儲方式,監控采集更加精確,監控頻率更高,和容器和微服務兼容性更好。隨著目前容器和微服務的使用日趨廣泛,Prometheus的應用范圍將會越來越廣。
Prometheus是面向容器和微服務的監控系統,對容器和微服務的兼容性好。
服務器通過Pull模型以http協議監控數據,監控精確,監控頻率高。
圖形數據化展示通過Grafana展示,采用專業的數據函數和公式,將數據以更精準和可讀的方式展現出來。
報警方式通過AlertManager輸出,兼容目前市場是主流的報警方式,例如微信,電話,郵件等。
下面這張圖說明了Prometheus的整體架構,以及生態中的一些組件作用:
Prometheus的主要特征有:
● 多維度數據模型
● 靈活的查詢語言
● 不依賴分布式存儲,單個服務器節點是自主的
● 以HTTP方式,通過pull模型拉去時間序列數據
● 也通過中間網關支持push模型
● 通過服務發現或者靜態配置,來發現目標服務對象
● 支持多種多樣的圖表和界面展示,grafana也支持它
Prometheus相對比其他監控的優勢:
● 監控數據的精細程度高,采集精度可以達到1~5s
● 集群部署速度和監控腳本制作快,大大縮短監控搭建的時間成本
● 開源軟件更新快,bug修復快,周邊插件豐富,到手即用,支持多種客戶端開發語言
● 本身基于數學計算模型,直接使用數學公式和數學函數,可以實現很復雜的業務邏輯監控(例如QPA曲線的彎曲、凸起,下跌的比例等模糊概念)
● 結合Grafana展示圖形,效果美觀實用
● 特別針對目前流行容器監控適配,采集深度大
Prometheus生態包括了很多組件,它們中的一些是可選的:
● 主服務Prometheus Server負責抓取和存儲時間序列數據
● 客戶庫負責檢測應用程序代碼
● 支持短生命周期的PUSH網關
● 基于Rails/SQL儀表盤構建器的GUI
● 多種導出工具,可以支持Prometheus存儲數據轉化為HAProxy、StatsD、Graphite等工具所需要的數據存儲格式
● 警告管理器
● 命令行查詢工具
● 其他各種支撐工具
● 多數Prometheus組件是Go語言寫的,這使得這些組件很容易編譯和部署
Zabbix + Grafana適配組件如下:
No. | 組件 | 啟動命令 | 說明 |
1 | Prometheus-2.16 | systemctl start / stop prometheus.service | Arm64包安裝 |
2 | node_exporter-0.18.1 | systemctl start/stop node_exporter.service | Arm64包安裝 |
3 | Grafana-6.7.2 | service grafana-server start / stop | 官方提供arm64的rpm文件,rpm安裝 |
3.2.3 監控應用部署
本監控方案選用Zabbix和Prometheus作為物理設備及應用的核心監控軟件,通過python腳本發送Email/SMS/Ding ding告警信息,Grafana作為可視化監控大屏解決方案,集成Zabbix和Prometheus監控系統,通過定制化dashboard可視化展示監控數據信息。
該監控方案的核心軟件應用,Zabbix、Prometheus、Grafana以及運行的Python腳本均部署在鯤鵬服務器上。整體部署架構圖如下所示:
3.2.4 監控應用運行
3.2.4.1 Zabbix + Grafana運行
在鯤鵬服務器上Zabbix 4.0.10監控主機頁面如下圖所示:
Grafana大屏如下:
告警 – 郵件:
告警-企業微信:
告警- Dingding:
3.2.4.2 Prometheus + Grafana運行
Prometheus-2.16監控主機頁面如下圖所示:
Prometheus配合Grafana和AlertManager實現數據展示和多渠道報警:
郵件告警:
3.2.5 監控應用性能對比測試
// TODO
3.3 農業IOT應用方案適配
智慧農業物聯網IoT主要包含兩層意思:1. 核心基礎仍是農業互聯網,是在農業互聯網基礎上的延伸和擴展。2. 用戶端延伸到物品與物品之間, 物品之間通過物聯網進行信息交換和通信。
智慧農業物聯網技術的應用:
1. 農業智能監測與培育系統
負責監測溫度、濕度、光強等農情信息采集,在農作物上方安放光照強度傳感器實時監測環境光照強度,能及時掌握農作物生長環境的光照強度;環境溫度的高低直接影響農作物生長速度與發育情況,空氣濕度也是影響農作物生長發育的重要因素,所以要在農作物周圍安放空氣溫濕度傳感器。通過自適應切換功能接入傳輸網絡,將數據傳送至控制中心??刂浦行膶⒔邮盏降臄祿浱幚砗蟠嫒霐祿?,根據采集到的信息進行匯總分析,結合專家決策系統發出反饋控制指令,及時、準確地發現問題和解決問題,指導農業生產。
通過網絡,生產者和技術研究人員就可以隨時隨地監測所采集到的農情信息,對作物生長情況進行實時跟蹤。負責農作物生產的技術人員將根據其作物的生長實況和實際需求制定合理的培育策略(比如增加溫度、增加濕度、澆灌),通過將集成有嵌入式TCP/IP協議的培育設備連接到網絡,通過遠程執行所制定的策略,遠程節點收到信息后會做出響應,例如調節光照強度、灌溉時間、除草劑濃度等等。
2. 農產品運輸管理與控制系統
通過在運輸車輛上的無線終端設備,無線遠程發送回該車輛當前的經緯度、車速、海拔高度、衛星授時時間到遠程控制中心,控制中心再將遠程傳回的GPS數據與電子地圖建立函數對應關系,將運輸車輛擬化為地圖上的一個運動點,就可以對該點的行車路線、行車車速、行車狀況進行透明無誤地監控,從而實現智能控制和管理。通過裝載農作物產品箱體中的傳感器可以監測到農產品在運輸中的溫濕度等信息??刂浦行挠蠫SM(全球移動通信系統)、GPRS(移動通信技術)組成的即時語音通信平臺,可以通過中心計算機控制軟件與工作中的運輸車輛取得聯系,對于排除緊急事件和實際難題具有非常明顯的意義。
3. 農產品銷售和分配管理系統
在箱體上集成了4種技術用來識別和驗收貨物:125 kHz頻段下和13.56 MHz頻段下的RFID(自動識別技術)射頻識別、一維條碼識別、二維碼。農產品質量追溯物聯網由讀寫傳感器和電子標簽、讀寫器和查詢的網絡接入與控制數據中心組成。通過電子標簽記錄農產品在培育、運輸和銷售環節的所有信息,并通過網絡系統傳輸到數據中心保存。用戶可以在農產品溯源系統平臺或者超市商品溯源機上,通過查詢農產品的編號獲取該農產品的所有的銷售信息。
農業物聯網是現代農業發展的必經之路,運用先進的農業物聯網技術是一個國家農業生產力的良好體現。
3.3.1應用環境架構
本次智慧農業IOT技術的應用環境主要在農業智能監測上。
基于阿里云的技術架構圖如下所示:
涉及到的應用組件如下表所示:
No. | 組件 | 運行環境 | 說明 |
1 | IOT server java | 阿里云ECS | 阿里云服務器端運行的Java代碼(打成jar包),作用是接受阿里云的消息通信上報,并將上報的傳感器數據存儲到influxdb數據庫。 |
2 | allapi.js | 阿里云ECS | 作用:grafana按鈕控制調用的API 包括所有的開關,和獲取開關狀態。放在阿里云ecs上運行。 |
3 | darknet.py | 邊緣設備 | 深度學習識別代碼。作用:拍攝照片后,通過深度學習識別里面的物品。 |
4 | iot_beaglebone.js | 邊緣設備 | beaglebone設備端的js代碼,作用:連接阿里云,上傳所有傳感器信息;響應阿里云請求,控制傳感器開關(包括除了攝像頭的所有傳感器)。 |
5 | iotsdk.py | 邊緣設備 | 樹莓派上的控制代碼,作用:連接攝像頭拍照。連接阿里云,上傳收取阿里云傳來的信息,控制連接在樹莓派上的攝像頭以及圖片物品識別功能。 |
6 | model.json和tsl.jsom | 邊緣設備 | 阿里云導出的物模型文件。物模型文件備份,防止丟失。 |
7 | Grafana | 阿里云 | 監控大屏,鯤鵬服務器上是以docker容器的形式運行 |
8 | InfluxDB | 阿里云 | 時序數據庫,鯤鵬服務器上是以docker容器的形式運行 |
3.3.2應用部署
對于應用的部署,基本上還是基于阿里云的技術架構,在鯤鵬服務器上主要以docker容器的形式部署了用于前端大屏展示的Grafana和時序數據庫InfluxDB,如下圖所示:
3.3.3應用運行
對于設備位置、溫度、濕度、風向等相關指標的采集,數字化大屏展示如下圖所示:
對于溫度變化、濕度變化、土壤溫度變化的相關監控大屏如下圖所示:
另外,該方案的告警媒介是Ding ding,告警信息展示如下:
3.3.4應用性能對比測試
// TODO
3.4 大數據應用方案適配
3.4.1應用環境
組件 | 版本號 | 應用場景 |
Ambari | 2.7.3 | Ambari是 Apache Software Foundation 中的一個頂級項目,它可以創建、管理、監視 Hadoop 整個生態圈(例如 Hive,Hbase,Sqoop,Zookeeper 等)的集群,使得Hadoop 以及相關的大數據軟件更容易使用。 |
HDP | 3.1 | Hadoop及其生態環境組件,包括HDFS、Zookeeper、Ambari Metrics、Yarn+Mapreduce2、HBASE、Hive、TEZ、Spark2等。 大數據解決方案支持包括離線分析、實時檢索、實時流處理等多個場景。 |
OpenJDK | 1.8 | JDK(Java Development Kit)是 Java 開發者進行 Java 開發所必須的軟件包,包含 JRE(Java Runtime Environment)和編譯、調測工具。 |
Anaconda | 4.5.12 | python很多工具包,如果沒有專門為aarch64編譯過,那么就需要自己手動編譯甚至是徹底無法使用了。 Anaconda是一個包管理工具,這個工具的強大之處在于,甚至不止跨越了Python,還能在某種程度上完全隔離出一個底層環境。甚至是讓很多原本會沖突的包共存。 |
Ketle | 9.0 | Kettle是免費開源的、可視化的、功能強大的ETL工具 |
大數據解決方案支持包括離線分析、實時檢索、實時流處理等多個場景。如離線分析,通常是指對海量數據進分析和處理,形成結果數據,供下一步數據應用使用。離線分析以HDFS分布式存儲軟件為數據底座,計算引擎以基于MapReduce的Hive和基于Spark的SparkSQL為主。
3.4.2應用結構
大數據離線計算場景架構
3.4.3應用部署
組件 | 部署說明 |
Ambari | Ambari管理hadoop集群 |
HDP | HDP集群及其生態系統組件,包括HDFS、Spark計算等組件 |
Kettle | ETL數據抽取、轉換、加載工具 |
3.4.4 應用運行
3.4.5 應用性能對比測試
// TODO
3.5 日志搜索方案適配
3.5.1ELKB應用環境
應用名 | 應用角色 | 應用組件 | 組件角色 | 組件版本 |
elasticsearch | 全文搜索引擎 | docker- elasticsearch | elasticsearch程序服務 | 7.3.2 |
filebeat | 日志數據采集器 | filebeat | filebeat程序服務 | 7.4.2 |
kibana | 日志分析平臺 | docker- kibana | kibana程序服務 | 7.3.2 |
logstash | 日志管理平臺 | logstash | Logstash程序服務 | 7.4.2 |
3.5.2應用結構
ELK 不是一款軟件,而是 Elasticsearch、Logstash 和 Kibana 三種軟件產品的首字母縮寫。這三者都是開源軟件,通常配合使用,而且又先后歸于 Elastic.co 公司名下,所以被簡稱為 ELK Stack。根據 Google Trend 的信息顯示,ELK Stack 已經成為目前最流行的集中式日志解決方案。
Elasticsearch:分布式搜索和分析引擎,具有高可伸縮、高可靠和易管理等特點?;?Apache Lucene 構建,能對大容量的數據進行接近實時的存儲、搜索和分析操作。通常被用作某些應用的基礎搜索引擎,使其具有復雜的搜索功能;
Logstash:數據收集引擎。它支持動態的從各種數據源搜集數據,并對數據進行過濾、分析、豐富、統一格式等操作,然后存儲到用戶指定的位置;
Kibana:數據分析和可視化平臺。通常與 Elasticsearch 配合使用,對其中數據進行搜索、分析和以統計圖表的方式展示;
Filebeat:ELK 協議棧的新成員,一個輕量級開源日志文件數據搜集器,基于 Logstash-Forwarder 源代碼開發,是對它的替代。在需要采集日志數據的 server 上安裝 Filebeat,并指定日志目錄或日志文件后,Filebeat 就能讀取數據,迅速發送到 Logstash 進行解析,亦或直接發送到 Elasticsearch 進行集中式存儲和分析。
3.5.3應用部署
1、Filebeat負責收集應用寫到磁盤上的日志,并將日志發送給logstash
2、logstash處理來自filebeat的日志,并將處理后的日志保存elasticsearch索引庫。
3、elasticsearch存儲來自logstash的日志。
4、kibana從elasticsearch搜索日志,并展示到頁面。
3.5.4應用運行
對接Grafana,制作大屏連接Elastic search:
3.5.5應用性能對比測試
//TODO
3.6 K8S + Docker方案適配
3.6.1應用環境
應用名 | 應用角色 | 應用組件 | 組件角色 | 組件版本 |
kubernetes | 容器編排托管服務 | kubelet | 容器生命周期管理者 | 1.15.1 |
kubeadm | k8s集群部署管理工具 | |||
kubectl | k8s集群命令行工具 | |||
kube-apiserver | 集群資源監聽/分發 | 1.15.0 | ||
kube-controller-manager | 集群事件管理器 | |||
kube-scheduler | 集群pods總調度 | |||
kube-proxy | 集群pods總路由 | |||
etcd | 集群數據持久化 | 3.3.10 | ||
coredns | k8s內部dns | 1.3.1 | ||
docker | 容器基礎服務 | docker-ce | docker開源基礎組件 | 19.03.8 |
rancher | 容器編排托管可視化管理/插件集成服務 | rancher-server | rancher主服務 | 2.4.3-rc2 |
Rancher-client | rancher主服務監聽代理 |
k8s是谷歌開源的容器集群管理系統,是Google多年大規模容器管理技術Borg的開源版本,主要功能包括:
1:基本容器的應用部署、維護和滾動升級;
2:負載均衡和服務發現;
3:跨機器和跨地區的集群調度;
4:自動伸縮;
5:無狀態服務和有狀態服務;
6:廣泛的Volume支持;
7:插件機制保證擴展性。
k8s提供了很多的功能,它可以簡化應用程序的工作流,加快開發速度。通常,一個成功的應用編排系統需要有較強的自動化能力,這也是為什么 k8s被設計作為構建組件和工具的生態系統平臺,以便更輕松地部署、擴展和管理基于docker構建的應用程序。
docker-container(docker容器)是一種便捷式、輕量級的操作系統級虛擬化技術。它使用namespace隔離不同的軟件運行環境,并通過鏡像自包含軟件的運行環境,從而使得容器可以很方便的在任何地方運行。
由于容器體積小且啟動快,因此可以在每個容器鏡像中打包一個應用程序。這種一對一的應用鏡像關系擁有很多好處。使用容器,不需要與外部的基礎架構環境綁定,因為每一個應用程序都不需要外部依賴,更不需要與外部的基礎架構環境依賴。完美解決了從開發到生產環境的一致性問題。
容器同比虛擬機更加透明,這有助于監測和管理。尤其是容器進程的生命周期由基礎設施管理,而不是由容器內的進程對外隱藏時更是如此。最后,每個應用程序用容器封裝,管理容器部署就等同于管理應用程序部署。
在k8s必須使用pod管理容器,k8s中的每個pod可以包含一個或多個容器。
rancher對k8s進行了功能的拓展與實現了和k8s集群交互的一些便捷工具,包括執行命令行、可視化界面,可以管理多個 k8s集群,查看k8s集群節點的運行狀態等等?;趉8s+docker自建私有云,部署容器集群,rancher是首選工具。
3.6.2應用結構
3.6.3應用部署
同3.6.1
3.6.4 應用運行
3.6.5 應用性能對比測試
// TODO
3.7 CI / CD方案適配
3.7.1應用環境
應用名 | 應用角色 | 應用組件 | 組件角色 | 組件版本 |
gitlab | 項目管理/代碼托管 | docker-gitlab | gitlab程序服務 | 1.12.x |
jenkins | 持續集成工具 | docker-tomcat | jenkins的web容器 | 9.x |
jenkins.war | jenkins程序服務 | 2.x | ||
maven | 程序構建工具 | maven.tar.gz | maven程序服務 | 3.2 |
harbor | 容器鏡像倉庫 | docker-harbor | docker鏡像倉庫 | 1.1.0.x |
kubernetes | 容器編排托管服務 | kubelet | 容器生命周期管理者 | 1.15.1 |
kubeadm | k8s集群部署管理工具 | |||
kubectl | k8s集群命令行工具 | |||
kube-apiserver | 集群資源監聽/分發 | 1.15.0 | ||
kube-controller-manager | 集群事件管理器 | |||
kube-scheduler | 集群pods總調度 | |||
kube-proxy | 集群pods總路由 | |||
etcd | 集群數據持久化 | 3.3.10 | ||
coredns | k8s內部dns | 1.3.1 |
CI/CD它是一種重視“軟件開發人員(Dev)”和“IT運維技術人員(Ops)”之間溝通合作的文化、運動或慣例。透過自動化“軟件交付”和“架構變更”的流程,來使得構建、測試、發布軟件能夠更加地快捷、頻繁和可靠。
基于gitlab+jenkins+maven+harbor+k8s的環境,可以用以下流程實現CI/CD,首先開發人員將編碼上傳到gitlab上,使用gitlab的webhook鏈接到jenkins,讓jenkins通過maven編譯代碼/構建程序,然后自動去制作docker鏡像,通過將鏡像上傳到harbor本地的docker鏡像庫中,再配置k8s中的具體pod節點去自動下載harbor中的docker鏡像,使用k8s控制docker運行服務,最后達到持續交付、開發、測試和運維三方緊密合作的目的。
3.7.2應用結構
3.7.3應用部署
同3.7.1
3.7.4 應用運行
3.7.5 應用性能對比測試
// TODO
3.8 性能測試
3.8.1MySQL性能測試對比
總體上X86和ARM64機器上的Mysql數據庫性能相差無幾,具體如下:
1.華為ARM64鯤鵬機器MySQL性能測試結果
2.X86機器上MySQL性能測試結果
3.測試工具
使用BenchmarkSQL進行測試
4.數據庫模型(TPCC)
5.TPCC交易類型
6.性能衡量指標
7.測試流程