玩多多單澤兵:面對技術挑戰,從零開始,繞過多個坑,掌握搭建方法
原創【51CTO.com原創稿件】在WOT2016移動互聯網技術峰會平臺技術專場,玩多多CTO單澤兵先生給我們帶來了《初創企業之斷舍離》的精彩演講,與參會的朋友共同分享了初創公司做技術轉型的時候遇到并繞過的坑,學到并掌握的方法以及創業者的大不同。
一、現在的孩子正在經歷著一個特別糟糕的時代
談到為何會選擇做玩具租憑這一行業,單澤兵先生表示,現在很多小孩正在經歷著一個特別糟糕的時代,他的糟糕不是什么都沒有,相反是他們有的太多。現在的小朋友玩的玩具好多,從床鈴到車,各種搖搖車、各種自行車,各種玩具,應有盡有,但是他們真的玩得過來嗎?他們真心從這個玩具里獲取到他們想要的東西了嗎?其實不完全是,因為孩子的父母都經歷過物資匱乏的時代,所以當小朋友抱著父母的大腿在玩具柜面前說我要這,我要那的時候,家長都會毫不猶豫給他買了,導致了什么結果呢?家里面各種玩具堆成了山。
實際上,現在很多小孩子的很多玩具,大都用塑料盒封起來的,大多數都不玩了,就放在那看。為什么呢?他已經四歲半的,一歲、兩歲的玩具肯定就不會去玩了,就一直放在那。這些玩具送朋友不好意思,如果不送又覺得可惜,所以我們就提出一個想法叫玩具租賃,以租代售,除了陪伴類的玩具,除了必須的玩具,其他的玩具,不同的玩具,常識性的玩具都可以通過租賃來實現,更小朋友更多的嘗試機會。除了租賃以外,還提供上門安裝服務,幫你講解這個玩具怎么玩,甚至陪你的小朋友一起去把這個玩具可能性達到最高。
這個業務看起來貌似很簡單,是一個典型的電商業務,但實際上技術挑戰非常大。
二、面對技術挑戰,從零開始,逐步搭建
在創業初期,如何搞定技術難點,對玩多多提出來較大的挑戰。單澤兵先生在演講中提到,像Twitter、Facebook、Linkedin以及國內很多大公司的架構圖特別復雜,根據不適合我們這么小的業務。我們反復思考了系統架構是干什么的?總結出一些經驗。我們認為,系統架構對外和對內的職責不一樣,對外要解決三高(高可用、高并發、高可擴展),當用戶數量增長以后,架構可以穩定支撐并不受影響,當業務有一些變化能夠準確擴展或者順應業務的變化需求。對內是對研發人員,要能夠簡單理解架構,如果一個架構讓所有研發人員感覺特別復雜,效果就會下降。
上圖是我們認為一個最初級的網站,有Service層,有前端。前端通常是基于瀏覽器的,是一個Browser-based HTML Rending,只要把頁面based HTML返回給瀏覽器,就會正常去渲染。服務端剛開始也很簡單,通常會MVC,就是View、Contro,還會把Service單獨拎出來,就是邏輯不能寫在Contro里,也不能寫在Moden里。底下是持久層和第三方API,現在大家開發都會遇到好多API,要跟微信打交道,要跟短信打交道,要跟各種統計服務打交道,都是需要第三方API,會專門分成一層。
除了瀏覽器訪問之外,初創公司的流量主要來自哪兒?答案肯定是微信。要把應用放到微信里,一個HTML放在微信并不容易。另外,除了微信之外,APP、百度應用或者微博應用也可能會應用它,前端可以做一些,然后拿出來把前端分成DOM Contro和Client Model,再往下走前端就相對穩定了。在服務端,也會分成多個Service,不同的Service解決不同內容。提到SOA,所謂面向Service,這個并不是全部。再往下會變成除了SOA以外會用業務Service。這樣就會把業務Service和平臺Service分開,平臺Service是更底層,更偏數據存儲和邏輯處理,而業務Service是更多面向業務層面的分層,這就是所謂微服務的架構。
回頭來看,技術選型是做什么的?一個網站會分成很多層,技術選型不外乎是確定某一層到底用什么樣的技術,雖然看起來現在有好多技術的標簽,有React、JS、Spring、java,太豐富了,跟做玩具租賃一樣,我要成功去找到我最需要的那些工具。
另外,在技術選型前端應用和數據庫層應該分別怎么考慮。做前端核心考慮幾個點:一個是復用性,我們的應用大部分運行在微信里,不排除會在百度應用、新浪微博等等平臺上使用,前端的復用性非常重要,如果前端做好了,在新建一個APP時非常容易,而不需要做太多事情。二是復雜度,現在做一個前端功能很費勁,如果特別復雜會陷入一個坑,前端留得不夠的時候怎么辦?JS已經完全成為一門真正獨立的全站語言了,如果后端開發和其他開發不能及時補位,太復雜就會導致所有業務邏輯都會壓在前端,所有展示層任何一個改動都需要前端,就會形成瓶頸。三是SEO,大家可能覺得這個詞有點老,當真正創業時就會發現任何一個流量、一個PV都是特別寶貴。我們之所以在百度移動端搜索排名第一,是因為想了一些方法來做SEO,但是SEO和JS沖突,因為用JS渲染出來的頁面都是動態的。比如打開一個以純JS做的網站,像Gmail打開一看只有一行代碼,這時候百度、其他搜索引擎來抓就不解析了。我們跟百度進行深入交流,現在解析性能太差不搞這事,怎么辦?討論了很多方案,最后決定前端用React、JS來做,相對比較成熟,而且語法也比較自由。
后端的關注點,主要在語言選型是特別糾結的事,玩多多的團隊大部分來自于趕集網。趕集網是基于PHP開發的,雖然 PHP是公認的最好的語言,可是PHP有自己的問題,當規模做大了以后怎樣做異步、怎樣做分層、怎樣做符號,怎樣跟異構語言進行通訊,在趕集網遇到很多類似的問題。我們曾經想過把某些部分進行遷移,但后來發現成本太高,做起來很痛苦。另外,在做一個新業務,第一要考慮今后的擴展到底是什么樣的,如果完全不能擴展,只能看起來簡單,未來也會踩到坑。因此,在衡量以后我們選擇了用Java做服務端。在框架選擇、可維護性、今后服務可拓展性上確實有很多優勢。
持久層。我們在選擇持久層做的時候毫不猶豫現在了mysql,但是mysql是自建還是云端,糾結了一段時間,用云端的好處是可以自動備份、自動擴展,性能也比較好。如果是自建,因為所有服務是跑在云端的,自建就意味著在云主機里要開mysql使令,與選擇云主機有可能是一個普遍硬盤,而且云主機存儲本身沒有安全保障,壞了業務不能跑了,最后還是選擇了用云端mysql來做持久存儲。另外,redis也有一個坑,我們redis用量并不多,主要是在緩存和一些性能比較薄弱的地方,進行隊列處理或者緩存處理的業務,發現用某云的redis會少一些命令,不知道是為了安全性,還是為了復雜度降低,少一些命令應用會發現在本地開發完全正常,一個問題都沒有,一旦部署到云端發現跑不起來,然后就看日志找了一堆問題,發現官方解釋redis不支持Cloud Foundry命令,不能用,只好繞,跟Cloud Foundry相關的邏輯全干掉,重新部署。
選擇了技術結構,回顧和反思,在做技術選型先考慮的幾個點:一個是簡單,二是要是快,三是用對人。
三、帶著小小的夢想,讓世界能夠一點點變好
關于創業,創業者是一群什么樣的人?單澤兵先生認為,他們說不甘平凡,不甘平庸,心里有一點小小的夢想,這小小的夢想哪怕是改變一點點,讓這個世界能夠有一點點變好,他就會覺得很開心。
為了這個夢想,要吃很多苦,要被人質疑,要一周工作七天,這是所謂的創業者。創業者是一個長跑的過程,,沒有豐厚的薪資,大公司的誘惑,沒有豐厚的福利,沒有平臺支持,要離開舒適區。
那么,為什么還有那么多人創業?單澤兵先生認為,創業給人帶來的變化有三點:第一個是韌性,以前在公司做事,搞不定有老大擔著,現在所有事情到你手里,必須有結果,沒得選。創業者遇到問題后就必須得解決,所以就會磨練韌性。二是感恩,以前在大平臺里做事情,有很多平臺資源去調用,能夠用的資源更多。但初創公司是完全不一樣的,因此要珍惜你身邊的每一個人,他都有可能在你創業路上給你幫助。三是無畏,當你走入創業者當中時,就會發現沒有任何事情搞不定,所有事情都會有解決方案,不是無解的。經歷過這些后,很多挫折你也不再擔心、不再害怕。
“本文由單澤兵先生于2016年8月,在WOT2016移動互聯網技術峰會平臺技術專場《初創企業之斷舍離》主題演講整理而成。WOT2016大數據峰會將于2016年11月25-26日在北京粵財JW萬豪酒店召開,屆時,數十位大數據領域一線專家、數據技術先行者將齊聚現場,在圍繞機器學習、實時計算、系統架初創企業之斷舍離構、NoSQL技術實踐等前沿技術話題展開深度交流和溝通探討的同時,分享大數據領域最新實踐和最熱門的行業應用。了解WOT2016大數據技術峰會更多信息,請登陸大會官網:http://wot.51cto.com/2016bigdata/”
【51CTO原創稿件,合作站點轉載請注明原文作者和出處為51CTO.com】