五个半小时
前期分享重點回顧
課間討論各個語言問題:
C:?代碼不夠復用,內存問題,適合開發底層核心組件(框架變動較少,需要掌控資源)。
CPP:語法復雜,入門檻高,內存問題,人力問題
JAVA:GC問題,代碼復雜 ,過于抽象。性能問題
GO:不支持面向對象,代碼復用差,GC問題
Python:性能問題,運行時的問題(語法,多線程,GIL)
核心就是:深入理解概念和原理,大量實踐去驗證原理,找到問題的根因(不放過任何一個重要的問題),經常總結復盤
深度剖析大廠求職本質原理
具體舉一個后臺面試的常見問題,緩存的設計:面試官可以從緩存的作用,數據淘汰方式的選擇這些基礎問題開始發問,如果候選人能七七八八講出來,就可以拋出“數據更新時候緩存不一致”這個問題了,大部分候選人并不知道延遲雙刪之類的套路,那這個問題就可以變成開放問題了,面試官可以引導候選人一步一步去推導不同數據更新的順序會導致什么樣的后果,在引導幾個場景后,問題就可以平滑的變成讓候選人設計一個方案,減小數據更新場景下緩存不一致導致的負面影響。這個過程就比較容易看出候選人在經過一系列分析后的思考與總結能力,也可能看出來候選人平時的一些思維方式.
社招面對的都是老手,那些職位匹配,技術棧匹配更容易獲得offer,是否高薪取決于HC的緊急和重要性(高等級HC),比如有些核心部門只招10級以上工程師,這些進來薪水是需要對齊平均水平的,如果你之前薪水很低,那漲幅就非常大!
面試是一個雙向選擇的過程,工作不是“求”來的,求也求不來,很多時候不聘用你僅僅是因為你運氣不好而已,校招不能進心意公司,可以通過社招(彎道超車)進去(可能職級和薪水會更高),一次不行,可以多試幾次,沒有必要杞人憂天,給自己太大的壓力,?該你的總會得到的,只是時機問題。
如何學習核心基礎知識-網絡
推薦文章:
計算機網絡硬核指南|網絡設計核心思想
Reactor是基于同步IO,事件驅動機制,reactor實現了一個被動事件接收和分發的模型,同步等待事件到來,并作出響應,Reactor實現相對簡單,對于耗時短的處理場景處理高效,同時接收多個服務請求,并且依次同步的處理它們的事件驅動程序
Proactor基于異步IO,異步接收和同時處理多個服務請求的事件驅動程序,處理速度快,Proactor性能更高,能夠處理耗時長的并發場景
Linux內核協議棧實現框架-分層思想
1.socket layer
2.tcp/udp layer(TCP,UDP)
3.L3 IP layer(route,netfilter,arp)
4.L2 link layer(driver)
5.hardware driver layer
推薦文章:
Linux Kernel TCP/IP Stack|Linux網絡硬核系列
Linux網絡子系統
傳統Linux網絡驅動的問題
中斷開銷突出,大量數據到來會觸發頻繁的中斷(softirq)開銷導致系統無法承受,
需要把包從內核緩沖區拷貝到用戶緩沖區,帶來系統調用和數據包復制的開銷,
對于很多網絡功能節點來說,TCP/IP協議并非是數據轉發環節所必需的,
NAPI/Netmap等雖然減少了內核到用戶空間的數據拷貝,但操作系統調度帶來的cache替換也會對性能產生負面影響。
改善iptables/netfilter的規模瓶頸,提高Linux內核協議棧IO性能,內核需要提供新解決方案,那就是eBPF/XDP框架
BPF 是 Linux內核中高度靈活和高效的類似虛擬機的技術,允許以安全的方式在各個掛鉤點執行字節碼。它用于許多Linux內核子系統,最突出的是網絡、跟蹤和安全(例如沙箱)。
XDP的全稱是:eXpress DataPath,XDP 是Linux內核中提供高性能、可編程的網絡數據包處理框架。
? 直接接管網卡的RX數據包(類似DPDK用戶態驅動)處理
? 通過運行BPF指令快速處理報文;
?? 和Linux協議棧無縫對接;
推薦文章:
Linux網絡新技術基石 |eBPF and XDP
在Kubernetes中要保證容器之間網絡互通,網絡至關重要。而Kubernetes本身并沒有自己實現容器網絡,而是通過插件化的方式自由接入進來。在容器網絡接入進來需要滿足如下基本原則:
Pod無論運行在任何節點都可以互相直接通信,而不需要借助NAT地址轉換實現。
Node與Pod可以互相通信,在不限制的前提下,Pod可以訪問任意網絡。
Pod擁有獨立的網絡棧,Pod看到自己的地址和外部看見的地址應該是一樣的,并且同個Pod內所有的容器共享同個網絡棧。
目前流行插件:Flannel、Calico、Weave、Contiv
lOverlay模式:Flannel(UDP、vxlan)、Weave、Calico(IPIP)
三層路由模式:Flannel(host-gw)、Calico(BGP)
Underlay網絡:Calico(BGP)
當前容器網絡依賴Linux 底層技術
網絡命名空間(NetworkNamespace),Veth Pair
網橋bridge和路由子系統
Iptables/Netfilter
ebpf和 XDP
網絡虛擬化 (NV) 是指將傳統上在硬件中交付的網絡資源抽象化到軟件中。NV 可以將多個物理網絡整合為一個基于軟件的虛擬網絡,或者可以將一個物理網絡劃分為多個隔離和獨立的虛擬網絡。
在傳統網絡環境中,一臺物理主機包含一個或多個網卡(NIC),要實現與其他物理主機之間的通信,需要通過自身的NIC連接到外部的網絡設施,如交換機上。
這種架構下,為了對應用進行隔離,往往是將一個應用部署在一臺物理設備上,這樣會存在兩個問題,
1)是某些應用大部分情況可能處于空閑狀態,
2)是當應用增多的時候,只能通過增加物理設備來解決擴展性問題。不管怎么樣,這種架構都會對物理資源造成極大的浪費。
虛擬機與虛擬機之間的通信,由虛擬交換機完成,虛擬網卡和虛擬交換機之間的鏈路也是虛擬的鏈路,整個主機內部構成了一個虛擬的網絡,如果虛擬機之間涉及到三層的網絡包轉發,則又由另外一個角色——虛擬路由器來完成。
虛擬網絡核心技術:
??虛擬路由器-vswitch(宿主機虛擬網絡封包轉發程序: 內核netfilter,DPDK,FPGA等)
??高性能網關-GW(NAT,EIP-GW,LB等)
?? APP性能優化:空間局部性和時間局部性
???協議棧調優:numa親和,中斷親和,軟中斷親和,軟中斷隊列大小,鄰居表大小,連接跟蹤表大小,TCP隊列調整,協議棧內存分配,擁塞控制算法優化
?? Bypass內核協議棧:DPDK,RDMA.
???網卡優化:驅動配置,offload,網卡隊列,智能網卡,高性能網卡。
???硬件加速器:ASIC、FPGA,網絡處理器,多核處理器
推薦文章:
Linux調度系統全景指南(終結篇-性能優化)
Linux問題分析與性能優化
擁塞控制的意義:?
解決對共享鏈路的帶寬分配問題
保持網絡通暢
小流無阻塞地通過網絡(FCT=RTT)
實現高效帶寬利用
維護流之間的公平性
采集信息:
? 丟包
? 隊列高度
? RTT
? INT信息(In-bandNetwork Telemetry,帶內網絡遙測技術)
傳統Linux網絡驅動的問題
中斷開銷突出,大量數據到來會觸發頻繁的中斷(softirq)開銷導致系統無法承受
需要把包從內核緩沖區拷貝到用戶緩沖區,帶來系統調用和數據包復制的開銷
對于很多網絡功能節點來說,TCP/IP協議并非是數據轉發環節所必需的
NAPI/Netmap等雖然減少了內核到用戶空間的數據拷貝,但操作系統調度帶來的cache替換也會對性能產生負面影響
1 DPDK無中斷方式直接操作網卡的接收和發送隊列2 軟中斷必須內核處理,DPDK UIO很薄,專門處理軟中斷(鏈路狀態通知仍必須采用中斷方式)。
DPDK網絡優化
?PMD用戶態驅動?CPU親緣性和獨占?內存大頁和降低內存訪問開銷?避免False Sharing?內存對齊?cache對齊?NUMA?減少進程上下文切換?分組預測機制?利用流水線并發?為了利用空間局部性?充分挖掘網卡的潛能
https://tonydeng.github.io/sdn-handbook/dpdk/introduction.html
RDMA 作為一種旁路內核的遠程內存直接訪問技術,被廣泛應用于數據密集型和計算密集型場景中,是高性能計算、機器學習、數據中心、海量存儲等領域的重要解決方案。
RDMA 具有零拷貝、協議棧卸載的特點。RDMA 將協議棧的實現下沉至RDMA網卡(RNIC),繞過內核直接訪問遠程內存中的數據
RDMA 與傳統 TCP/IP實現相比不僅節省了協議處理和數據拷貝所需的CPU資源,同時也提高了網絡吞吐量、降低了網絡通信時延
ASIC的特點是:面向特定用戶的需求,ASIC在批量生產時與通用集成電路相比具有體積更小、功耗更低、可靠性提高、性能提高、保密性增強、成本降低等優點。
FPGA的特點:加電時,FPGA芯片將EPROM中數據讀入片內編程RAM中,配置完成后,FPGA進入工作狀態。掉電后,FPGA恢復成白片,內部邏輯關系消失,因此FPGA能夠反復使用。理論上,FPGA允許無限次的編程。
ASIC需要較長的開發周期,風險較大
從設計成本來考慮,小批量上FPGA占優,大批量時,ASIC占優
相同的工藝和設計,在FPGA上的速度應該比ASIC跑得慢。因為FPGA內部是基于通用的結構,也就是LUT(lookup table),它可以實現加法器,組合邏輯等等,而ASIC,一般加法器就是加法器,而比較器就是比較器,FPGA結構上的通用性必然導致冗余
總的來說,就如同GPU和CPU一樣。GPU可以非常快的處理圖像,但是讓GPU去處理其他的東西,GPU表示攤手。CPU很多的運算都能處理,也能去處理圖像,只是慢而已。一旦你是沖著某個目的去的(ASIC)你為了實現這個目標,你各種沒節操沒下線都可以。如果你想要多方面兼顧(FPGA),你就不可能在每一個方面都做到最好,你必須trade-off。
Nitro項目將焦點放在這三成的虛擬化損耗上,通過定制化的硬件,將這些虛擬化損耗挪到定制的Nitro系統上,讓服務器上的資源基本上都能夠提供給用戶。
阿里神龍架構把VPC網絡虛擬化 offload到FPGA硬件。
核心思想:從下到上分層分析各層可能產生丟包場景,先查看關鍵信息,然后再分析確認;
了解收發包的原理,可以了解到丟包原因主要會涉及網卡設備、網卡驅動、內核協議棧,APP socket程序等。從下到上分層分析(各層可能性出現的丟包場景),然后查看關鍵信息(學會使用各種網絡排障工具),最終定位出網絡問題的原因。
本地服務器排查
> 硬件網卡丟包
> 網卡驅動丟包
> 以太網鏈路層丟包
> 網絡IP層丟包
> 傳輸層UDP/TCP丟包
> 應用層socket丟包
推薦文章:
云網絡丟包故障定位全景指南
技術前沿:智能故障定位系統,比如阿里的vtrace和齊天平臺。
文章:https://developer.aliyun.com/article/764841?spm=a2c6h.12873639.0.0.6117671ctzqYdB
論文:https://dl.acm.org/doi/abs/10.1145/3387514.3405851
阿里齊天平臺:https://developer.aliyun.com/article/727656
分享就像一把梯子,給愿意往上爬的人一些幫助。
PPT和錄制的視頻已經上傳到星球上了。這次5個多小時的分享,在場的同學都說已經可以回本了。
極客星球希望成為最有技術含量星球,決定做這個,我是非常認真的,盡最大努力提供技術和成長幫助!我愿把我畢生所學的知識和多年職場實戰經驗分享給大家,?幫你解決技術成長中困惑和迷茫,掃清無用的障礙,助你快速成長,物有所值!
目前還有一些優惠劵,歡迎大家加入極客星球,相互學習,共同進步!
五個多小時的分享,值得一個三連(一朵小紅花)嗎
- END -
看完一鍵三連在看,轉發,點贊
是對文章最大的贊賞,極客重生感謝你
推薦閱讀
每個人都有自己的人生節奏
?求點贊,在看,分享三連
總結
- 上一篇: 每个人都有自己的人生节奏
- 下一篇: 经典|深入理解 Go高性能网络编程模型