2017年,Web 後端出現了哪些新的思想和技術?


技術層面沒多大變化了。

以 2017 為界

前 9-14(03-08) 年,event driven 的 nginx 爆髮式增長的時代,Event Loop 具象化。memcached 揚名立萬的時代,資料庫終於得到了一定程度的解脫。git 的出現革了開發流程的命,協同工程化有了可能,當然還有不得不說的 Gayhub 哦不 github。產品狗……這個時代我不知道有沒有產品狗,不過人們喜歡叫這個時代為 web 2.0。

前 6-11(06-11) 年,應用後端普遍從傳統多進程多線程開始轉向成 coroutine 類似實現。無論是 erlang 的 actor 實現也好,python 的 gevent 也好,或者是 golang 的 goroutine 和 lua 的 coroutine,理念上差別不大,均是用戶態任務切換行為(或主動或被動)。結合已經普及的 EventLoop 庫如 libev libevent 等,C10K 已經不是技術問題,C100K 也只是一個工程問題罷了。

同一時期,基於 V8 的 node js 橫空出世,前後端的分界線沒那麼明顯並且帶來了前端領域的革命。只不過這個革命有點久,到現在也沒革完。

另外值得一提的是在這時期「帶有複雜數據結構的 memcached」redis 橫空出世,作為更好更強更方便的 memcached 幾乎成了眾多公司的必然會用的組件之一。

在這個時代裡面還需要提的是工程領域提出了3大抽象,SaaS,IaaS以及 PaaS。IaaS 抽象了硬體,PaaS 抽象了基礎設施,SaaS 抽象了服務,雲的概念第一次發揚光大。如 Google 的 GAE 以及上面的 office 套件,如 AWS 帶來的 S3 以及在它上面的 Dropbox 等。國內我們也能見到 WPS 的的 office 套件和金山快盤,當然還有那些跟風者們。

這個時代是垂直領域服務的時代,產品狗和程序員的戰爭第一次打響。大概這個時代都喜歡叫自己架構師吧。

前 5 至今,移動的時代。項目扁平化,迭代高速化,數據實用化。技術層面已經沒多少提升的空間,工程上面代碼生命周期和上一個時代比已經有了很大的變化。項目扁平帶來的就是碎片項目特別多,以至於為了管理調用鏈而引入了微服務的概念。高速迭代導致傳統開發-測試-運維一步步走成了歷史,開發即測試即運維,開發的邊界更加的模糊。數據實用化導致傳統不怎麼看重的數據得到了重視,因為移動行為能更好的收集用戶精細化的數據,就連只有500G數據的小公司也要說自己招大數據的人。演算法工程師,數據工程師,數據分析師這樣的職業開始吃香,雖然大家都是 Hadoop 全家桶,雖然可能大部分人一行代碼都不會寫。

值得一提的是,在資料庫領域,傳統資料庫得到了升華,如 tidb,如 ocean base 等。另外內核倒是有不少新的開創,如 bbr 如 dpdk,傳統的 tcp 都受到了挑戰,至於上層 http2 這類我就不多說了。還有的就是虛擬化(無論是 docker 和 vm)帶來的挑戰,從內核層面去解決隔離和性能的平衡問題,如混合內核有HyperKit,如商業化的 hypercontainer 等。然而這些領域我不說別的,離大規模鋪開還有一段時間。

你看,這麼多年以來真正後端技術發力的點無外乎就是底層 EventLoop + coroutine 驅動,平台層轉 cloud,應用層面拆分,並重視收集和處理數據。別的不說,就底層和平台層來說,冷戰時期的計算機科學已經把這些研究了個透,只不過受限於當時的硬體水平無法工程化罷了。

所以你問 2017 有哪些新思想和技術,我是覺得沒有。該有的技術跳不出馮諾依曼體系的框架,而這個體系早就研究透了。工程領域的思想如微服務,如雲化,也不是什麼新鮮東西。SaaS 拆得足夠多加個調用管理就可以說自己是微服務,下個 K8S 跑起來也能說自己用上了雲,裝個 Hadoop 全家桶就可以找大數據工程師了,都是…玩剩下的。

