本文延續前篇效能校正的經驗談,上篇文章探討了關於應用程式本身可以最佳化的部分,包含了應用程式以及框架兩個部分。本篇文章將繼續剩下最佳化步驟的探討。
Speculative Execution Mitigations
接下來探討這個最佳化步驟對於效能有顯著的提升,但是本身卻是一個非常具有爭議性的步驟,因為其涉及到整個系統的安全性問題。
如果大家對前幾年非常著名的安全性漏洞 Spectre/Meltdown 還有印象的話,本次這個最佳化要做的就是關閉這類型安全性漏洞的處理方法。
標題的名稱 Speculative Execution Migitations 主要跟這漏洞的執行概念與 Pipeline 有關,有興趣理解這兩種漏洞的可以自行研究。
作者提到,大部分情況下這類型的防護能力都應該打開,不應該關閉。不過作者認為開關與否應該是一個可以討論的空間,特別是如果已經確認某些特別情境下,關閉防護能力帶來的效能如果更好,其實也是一個可以考慮的方向。
舉例來說,假設今天你運行了基於 Linux 使用者權限控管與 namespaces 等機制來建立安全防護的多使用者系統,那這類型的防護能力就不能關閉,必須要打開來防護確保整體的 Security Boundary 是完整的。 但是如果今天透過 AWS EC2 運行一個單純的 API Server,假設整個機器不會運行任何不被信任的程式碼,同時使用 AWS Nitro Enclaves 來保護任何的機密資訊,那這種情況下是否有機會可以關閉這類型的檢查?
作者根據 AWS 對於安全性的一系列說明認為 AWS 本身針對記憶體的部分有很強烈的保護,包含使用者之間沒有辦法存取 Hyperviosr 或是彼此 instance 的 Memory。
總之針對這個議題,有很多的空間去討論是否要關閉,以下就單純針對關閉防護能力帶來的效能提升。
作者總共關閉針對四種攻擊相關的處理能力,分別是
Spectre V1 + SWAPGS
Spectre V2
Spectre V3/Meltdown
MDS/Zombieload, TSX Anynchronous Abort
與此同時也保留剩下四個,如 iTLB multihit, SRBDS 等
這種設定下,整體的運作效能再次提升了 28% 左右,從 347k req/s 提升到 446k req/s。
註: 任何安全性的問題都不要盲從亂遵循,都一定要評估判斷過
Syscall Auditing/Blocking
大部分的情況下,Linux/Docker 處理關於系統呼叫 Auditing/Blocking 兩方面所帶來的效能影響幾乎微乎其微,不過當系統每秒執行數百萬個系統呼叫時,這些額外的效能負擔則不能忽視,如果仔細觀看前述的火焰圖的話就會發線 audit/seccomp 等數量也不少。
Linux Kernel Audit 子系統提供了一個機制來收集與紀錄任何跟安全性有關的事件,譬如存取敏感的機密檔案或是呼叫系統呼叫。透過這些內容可以幫助使用者去除錯任何不被預期的行為。
Audit 子系統於 Amazon Linux2 的環境下預設是開啟,但是本身並沒有被設定會去紀錄系統呼叫的資訊。
即使 Audit 子系統沒有真的去紀錄系統呼叫的資訊,該子系統還是會對每次的系統呼叫產生一點點的額外處理,所以作者透過 auditctl -a never,task 這個方式來將整體關閉。
註: 根據 Redhat bugzilla issue #1117953, Fedora 預設是關閉這個行為的
Docker/Container 透過一連串 Linux Kernel 的機制來隔離與控管 Container 的執行權限,譬如 namespace, Linux capabilities., cgroups 以及 seccomp。
Seccomp 則是用來限制這些 Container 能夠執行的系統呼叫類型
大部分的容器化應用程式即使沒有開啟 Seccomp 都能夠順利的執行,執行 docker 的時候可以透過 --security-opt seccomp=unconfined 這些參數告訴系統運行 Container 的時候不要套用任何 seccomp 的 profile.
將這兩個機制關閉後,系統帶來的效能提升了 11%,從 446k req/s 提升到 495k req/s。
從火焰圖來看,關閉這兩個設定後,syscall_trace_enter 以及 syscall_slow_exit_work 這兩個系統呼叫也從火焰圖中消失,此外作者發現 Amazon Linux2 預設似乎沒有啟動 Apparmor 的防護,因為不論有沒有關閉效能都沒有特別影響。
Disabling iptables/netfilter
再來的最佳化則是跟網路有關,大名鼎鼎的 netfilter 子系統,其中非常著名的應用 iptables 可以提供如防火牆與 NAT 相關功能。根據前述的火焰圖可以觀察到,netfilter 的進入 function nf_hook_slow 佔據了大概 18% 的時間。
將 iptables 關閉相較於安全性來說比較沒有爭議,反而是功能面會不會有應用程式因為 iptables 關閉而不能使用。預設情況下 docker 會透過 iptables 來執行 SNAT與 DNAT(有-p的話)。
作者認為現在環境大部分都將 Firewall 的功能移到外部 Cloud 來處理,譬如 AWS Security Group 了,所以 Firewall 的需求已經減少,至於 SNAT/DNAT 這類型的處理可以讓容器與節點共享網路來處理,也就是運行的時候給予 “–network=host” 的模式來避免需要 SNAT/DNAT 的情境。
作者透過修改腳本讓開機不會去預設載入相關的 Kernel Module 來達到移除的效果,測試起來整體的效能提升了 22%,從 495k req/s 提升到 603k req/s
註: 這個議題需要想清楚是否真的不需要,否則可能很多應用都會壞掉
作者還特別測試了一下如果使用 iptables 的下一代框架 nftables 的效能,發現 nftables 的效能好非常多。載入 nftables 的kernel module 並且沒有規則的情況下,效能幾乎不被影響(iptables 則相反,沒有規則也是會影響速度)。作者認為採用 nftables 似乎是個更好的選擇,能夠有效能的提升同時也保有能力的處理。
不過 nftables 的支援相較於 iptables 來說還是比較差,不論是從 OS 本身的支援到相關第三方工具的支援都還沒有這麼完善。就作者目前的認知, Debian 10, Fedora 32 以及 RHEL 8 都已經轉換到使用 nftables 做為預設的處理機制,同時使用 iptables-nft 這一個中介層的轉換者,讓所有 user-space 的規則都會偷偷的轉換為底層的 nftables。
Ubuntu 似乎要到 20.04/20.10 的正式版本才有嘗試轉移到的動作,而 Amazon Linux 2 依然使用 iptables 來處理封包。
下篇文章會繼續從剩下的五個最佳化策略繼續介紹
https://talawah.io/blog/extreme-http-performance-tuning-one-point-two-million/
aws instance 在 台灣物聯網實驗室 IOT Labs Facebook 的最佳貼文
打造智慧數據湖,Google Cloud 今天推出三項新服務讓資料在雲更聰明
2021/05/27 INSIDE 硬塞的網路趨勢觀察
Google Cloud 在今天舉辦的 Google Data Cloud Summit 上,發布三項全新解決方案:Dataplex、Datastream 和 Analytics Hub Beta 版,將涵蓋旗下的資料庫和資料分析產品組合,為企業提供一個整合式資料平台,協助企業打破資料孤島。
評論
Google Cloud 在今天舉辦的 Google Data Cloud Summit 上,發布三項全新解決方案:Dataplex、Datastream 和 Analytics Hub Beta 版,將涵蓋旗下的資料庫和資料分析產品組合,為企業提供一個整合式資料平台,協助企業打破資料孤島,安全地預測業務成果並賦予使用者能力,在現今不斷變化的數位環境中即時制定明智的決策。
「Gartner 近期的問卷調查結果顯示,企業預估每年在品質不甚理想的資料上平均花費 $1,280 萬美元。」 因為資料散布在多個雲端和地端部署環境中的資料庫、資料湖泊、資料倉儲和資料市集內,企業除了要設法集中控管及管理應用程式,更需要即時整合資料來改善決策,加快創新腳步及提升客戶體驗。
Google Cloud 資料庫、資料分析及 Looker 商業智慧平台總經理暨副總裁 Gerrit Kazmaier 說明,企業須把資料視為具備將所有相關業務面向整合為一的能力。如今所有產業紛紛轉換為以數位化為主的業務型態,因為他們明白資料不但是創造價值的要素,同時也是推動數位轉型的關鍵。
透過運用 Google Cloud 的資料平台,客戶現在將能採用全方位且涵蓋完整資料生命週期的資料雲端方案,從業務執行系統到可進行未來預測和自動化作業的 AI 與機器學習工具等均包含在內。
Datastream-為客戶提供即時資料複製功能:目前提供 Beta 版體驗的 Datastream 提供全新的無伺服器異動資料擷取 (CDC) 和複製服務,讓客戶可以從 Oracle 和 MySQL 資料庫將資料串流即時擷取至 Google Cloud 服務,例如 BigQuery、可於 PostgreSQL 上執行的 Cloud SQL、Google Cloud Storage 和 Cloud Spanner。
企業可運用這項解決方案強化即時性數據分析功能、資料庫的複製速度以及事件驅動架構等。率先採用此方案的客戶 Schnuck Markets, Inc.運用 Datastream 簡化了架構,而將 Oracle 資料複製到 BigQuery 和 Cloud SQL 也不再會延遲數小時之久。
Analytics Hub-提高資料共用安全與易用性:Analytics Hub 可為企業創造安全且即時的資料交換服務,借助 Analytics Hub,企業可以在不論組織的內外部,安全地共享數據和洞察,包括動態儀表板和機器學習模型。
Analytics Hub 協助企業整合其數據資產,如將 Google 獨有數據、產業數據和公開數據整合一起。Analytics Hub 建立於 BigQuery 現行且普及的共享功能基礎上,目前已經使數千家企業透過數據分析進行革新,並透過不僅是單純共享數據的方法,來加快洞察的取得。
Dataplex-協助企業簡化資料管理作業:目前提供 Beta 版體驗的 Dataplex 是一種智慧資料網路架構,可提供單一整合式的分析體驗,能將 Google Cloud 和開放原始碼結合在一起,使企業能夠快速整理、保護、整合及分析其數據。
自動化的資料品質可讓數據資料學家和分析師利用自選工具確保資料的一致性,不須移動或複製資料即可統整並管理資料。Google 提供傑出的 AI 和機器學習功能,讓企業能夠利用內建的智慧資料來縮短處理繁複基礎架構的時間,並將更多心力轉而投入於發掘資料價值,以帶來更多業務成果。身為 Dataplex 早期客戶,Equifax 與 Google 合作致力將 Dataplex 納入自己的核心分析平台,不但簡化了工作負載,還建立了所有內部分析資料都適用的單一指令控管及管理平台。
在資料雲端高峰會舉辦期間,Google Cloud 也發表了資料庫和數據分析產品組合方面的其他最新消息:
基於對多雲端的策略性承諾,Google 陸續推出分別適用於 Microsoft Azure 的 BigQuery Omni Beta 版和 Looker 商業智慧平台正式版,藉此協助客戶取得跨雲端環境的關鍵資料深入分析結果。繼去年發表適用於 AWS 的 BigQuery Omni 後,這次發表的最新消息更延續了市場對此技術的展望。
BigQuery ML 異常偵測 可協助客戶透過使用 BigQuery 的內建機器學習功能,以更輕鬆的方式檢測異常資料模式。目前許多客戶將這項技術運用於多種用途,包括銀行詐欺偵測和生產製造不良原因分析。
Dataflow 為客戶提供了具備成本效益的快速串流分析解決方案。而預計於第三季推出的 Dataflow Prime 將提供業界領先的自動垂直擴充和數據管道正確配置技術,為客戶最大幅度地降低整體擁有成本。此外,Dataflow Prime 更內建了 AI 和機器學習技術,可以為客戶提供串流預測功能,例如時間序列分析、可主動識別瓶頸的智慧診斷功能,以及可提高使用率的自動微調功能。
Google 也將全代管關聯資料庫 Cloud Spanner 的入門價格降低 90%,連同即將推出的精細個體規模調整功能 (granular instance sizing) ,將同樣提供無限制的空間規模與99.999%的可用性,用以支援要求最苛刻的應用程式運作。BigQuery 與 Spanner 的整合功能也即將推出,可讓使用者透過 BigQuery 查詢 Spanner 中的交易資料,以便提供更豐富且即時的深入分析結果。而 Spanner 新增的 Key Visualizer 功能(目前為 Beta 版本),可提供互動式監控功能,方便開發人員迅速識別使用模式。此外,Cloud Bigtable 更具備可達 99.999%(5 9s) SLA 的讀取和寫入可用性。
資料來源:https://www.inside.com.tw/article/23648-google-data-cloud-summit
aws instance 在 矽谷牛的耕田筆記 Facebook 的最佳解答
本篇文章作為一個經驗談,探討於 AWS EKS 的環境中要如何避免 IP 發放完畢。
對於 Kubernetes 來說,CNI 負責的功能主要有兩個,分別是 IPAM 以及 Network Connectivity.
公有雲管理的 Kubernetes 為了讓整體操作環境可以與其雲端內的其他元件有更好的整合,通常都會開發屬於自己的 CNI 系統,譬如 Azure, AWS, Google 都有這方面的設計。
這種設計的最大好處就是可以將 Pod 使用的 IP地址透過本來 VPC 內的設計去管理,而本文要討論的就是 AWS EKS 環境中可能會遇到的 IP 地址分配問題。
EKS 預設會使用 AWS VPC CNI 來提供相關服務,其底層實作主要牽扯到底層 ENI 的配置與設定,主要會影響到底還有多少個 IP 地址可以用來分配給新的 Pod 使用。
從 Cluster 的角度來看,要先注意的 VPC 內的網段設定,如果一開始分割的子網段是/28,這情況下你整個叢集內只能有30個左右的 IP 地址可以發放,這數量根本完全不太夠使用。
從單一節點的角度來看,要注意每個節點上可以配置多少個 ENI 以及每個 ENI 能夠配置多少網卡
該 CNI 分配 IP 時會先想辦法把現有網卡上面能夠分配的 IP 填滿,一旦填滿就會創立新的網卡,接者繼續分配 IP,當運行的 Pod 數量超過節點上現時就沒有辦法繼續分配 IP。
官方針對這種情況提供了一個公式去計算
(Number of network interfaces for the instance type × (the number of IP addressess per network interface - 1)) + 2
對於一個 m5.large 的機器來說,支援三張 ENI,且每個都有 10 個 IP 可以分配,因此根據上述公式
(3*(10-1))+2 = 29, 意味 m5.large 的機器上最多只能運行29個不使用 hostnetwork:true 的 Pod。
為了解決這些問題,作者提出了兩個想法,分別是
1. Adding additional IPv4 CIDR blocks to VPC
2. Change VPC CNI to Calico CNI
對這兩個想法有興趣的可以參考原文囉
https://matiaszilli.medium.com/avoiding-ip-consumption-in-amazon-eks-32fc7320253d