知乎工程師們的開發環境是怎樣的?
在 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:知乎 |