然而就是這點剩下的,要深入,要學透,要知其所以然,恩,大概5-10年吧。而新的東西,真不是動動嘴皮子就可以搞定的,每一項深入下去都需要花大量精力,論文,工程實踐,經驗 bla bla 的,又是 5-10年,恩老鐵,該退休了。


不自量力,我也來答一發吧。

我個人並不是網路遊戲的開發,但我異常欣賞和喜歡網路遊戲在後端開發上的很多設計和演進,因為網路遊戲作為一個足夠複雜的系統,擁有足夠多的功能(交易,聊天,用戶狀態同步等)。網路遊戲伺服器設計很多時候都是後端開發的風向標,因此在一些技術點的提出上,我也參照了遊戲伺服器的設計來進行說明。

近幾年後端出現了哪些新的思想和技術的話,基於我個人的工作經驗和參與的一些日常分享上,我得出這麼幾個觀點。

1. 網路交互的多樣性

1.1 Http1.1協議日漸式微,Http2和websocket,以及更多的自定義協議將會成為主流。

Web後端將不僅僅是一個web後端,而變成一個大後端,或者叫 中端+後端(這個概念阿里巴巴很早就有了)。隨著移動互聯網的發展,以及物聯網的興起(在這裡我把mobike的單車看作是物聯網的一個終端),用戶的接入方式由單純的瀏覽器,向著多種接入設備進行演進。 在這個概念之下,用戶的定義會更廣泛,站在後端的角度看來,連接上伺服器的不再是一個個的用戶,而是一個個的終端,並存在多個終端同享一個用戶的情況(多端登錄)。 因此在這個趨勢之下,整個後端的接入層(比如nginx之於web)將會走向更廣闊的天地,對於任意一個設備來說,他將同時利用多種協議和多種方式連接到不同的接入點來達成自身的功能。

1.2 網路協議與網路信息交互的樣式多樣性

從最早的webService,到後來的json-rpc,和thrift再到如今的 protobuf(grpc)等等,我們開始為不同的數據交互設計了不同的序列化協議和調用協議,然而受到環境(移動終端的弱網路狀態),性能(網關服務,與網路調用)的影響,我們開始使用大量容錯性更強,數據量更小的數據傳輸方式,來滿足我們的需求。

在早先的web中,http+from表單的提交成為我們的標配,然而在今天,TCP都不一定成為必選項,UDP和UDP的改進協議都在被不同的公司進行嘗試,甚至於KCP都有可能成為大家考慮的方案之一。

2.數據多樣性開始成為設計的焦點。

2.1 在早先的web後端中,表設計和功能開發構成了日常工作的絕大部分,所有的後端人員都在試圖讓一切的用戶操作落入CRUD的抽象範疇里(比如 Restful),然而CRUD怎麼會滿足我們的抽象需求呢。

自從memcached和redis在被大量引入後端開發之後,我們可以看到,後端人員在對數據的理解上有了大量的改變,我們不再單單把數據視為RDBMS裡面的一行,而是圍繞著業務本身對數據進行了分類。最明顯的是,狀態數據的引入,在開發中,我們將用戶的部分信息,視為一個用戶的狀態,在狀態數據的基礎上,讓用戶的行為變成狀態遷移的觸發,在表現上看我們讓用戶的信息存儲到redis和memcached 里就是最RDMBS不能有效滿足我們的抽象需求的一次改進。

2.2 從狂熱的Nosql到Nosql和RDBMS的共存,代表了後端開發人員對數據這一個方式的新理解,而傳統的行存儲到列存儲,到監控常用的基於時間序列的資料庫都開始進入了我們的視野。

