創業公司更適合用 Go 語言,那大公司呢?

以下文章來源於獨墅湖寫碼 ,作者獨墅湖主人

創業公司更適合用 Go 語言,那大公司呢?

對於創業公司來說,人少資源少、產品又要求快速上線。選擇合適的技術棧非常重要,本文就談談我們早期選擇後端語言時的考量。


流行的後端語言,有 Java/Python/Ruby/PHP 等,首先排除的是 Python/Ruby,在明星創業公司裡面,這兩種語言用的賊多,比如我的老東家友盟是 Ruby 起家,知名論壇知乎是 Python 起家,那為啥要排除這哥倆呢?太小眾了人難招。


於是 PHP 也被拿出來討論,說實話這是我最不願意的一門語言,但是考慮到人好招人呀,3000 塊錢招一個 PHP 碼農還會寫模版不香嘛。但是研究了PHP 半天后就放棄了,為啥?PHP 已經變得很複雜了!


現在的 PHP 已經堪比 Java 了還多了好多 Java 沒有的功能,本來是希望PHP門檻低好招人,這麼一來人是招到了卻無法掌握 PHP 那有何用呢,豈不是很沒面子?


然後就是 Java,說實話我們最應該選 Java 的。因為我本身就是 Java 出身,寫過 Android、 寫過 Spring,還給 SpringBoot 寫過好多入門文章。說不上大牛但是用起來必然沒啥問題,但是畢竟是搞過的人,太瞭解 Spring 了,所以不用。


為啥呢?

Java 程序員工資高,雖然好招但是不好養。


另外,用 Spring 心智負擔高,我覺得 Spring 的優點就是它的缺點,Spring 太面面俱到了。你能用到的功能 Spring 都可以通過 “簡單的” 配置解決。這正是問題所在,幹啥都要查文檔、看文檔做配置,對於老手來說經驗多了配置起來很快,但是新手就難了。


一個很小的功能要閱讀一篇很長的文檔,瞭解這個功能的前前後後,然後寫下兩行配置。我覺得這是反人類的,我們是寫代碼的又不是寫配置的,把自己搞成配置工程師不悲哀嗎!另一個問題是,過一段時間我竟然忘記了那個配置的精妙之處。真不怨我不努力,打開 spring.io 你就知道啥是汪洋大海、啥是星斗滿天。把 Spring 的文檔都打印出來,感覺要把我們的辦公室都塞滿了。


關於 Java 的另一個問題是部署,Java 部署還要裝容器,說實話我第一次知道 Java 部署還要裝容器的時候是很驚訝的!你作為一個網絡語言為啥不能自己跑呢?你知道 Tomcat 嘛?你知道 HotSpot 嘛?你知道 Servlet 嘛?全是心智負擔,其實在開發端本來不應該關注這些的,但是你不瞭解你就不是一個成熟的Java工程師。


於是只能選 Go 了。


開發簡單!

簡單到一週學會就可以寫線上代碼。首先這是由於 Go 語言本身的設計,Go 語言在過去10年間幾乎沒有大的變化,從設計之初就秉承這樣的設計理念 —— LESS is MORE!


創業公司更適合用 Go 語言,那大公司呢?


所以無論你之前的用的是 C、Java 還是 PHP 都能夠快速的上手 Go 語言。這給招人提供了廣闊的空間。同樣 Go 的生態也秉承了 LESS is MORE 的 Go 語言哲學,大部分的 Go 相關庫都是開箱既用,只需要查閱少量的文檔就可以使用了。


由於簡單,心智負擔少,開發也變得更快、更容易。比如實現一個 OAuth 系統,用 Java 我需要看一上午的文檔再寫 3-400 百行代碼。但是用 Go 直接寫下 500-600 行代碼就搞定了,這就是沒心智負擔。如果遇到了小程序那種看起來像 OAuth 但是實際不是 OAuth 的接口,用 Spring 就要自定義一下,但是用 Go 還是原來那樣——只關注業務邏輯自身,就是快。


部署簡單


用 Java 真是苦呀!在創業公司開發就是運維,一個人要幹三個人的活,用 Java 幹不過來呀。但是用 Go 就簡單了,本地打包一個二進制傳到服務運行就好了沒有虛擬機沒有容器,這讓我想起來曾經年輕的時候在一臺破爛的服務器上部署 WordPress 的那個下午 —— 上傳、解壓、搞定。


如果你們公司用 Docker,那就更爽了,用 Docker 來部署 Go 應用是最快的。並且容器技術 Docker 本身也是用 Go 寫的,k8s 也是用 Go 寫的。真的沒見過比 Go 更容易部署的語言了。


跑得快!


Go 的性能在以上所有語言裡都是最快的。Python/Ruby/PHP 這都是動態語言系的,存在各種性能問題而且內存佔用大。Java 是編譯+解釋的語言,雖然比上面那些都好,但是畢竟還要運行個JVM,一個空對象都要佔用十幾個字節,整體內存消耗必然也高,從而導致以上這些語言對服務器會有更高的要求。要配置更大的內存、更好的 CPU 才能達到 Go 的水平。


通常大公司都還會有專門的 JVM 調優的崗位,讓 JVM 在某些場景下跑的更快。但是對於 Go 來說,跑得快是白送的,曾經聽一個老司機說過,把 Ruby 換成 Go 之後,快到不好意思…


對於創業公司來說,初期要嚴格控制成本的,能節省的儘量節省,我們用一臺 Go 服務器達到了原來兩臺 Python 服務器才能做到的事情,難道不香嗎?


關於生態


肯定有人會出來說,Go 的生態不行呀,你搞個分佈式試試。說實話 Go 搞分佈式輪子確實沒有 Java 造的好、造的多。但是對於創業公司來說,前期的重點在於快,快速出產品驗證IDEA,如果產品成功,我們可以慢慢招人過渡到大型系統,而不是一開始就搞一個可能會用到的大型系統。


另外,Go 的生態雖然沒有 Java 那麼強盛但是也不弱,基本你能用到的都有成熟的解決方案,比如用 go-kit、go-micro 也是分分鐘搭建分佈式系統。


目前我們的後臺系統跑了6、7個服務,全部是用 Go 寫的,這些服務每天都會有新的發佈,我們一次發佈大概只需要不到10秒的時間。系統核心是一個基於 NATs 的高吞吐量的消息系統,Web 框架我們用的是 一個叫 Echo 的框架。


創業公司更適合用 Go 語言,那大公司呢?


不過 Go 語言的框架都很快,沒必要執著。我們的所有服務都是基於 API 的,沒有使用模版渲染,前端調用 API 自己渲染。架構參考了一個叫 Drone 的開源項目,感覺它的架構很好值得學習。


對於創業公司來說,我覺得可以考慮 Go 了,其實大公司也很多用 Go 的了,比如知乎已經把很多原來的 Python 服務用 Go 重寫了,知名二次元網站B站已經全部用 Go 了。招人門檻低、開發心智負擔少、開發速度快、部署快難道這不是最理想的語言嗎?

有不服的歡迎來辯!也歡迎諮詢,不收費,謝謝。覺得有用的話就關注一下吧,或者點個 在看 支持一下。


分享到:


相關文章: