中美貿易衝突以來,相信最大的感覺,並非我對你加多少關稅,而是我有,可我不賣給你。「禁售」成了市場經濟中最大的競爭力。
相信也是由於這個緣由,華爲「備胎轉正」的鯤鵬系列芯片,一經推出,就吸引了業界的眼球。
通過漫長的等待,基於鯤鵬920,表明高端計算能力的華爲服務器已經開始大量出貨。不過,限於專業壁壘,服務器用的芯片,不管如何也比不上5G和MATE30更使人矚目。
今天偶然發現,華爲雲上正在進行「鯤鵬彈性雲服務器」免費試用活動,因而迅速的申請了一臺嚐鮮。
php
最基本的試用套餐中,包括一臺1核、1G內存、1M帶寬的彈性服務器;一個100G的雲硬盤還有一個動態的公網IP。我的用戶能夠免費試用15天。
html
服務器可選多種操做系統,華爲推薦的是自有的歐拉操做系統(EulerOS)。這是華爲基於CentOS定製的版本,包含了多種服務器場景的優化,對於ARM64芯片也有更好的支持。其它還有10餘種選擇,都是Linux類的各類發行版本。
嚴重依賴Windows系列的話...你如今能夠退散了,除了Windows操做系統當前還綁定在X86系列CPU之上,微軟系列也屬禁售之列。
做爲試用,首先要「玩」起來方便,我選擇了Ubuntu18.04系統。
前端
跟常見的雲端系統同樣,購買完成,服務器會快速的本身完成配置、啓動。華爲雲提供了基於瀏覽器的終端界面: vue
一開始只有一個root,利用瀏覽器的終端,新建一個平常使用的帳號,升級各項更新和補丁,重啓,而後能夠放心安全的在遠程使用ssh登錄了。有一個動態公網IP,仍是方便不少。
整個過程流暢、穩定,第一印象跟一般使用的服務器並無什麼不一樣。若是不使用uname檢查內核,徹底感受不到是一臺ARM服務器。node
$ uname -a Linux ecs-kc1-small-1-linux-20191209185931 4.15.0-72-generic #81-Ubuntu SMP Tue Nov 26 12:21:09 UTC 2019 aarch64 aarch64 aarch64 GNU/Linux
先來看看配置,CPU:python
$ cat /proc/cpuinfo processor : 0 BogoMIPS : 200.00 Features : fp asimd evtstrm aes pmull sha1 sha2 crc32 atomics fphp asimdhp cpuid asimdrdm jscvt fcma dcpop asimddp asimdfhm CPU implementer : 0x48 CPU architecture: 8 CPU variant : 0x1 CPU part : 0xd01 CPU revision : 0
接着是內存:mysql
$ cat /proc/meminfo MemTotal: 1006904 kB MemFree: 387044 kB MemAvailable: 671300 kB Buffers: 33604 kB Cached: 296076 kB SwapCached: 1148 kB Active: 217232 kB Inactive: 275692 kB Active(anon): 59824 kB Inactive(anon): 119960 kB Active(file): 157408 kB Inactive(file): 155732 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 1762696 kB SwapFree: 1729472 kB Dirty: 28632 kB Writeback: 0 kB AnonPages: 162892 kB Mapped: 61680 kB Shmem: 16508 kB Slab: 96464 kB SReclaimable: 60696 kB SUnreclaim: 35768 kB KernelStack: 2464 kB PageTables: 3824 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 2266148 kB Committed_AS: 1049036 kB VmallocTotal: 135290290112 kB VmallocUsed: 0 kB VmallocChunk: 0 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB CmaTotal: 0 kB CmaFree: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB
雖然說只是一個體驗,但若是沒有對比,咱們很難對「體驗」結果作出一個公正的評價。
因此我又在國內三甲的雲服務商(這裏就不提名字了,反正沒有打擂臺的意思)另外借用了一臺生產用傳統Intel至強的服務器。
一樣使用Ubuntu 18:linux
$ uname -a Linux ebs-31389 4.15.0-72-generic #81-Ubuntu SMP Tue Nov 26 12:20:02 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
CPU:nginx
$ cat /proc/cpuinfo processor : 0 vendor_id : GenuineIntel cpu family : 6 model : 63 model name : Intel(R) Xeon(R) CPU E5-2678 v3 @ 2.50GHz stepping : 2 microcode : 0x1 cpu MHz : 2494.224 cache size : 4096 KB physical id : 0 siblings : 1 core id : 0 cpu cores : 1 apicid : 0 initial apicid : 0 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single pti fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit bogomips : 4988.44 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management: processor : 1 vendor_id : GenuineIntel cpu family : 6 model : 63 model name : Intel(R) Xeon(R) CPU E5-2678 v3 @ 2.50GHz stepping : 2 microcode : 0x1 cpu MHz : 2494.224 cache size : 4096 KB physical id : 1 siblings : 1 core id : 0 cpu cores : 1 apicid : 1 initial apicid : 1 fpu : yes fpu_exception : yes cpuid level : 13 wp : yes flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon rep_good nopl cpuid tsc_known_freq pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm invpcid_single pti fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid xsaveopt arat bugs : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit bogomips : 4988.44 clflush size : 64 cache_alignment : 64 address sizes : 40 bits physical, 48 bits virtual power management:
內存:git
$ cat /proc/meminfo MemTotal: 4039500 kB MemFree: 1083580 kB MemAvailable: 3561040 kB Buffers: 206180 kB Cached: 2326624 kB SwapCached: 296 kB Active: 1394884 kB Inactive: 1213580 kB Active(anon): 40644 kB Inactive(anon): 53080 kB Active(file): 1354240 kB Inactive(file): 1160500 kB Unevictable: 0 kB Mlocked: 0 kB SwapTotal: 4038652 kB SwapFree: 4033008 kB Dirty: 20 kB Writeback: 0 kB AnonPages: 75392 kB Mapped: 88396 kB Shmem: 18068 kB Slab: 305188 kB SReclaimable: 251528 kB SUnreclaim: 53660 kB KernelStack: 2704 kB PageTables: 8312 kB NFS_Unstable: 0 kB Bounce: 0 kB WritebackTmp: 0 kB CommitLimit: 6058400 kB Committed_AS: 597368 kB VmallocTotal: 34359738367 kB VmallocUsed: 0 kB VmallocChunk: 0 kB HardwareCorrupted: 0 kB AnonHugePages: 0 kB ShmemHugePages: 0 kB ShmemPmdMapped: 0 kB CmaTotal: 0 kB CmaFree: 0 kB HugePages_Total: 0 HugePages_Free: 0 HugePages_Rsvd: 0 HugePages_Surp: 0 Hugepagesize: 2048 kB DirectMap4k: 106368 kB DirectMap2M: 4087808 kB DirectMap1G: 2097152 kB
從硬件參數上看,「鯤鵬」很不利啊,可憐的1核1G內存。另外一臺Intel XEON雖然說也不是啥高級貨色,但2核4G內存,任誰看起來也是碾壓式的對手。若是知道我只能借到這樣一臺對比的服務器,在華爲雲就應當開一臺配置更高的機器。惋惜免費機會僅有一次,也只能硬起頭皮繼續了。
主機 | TaiShan | 競品品牌未知 |
---|---|---|
CPU | 鯤鵬920 | Intel Xeon |
核心數量 | 1 | 2 |
內存 | 1G | 4G |
其它配置就不拉出來看了,由於剩下的硬件對本次對比影響不大;軟件配置,都是默認的基礎系統,兩邊都沒有作任何專門的設定和調優。若是有區別,那也是雲端工做人員水平的發揮,也得算加分項。
早先仍是很喜歡看跑分,後來時間長了,發現跑分的內容,跟實際工做區別仍是比較大。每每跑分的指標很漂亮,真正用起來,滿不是那麼回事。
因此今天咱們搞的稍微複雜一點,選擇從前端開發、後端開發及服務、容器三個方面,對鯤鵬服務器作一個深度體驗。我想從雲服務的角度上說,這三類應用,怎麼也能涵蓋80%的常見需求吧。
(文中沿用口頭習慣混用了芯片品牌和服務器品牌,相信你看的懂,就再也不改了。)
首先咱們準備相應的工具和環境。
前端開發選用node.js/npm/yarn工具鏈,vue框架。兩臺機器的版本徹底相同:
$ node -v v12.13.1 $ npm -v 6.12.1 $ yarn -v 1.21.0
後端選用PostgreSQL數據庫,兩端版本相同:
$ psql --version psql (PostgreSQL) 10.10 (Ubuntu 10.10-0ubuntu0.18.04.1)
後端工具鏈使用Rust nightly編譯,兩端相同:
$ rustc -V rustc 1.41.0-nightly (59947fcae 2019-12-08)
這裏補充一句,nightly只適合開發和實驗,請勿在生產環境使用。這裏考慮既然是體驗,固然要有適度的超前,因此選用nightly版本。由於畢竟等到你用的時候,今天的nightly版本估計已經轉正了。
在後端開發的過程當中,還會使用到gcc/git/openssl等開源工具鏈。都使用了Ubuntu內置的版本,兩臺服務器相同。由於這些工具並不是主要開發環境,這裏節省篇幅,就不一一列出版本了。
容器方面,由於更可能是兼容性體驗,並不須要什麼指標數據,因此只安裝了鯤鵬服務器,版本以下:
$ sudo docker version Client: Version: 18.09.7 API version: 1.39 Go version: go1.10.1 Git commit: 2d0083d Built: Fri Aug 16 14:20:24 2019 OS/Arch: linux/arm64 Experimental: false Server: Engine: Version: 18.09.7 API version: 1.39 (minimum version 1.12) Go version: go1.10.1 Git commit: 2d0083d Built: Wed Aug 14 19:41:23 2019 OS/Arch: linux/arm64 Experimental: false
本文不是教學,因此安裝過程都忽略。值得一提的是,兩臺服務器在環境搭建的過程當中,表現的都很流暢快捷,操做徹底相同。經常須要專門看一眼主機名才能想的起來這是哪一臺服務器。跟以往操做一些異構服務器的時候溝溝坎坎密佈徹底不可同日而語。
此外,各工具鏈國內的鏡像站點對於環境搭建幫助很大,顯著的提升了搭建速度。
有習慣使然的因素,這裏用來測試服務器的項目選用了Gothinkster的RealWorld。RealWorld是一個極簡的微型博客系統,號稱「應用型演示之母」。是一個麻雀雖小,五臟俱卷的小應用。
在其項目網站上,提供了22種前端和50種後端的開源代碼,任一種前端,均可以配合任一種後端組合工做。
看了前面的環境配置,估計你已經猜到了,我在這裏選擇了Vue的前端和rust-rocket-diesel後端的組合方式。
咱們先從前端看起,首先把源碼下載下來:
$ git clone https://github.com/gothinkster/vue-realworld-example-app
而後下載相關的依賴包:
$ cd vue-realworld-example-app $ yarn install
咱們須要對源碼作4處修改:
vue.config.js
文件,配置項目在網站中的子路徑,畢竟雖然是試用,直接把根目錄開放給RealWorld也太不講究了。src/router/index.js
文件,設置路由模式和基礎網頁文件URL。src/common/config.js
文件中設置這個API基礎地址。src/store/auth.module.js
文件,UPDATE_USER方法中,有一處BUG。這一處問題同大多數後端配合中體現不出來,但同Rust這種嚴格的後端配合,會致使用戶沒法編輯我的資料。須要修改函數中的數據提交部分。本文不作教學,相信你們也沒興趣看教學,因此具體的修改、配置方法都略過。咱們只來看編譯的過程。
首先是在鯤鵬服務器上:
$ time yarn build yarn run v1.21.0 $ cross-env BABEL_ENV=dev vue-cli-service build ⠇ Building for production... File Size Gzipped dist/js/chunk-vendors.dcd10e99.js 172.11 KiB 58.87 KiB dist/js/chunk-52fabea2.8d54de7e.js 35.24 KiB 10.74 KiB dist/js/app.5e06b01a.js 19.41 KiB 5.56 KiB dist/js/chunk-8ab06c80.0691ea34.js 13.74 KiB 4.53 KiB dist/js/chunk-fee37f4e.962c341f.js 5.50 KiB 1.80 KiB dist/js/chunk-2d0b3289.4ecc4d5e.js 3.68 KiB 1.17 KiB dist/js/chunk-2d217357.a492fd23.js 3.20 KiB 1.15 KiB dist/js/chunk-704fe663.1eb6fa07.js 2.94 KiB 1.14 KiB dist/js/chunk-2d0d6d35.3e7333df.js 2.92 KiB 1.15 KiB dist/js/chunk-2d2086b7.9e172229.js 2.57 KiB 1.12 KiB dist/precache-manifest.d3673753a0030f7 1.66 KiB 0.55 KiB ef7bc3318dfea2bf8.js dist/service-worker.js 0.95 KiB 0.54 KiB dist/js/chunk-2d0bd246.4cab42ec.js 0.58 KiB 0.40 KiB dist/js/chunk-2d0f1193.580d39c8.js 0.57 KiB 0.40 KiB dist/js/chunk-2d0cedd0.a32d9392.js 0.53 KiB 0.38 KiB dist/js/chunk-2d207fb4.d8669731.js 0.48 KiB 0.35 KiB dist/js/chunk-2d0bac97.f736bcaf.js 0.48 KiB 0.35 KiB Images and other types of assets omitted. DONE Build complete. The dist directory is ready to be deployed. INFO Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html Done in 23.57s. real 0m23.889s user 0m19.927s sys 0m0.965s
爲了減小篇幅,日誌信息刪除了個別源碼格式的警告信息。一切都很正常,沒有什麼不兼容的現象發生。再來看看Intel的表現:
$ time yarn build yarn run v1.21.0 $ cross-env BABEL_ENV=dev vue-cli-service build ⠇ Building for production... File Size Gzipped dist/js/chunk-vendors.dcd10e99.js 172.11 KiB 58.87 KiB dist/js/chunk-52fabea2.c34912e7.js 35.24 KiB 10.74 KiB dist/js/app.348e5166.js 19.35 KiB 5.53 KiB dist/js/chunk-8ab06c80.3fa2c5de.js 13.74 KiB 4.53 KiB dist/js/chunk-fee37f4e.55893266.js 5.50 KiB 1.80 KiB dist/js/chunk-2d0b3289.7b3abcbe.js 3.68 KiB 1.17 KiB dist/js/chunk-2d217357.e2eb7ad1.js 3.20 KiB 1.14 KiB dist/js/chunk-704fe663.25958462.js 2.94 KiB 1.14 KiB dist/js/chunk-2d0d6d35.ddc63fdd.js 2.92 KiB 1.15 KiB dist/js/chunk-2d2086b7.35190064.js 2.57 KiB 1.12 KiB dist/precache-manifest.049c26b68ee8b9c 1.55 KiB 0.53 KiB 603c4f04a6cd8e3c8.js dist/service-worker.js 0.95 KiB 0.54 KiB dist/js/chunk-2d0bd246.b354ca7f.js 0.58 KiB 0.40 KiB dist/js/chunk-2d0f1193.12c44839.js 0.57 KiB 0.40 KiB dist/js/chunk-2d0cedd0.ea949ae4.js 0.53 KiB 0.38 KiB dist/js/chunk-2d207fb4.245dc458.js 0.48 KiB 0.35 KiB dist/js/chunk-2d0bac97.74e3c28d.js 0.48 KiB 0.35 KiB Images and other types of assets omitted. DONE Build complete. The dist directory is ready to be deployed. INFO Check out deployment instructions at https://cli.vuejs.org/guide/deployment.html Done in 16.27s. real 0m16.548s user 0m20.435s sys 0m1.223s
到底多一顆核心和4倍的內存,編譯速度快了約30%。
考慮到雙方的硬件配置,我主觀以爲算兩家平手說得上公平。
首先也是自倉庫下載源碼。
接着要作這樣幾件事情:
src/lib.rs
程序,增長了處理函數,將./static/
文件夾開放爲靜態文件路徑。dist/
路徑中,完整拷貝到當前項目的static/
目錄。接下來咱們使用Rust的開發模式,來作一個試運行:
$ cargo run
在Intel的服務器上,這個過程一切正常。而在鯤鵬上,不幸的事情發生了,發生了報錯,日誌過程很長,下面只截取了錯誤信息的一行:
undefined reference to `rust_crypto_util_fixed_time_eq_asm'
不出乎意料,這是跟彙編有關的東西。
技術發展到今天,在萬能的Linux幫助下,大多的異構系統都能蓬勃發展,前提是,若是不涉及到彙編部分。
爲了測試可以繼續,根據出錯信息,檢查rust-crypto工具箱源碼。
很快發現,在rust-crypto-0.2.36/src/util_helpers.c
文件中,只有X64/ARM兩種架構的彙編語言。鯤鵬雖然也是ARM,可是aarch64架構,對應的彙編語言代碼並不存在。
由於我對彙編也不熟悉,因此開始在互聯網上各類搜索。功夫不負有心人,通過大概一小時的努力,在網上找到了一段本函數aarch64的實現:
#ifdef __aarch64__ uint32_t rust_crypto_util_fixed_time_eq_asm(uint8_t* lhsp, uint8_t* rhsp, size_t count) { if (count == 0) { return 1; } uint8_t result = 0; asm( " \ 1: \ \ ldrb w4, [%1]; \ ldrb w5, [%2]; \ eor w4, w4, w5; \ orr %w0, %w0, w4; \ \ add %w1, %w1, #1; \ add %w2, %w2, #1; \ subs %w3, %w3, #1; \ bne 1b; \ " : "+&r" (result), "+&r" (lhsp), "+&r" (rhsp), "+&r" (count) // all input and output : // input : "w4", "w5", "cc" // clobbers ); return result; } #endif
把這段代碼放進util_helpers.c
,再次執行cargo run
,realworld運行成功了。
隨便發一個博文:
試運行正常,接下來讓兩家再次展示一下編譯的實力吧。 首先請鯤鵬出場:
$ time cargo build --release Compiling libc v0.2.66 Compiling autocfg v0.1.7 Compiling cfg-if v0.1.10 ...(略去)... Compiling rocket_cors v0.4.0 Compiling rocket_contrib v0.4.2 Compiling realworld v0.4.0 (/home/andrew/dev/realworld-rust-rocket) Finished release [optimized] target(s) in 18m 28s real 18m28.666s user 18m8.184s sys 0m10.982s
一共是191個源碼包,日誌節省篇幅,只列出了其中的6個,編譯耗費時間18分28秒,生成的可執行文件8.4M。
$ ls -lh target/release/ total 15M drwxrwxr-x 64 andrew andrew 4.0K Dec 10 09:27 build drwxrwxr-x 2 andrew andrew 32K Dec 10 09:45 deps drwxrwxr-x 2 andrew andrew 4.0K Dec 10 09:27 examples drwxrwxr-x 2 andrew andrew 4.0K Dec 10 09:27 incremental -rw-rw-r-- 1 andrew andrew 1.2K Dec 10 09:45 librealworld.d -rw-rw-r-- 2 andrew andrew 6.2M Dec 10 09:45 librealworld.rlib -rwxrwxr-x 2 andrew andrew 8.4M Dec 10 09:45 realworld -rw-rw-r-- 1 andrew andrew 1.2K Dec 10 09:45 realworld.d
接着來看Intel的速度:
$ time cargo build --release Compiling libc v0.2.65 Compiling autocfg v0.1.7 Compiling cfg-if v0.1.10 ...(略去)... Compiling rocket_cors v0.4.0 Compiling rocket_contrib v0.4.2 Compiling realworld v0.4.0 (/home/andrew/dev/rust/realworld-rust-rocket) Finished release [optimized] target(s) in 7m 39s real 7m39.088s user 15m1.126s sys 0m13.470s $ ls -lh target/release/ total 16M drwxrwxr-x 64 andrew andrew 4.0K Dec 10 01:38 build drwxrwxr-x 2 andrew andrew 36K Dec 10 01:45 deps drwxrwxr-x 2 andrew andrew 4.0K Dec 10 01:38 examples drwxrwxr-x 2 andrew andrew 4.0K Dec 10 01:38 incremental -rw-rw-r-- 1 andrew andrew 1.3K Dec 10 01:45 librealworld.d -rw-rw-r-- 2 andrew andrew 6.3M Dec 10 01:45 librealworld.rlib -rwxrwxr-x 2 andrew andrew 9.0M Dec 10 01:45 realworld -rw-rw-r-- 1 andrew andrew 1.3K Dec 10 01:45 realworld.d
(手動扶額)Intel只花了略超鯤鵬1/3的時間完成編譯,生成的可執行文件9M。這一次,鯤鵬大比分落後了。
互聯網應用不一樣於桌面應用,爲了完整對性能進行檢測,咱們須要一款獨立的測試工具。
Ubuntu的軟件源中已經集成了一些,不過我選用了Wrk,從源碼開始編譯一遍,這樣,C/C++的編譯速度和兼容狀況,也就順便看到了。
如下步驟執行在鯤鵬服務器上:
# 下載源碼 $ git clone https://github.com/wg/wrk # 編譯 $ cd wrk $ time make Building LuaJIT... make[1]: Entering directory '/home/andrew/dev/wrk/obj/LuaJIT-2.1.0-beta3' ==== Building LuaJIT 2.1.0-beta3 ==== make -C src make[2]: Entering directory '/home/andrew/dev/wrk/obj/LuaJIT-2.1.0-beta3/src' HOSTCC host/minilua.o HOSTLINK host/minilua DYNASM host/buildvm_arch.h HOSTCC host/buildvm.o HOSTCC host/buildvm_asm.o HOSTCC host/buildvm_peobj.o HOSTCC host/buildvm_lib.o HOSTCC host/buildvm_fold.o HOSTLINK host/buildvm BUILDVM lj_vm.S ASM lj_vm.o CC lj_gc.o BUILDVM lj_ffdef.h CC lj_err.o CC lj_char.o BUILDVM lj_bcdef.h CC lj_bc.o ... gcc -I. -Icrypto/include -Iinclude -fPIC -pthread -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF crypto/ec/ec_check.d.tmp -MT crypto/ec/ec_check.o -c -o crypto/ec/ec_check.o crypto/ec/ec_check.c gcc -I. -Icrypto/include -Iinclude -fPIC -pthread -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF crypto/ec/ec_curve.d.tmp -MT crypto/ec/ec_curve.o -c -o crypto/ec/ec_curve.o crypto/ec/ec_curve.c ... gcc -I. -Iinclude -fPIC -pthread -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF ssl/t1_trce.d.tmp -MT ssl/t1_trce.o -c -o ssl/t1_trce.o ssl/t1_trce.c gcc -I. -Iinclude -fPIC -pthread -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF ssl/tls13_enc.d.tmp -MT ssl/tls13_enc.o -c -o ssl/tls13_enc.o ssl/tls13_enc.c gcc -I. -Iinclude -fPIC -pthread -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DVPAES_ASM -DECP_NISTZ256_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF ssl/tls_srp.d.tmp -MT ssl/tls_srp.o -c -o ssl/tls_srp.o ssl/tls_srp.c ...(略去)... make depend && make _build_engines make[2]: Entering directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Entering directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Nothing to be done for '_build_engines'. make[2]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' created directory `/home/andrew/dev/wrk/obj/lib/engines-1.1' *** Installing engines make depend && make _build_programs make[2]: Entering directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Entering directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Nothing to be done for '_build_programs'. make[2]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' *** Installing runtime programs install apps/openssl -> /home/andrew/dev/wrk/obj/bin/openssl install ./tools/c_rehash -> /home/andrew/dev/wrk/obj/bin/c_rehash make[1]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' CC src/wrk.c CC src/net.c CC src/ssl.c CC src/aprintf.c CC src/stats.c CC src/script.c CC src/units.c CC src/ae.c CC src/zmalloc.c CC src/http_parser.c LUAJIT src/wrk.lua LINK wrk real 3m31.575s user 3m6.914s sys 0m22.147s
這個小工具包含了大量的c語言源碼和部分彙編代碼,少許的lua腳本當作數據文件存在。
鯤鵬的編譯過程耗時3分32秒。
接着是Intel至強:
$ time make Building LuaJIT... make[1]: Entering directory '/home/andrew/dev/wrk/obj/LuaJIT-2.1.0-beta3' ==== Building LuaJIT 2.1.0-beta3 ==== make -C src make[2]: Entering directory '/home/andrew/dev/wrk/obj/LuaJIT-2.1.0-beta3/src' HOSTCC host/minilua.o HOSTLINK host/minilua DYNASM host/buildvm_arch.h HOSTCC host/buildvm.o HOSTCC host/buildvm_asm.o HOSTCC host/buildvm_peobj.o HOSTCC host/buildvm_lib.o HOSTCC host/buildvm_fold.o HOSTLINK host/buildvm BUILDVM lj_vm.S ASM lj_vm.o CC lj_gc.o BUILDVM lj_ffdef.h CC lj_err.o CC lj_char.o ...... CC="gcc" /usr/bin/perl crypto/aes/asm/aesni-mb-x86_64.pl elf crypto/aes/aesni-mb-x86_64.s gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -c -o crypto/aes/aesni-mb-x86_64.o crypto/aes/aesni-mb-x86_64.s CC="gcc" /usr/bin/perl crypto/aes/asm/aesni-sha1-x86_64.pl elf crypto/aes/aesni-sha1-x86_64.s gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -c -o crypto/aes/aesni-sha1-x86_64.o crypto/aes/aesni-sha1-x86_64.s ...... gcc -I. -Icrypto/include -Iinclude -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF crypto/asn1/x_pkey.d.tmp -MT crypto/asn1/x_pkey.o -c -o crypto/asn1/x_pkey.o crypto/asn1/x_pkey.c gcc -I. -Icrypto/include -Iinclude -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_CPUID_OBJ -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DKECCAK1600_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DX25519_ASM -DPADLOCK_ASM -DPOLY1305_ASM -DOPENSSLDIR="\"/home/andrew/dev/wrk/obj/ssl\"" -DENGINESDIR="\"/home/andrew/dev/wrk/obj/lib/engines-1.1\"" -DNDEBUG -MMD -MF crypto/asn1/x_sig.d.tmp -MT crypto/asn1/x_sig.o -c -o crypto/asn1/x_sig.o crypto/asn1/x_sig.c ...(略)... make depend && make _build_programs make[2]: Entering directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Entering directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' make[2]: Nothing to be done for '_build_programs'. make[2]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' *** Installing runtime programs install apps/openssl -> /home/andrew/dev/wrk/obj/bin/openssl install ./tools/c_rehash -> /home/andrew/dev/wrk/obj/bin/c_rehash make[1]: Leaving directory '/home/andrew/dev/wrk/obj/openssl-1.1.1b' CC src/wrk.c CC src/net.c CC src/ssl.c CC src/aprintf.c CC src/stats.c CC src/script.c CC src/units.c CC src/ae.c CC src/zmalloc.c CC src/http_parser.c LUAJIT src/wrk.lua LINK wrk real 3m48.678s user 3m9.735s sys 0m37.941s andrew@ebs-31389:~/dev/wrk$
咦?3分48秒,竟然略慢於鯤鵬。
其實認真分析一下,我以爲也是正常的。從官方公佈的數據來看,鯤鵬的核心性能並不差,若是任務比較小,在內存中就能完成,那鯤鵬的速度顯然就應當快。
而若是任務比較大,致使了大量的磁盤交換,咱們選用的這臺低配鯤鵬就撐不住了,再加上只有一顆核心的配置。最終的結果,任務越大,這臺鯤鵬被落下就越多。
好了,測試工具準備完畢,咱們分別對兩臺服務器的Web服務性能作一個測試吧。相信對於雲端主機來說,這個纔是硬槓槓啊。
把兩邊的服務器都啓動起來:
首先來看鯤鵬的測試數據:
$ wrk -t1 -c50 -d5s --latency --timeout 2s http://localhost:8000/index.html Running 5s test @ http://localhost:8000/index.html 1 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.97ms 1.04ms 4.58ms 57.80% Req/Sec 8.79k 228.58 9.09k 70.00% Latency Distribution 50% 1.97ms 75% 2.87ms 90% 3.41ms 99% 3.78ms 44400 requests in 5.08s, 120.47MB read Socket errors: connect 0, read 44400, write 0, timeout 0 Requests/sec: 8745.40 Transfer/sec: 23.73MB
兩臺服務器的配置區別比較大,公平起見,咱們在參數上只啓用了一個線程。鏈接數選擇50個,我想對於一個小型網站,這多是比較典型的數量。
鯤鵬服務器在5.08秒的測試中,承受了44400個請求,一共發送數據120.47MB。
接着Intel站上前臺:
$ wrk -t1 -c50 -d5s --latency --timeout 2s http://localhost:8000/index.html Running 5s test @ http://localhost:8000/index.html 1 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 32.32ms 5.00ms 64.20ms 75.23% Req/Sec 1.52k 176.64 1.91k 72.00% Latency Distribution 50% 31.52ms 75% 34.64ms 90% 38.67ms 99% 48.04ms 7552 requests in 5.00s, 21.97MB read Socket errors: connect 0, read 7550, write 0, timeout 0 Requests/sec: 1509.75 Transfer/sec: 4.39MB
哇咔咔...有沒有驚掉眼球?真是沒有對比就沒有傷害。在5秒的測試中,Intel Xeon只承受了7552個請求,發送數據21.97MB。做爲一個老牌的CPU大廠,Intel你丟不丟「芯」?
index.html
只是一個靜態頁面,咱們換一個動態連接再來看看,這樣數據庫的部分也就能一塊兒體現了。
下面測試的就是一個Restful接口,用於列出文章內容的:
$ curl http://127.0.0.1:8000/api/articles {"articles":[{"author":{"bio":null,"email":"andrewwang@sina.com","id":1,"image":null,"username":"andrew"},"body":"蘋果公司近日宣佈,新的Mac Pro和Pro Display XDR將於12月10日開始訂購。新的Mac Pro起價爲5,999美圓(約合人民幣42202元),而Pro Display XDR起價爲4,999美圓(約合人民幣35167元)。\n5,999美圓的基本款Mac Pro搭載了8核Intel Xeon處理器,256 GB SSD,32GB RAM等配置。最高配置支持28核Intel Xeon處理器,4塊Vega顯卡,1.5TB的超大容量內存。而其首次引入的Apple Afterburner加速卡,這使得Mac Pro可實時解碼最多達 3 條 8K ProRes RAW 視頻流和最多達 12 條 4K ProRes RAW 視頻流。\n而新款的 Pro Display XDR則配置了分辨率達到6016 x 3384的32英寸顯示屏,這款顯示器的參數達到了靜態 1000nit / 峯值 1600nits 的亮度,同時還有着1000000:1的對比度。若是用戶追求低反射率和低眩光,能夠多加1000美圓(約合人民幣7000元)給顯示器添加一個「納米紋理」啞光塗層。","createdAt":"2019-12-10T02:05:38.758Z","description":"nothing but test","favorited":false,"favoritesCount":0,"id":1,"slug":"test-sqzxyV","tagList":[],"title":"test","updatedAt":"2019-12-10T02:05:38.758Z"}],"articlesCount":1}
一樣,先看看鯤鵬的表現:
$ wrk -t1 -c50 -d5s --latency --timeout 2s http://127.0.0.1:8000/api/articles Running 5s test @ http://127.0.0.1:8000/api/articles 1 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 40.03ms 2.37ms 41.82ms 99.15% Req/Sec 1.25k 11.16 1.27k 66.00% Latency Distribution 50% 40.21ms 75% 40.48ms 90% 40.75ms 99% 41.34ms 6199 requests in 5.00s, 8.92MB read Socket errors: connect 0, read 6198, write 0, timeout 0 Requests/sec: 1239.54 Transfer/sec: 1.78MB
Intel登場:
$ wrk -t1 -c50 -d5s --latency --timeout 2s http://127.0.0.1:8000/api/articles Running 5s test @ http://127.0.0.1:8000/api/articles 1 threads and 50 connections Thread Stats Avg Stdev Max +/- Stdev Latency 62.63ms 9.18ms 96.45ms 72.66% Req/Sec 787.82 95.11 1.01k 72.00% Latency Distribution 50% 62.32ms 75% 68.07ms 90% 74.42ms 99% 85.25ms 3921 requests in 5.01s, 5.64MB read Socket errors: connect 0, read 3920, write 0, timeout 0 Requests/sec: 783.09 Transfer/sec: 1.13MB
發的帖子過短了,數據流很小,時間全消耗在連接上了,有點體現不出來實力。....不過...鯤鵬再次大比分領先。同時你還別忘了,這臺測試的鯤鵬服務器,內存只有Intel競品的1/4,以及1/2CPU核心。
從這些數據,我想負責任的說,國產芯片和國產服務器的雲端實力,穩了。
以容器爲基礎的微服務已是今天服務器運營的主流模式。在這方面鯤鵬服務器應當說很幸運。畢竟只是在Linux內核就能實現的cgroup和namespace比須要模擬指令集的VM技術容易的多。可說是與生俱來。
但問題也並不這麼簡單,好比你隨便搜索一個應用:
# docker search mariadb NAME DESCRIPTION STARS OFFICIAL AUTOMATED mariadb MariaDB is a community-developed fork of MyS… 3135 [OK] bitnami/mariadb Bitnami MariaDB Docker Image 107 [OK] linuxserver/mariadb A Mariadb container, brought to you by Linux… 95 toughiq/mariadb-cluster Dockerized Automated MariaDB Galera Cluster … 41 [OK] colinmollenhour/mariadb-galera-swarm MariaDb w/ Galera Cluster, DNS-based service… 26 [OK] panubo/mariadb-galera MariaDB Galera Cluster 23 [OK] lsioarmhf/mariadb ARMHF based Linuxserver.io image of mariadb 18 mariadb/server MariaDB Server is a modern database for mode… 18 [OK] webhippie/mariadb Docker images for MariaDB 16 [OK] bianjp/mariadb-alpine Lightweight MariaDB docker image with Alpine… 12 [OK] centos/mariadb-101-centos7 MariaDB 10.1 SQL database server 10 severalnines/mariadb A homogeneous MariaDB Galera Cluster image t… 7 [OK] centos/mariadb-102-centos7 MariaDB 10.2 SQL database server 6 tutum/mariadb Base docker image to run a MariaDB database … 4 wodby/mariadb Alpine-based MariaDB container image with or… 4 [OK] circleci/mariadb CircleCI images for MariaDB 3 [OK] tiredofit/mariadb-backup MariaDB Backup image to backup MariaDB/MySQL… 2 [OK] kitpages/mariadb-galera MariaDB with Galera 2 [OK] rightctrl/mariadb Mariadb with Galera support 2 [OK] jonbaldie/mariadb Fast, simple, and lightweight MariaDB Docker… 2 [OK] demyx/mariadb Non-root Docker image running Alpine Linux a… 0 ccitest/mariadb CircleCI test images for MariaDB 0 [OK] jelastic/mariadb An image of the MariaDB SQL database server … 0 ansibleplaybookbundle/mariadb-apb An APB which deploys RHSCL MariaDB 0 [OK] alvistack/mariadb Docker Image Packaging for MariaDB 0
嗯嗯,看起來跟x86服務器沒有什麼區別。可是想拉一個下來試試?親,你仍是算了吧。容器映像中打包的但是二進制的執行文件,是要區別CPU的,拉下來你也用不了。
看起來,這個世界尚未爲ARM服務器的到來作好準備,至少也應當像APT/YUM之類的工具同樣,自動區分架構來準備資源池不是?
因此想要找適合鯤鵬服務器的映像文件,須要手動添加關鍵字搜索。
當前Docker Hub有兩個分類適用64位ARM服務器架構,分別是aarch64
和arm64v8
,其中aarch64
分類已經再也不使用,新上架的映像都歸類到了arm64v8
。但由於兼容性考慮,aarch64
分類原有映像仍然都存在。換句話說,若是兩個分類都有你須要的映像,你應當優先選擇arm64v8
分類下面的。
接着,第二個小問題就來了,使用這兩個關鍵字來搜索:
# docker search aarch64 NAME DESCRIPTION STARS OFFICIAL AUTOMATED homeassistant/aarch64-homeassistant 15 aarch64/ubuntu Ubuntu is a Debian-based Linux operating sys… 14 homeassistant/aarch64-hassio-supervisor 5 balenalib/aarch64-ubuntu-node This image is part of the balena.io base ima… 1 balenalib/aarch64-alpine-python This image is part of the balena.io base ima… 1 resin/aarch64-alpine-python This repository is deprecated. 1 resin/aarch64-python This repository is deprecated. 1 resin/aarch64-alpine-buildpack-deps This repository is deprecated. 0 resin/aarch64-ubuntu-golang This repository is deprecated. 0 resin/aarch64-fedora-buildpack-deps This repository is deprecated. 0 resin/aarch64-fedora-python This repository is deprecated. 0 resin/aarch64-alpine-openjdk This repository is deprecated. 0 balenalib/aarch64-alpine-node This image is part of the balena.io base ima… 0 resin/aarch64-fedora-golang This repository is deprecated. 0 resin/aarch64-golang This repository is deprecated. 0 resin/aarch64-fedora-openjdk This repository is deprecated. 0 resin/aarch64-alpine-golang This repository is deprecated. 0 balenalib/aarch64-node This image is part of the balena.io base ima… 0 balenalib/aarch64-debian-node This image is part of the balena.io base ima… 0 resin/aarch64-fedora-node This repository is deprecated. 0 resin/aarch64-node This repository is deprecated. 0 resin/aarch64-ubuntu-python This repository is deprecated. 0 balenalib/aarch64-ubuntu-golang This image is part of the balena.io base ima… 0 resin/aarch64-alpine-node This repository is deprecated. 0 balenalib/aarch64-debian-python This image is part of the balena.io base ima… 0 # docker search arm64v8 NAME DESCRIPTION STARS OFFICIAL AUTOMATED arm64v8/alpine A minimal Docker image based on Alpine Linux… 45 arm64v8/ubuntu Ubuntu is a Debian-based Linux operating sys… 30 arm64v8/debian Debian is a Linux distribution thats compos… 21 arm64v8/nginx Official build of Nginx. 18 arm64v8/python Python is an interpreted, interactive, objec… 18 arm64v8/nextcloud A safe home for all your data 15 arm64v8/node Node.js is a JavaScript-based platform for s… 12 arm64v8/openjdk OpenJDK is an open-source implementation of … 9 arm64v8/redis Redis is an open source key-value store that… 7 arm64v8/php While designed for web development, the PHP … 7 arm64v8/mongo MongoDB document databases provide high avai… 6 arm64v8/golang Go (golang) is a general purpose, higher-lev… 6 arm64v8/docker Docker in Docker! 6 arm64v8/ros The Robot Operating System (ROS) is an open … 5 arm64v8/buildpack-deps A collection of common build dependencies us… 3 arm64v8/busybox Busybox base image. 3 arm64v8/ruby Ruby is a dynamic, reflective, object-orient… 2 arm64v8/tomcat Apache Tomcat is an open source implementati… 2 arm64v8/erlang Erlang is a programming language used to bui… 1 arm64v8/wordpress The WordPress rich content management system… 1 arm64v8/joomla Joomla! is an open source content management… 0 arm64v8/haxe Haxe is a modern, high level, static typed p… 0 troyfontaine/arm64v8_min-alpinelinux Minimal 64-bit ARM64v8 Alpine Linux Image 0 arm64v8/hylang Hy is a Lisp dialect that translates express… 0 arm64v8/perl Perl is a high-level, general-purpose, inter… 0
你會發現,比起來豐饒的x86社區,arm服務器的資源實在是少的可憐,並且大可能是基礎性的映像。
這恐怕是沒有辦法的事情了,用戶少,資源也就少。好在,有了基礎映像,本身添加應用,也沒有什麼不能接受。想想,哪個關鍵應用你敢直接完整使用社區映像?
一樣由於Docker Hub在架構區分上準備不足的問題,如今使用docker search
命令直接搜索映像已經很不方便了。由於除了映像的關鍵字,咱們又多了一個架構的限定。
因此建議直接到對應網頁搜索:
https://hub.docker.com/u/aarch64還有 https://hub.docker.com/u/arm64v8
下面咱們試驗用arm64v8分類的Docker映像,執行一個常見的WordPress應用,來體驗一下鯤鵬服務器在容器方面的表現。
WordPress應用須要兩個容器,一個部署了Apache/PHP和WordPress自己;另外還須要一個MySQL兼容的數據庫,咱們使用其社區開源版本MariaDB。
首先把映像拉下來:
# docker pull arm64v8/wordpress Using default tag: latest latest: Pulling from arm64v8/wordpress a4f3dd4087f9: Pull complete e54f8c59bdae: Pull complete 6ae19fe01dd7: Pull complete 939a6e43e07c: Pull complete c7bc60aacdf3: Pull complete c1e1bedfb04e: Pull complete 8332b8441264: Pull complete 012fa89ca2bc: Pull complete c0dfb13372af: Pull complete 3cbeabdc4805: Pull complete 8e492268eedf: Pull complete db2ddafb0478: Pull complete a02565d248c3: Pull complete 7e8259639516: Pull complete 3efb6c94a4c9: Pull complete 77f6d83e6c7a: Pull complete 3601f2116010: Pull complete 4ec7c7d8a180: Pull complete b834909e81a9: Pull complete 72c2b2a88763: Pull complete d77d0ee96a04: Pull complete Digest: sha256:28e7d4a7b3ba0d55f151e718e84de5f186b0c65adaac2da9005a64cb6ad82de8 Status: Downloaded newer image for arm64v8/wordpress:latest # docker pull arm64v8/mariadb Using default tag: latest latest: Pulling from arm64v8/mariadb 6531af355894: Pull complete 82f7942d2fb7: Pull complete fdce94e690d5: Pull complete a96a89ada1c3: Pull complete 9bcef89e3002: Pull complete 06115e3e56a0: Pull complete 5712e955a6d4: Pull complete afd2dc9f5e8f: Pull complete 07ef8ef990de: Pull complete ae55899885f1: Pull complete 9c16c03a30d3: Pull complete 5f1431dbf111: Pull complete 58fecc1c9379: Pull complete 1c94839aac8b: Pull complete Digest: sha256:c67410e8deeb6e165c867131c7669155e43b532d441120df2bbf4f12a3710cd7 Status: Downloaded newer image for arm64v8/mariadb:latest
隨後先執行數據庫映像,執行的時候在環境參數設定root帳號密碼、新建普通用戶帳號、還有爲WordPress單獨建一個庫。咱們不會在宿主機操做數據庫,因此就再也不映射端口出來了:
# docker run -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_USER=wpuser -e MYSQL_PASSWORD=wpuserpassword -e MYSQL_DATABASE=wordpressdb --name wordpressdb -d arm64v8/mariadb 51e6d43af860e00c45cce81bed1918ae3c2a5c91bdcfca18203b0486d8f2783d
接着執行WordPress容器,在環境變量中把剛纔建立的普通數據庫用戶帳號傳遞進去,同時把WordPress容器鏈接到剛纔的數據庫容器,這是爲了讓它們之間直接使用Docker內部網絡鏈接起來,不用經過宿主機中轉:
# docker run -e WORDPRESS_DB_USER=wpuser -e WORDPRESS_DB_PASSWORD=wpuserpassword -e WORDPRESS_DB_NAME=wordpressdb -p 8080:80 --link wordpressdb:mysql --name wordpress -d arm64v8/wordpress 83cad21cf2a057273440cb919885c061b77711b4baedb64fd7bff683a1a30177
這樣,一個微型博客就搭建好了。開瀏覽器來看看:
先要進行一些必要的基礎設置,只是站點信息類的。由於剛纔執行容器的時候就把數據庫的設置傳遞了進去,因此數據庫設置的Web頁面根本就不會出現。
設置完成打開網站首頁:
工做的挺好。
整個搭建的過程,除了兩個映像的名字多了arm64v8前綴,其它從配置、到使用,跟X86服務器沒有任何不一樣。
幾個體量不大的應用,顯然沒法表明所有,但自認爲比一般的測試軟件表現的要更豐滿。
說一說本身的體會:
試用完成,最後祝TaiShan服務器和鯤鵬芯片愈來愈好。