幾年來,大量的開發者,開始將用戶產生的數據進行了更詳細的歸類,不再是rdbms一刀切的方式, 我們會詳細地劃分出用戶的狀態數據落入到Nosql,將用戶的操作數據落入到RDBMS(表述不一定全,但在類似於訂單支付之類的具有冪等性要求的操作中要求事務的完備等),將用戶的行為統計落入時間序列資料庫, 將用戶的大量相關資源(如頭像圖片)將會落入到我們的對象存儲中。在後端開發的手冊里,數據格式的多樣性成為了必須考慮的問題。

3.圍繞著數據的收集,存儲,計算,索引查詢,分析 成為後端的常態

3.1 後端角色的含義,在人手不足的公司里,很難存在一個專註於後端業務開發的開發人員了,在大數據的浪潮下,後端開發人員開始兼職起了數據系統的開發工程師。 隨著互聯網大量技術的演進和發展,任何一個職業都很難找到一個明確的界限,因此圍繞著數據的收集,存儲,計算,分析,和索引查詢都會成為後端開發人員的必備技能。

3.2 數據收集

(1) 隨著分散式,集群化,多IDC的發展,不同於運維的系統性能收集,後端開發開始著重於收集與應用運營過程相關的各類指標和數據,

除了日常的業務開發,同時還會伴隨著應用調用過程的耗時,目標服務可用性等數據的收集,常見的如java的 metrics,zipkin等開源第三方的工具開始被廣泛借鑒和引用。

(2) 用戶行為和終端信息的上報收集,隨著大數據的開展,以及精細化運營的要求,後端逐漸開始接觸到用戶相關信息和終端運行狀態的信息上報,

收集上來的數據不僅用於用戶的畫像分析,同時也為客服的用戶追蹤,用戶的操作行為做出決策,通常表現在當用戶投訴某一筆業務的失敗時,便於開發人員的快速定位和排錯。

3.3 數據存儲

接著上面的數據收集,數據的傳輸和存儲成為了繞不開的功能,kafka的大規模運用,HDFS,HBase等工具也開始成為了後端開發日常的一部分。

3.4 數據計算

然而存儲的原始數據是沒有價值的,後端又開始了他們的數據清洗和數據處理的道路,storm,spark成為了後端的新秀,與用戶運營統計分析(俗稱跑策略跑演算法)不同,當前語境下的後端數據計算,更多是一個短耗時,小規模的計算,典型的則比如風控系統,和預警系統,針對用戶的行為和流量的多少,對惡意用戶進行甄別和快速干預。

3.5 數據索引查詢

(1) 隨著業務的擴充,任意一個app幾乎都內置了相應的搜索引擎,Lucene,solr也成為了後端程序員必備的技能之一,不管是精確搜索,還是模糊匹配,後端身上背負的業務也越來越多。

(2) 准實時數據的搜索也將成為常態,在近幾年的發展中,如何快速地在一個巨量的數據中,完成RDBMS中的 join,distinct統計等成為後端工程師不得不面對的問題

3.6 數據分析查詢

AI和深度學習已經拉開了序幕,圍繞著數據本身的挖掘,學習,也開始成為了產品側的需求,但理想歸理想,現實歸現實,後端的同學們在這個方向上仍然還是摸索狀態,但長遠來說跑不了了。

4.架構設計的更進一步

2017年里,SOA的名詞正在淡出視野,微服務成了替代SOA的高頻詞,Serverless也開始走向了廣大後端的知識技能圖譜,不管是追新也好,滿足需求也罷,我也向諸位舉例一些常見的單詞,然而掛一漏萬請諸位擔待

4.1 CQRS(命令查詢職責分離模式)

將傳統CRUD的寫操作,進行非同步化,後端配合讀寫資料庫的分離。以及消息隊列的引入,將寫操作相關的一些耗時操作(驗證,走流程)等進行非同步化,常見的如電商中的訂單。

4.2 actor

Erlang的actor的興起,不管是golang Goroutine,還是scala/java的akka,都在深刻地影響著後端系統的架構設計。

