若是有關心SF發展同窗確定經過很多渠道瞭解到咱們正在對它進行全站的重構,如今重構已經進入了尾聲,並且內部測試也已經通過了一個階段,因此不出意外的話,這個新版本過不了幾天就會出如今你們面前了。前端
那麼此次重構在系統上有什麼進步呢?web
在過去的一年,SF由於系統的制約發生了很多起宕機事故,有的時候甚至長達數小時之久,大大影響了用戶的體驗,所以在此次重構之初,咱們就下決心從系統層面開始解決這一問題。segmentfault
截止到2014年9月15日,你們看到的雖然仍是老版本的界面,可是實際上背後已經遷移到新的系統架構上了,而且在這段時間內沒有發生任何訪問故障或者宕機事故,新的系統架構威力初顯。後端
那麼SF之前的系統架構是什麼樣子呢?個人回答是沒有什麼架構,由於全部的服務都放在一臺服務器上,這個答案可能讓不少用戶大跌眼鏡。緩存
是的,受制於創辦之初的資金限制,咱們的網站只有一臺服務器。在後期訪問量逐漸增大的狀況下,這臺服務器情況不斷,若是有一天它忽然掛掉,那恢復它可就費事了。服務器
對於SF這樣的初創企業,本身創建數據中心顯然是性價比極低的選擇,可是系統架構的限制又逼迫咱們不得不作出改變。幸虧如今已經進入了雲時代,大量的基礎設施問題能夠交給更專業的服務商解決。通過一系列權衡,咱們最終選擇了青雲做爲咱們的雲主機提供商。架構
通常工做的就是這8臺服務器負載均衡
這一點在web服務器系統的設計上尤其突出,它是全部服務器中壓力最大的,所以機器數量也是最多。可是每臺服務器的配置倒是最小的 單核1G 的實例。性能
這種顆粒化的劃分,有如下幾個好處測試
好比上面這張圖就是一次典型的流量衝擊處理,在11點左右網站的訪問量陡增,前端web的負載所有到頂,根據它的增加曲線,咱們判斷這是一次惡意抓取。須要咱們在程序上作防禦的同時在這期間不影響用戶訪問,所以咱們將第四臺備用服務器的配置臨時調整到 4核2G,並在12點左右上線,系統負載立刻恢復到了正常水平
一般的上線流程就是直接把可發佈的代碼經過rsync之類的同步到線上機器。
在新版的SF中咱們根據PHP的特色改變了這一模式,咱們將代碼打包成phar發佈到服務器,每上線一次就從新打一個包,並將其文件名命名爲版本號,好比14.9.5.195755.1718937340.phar
。打包發佈有以下好處
除了咱們的雲主機,咱們還使用了以下雲服務
雖然咱們已經達成了一個milestone,可是後面要作的事情依然不少,而且咱們的後端服務能力會逐漸增強。咱們後續的工做會圍繞數據流的處理展開,咱們也會使用更多的技術來完善咱們的服務,Node.js,Go-lang,Scala,都是咱們的選項。也歡迎在這方面有經驗的工程師加入咱們