內容來源:2017年5月13日,票牛網架構師黃億華在「Java開發者大會 | Java之美【上海站】」進行《創業公司中的Java高效應用》演講分享。IT大咖說做爲獨家視頻合做方,經主辦方和講者審閱受權發佈。
閱讀字數:2509 用時: 4分鐘
Java是一門面向對象編程語言,不只吸取了C++語言的各類優勢,還摒棄了C++裏難以理解的多繼承、指針等概念,所以Java語言具備功能強大和簡單易用兩個特徵。Java語言做爲靜態面向對象編程語言的表明,極好地實現了面向對象理論,容許程序員以優雅的思惟方式進行復雜的編程。前端
有人說在互聯網創業公司中不該該使用Java,讓咱們來看看票牛網架構師黃億華是怎麼說的。程序員
t.cn/R9jbW3x
sql
在咱們公司初創的時候,組齊了三人的團隊就開始作產品研發。當時整條業務線的東西都須要咱們本身寫,要在短期內把東西作出來,效率是很是關鍵的。編程
咱們的產品模式自己實際上是須要驗證的。創業有不少不肯定性,在上線以前沒人能知道,咱們的一個項目究竟能達到多大的規模,能作到什麼樣。因此這時技術的重要性就在於快速把東西作出來。後端
咱們最終選擇Java,一方面是由於咱們團隊已經有了必定的寫Java的基礎,從最開始的搭建到後來初具規模也能Hold住,基數很穩;另外一方面是由於Java有很大的用戶量,人才儲備很是多,咱們看中了它規模化的能力。安全
從某種意義上來講,Java的開發效率確實有些低。可是後來因爲選型的緣由,咱們仍是堅持使用了Java。服務器
在「Java如何寫得更方便易懂」這方面,Java一直在改進。以前的Java設計思想是模塊之間要作到可擴展,崇尚配置和代碼分離。架構
如今Java社區在向高效開發比較理智的方向去作,各類語言慢慢趨向一致。併發
咱們在使用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 四、Spring MVC。
Spring4目前已經相對成熟穩定。Spring的發展經歷了一個變動過程,從最開始的XML,在當時也算輕量級;到2.5的時候有了註解,簡化了不少事情;在Java 3的時候加入了Spring Config。
Spring4相對於Spring 3加了一些Java 8的支持。
如圖是MVC的一個例子。
咱們爲了解決ORM使用繁瑣的問題,本身寫了Daogen。這個工具兼具了靈活性和規範性,它能夠統一代碼規範,強制作命名,並在編譯期自動生成XML。
咱們當時引入Jade4j框架,借用前端基本在用的模版引擎,在前端用Js能夠跑,後端用Java也能跑。
如今Java比較火的框架叫Thymeleaf,這個框架也很好。基於咱們想用前端來寫模版,因此當時仍是選擇了Jade4j。
在第一個版本上線以後,「從0到1」階段完成,這時咱們又將面臨不同的問題。
隨着業務規模擴大,線上故障、可用性、質量不能忽略,團隊也要擴張,並提出新的要求。要求主要是質量、可見性和可用性三個方面。
由於條件限制,咱們的招聘工做進行艱難。退而求其次,咱們會選擇一些資質較好、主動性較強的應屆生或一兩年工做經驗的員工作培養。
咱們須要構建一我的才梯隊,以「一個帶兩個」的工做模式,把團隊組織成一個有梯隊的團隊。
咱們是單代碼倉庫,當代碼不斷增長,前期又作了不少不清楚的模型或代碼的時候,必需要去整理清楚。
我最大的經驗就是重構不合理的業務模型,業務模型是最重要的。
Devops能夠作線上的無縫發佈,作版本的回滾重啓。測試環境要高可用。
咱們如今用Cat最多的是報錯功能。Java的錯誤機制仍是很完整的,若是出現什麼線上問題,報錯基本都能發現。咱們主要作了兩件事,一是把全部異常都發報警短信,另外一件事是把全部異常放到一個電視機上,便於咱們隨時監控。
性能評估是其次,畢竟QPS只有1。
ELK能夠用於作日誌收集、業務監控、性能監控,甚至能夠用來作數據分析。
可是由於它的數據量特別大,對服務器的性能調優要求比較高,因此咱們最終只保留了日誌管理功能。
任何公司都有報表需求,咱們的作法是跑個SQL把數據存下來而後給老闆看。後期有些數據量較大,Mysql存儲有壓力,因此咱們就用了阿里雲的ODPS。
懶是一種美德:技術選型上咱們選擇更適合的,可能會提升開發效率或運營水平,但也可能不行。因此要去不斷嘗試,咱們以爲這是值得的。咱們爲了追求更高的生產效率,也會寫不少的小工具。
找到實用和好奇心的平衡點:到了成天作業務的階段,會以爲枯燥。我以爲技術團隊應該是有追求的,在知足「吃本身狗糧的條件下」嘗試新技術。這個平衡點是根據團隊規模和人員對某個方向的瞭解水平來定。
對利用第三方平臺:咱們團隊能用別人的就儘可能不本身作。用第三方服務多少會有些問題,但在衡量之下確定會選擇先把它作出來。
如圖可見,在最初的時候單體應用的生產率更高,它有不少優勢。
技術在創業過程當中相對來講仍是比較肯定的因素。當各部門之間出現分歧的時候,要提升效率只能選擇相信隊友,因此快速失措快速迭代是很是重要的,而且要進行有效支援。
要提升效率依靠更好的開發工具;
質量由QA人員和運維把關,進行異常監控;
可用性和安全也要經過監控來保障。
今天要分享的就是這些,謝謝你們!