4.3 CRDT和最終一致性

分散式系統的興起,也帶來了可用性和一致性的矛盾問題,協同兩個進程間的數據成為了每一個後端繞不過去的坎,為了達成最終一致性,各類方案如雨後春筍般冒出。

4.4 reactive

當android上的流行庫Rxjava,從前端走向後台的時候,也意味著後端也開始進入了響應式編程的時代,java的 vert.x就是其中的例子,那種request-response一招破萬法的時光不再有了。

5. 運維和devops對後端的要求

5.1 安全,穩定,高效,經濟

(1) 隨著業務走向穩定,以及互聯網的發展,網路服務的安全性開始成為了後端的核心之一,由於法律的不健全,對違法分子的追責難度大,違法成本低,網路安全攻擊將會在將來的一段時間內成為常態,這就對後端的程序特別是對外的介面設計提出了更高的要求。

(2) 多機房,異地容災,數據備份。健壯的後端一直是後端應用的要求之一。新的時間裡,後端的可用性,穩定性依然是每一個後端都要面對的問題。

(3) 以前一個用戶只有一個電腦,瀏覽網站的時候,只在獲取數據的時候與站點有交互。現在隨著電子設備,智能設備的增多,一個用戶能夠接入網路的設備也在增多,同時長連接和並發數也會增多,因此高性能的接入網關開始成為了後端人員關注的焦點,比如圍繞著intel的dpdk各類應用也是紛至沓來。

(4) 經濟,利用雲服務的即買即用,用完即退的特點,使得在開展運營活動的時候,後端不用向運維徵求和購買大量的機器。 然而為了在運營活動的短時衝擊和突增流量的情況下後端應用能夠平穩地運行,對後端人員的部署和調度能力提出了更高的要求。

5.2 更規範的軟體開發流程

git+jenkins+ansible的開源組合,開始無法滿足開發和運維的需求,項目管理的集成,測試人員的介入,都要求後端的軟體工程工具從各自為陣的開源工具,走向一個大一統的系統,需要我們將 需求,BUG管理,迭代版本,開發,測試,灰度,藍綠部署流程都進行集成。

5.3 雲服務,容器化之爭

公有雲,私有雲,混合雲,以及容器等相關的雲計算技術,也在推動者後端的技術改革,後端面對的不再僅僅是一個物理機器,或者虛擬機,而是一個更複雜更多樣性的環境,對後端業務之外的技術和調度要求將越來越高。

相對於前端,後端實在是一個特別籠統的說法,正如上面提出的觀點,很多的技術其實並不屬於後端工程師,他們有的時候叫 運營開發工程師,有的叫大數據工程師,但為了相對於前端的劃分,因此我把他們的工作內容都划到了後端裡面去,畢竟相對於技術研究,他們面對的都是一些技術應用的場合,很多的開源軟體只要達到了理解原理如何使用的水平就已經足夠應付日常工作了。


知乎基本上沒有後端的討論,我來消滅0回復,挽尊。

不限制在2017年,就說最近的。大型商用紛紛轉向的大概這幾個方面,和那些媒體告訴你的不太一樣。

一個是微服務,這個能增加系統穩定性,現在微服務的支撐技術已經成熟,輪到發展微服務的理論了,微服務其實是個裡程碑式的概念,做好了,商用軟體能進入下一個紀元。這是個框,什麼都能裝。SaaS也好,分散式也好,online/offline也好,基本上能想到的都可以轉。

一個是Devops,這個其實和雲一樣是老生常談,過去雲叫網格,過去devops叫SE,這個能增加開發質量降低成本。

容器技術,這個我還不太看好,主要是最近docker腦抽突然想賺錢了,可能還要發展幾年才會變成主要商用技術,自己玩玩沒什麼問題。

有些技術存在很多年了,但是目前持續演進中,比如集群技術,這個其實哪個大型企業都逃不開,關係型資料庫很多年了,這幾年也有長足的發展。

還有些想到了再補充。


