倪朋飛:最好的學習方式一定是帶着問題學習 | AMA 集錦

極客時間2週年特邀100位在產品、架構、測試、運維、人工智能、管理、編程語言、運營等各個領域的專家,在 App 內與用戶交流互動。

InfoQ 特別整理了微軟資深工程師、Kubernetes項目維護者倪朋飛與用戶的互動和問答集錦,分享給大家。

你好,我是倪朋飛,微軟資深工程師,Kubernetes項目維護者,極客時間專欄作者。今天我來嘗試AMA,大家關於Linux、雲計算、容器相關的問題都可以問我,我會盡我所能逐一回答,希望能和極客時間一起把部落打造爲行業內最好的技術交流社區,大家燃起來。

Q1:您好,我在實際部署和實踐過程中,多Pod間,通過service通信出現過一個問題:一個Pod提供restful接口,另一個Pod中的應用頻繁請求接口(例如qps 50)會造成接口短時間內沒響應,過一會後(大約10-30幾s左右)又正常有響應了。這個可能是什麼原因呢?有什麼排查思路嗎?

倪朋飛:可以排查一下被調Pod的資源使用情況。

Q2:老師您好,您覺得OpenShift對於工業IoT的運維是一個重要提升嗎?但是使用微軟的Azure平臺,是不是一個更好更專業的選擇?

倪朋飛:嗯,是的,簡化了很多應用的管理和運維。使用雲的話就更省事了,雜活累活都已經幫你處理好了,只要關注自己業務就可以。

Q3:老師你好,我想問一下 K8s 社區對與發佈已經超過9個月的版本還會進行 bugfix 嗎?K8s 社區每三個月發一個版本,看 GitHub 上說社區只維護最新的三個版本,也就是說一個版本僅維護 9 個月,但在生產環境中以這麼快的速度升級有點不太合理,所以想知道用老點的版本會不會有問題。

倪朋飛:不會修復了,建議適當更新,不一定每個版本都需要升級,但最好使用還在維護中的版本。

Q4:倪老師,能說說運維要對Shell和Python掌握到什麼程度呢?以及老師能否推薦一些學習資料和書籍呢?運維是只需要學Python自動化運維方向的知識就行還是也需要學習Python爬蟲和Web呢?

倪朋飛:感覺上都要精通吧。這方面的書籍挺多的,到京東搜兩本評價還不錯的就可以,不用多,實踐+原理吃透。我的理解運維一般不需要爬蟲知識,但對系統一定要熟悉。

Q5:騰訊雲服務器Linux連接不上smtp.partner.outlook.cn(25)。安全策略已經允許了所有出口規則。Linux對出口規則是怎麼限制管理的呢?

倪朋飛:Linux內部可以用iptables來控制訪問,外部可以用雲上的安全組控制,可以檢查下這兩個地方是不是有問題。

Q6:老師,有個問題困惑了我很久,什麼情況下使用多線程能提高性能?如果CPU的核數比線程數少,並且都是執行的計算操作,感覺不一定可以提高系統性能。如果是單核的話,多線程是不是不能提升性能,反而因爲上下文的遷入遷出增加性能開銷。

倪朋飛:多線程可以利用多個核心,比如單線程的時候CPU最多可以用到100%,而多線程可以用到800%(假設8核心的話)。很多情況下都可以提升性能,因爲線程不總是以CPU 100%運行。

Q7:用K8s管理微服務Spring Cloud比如管理300個微服務有什麼好的工具或建議,以及Pipeline這塊代碼Deploy到K8s中這種幾百個微服務怎麼區分

倪朋飛:可以用Helm來管理,不同服務用Helm chart配置。至於區分,最簡單的使用不同的namespace

Q8:朋飛老師好,我在工作中使用K8s時遇到了一個問題請教一下:官方的 client-go客戶端(版本是1.14.7)調用集羣健康檢查接口時偶爾會超時失聯(頻率不定有時幾天有時幾個星期纔出現,每次超時10幾分鐘後才能自動恢復)。主動重啓應用後即可立即恢復連接。我嘗試過在代碼中清空transport和強制dialer均未能解決掉這個問題。

倪朋飛:應該是個已知問題,可以參考一下:Client should expose a mechanism to close underlying TCP connections

Q9:生產環境,怎麼樣確認一個Java Spring Boot項目的Xmx Xms XSS到底怎麼設置? 以及用容器的話,資源怎麼分配? 有這方面的參考或者思路嘛?

倪朋飛:第一個問題,可以考慮先根據系統內存設置一個估計值,然後再根據歷史監控調整。第二個問題,Java 8已經支持了Docker,JVM可以根據容器內存限制調整JVM內存分配;舊版本需要把Xmx設置到容器啓動參數中。

Q10:Java在容器上性能是不是比Golang這些損失多?除了Docker還有其他生產級容器可選麼?除了K8s等容器方案,還有別的有潛力的應用發佈方案麼?

倪朋飛:1. 沒有聽說,我的理解他們應該是一樣的

2. Containerd現在已經可以獨立使用了

3. K8s現在是最主流的方案,不差錢的話,OpenShift也不錯

Q11:老師能說一下Docker源碼的閱讀順序嗎?畢竟Docker包含好幾個二進制程序。

倪朋飛:先整體上把組件和內部模塊串起來,看看Docker、Containerd、runC是怎麼交互的,每個組件內部又都有哪些內部模塊,最後再各個模塊細看吧。

Q12:老師好,我最近在閱讀Docker的源碼,比較艱難:

第一:代碼中錯綜複雜的調用,閱讀起來容易失去信心;

第二:對相關知識點的理解不足,以及裏面包含大量第三方庫,閱讀起來很容易阻塞;

第三:代碼都能看懂,但並不知其意義何在,其實就是不知作者這麼設計的目的。

針對第一點,我嘗試用時序圖構建調用關係,目前看來效果還不錯,還能看出其每個函數的職責;

第二點,我是沒辦法,必需要去學習相關知識點內容;

第三點,也是比較麻煩的一點,目前我是去搜索相關文檔,甚至是作者在提交此處代碼的commit message。

老師對於閱讀源碼有什麼經驗或許建議嗎?目前我個人的體驗是艱辛且苦澀。

倪朋飛:一般是先用一用,熟悉文檔和基本概念,然後再從一個主線(比如Docker run)開始弄清楚組件之間的調用關係,最後再去看每個組件內部的實現細節。畫圖的方式不錯,畫出來所有組件、每個組件內部的模塊還有模塊之間的交互,再去看細節就不容易迷失。

Q13:倪老師,請問Golang的協程主要的優勢體現在CPU密集型上還是IO密集型程序上?怎樣理解多核心和用戶態協程的關係

倪朋飛:第一個問題,協程的主要優勢在於併發處理變得簡單了,對CPU密集型和IO密集型都適用。第二個問題,協程一般都會基於多線程和多進程充分利用多個核心,而同一線程上又可以輕易運行大量協程。


2 年時間,極客時間已經爲用戶交付了 94 門課程,涵蓋產品、架構、測試、運維、人工智能、管理、編程語言、運營等多個領域。9月「部落」上線後,用戶又有了新的思考和討論的聚集地。歡迎你加入「部落」,和大咖們共同探討技術問題,和我們一起探索新的學習方式。

相關文章:
《如何迅速分析出系統 CPU 的瓶頸在哪裏?》
《如何快速排查線上 Linux 系統故障?| 極客時間》
《如何基於 Kubernetes 構建完整的 DevOps 流水線》
瞭解更多請搜索:倪朋飛Linux容器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章