標籤:

知乎工程師們的開發環境是怎樣的?

在 Quora 上,曾有不少人問及 Quora 的開發環境,其中提到不少細節,例如大量使用 AWS 虛擬系統儘可能避免生產環境和開發環境的差異等等。在此對知乎工程師們的開發環境甚感興趣:使用的機器主要是什麼?操作系統?版本化管理工具?如何部署?

Quora 的工程師開發環境:http://www.quora.com/What-is-the-typical-development-environment-for-a-Quora-engineer


之前昆哥在「知乎工程師工資多少?其他待遇怎麼樣?」有簡要提到一些,我這裡詳細補充下。

生產環境

  • 知乎是租用的國內機房,BGP 線路。同時我們也在跟亞馬遜中國合作,開始嘗試 AWS。
  • 機器的操作系統都是 Debian,使用 Puppet 進行配置管理。
  • 知乎內部有一個叫做「Heroin」的上線工具,目前還只用於網站部署,可以讓工程師同學很方便地上線,並查看歷史上線紀錄。接下來我們會擴展這個工具,以適配各種不同的部署需求(大部分是 RPC 服務),我們的目標是 CD(Continuous Deployment)。每次上線都會在 Slack 里通知大家。
  • 網站在部署到生產環境以前會有一個簡單的灰度發布流程,以確保功能的正確性。
  • 報警監控系統結合了 Zabbix 和 Graphite,會有簡訊、郵件以及 Slack 提醒。
  • 日誌收集系統採用自己開發的 Kids,同時配合實時查看工具 Kids Explorer,可以很方便地定位錯誤。

開發環境

  • 知乎為每個工程師配備了 13 寸 Retina 屏幕的 MacBook Pro,23 寸戴爾顯示器,以及人體工學座椅。很多工程師自配了機械鍵盤,於是每天工作的時候你會聽到周圍一陣陣清脆的鍵盤聲傳來。實習生通常是 iMac 或者 Mac mini。這是我的工位照片:

  • 為了保證開發環境和生產環境的一致性,以及開發環境配置的統一,有了 Zhihu Boxen,這是一個基於 GitHub Boxen 和 Vagrant 的開發環境構建工具。近期也在嘗試採用 AWS 作為開發環境。
  • 平時的工作系統是 OS X(其實娛樂系統也是??),Vim 黨居多,但 PyCharm 黨近來有崛起之勢,此外還有 Sublime Text、IntelliJ IDEA、Atom、Xcode、Android Studio,以及只能仰望的 Emacs 黨。
  • 版本控制系統是 Git,使用 Jenkins 作為 CI 系統。
  • 我們統一使用 Phabricator 來進行 code review,bug tracking,任務管理和知識整理。
  • 我們使用 Buildout 作為 Python 後端的構建系統,同時搭建了私有的 PyPI 源,此外還有自己的 APT 源、NPM 源。

除此之外??

  • 知乎提供免費午餐,免費零食,免費水果,免費飲料,免費見各種名人的機會。
  • 翻牆網路
  • Gmail、Google Calendar、Google Docs、Slack 等是我們常用的辦公工具
  • 幾乎每天都會有的體育活動,籃球、足球、羽毛球、乒乓球、游泳等等,以及免費健身房。
  • 每月一次的 Tink Day,讓大家有機會從繁忙的工作中抽離出來,一起做一些基礎性的完善工作,或者一些有意思的小功能。
  • 每年一次的 Hackathon,35 小時一起完成一款產品。
  • 不定期會有各種類型的分享,也會邀請外部牛人來公司交流。
  • 年度 outing,這是一個挑戰自我的活動,可以是在群山中騎行,也可以是在草原上徒步。

硬體環境:

  • 開發工程師:Retina MBP 13 寸(8 GB 內存 + 2.6 ~ 2.8 GHz i5 CPU + 256 ~ 512 GB SSD) + Dell U2312 HM (23 寸,1920 x 1080 解析度)。
    我當初入職時是 MBP 13 寸(8 GB 內存 + 2.9 GHz i7 CPU + 512 GB 機械硬碟),現在入職都變成 Retina 屏了,電腦壞了或淘汰了都可以換新的 rMBP。
    我平時主要盯著 Dell 顯示器,MBP 的屏幕一般是放聊天窗口和郵件等,也就沒在意了。
    性能上的不足之處是沒有 SSD,除了開機慢倒也沒啥,反正我幾個月才關機一次(為了更新系統)。
  • 測試工程師:Retina MBP 13 寸 + Dell U2312 HM。
    福利是有幾十台測試機,包括各種 iPhone、iPad、iPod、Android 機型,可以自己用。
    還有一些 Mac Mini 用來做測試和構建。
  • 產品設計師:iMac / Retina MBP 15 寸 + Dell U2312 HM。
    兩者二選一。之前是都配 iMac,直到有的人需要移動性,就換 MBP 了。