計算機技術傾向於不斷重複歷史?

--- 現代操作系統


以Google tensorflow為首的越來越多的機器學習開源框架的發布,這塊的應用場景也會被不斷發掘出來。


入後台坑半年多的小白來答一波

後台這方面真的發展不夠快啊誰用的不都是幾年前的技術啊(?°?°?)(也不允許發展快啊否則架構一天一個變誰受得了),但也不妨討論下比較新的技術咯。

微服務是個浪潮,運用到了面向服務的工作流的技術,算是高性能架構的一種解決方案。對於企業級項目來說,微服務能夠大大幫助提升響應速度。對小型項目來說,微服務使得大的項目切分小塊,分開實現,分別部署,分步上線,方便快捷。

docker也算是和微服務共利共生,在比較正規的項目中,一般都是利用了比較成熟的容器管理平台來直接添加、更新、刪除容器內部的docker image來幫助運行維護,免去了很多因為環境配置而帶來的困擾。

然而,本人目前參與的項目是以spring cloud netflix為微服務架構框架,利用rancher來管理伺服器內部的docker集群(boss把ssh禁用了 ♂?),踩過比較多的坑,官方文檔不夠詳細,StackOverflow也基本沒有幫助,感覺有些技術還未完全成熟,還有待進一步地開發。比如在容器互聯方面可以考慮寫一個中間件(誤)

個人認為,根據微服務的定義看來,利用J2EE開發不免有些繁瑣(尤其是傳統的SSM架構),即使是有了現在常用的比較方便的spring boot也是如此。那麼,類似golang、scala這樣的語言怕是能夠在未來的後台技術中在市場上和java分一杯羹啊


沒有


僅java的話,

1、java9預計9月出現,將帶來模塊化和命令行交互,對於jdk,帶來了新的垃圾回收機制:G1收集器。

2、spring5帶來的函數式web框架,簡單介紹參考這裡http://www.importnew.com/21941.html

github參考這裡:https://github.com/spring-projects/spring-framework/wiki/What"s-New-in-the-Spring-Framework#whats-new-in-spring-framework-5x

3、分散式,微服務開發趨勢在不斷加強。如spring cloud,dubbo等的日漸流行

4、kubernates等docker容器管理的大範圍使用

有什麼不足歡迎指正哈。


Technology Radar | Emerging Technology Trends for 2017 | ThoughtWorks

我覺得Serverless是個好東西,AWS Lambda,這樣你就可以安心寫業務不用操心到底發生了什麼了。

出現的技術其實都不新了,很早之前就有,就是限制於當時的各種條件而沒有出現。


JS想越界


人工智慧,機器學習


微服務,Springboot,SpringCloud。。。


並沒有,論文早三十年基本都寫完了


後端2017年的

新思想: 要比去年更加努力工作

新技術: 比去年工作更加熟練了


微服務架構 橫掃一切!


分散式,微服務,大數據,機器學習


2017 golang開始強勢崛起, docker 作為常用技術被各公司廣泛使用。


後端在變革中,因為前端的變革,運維的變革docker更劇烈, 微服務人人都說,但沒有成功模範,互聯網還是dubbo,傳統軟體還是springcloud,但是問題多多


除去那些純吹的,實際進入生產的應該是微服務了吧。

至於docker,不清楚別的團隊如何,反正我們團隊老大是個docker粉


Amazon出的Lambda,嘗試從實體伺服器到虛擬伺服器到docker到code runtime的進化。


可以說從15年往後的近3年,並沒有什麼新技術出現!更不用說什麼新思想了。


推薦閱讀:

(做生物信息的)你們是怎麼知道Python裡面sys.argv和getopt這種函數的?
想入生物信息學這個行業,python學習要達到什麼程度???
怎麼評價新發布的odoo 11 ?
2017,再來聊一聊Python,未來發展怎樣?

TAG:Python | 後端技術 | 分散式系統 | Docker | 微服務架構 |