chair是支付寶前端團隊推出的,基于node.js的web架構,适用于大部分的web應用。
本文簡要介紹chair的設計思想、功能架構和開發狀況。

一、chair的由來和設計思想
曆史上,支付寶前端項目都是直接基于java後端開發的。這種架構下,前端工程師做出網頁模闆(基于velocity模闆引擎的vm檔案),交給後端的java引擎渲染。支付寶采用的java引擎是名為sofa的mvc架構。
對于前端工程師來說,這種架構有很多不友善的地方。首先,需要了解後端的實作,并且依賴開發環境中的dev伺服器進行調試開發;其次,開發細節需要與後端的 java工程師溝通,交流成本相當大;最後,難以發起技術創新,因為隻要涉及後端的調整,推動起來非常困難。在前端技術日新月異的今天,這已經越來越成為 前端工程師心中的痛。
chair架構就是在這種背景下誕生的,我們希望通過加入一個node層,加速前端開發,提升研發效率,提高網站整體性能和系統的可維護性。
作為sofa的替代,chair直接與底層的java服務通信,而用戶端浏覽器則與chair通信,這樣就不使用sofa了。前端工程師是以可以完全不碰java,使用熟悉的javascript語言,同時在浏覽器和伺服器兩端進行快速疊代。
事實上,chair這個名字就是來自跟sofa的對比,因為兩者都能坐人,但是椅子(chair)比沙發(sofa)輕多了。支付寶已經有了沙發,我們想再為它添一把椅子。
chair為前端開發,帶來了很多便利。
提高了研發效率,前端工程師直接可以改動伺服器,避免了與java後端不必要的溝通成本。
更清晰的職責劃分,前端針對表現層(view)開發,後端針對業務和資料(controller和model)開發。
更好的⼯程化,前端自己就能完成單元測試、內建測試和自動釋出。
節省人工,同樣的元件(比如模闆和路由)隻需要寫一次,不用再為浏覽器和伺服器各寫一遍了。
預期的性能提升,node作為伺服器端時,有很強的http請求處理能力。
目前,chair已經投入了生産環境,與sofa各自支援着不同的支付寶web應用。預計不遠的将來,會出現更多基于chair的web應用。
二、chair的結構
chair的基礎代碼,是基于koa架構的再開發,使用的語言是下一代javascript——ecmascript 6,模闆引擎是nunjucks,但也可選用其他引擎。同時相容velocity模闆,現有絕⼤部分模闆⽂件⽆需修改也能正常渲染。
整個架構從浏覽器到伺服器,一共分成五層:
路由層(routers):适配不同路徑的http請求
中間件層(middlewares):加工http請求
控制器層(controllers):部署業務邏輯
服務層(services):提供内部的統一api,供不同業務調用
代理層(proxy):負責與java服務通信,提供統一格式的資料
除了模闆引擎以外,chair還部署了一些功能元件,比如mock(資料模拟)和logger(日志器)。
chair根據業務實際需求和現有架構高度定制。雖然從結構上看,chair可以提供完整的後端功能,但目前主要用于模闆渲染和路由。真正的業務邏輯和資料處理,還是要交給後端的java服務。
三、性能提升
node的加入,為很多功能提供了很大的性能改進。根據壓測的結果,使用chair(下圖的web)比使用原來的方案(下圖的portal),響應時間和系統負載能力至少提高一倍以上。
四、chair的開發進度
12月上旬,chair釋出了0.5版。除了修正bug,這一版主要添加了以下功能。
支援 cookie session, 不依賴 tair
支援連接配接 mysql資料庫
支援mvc stat 和 rpc stat 日志統計
支援統一導航 uninav 模闆
頁面資料模拟 pagemock
====================================分割線================================