大部分開發工程師不用滑鼠,一部分會自帶機械鍵盤。
筆記本電腦可帶回家辦公,也可使用自己的電腦。
如果覺得配置不夠,還能加錢升級配置。離職時按 3 ~ 4 年(忘記具體年限了)折舊返還剩餘金額。如果使用滿 3、4 年,可以當成個人財產帶走。

軟體環境:
對測試和產品設計不了解,就只說開發了。

  • 操作系統:OS X。
    此外還有 @高昌健 提到的 Zhihu Boxen,用來提供開發環境的虛擬機,避免因 OS X 與 Debian 的不同,而導致上線時遇到兼容性 bug。
    不過知乎日報並沒有使用該工具,因為使用的庫兼容性比較好,也不需要那些附加的功能。另一個原因是我不喜歡用虛擬機。
  • 編輯器 / IDE:
    後端:大部分用 VIM,少數用 PyCharm,還有一小撮用 Emacs。
    前端:Sublime Text、TextMate、Atom、VIM、PyCharm。
    iOS:XCode、AppCode。
    Android:Android Studio。
    基礎架構:VIM、Emacs。
  • 版本控制:Git。
    入職當天就能訪問知乎主站的代碼了,沒有什麼需要對自己的員工保密的代碼。
  • 通訊:Slack、Google Talk、Email、電話。
    很多內部服務會和它們集成。
  • 任務管理:Phabricator。
    Web 開發流程大致是在 Phabricator 上建立 task -&> 提交 diff 並關聯 task -&> 單元測試 -&> reviewer 審查代碼 -&> 合併 diff -&> 上線測試 -&> 關閉 task。
    某些項目、服務因為人手不足,只有一個開發者,連 reviewer 都沒有,所以不一定會用這麼複雜的流程。
    至於移動開發和基礎架構的開發,我就不甚清楚了。
  • 部署:
    Web 後端:
    本地部署就不提了,提交 diff 等待 review 時會觸發事件,CI 可根據配置自動構建代碼並測試。
    主站需要上線時,使用內部開發的 Heroin 系統選擇上線到測試環境或生產環境。隨後,Heroin 的 bot 會在 Slack 里通知上線的情況。

    其他項目和服務暫時沒那麼好的待遇,需要手動去上線(其實也就一行命令),用到的工具大致是 Fabric + Buildout + Supervisor + Gunicorn + Tornado。
    Fabric 用來執行遠程命令,根據事先寫好的腳本,執行更新代碼、構建、關聯配置、重啟應用等事項。
    Buildout 用來安裝 Python 的第三方庫。搭建了私有的 PyPI 源,用來加快下載代碼的速度,以及發布私有的庫。
    Supervisor 用來管理應用的進程。
    Gunicorn 主要是用來在伺服器內做負載均衡的,比直接掛 nginx 的效果好。
    Tornado 用於運行 Web 服務。

    移動客戶端:
    不是很熟悉,只能介紹一些我看到的。
    需要構建 iOS 客戶端的測試版時,會往一台 Mac Mini 上發起命令,然後自動開始構建。構建完成時,會語音播報更新內容,提醒大家更新;並且郵件發送更新通知,可以用 TestFlight 更新。
    不過 TestFlight 被 Apple 收購後變得不好用了,於是改成在 CI 上發布測試版了,可在網頁上直接安裝。

  • 輔助工具:
    日誌:使用內部的 Kids 服務,將 logging 收集到日誌伺服器。可在 Web 頁面實時監控已訂閱的日誌,或者搜索所有的錯誤日誌。
    性能監控:使用 Graphite 和 descartes 展示 statsd 發送的記錄。
    警報:通過簡訊、郵件、Google Talk、Slack 等各種方式通知相關的負責人,內容有可用內存不足、硬碟剩餘空間不足、load 過高、任務隊列過長等。
    日報:通過郵件發送一些技術指標。
    還有一些工具看上去配置好複雜,不會用=。=

網路環境:

  • 能正常訪問 Google、Twitter、Youtube……
  • 平時網速還好,遇到萌妹入職導致一堆人轉髮帶照片的郵件,或者 OS X / iOS 發布新版本,就很蛋疼了。
  • 有專職網管負責解決各種疑難雜症。

那個啥,你們啥時候出個WindowsPhone的客戶端啊?
包括知乎和知乎日報。


推薦閱讀:

如何在知乎上合理並有效地搭訕女生?
知乎上有哪些值得關注的「程序員」問題?
為什麼 iOS 的複製粘貼功能體驗如此差?
知乎歷史上有哪些有趣的「哏」或者「切口」?
對知乎內容使用爬蟲爬取數據,為什麼會遇到403問題?

TAG:知乎 |