中心化
善用科技與中心化來創新工作流程
--
有些工作本身的特性是適合分散式、多點地來做。然而,有時因為工具不普及、法規等限制,反而變成了中心化最有效率。一旦限制消失時,就會產生去中心化。比方說,一旦有了 youtube 與剪接影片軟體、後製影片軟體之類的工具,一般人也可以自行製作影片,接著會沿生 youtuber、網紅文化,電視一方獨大的現象也會開始勢微。
有一些工作則剛好相反,本身的特性是適合集中地來做,但是因為某些限制存在,人們為了突破這些既有的限制只好訴諸去中心化的權宜之計,一旦隨著工具的發展或是外界的變化導致限制消失時,就會自然回歸中心化。
晶片架構
主流的硬體設計是一個功能對應一個封裝好的晶片、以印刷電路板組合數個不同功能的晶片,電流的訊號必須在印刷電路板上傳送相當長的距離才能完成運算。
然而,由於晶圓製造技術地不斷提高,現在的一些超高效能晶片則是採用 SoC (system-on-a-chip) 架構,即系統所有的功能全部做在一張晶片裡。我寫這篇文章時,使用的Macbook ,裡頭的 M1 晶片就是如此。硬體的設計採用了 SoC 這樣子的中心化架構,一方面節省了封裝成本、一方面電流需要跑的距離也縮小到肉眼幾乎看不見,於是製造成本、耗電量都可以降低,運算速度又可以再提高。
軟體產品布署
1995 年之前,網路還相當的緩慢,那個時代的軟體,多半是以光碟的形式傳播。使用者要先把軟體安裝在個人電腦裡才能使用軟體。
然而,當網路的速度愈來愈快時,雲端軟體就開始流行,許多的軟體的設計,都逐步改成商業邏輯、運算、資料都放在雲端伺服器上,使用者用瀏覽器即可以使用軟體。改用雲端軟體這種中心化的方式來布署軟體的話,廠商每次更新軟體,不再需要去考慮用戶的個人電腦環境,因為軟體布署在廠商自家的伺服器裡,這讓軟體的快速改版得以實現。
軟體商業邏輯的布署
早期的 CPU 比現在慢非常多,為了讓系統可以正常運作,出現了應用軟體的 n-tier 架構。Perl, PHP, Python, Ruby 之類的程式語言寫的後端程式,要布署在獨立的 application server 上,如此才能讓資料庫伺服器的負擔變小,從而讓系統順利運作。
然而,當硬體的效能大幅改善,加上後來版本的 SQL 也比原先版本的更具有簡潔的表達能力,在這種條件之下,相對穩定、不快速變動的商業邏輯直接以 SQL 來實作,由於資料與程式可以位落在同一台機器裡,省去了 IO 的開銷,運算效能也可以大幅地提昇。
頁面生成的邏輯
有一段時間,網路說快不快、說慢也不太慢,為了的使用者體驗,使用者介面 (UI) 會採用 SPA (single page application)。頁面生成的邏輯,則大量地從後端移往前端 (去中心化)。
然而,隨著網路的速度變快許多,搭配前端應用 htmx 之類的函式庫,頁面全部在後端生成就可以達成類似的效果。於是,使用者介面的邏輯大量往後端移動、集中化,省去了前後端軟體開發溝通的成本,軟體開發的效率可以大幅提高。
資料工程
過去,為了應用海量的企業資料,但是 data warehouse 的成本太高,只好採用 data lake ,用各種較低成本的解決方案 (去中心化) 去儲存資料。
然而,當 data warehouse 的速度與容量都大幅進展後,就可以再一次地把大量的資料全部放進 data warehouse ,這樣子一來,在 data warehouse 上執行的 SQL 即可取代一個又一個手刻的 MapReduce ,如此,資料清理、資料建模更改版本的速度自然可以提高。
總結
每個人都在談論的事稱之為流行、每個人都在做的事叫趨勢。中心化的作法如果符合了工作本身的特性,可以帶來極大的效能提昇,這是一種工作流程上的創新。但是,如果決策者在思考工作流程時,對於去中心化的作法有執著又或是盲從於潮流,就會妨礙這種創新。