MaxCompute幫助創業公司中減輕MySQL存儲壓力


在我們公司初創的時候,組齊了三人的團隊就開始做產品研發。當時整條業務線的東西都需要我們自己寫,要在短時間內把東西做出來,效率是非常關鍵的。
我們的產品模式本身其實是需要驗證的。創業有很多不確定性,在上線之前沒人能知道,我們的一個項目究竟能達到多大的規模,能做到什麼樣。所以這時技術的重要性就在於快速把東西做出來。
我們最終選擇Java,一方麵是因為我們團隊已經有了一定的寫Java的基礎,從最開始的搭建到後來初具規模也能Hold住,基數很穩;另一方麵是因為Java有很大的用戶量,人才儲備非常多,我們看中了它規模化的能力。
從某種意義上來說,Java的開發效率確實有些低。但是後來由於選型的原因,我們還是堅持使用了Java。
在“Java如何寫得更方便易懂”這方麵,Java一直在改進。之前的Java設計思想是模塊之間要做到可擴展,崇尚配置和代碼分離。
現在Java社區在向高效開發比較理智的方向去做,各種語言慢慢趨向一致。
Java 8
我們在使用Java 8之前都是用麵向對象的方式去思考、去處置代碼。
當時有人貼出了Java 8,用一個Lanbda可以從頭寫到尾,十幾二十行的Lambda能做很多事情。
引入這個技術棧之後,我們發現隻要控製住適用的範圍,它就是一個非常好用的東西。
我覺得無論是做Web開發還是服務端開發,都有一個非常經典的場景。在Java裏我們提倡分層,如果批量去做很容易寫成下圖中的代碼。
這段代碼的核心是Map,它要做的就是把兩個對象進行轉換,把一個List轉換成另一個List。
StreamAPI不單有編程方式上的提升,還可以在內部自行去做並發處理。
大家不用Java有很多原因,比如運維覺得它很難部署,架構師則會考慮第三方API在二次反射的時候是否能讀到Java。
其實Java是主流的Java,隻要還活著的開源項目基本上都已經支持Java。
SpringBoot到目前為止已經非常成熟了,我們身邊有很多最近才創業的朋友基本上用的都是這套技術棧。
它的特點是把Spring全家桶用一個看起來很簡單美好的方式進行了整合,實際上它不是對Spring技術棧的重構,而是把Spring技術棧做了封裝和組合。
現在的Spring全家桶更多了。針對Web開發,基本上可以完成全部的選型,並封裝得很漂亮。
在2015年Spring Boot還沒有那麼火的時候,我們做了一個類似的整合工作,用到了Spring 4、Spring MVC。
Spring4目前已經相對成熟穩定。Spring的發展經曆了一個變更過程,從最開始的XML,在當時也算輕量級;到2.5的時候有了注解,簡化了很多事情;在Java 3的時候加入了Spring Config。
Spring4相對於Spring 3加了一些Java 8的支持。
Spring MVC
如圖是MVC的一個例子。
我們為了解決ORM使用繁瑣的問題,自己寫了Daogen。這個工具兼具了靈活性和規範性,它可以統一代碼規範,強製做命名,並在編譯期自動生成XML。
我們當時引入Jade4j框架,借用前端基本在用的模版引擎,在前端用Js可以跑,後端用Java也能跑。
現在Java比較火的框架叫Thymeleaf,這個框架也很好。基於我們想用前端來寫模版,所以當時還是選擇了Jade4j。


在第一個版本上線之後,“從0到1”階段完成,這時我們又將麵臨不一樣的問題。
隨著業務規模擴大,線上故障、可用性、質量不能忽略,團隊也要擴張,並提出新的要求。要求主要是質量、可見性和可用性三個方麵。
團隊擴張
因為條件限製,我們的招聘工作進行艱難。退而求其次,我們會選擇一些資質較好、主動性較強的應屆生或一兩年工作經驗的員工做培養。
我們需要構建一個人才梯隊,以“一個帶兩個”的工作模式,把團隊組織成一個有梯隊的團隊。
我們是單代碼倉庫,當代碼不斷增加,前期又做了很多不清楚的模型或代碼的時候,必須要去整理清楚。
我最大的經驗就是重構不合理的業務模型,業務模型是最重要的。
Devops可以做線上的無縫發布,做版本的回滾重啟。測試環境要高可用。
可用性-應用監控
我們現在用Cat最多的是報錯功能。Java的錯誤機製還是很完整的,如果出現什麼線上問題,報錯基本都能發現。我們主要做了兩件事,一是把所有異常都發報警短信,另一件事是把所有異常放到一個電視機上,便於我們隨時監控。
性能評估是其次,畢竟QPS隻有1。
可見性-日誌管理ELK可以用於做日誌收集、業務監控、性能監控,甚至可以用來做數據分析。
但是因為它的數據量特別大,對服務器的性能調優要求比較高,所以我們最終隻保留了日誌管理功能。
任何公司都有報表需求,我們的做法是跑個SQL把數據存下來然後給老板看。後期有些數據量較大,Mysql存儲有壓力,所以我們就用了阿裏雲的MaxCompute(原ODPS,https://www.aliyun.com/product/odps)。


吃自己的狗糧:在我們團隊是真正做開發的人來選型,不是由老板決定。或許大公司的選型是“自上而下”,而我們團隊是“自下而上”的,這一點更適合創業公司。
懶是一種美德:技術選型上我們選擇更適合的,可能會提高開發效率或運營水平,但也可能不行。所以要去不斷嚐試,我們覺得這是值得的。我們為了追求更高的生產效率,也會寫很多的小工具。
找到實用和好奇心的平衡點:到了整天做業務的階段,會覺得枯燥。我覺得技術團隊應該是有追求的,在滿足“吃自己狗糧的條件下”嚐試新技術。這個平衡點是根據團隊規模和人員對某個方向的了解水平來定。
對利用第三方平台:我們團隊能用別人的就盡量不自己做。用第三方服務多少會有些問題,但在衡量之下肯定會選擇先把它做出來。
如圖可見,在最初的時候單體應用的生產率更高,它有很多優點。
技術角色和創業公司的分工
技術在創業過程中相對來說還是比較確定的因素。當各部門之間出現分歧的時候,要提高效率隻能選擇相信隊友,所以快速失措快速迭代是非常重要的,並且要進行有效支援。
發現當下的問題
要提高效率依靠更好的開發工具;
質量由QA人員和運維把關,進行異常監控;
可用性和安全也要通過監控來保障。
文章轉載自IT大咖說公眾號
阿裏巴巴大數據-玩家社區 https://yq.aliyun.com/teams/6/
---阿裏大數據博文,問答,社群,實踐,有朋自遠方來,不亦說乎……
最後更新:2017-08-13 22:23:37
上一篇:
RDS for MySQL CPU 性能問題淺析
下一篇:
共享單車新規出台 借力物聯網技術整治亂象
[LeetCode]128.Longest Consecutive Sequence
Maven學習一之安裝maven以及IDE配置
httpclient上傳文件的文件名的中文問題
阿裏雲實現首個雲上量子加密通訊服務
J2EE中自定義標簽以及TagSupport和BodyTagSupport的用法
C# WinForm多線程開發(二) ThreadPool 與 Timer
高通量衛星牛在哪?飛機高鐵上高速下電影成真
ITEXT實例學習與研究(三) 發現了ITEXT問題 沒有WATERMARK以及一些其他的問題
AI翻譯離無障礙交流有多遠
Sql Server中如何取得剛剛插入的自增長的id值