大道至簡,原來 KISS 才是正確的?
kidneyweakx
May 20, 2025 (Updated: December 18, 2025)
Keep It Simple, Stupid
上面這句話是 Linux 內核設計的核心原則,而在現在潮流的框架和設計之下往往讓人忘掉了這點,最近尤其是在我接觸比較多的 DHT 區塊鏈項目遇到種種過度設計的問題,區塊鏈這個 fancy 的新技術太容易讓人模糊焦點。在前陣子我也陷入這個陷阱,趕緊在新站點第一篇文寫下來以此為戒。
# DHT 底層陷阱
近期因為在搞 DHT 的項目,深受其害,讓我娓娓道來。
因為多數的區塊鏈項目都會需要一個完整的 DHT ,也就是一個分散式儲存,整個表就是由多個用戶組合而成,而這種表大家都會因為從這邊出發,而開始挑選自己的共識演算法,和設計如何交流的。這也是陷阱的所在,為什麼呢?
陷阱在於大家的設計因為格式其實沒有統一、也有可能是在於 P2P的節點從哪邊來、也有會在寫入底層的資料格式是個很新但是很快就背拋棄的格式 (jsonld 之類的,舉個例但沒針對他 XD),這些陷阱很容易在項目剛立項就踩了。
前陣子看了一篇文章, [Smaller is Better](https://www.iroh.computer/blog/smaller-is-better ) ,在解釋他們設計陷入一個想要東又想要西的狀況,引用裡面的一段話,“沒有人希望 nginx 團隊發佈 postgres”,他們才專注於設計 DHT 的傳輸層,去專注構建可靠的同步,因為過多複雜的功能反而讓人很難兼容和插入,龐大的巨獸都是由簡單的設計而構成的
這讓我想到前陣子看到的 Github 採訪 Linus 的影片,在裡頭 Linus 將 Git 只作為他取代 CVS 設計的一個解決 Script,核心功能也在那幾週寫完了,而多年統計下來,他也只大多數用了 `git blame` `git log` 這幾個核心功能,主要是利用 sha1 的設計去解決 patch merge 很久的問題,整個核心的功能就圍繞這問題去做解決設計,再來將整體版本控制的基礎功能設計完成,甚至利用他先天的特性來做到本地的 git 樹,我覺得他就是目前分散式最應該崇尚的工具。
看完了 Git 的設計理念,簡直醍醐灌頂,這就是現在多數設計方要解決的問題,其實只要專注於設計一個能解決問題的工具就好,這工具甚至是 Script 都沒問題,只要他足夠有用,他很快就會成為一個有用的輪子。
# 區塊鏈項目方人人都在造輪子,沒有人在搞項目兼容
目前網路上多數人在罵以太方基金會,個人覺得這風向可能的確在使用者上面是會偏向覺得以太坊無能的,因為近期的升級 Blob 的 EIP-4844 和 Gas 的 EIP-1559 整體個人認為是沒有大幅度影響到用戶體驗,反而讓整體 EVM 生態體驗更割裂了。
在展開這問題之前,先來想以太坊基金會為何如此?我個人覺得是因為他們比較著重於在整體 EVM 核心的開發,畢竟在區塊鏈的鄙視鏈上做底層的是可以用鼻孔看人說話的 (說笑的,大多數核心開發者都十分好)所以落得現在大家覺得應用層好像相比以太坊剛出的時候沒什麼進步,這是一件蠻可悲的事,因為 6-7 年前大家在鏈上用的是 UniswapV2 而到現在也在用一樣的模型,只是可能前面是不同的食物或什麼 Swap。
而在多數接觸核心開發者的項目方,都想要搞自己的一套區塊鏈,而不注重兼容,而這些就導致以太坊反而變相在為這些項目開發兼容器,而成為現在 L2 比叫得出的 Defi 項目多的情況。
不管是 P2P 項目或是區塊鏈的項目方,我看到的都是在搞一套又一套越來越難的演算法,然後架個跨鏈橋到以太坊去吸取以太的流動性,而講講幹話,以太現在最大的應用就是那堆和他長一模一樣的區塊鏈,而新出來的 DHT 系統也大多數走了大家 10 年前在走的路線,在 ICO 前趕快搞一跳有噱頭的區塊鏈,現在區塊鏈可能不 Fancy ,可能要發明一些特殊的方法,說自己很快,兼容以太坊。
上面說這麼多,我還是很喜歡以太坊的,但這篇文章還是講述一個目前覺得生態上的小問題,大多數人的設計理念就是找出客戶的問題去解決它,但是往往想要往別人踏過的坑中再踏一次,導致現在同質性的 DHT 或是區塊鏈產品變得過於多,尤其是有一陣子一鍵發鏈那時候,讓很多問題到現在從簡單變得非常複雜。
# 由複雜砍到變簡單
那麼我覺得什麼是好的設計呢?其實現在大家看 Git 都會覺得驚嘆,怎麼那麼棒,Nginx 和 Postgre 也是幾個設計美妙的產品,那如果專注於看他做了什麼,就是提供相較其他同質產品一個穩定且簡單好用的工具。
現在我入坑於 DHT 系統,也深陷入想要設計一個 p2p 系統來解決自己特殊規格的問題,但目前其實區塊鏈就是很棒的一種 DHT ,如果利用現有區塊鏈如 Sui 或 EVM 加上 ZK 會不會比重新設計一個自架節點的模型好,我覺得以使用者角度絕對會,因為 web3 上最不缺的就是複雜的程式,在許多活動還要給錢教你,所以作為一個使用者的角度,其實不搞自己的節點不僅省下自己的麻煩,也省下用戶的麻煩。
剩下我還沒想通的解決方案是如同 Git 那樣的簡單又破壞式創新的設計,但是我覺得簡單的核心是一個相當重要的理念,畢竟如果面對用戶的是一個複雜的工具,我想受眾也會越來越複雜越來越奇怪。以此為戒,希望能不要搞出一個龐大的巨獸。
個人感想抒發一下,也是因為年初搞了一整套 DHT 系統,把 WASM 都搬來讓 P2P 可以簡單的 run 在任何地方,但複雜的 type 驗證、訊息處理、同步問題逼得我去找類似產品,發現簡單的 webRTC 就可以完成我 9 成的工作,且處理得相當優雅,這讓我相當尷尬,等於多個月的努力化作泡影,這也是自我成長的一環吧!