因為看到這一篇文,讓我想要請教我很佩服,也曾經待過 LinkedIn 的實戰強者 Ian Tsai
,他的洞見與補充,真的是滿滿的功力跟學問。
經過他同意之後,想分享給更多人一起學習交流。相信可以對很多強者、想變強的強者、老闆、技術管理者帶來一些 AHA 與幫助。
原討論串:https://www.facebook.com/1069344389/posts/10220464611619871/?d=n
原討論串的文章:https://mp.weixin.qq.com/s/NhES8FHIhyfCxaPiM508EQ
—
以下來自 Ian:
1)
這篇文章的核心前提,是『重寫』
只有一開始就把很多東西做好,相對獨立且沒有過去包袱的專案才能這樣搞出十倍速,比如Voyager Mobile App
其他division 的產品與系統,有太多跟舊系統交雜在一起而動不了的,就不可能達到他講的3X3,因為有需要在那些系統上開發,就是會很慢
然後他還有一個假設就是做這個專案的從頭都是某個人做中間不換人,LinkedIn的平均工程師年資就是2.5年,所以,他在專案開始啟動的那兩年可能是可以的,兩年之後就很難說了,因為新加入的人也不可能可以這麼快入手,起碼以我觀察LinkedIn內部做Knowledge transfer 就是沒那麼快(但LinkedIn 可能是算快的)
針對這一點,現在需要搞軟體開發的公司,都應該要有一個Tools Team,而這個team 其中一項最重要的業務,就是開發維護一套公司內部使用的KMS系統,而這套系統的核心必定是一個Omni Search Engine,能夠跨越多個異質CMS 平台、EMail、IM、VCS 把所有的自然語言與程式語言的內容都能集成在搜尋結果(Google search result + web IDE)中呈現,沒有這個,只靠現成的外部工具提供的功能,找來的人平均會需要至少兩到三倍的時間才能進入情況(LinkedIn 有這個,超好用!)
最後一個需要的是高度客製化的CI系統,這種平台的CI系統不能有太多人為介入得要全自動,整個流水線過程中發生的任何錯誤,都能在第一時間全自動的通知『真正的負責人』,包含log、request context, call tree graph都提供,才能讓開發人員不會害怕系統出錯,而不必在開發階段搞很多很複雜的E2E Test
至於測試,這段老實說就是設計架構切割是不是有真的切在對的邊界上,一旦切錯,測試不是很難寫就是寫一堆沒用的,而且我在LinkedIn後期,還是有產品線為了衝Craftsmanship 指標搞出要求工程師 code coverage 90%的要求
我覺得對於backend,真正重要的是distributed Log management system,還有像是Datadog 這樣快速方便的 System Monitoring 服務,在寫程式的時候把這些一開始就根據業務邏輯規劃進去,然後確保觀察得到的與預測符合,這些在現在都比拼測試重要,因為Microservices 之後,對於很上游的Upstream 服務,要對每個Downstream Service 一開始就搞出範圍適當的defensive programming 是很麻煩的
這其實也是一個後端架構上的硬需求,也就是每一個Module 在software stack 上 ,對於他使用的任何Downstream Service 怎麼做Async + Failover + Timeout + Circuit Breaker + Monitoring & Instrumentation + Graceful Degradation + Logging & Alerting ... 都要有方案且預先做出來,不然想要App backend developer 在後端一邊搞Home Made solution 一邊還要拼出3X3 的效率也是不可能的。
2)
其實好的產品開發工程團隊,一定要持續規劃有人去conclude 系統中的共通需求,透過共識討論找到合適的解決方案,然後也一定要有農閒期,好讓這種共識得出的艱難改造有喘息的機會上線
這個佔總體開發量大概至少得要15% ~ 20%,也就是團隊如果有10個專職開發者,那至少要有一個名額(不同專長的人輪流)負責幫大家把刀磨利、把工具保養好
不然熵會把系統吃掉的。
Joey: 完全認同,全局優化,避免重工、多頭馬車、穀倉、無法相容異質系統的影響,永遠都在熵的影響下消耗掉所有產能。
就是那個「壯士斷腕」的決心,要把有能力的人拉出來搞全局的、長期的健壯性,很多公司跨不過去,除非已經有一個起家厝在養家了。
Ian:
問題就是方形的車輪滾不遠,做產品的團隊經營超過一年後還沒有建立閒置產能,那第二年就會在不同的專業領域接連出現技術落伍的現象,而好的工程師都是很敏感的,當老闆持續消耗自己的職業壽命賺錢或求生的時候,他自然會考慮繼續待著機會成本是否划算
這種考慮講個幾次,越是有野心、有衝勁、early adopter 類型的人才就會越早流失,而這是最糟糕的,因為這種人才是幫助公司導入新技術、保持團隊知識領先的關鍵火星塞,所以這種人被天擇掉了之後,剩下來的人不論在價值觀、還是行為慣性上都會更保守、更抗拒變化
這一但超過一個閥值(或者說事件地平線)就不可能回來,這間公司不論當時訂單多少、市場再大都要走入平庸了
當然,如果他家大業大而且上層還能持續透過併購招募新血,那或許還能透過慣性再小衝一段,但都是減緩衰退續命而已。
同時也有10000部Youtube影片,追蹤數超過62萬的網紅Bryan Wee,也在其Youtube影片中提到,...
failover 在 矽谷牛的耕田筆記 Facebook 八卦
Cloud Native 這個詞近年來非常熱門,CNCF 甚至也有針對這個詞給出了一個簡短的定義,然而對於每個使用者來說,要如何實踐這個定義則是百家爭鳴。我認為很認真地去探討到底什麼樣才算 Cloud Native 其實就跟很認真的探討什麼是 DevOps 一樣,就是一個沒有共識,沒有標準答案的問題。
本篇文章從 CNCF 的定義衍伸出 Cloud Native 帶來的優勢,並且針對這個領域介紹了十三種不同面向的科技樹,每個科技樹也都介紹了幾個常見的解決方案。
好處:
1. Speed
作者認為 Cloud Native 的應用程式要具有快速部署與快速開發的特性,擁有這些特性才有辦法更快地去根據市場需求而上線面對。眾多的雲端廠商都提供不同的解決方案讓部署應用程式愈來愈簡單,而 Cloud Native 相關的工具則是大量採用抽象化的方式去描述這類型的應用程式,讓需求可能更簡單與通用的部署到不同環境中。
2. Scalability and Availability
Cloud Native 的應用程式應該要可以無痛擴張來對面不論是面對一百個或是一百萬個客戶。底層所使用的資源應該都要根據當前的需求來動態配置,避免無謂的金錢成本浪費。此外自動化的 Failover 或是不同類型的部署策略(藍綠/金絲雀..等)也都可以整合到 Cloud native 的工具中。
3. Quality
Cloud Native 的應用程式建置時應該要保持不變性,這特性使得應用程式本身能夠提供良好的品質一致性。此外大部分的 Cloud Native 工具都是開放原始碼專案,這意味者使用時比較不會遇到 vendor lock-ins 的問題。
以下是作者列出來認為 Cloud Native 生態系中不可或缺的十三種面向,以及該面向中幾個知名專案。
相關領域
1. Microservices (Node.js/Kotlin,Golang)
2. CI/CD (Gitlab CICD/ Github Actions)
3. Container (Docker/Podmna/LXD)
4. Container Orchestration (Kubernetes/Google Cloud Run)
5. Infrasturcutre as Code (Terraform/Pulumi)
6. Secrets (Vault /Sealed Secrets)
7. Certificates (cert-manager/Google managerd certificates)
8. API Gateway (Ambassador/Kong)
9. Logging (EKF/Loki)
10. Monitoring (Prometheus/Grafana/Datadog)
11. Alerting (Prometheus Alertmanager/Grafana Alerts)
12. Tracing (Jaeger/Zipkin)
13. Service Mesh (Istio/Consul)
https://medium.com/quick-code/how-to-become-cloud-native-and-13-tools-to-get-you-there-861bcebb22bb
failover 在 方保僑 Francis Fong Facebook 八卦
香港資訊科技商會榮譽會長方保僑:
現時軟件及硬件會『死』都很正常,並不出奇,但港交所作為一間非常有錢的公司,竟然無『故障轉移(failover)』系統應對事故。一般系統出現故障都會有逃生系統,約15至20分鐘可以再令系統『起番』;今次事故港交所竟然要停市半日,是非常離譜。
(註: 係後備系統)
failover 在 故障轉移- 維基百科,自由的百科全書 的相關結果
在計算機術語中,故障轉移(英語:failover),即當活動的服務或應用意外終止時,快速啟用冗餘或備用的伺服器、系統、硬體或者網絡接替它們工作。 故障轉移(failover) ... ... <看更多>
failover 在 GV-Failover Server - 備份/備援/故障轉移- 影像管理軟體- 產品資訊 的相關結果
GV-Failover Server (故障轉移伺服器) 為一種影像備份伺服器,於GV-系統正常運作時本伺服器不會啟動錄影,但是當GV-系統發生以下狀況時可以立即接手錄存多台GV-系統上 ... ... <看更多>
failover 在 什麼是故障自動切換與回復(Failover/Failback)功能? 的相關結果
什麼是故障自動切換與回復(Failover/Failback)功能? · 提供4G/LTE (3G Fallback is optional) · Multi-WAN:雙SIM卡和GbE WAN,實現網絡彈性和可靠的連接 ... ... <看更多>