1. 通常JAVA WEB 開發用到哪些技術工具
在實際開發中,我們都會有一個技術選型的過程,因為每個項目的要求不一樣,規模不一樣,要求的性能不一樣等等諸多因素,因此單獨說用什麼技術工具其實很難回答,一般都是看具體你們的項目需求來確定的,我就簡單說一說吧。
一、 開發工具
開發工具這一塊,首先是IDE,可以選擇免費的Eclipse,但是Eclipse比較耗內存,多開幾個你電腦估計內存就不夠用了,另外是IntelliJ IDEA, 這個是我現在使用的,比較推薦的一個IDE,代碼提示功能強大,很流暢,開多少個都可以。然後你要准備一下Notepad++或是VIM等編輯器。
二、後台技術框架
其實這么討論沒啥意義,就說個普通的吧,一般用Struts2, SpringMVC, Spring, Hibernate, MyBatis, 可以相互組合,常見的一般用SpringMVC + MyBatis,我們公司用的就是SpringMVC,這是大致的情況
如果要用緩存,可以選擇Redis或是Memcached,我們選擇了Redis
如果要用消息隊列,可以選擇ActiveMQ或是RabbitMQ等
如果想使用分布式鎖,可以使用Zookeeper或是Redis
。。。。。。
一句話,看你項目的具體需求來確定用什麼技術框架
2. 消息隊列的消費者是誰來承擔
我的理解web後台是消費者。
生產者是前端。比如用戶需要登錄,那麼前端就發送一個登錄的需求給消息隊列,web後台作為消費者,滿足用戶的登錄需求。
3. 在應用程序中消息隊列可以做哪些工作
利用 MSMQ(Microsoft Message Queue),應用程序開發人員可以通過發送和接收消息方便地與應用程序進行快速可靠的通信。消息處理為您提供了有保障的消息傳遞和執行許多業務處理的可靠的防故障方法。
MSMQ與XML Web Services和.Net Remoting一樣,是一種分布式開發技術。但是在使用XML Web Services或.Net Remoting組件時,Client端需要和Server端實時交換信息,Server需要保持聯機。MSMQ則可以在Server離線的情況下工作,將Message臨時保存在Client端的消息隊列中,以後聯機時再發送到Server端處理。
顯然,MSMQ不適合於Client需要Server端及時響應的這種情況,MSMQ以非同步的方式和Server端交互,不用擔心等待Server端的長時間處理過程。
雖然XML Web Services和.Net Remoting都提供了[OneWay]屬性來處理非同步調用,用來解決Server端長方法調用長時間阻礙Client端。但是不能解決大量Client負載的問題,此時Server接受的請求快於處理請求。
一般情況下,[OneWay]屬性不用於專門的消息服務中。
1. 基本術語和概念(Basic terms and concepts)
「消息」是在兩台計算機間傳送的數據單位。消息可以非常簡單,例如只包含文本字元串;也可以更復雜,可能包含嵌入對象。
消息被發送到隊列中。「消息隊列」是在消息的傳輸過程中保存消息的容器。消息隊列管理器在將消息從它的源中繼到它的目標時充當中間人。隊列的主要目的是提供路由並保證消息的傳遞;如果發送消息時接收者不可用,消息隊列會保留消息,直到可以成功地傳遞它。
「消息隊列」是 Microsoft 的消息處理技術,它在任何安裝了 Microsoft Windows 的計算機組合中,為任何應用程序提供消息處理和消息隊列功能,無論這些計算機是否在同一個網路上或者是否同時聯機。
「消息隊列網路」是能夠相互間來回發送消息的任何一組計算機。網路中的不同計算機在確保消息順利處理的過程中扮演不同的角色。它們中有些提供路由信息以確定如何發送消息,有些保存整個網路的重要信息,而有些只是發送和接收消息。
「消息隊列」安裝期間,管理員確定哪些伺服器可以互相通信,並設置特定伺服器的特殊角色。構成此「消息隊列」網路的計算機稱為「站點」,它們之間通過「站點鏈接」相互連接。每個站點鏈接都有一個關聯的「開銷」,它由管理員確定,指示了經過此站點鏈接傳遞消息的頻率。
「消息隊列」管理員還在網路中設置一台或多台作為「路由伺服器」的計算機。路由伺服器查看各站點鏈接的開銷,確定經過多個站點傳遞消息的最快和最有效的方法,以此決定如何傳遞消息。
4. websphere mq是什麼
IBM WebSphere MQ 是IBM公司提供的基於消息隊列的消息中間件。
國內相應的產品也有很多,如東方通科技的TONG-LinkQ等。
消息中間件服務於伺服器間的消息傳遞,並通過消息隊列機制保障其傳輸的穩定性。
5. C# web中,只要有數據存到消息隊列中,就在頁面中滾動顯示出來。哪為大俠有什麼思路嗎
Thisisthecodemodetest!
簡單說一下我的思路,不知道可行不可行,
方法一:你可以將你需要顯示的內容放入緩存中,每次去緩存中去讀,當你保存數據到消息隊列的同時去修改這個緩存。(推薦)
方法二:寫個服務或定時器,隔段時間重新讀資料庫(u)
6. 消息隊列怎麼跟現成的web應用進行整合
消息隊列技術是分布式應用間交換信息的一種技術。消息隊列可駐留在內存或磁碟上,隊列存儲消息直到它們被應用程序讀走。通過消息隊列,應用程序可獨立地執行--它們不需要知道彼此的位置、或在繼續執行前不需要等待接收程序接收此消息。
7. 什麼是消息隊列
MSMQ. 這是微軟的產品里唯一被認為有價值的東西。對我的客戶來說,如果MSMQ能證明可以應對這種任務,他們將選擇使用它。關鍵是這個東西並不復雜,除了接收和 發送,沒有別的;它有一些硬性限制,比如最大消息體積是4MB。然而,通過和一些像MassT...
8. 2017年,Web 後端出現了哪些新的思想和技術
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 雲服務,容器化之爭
公有雲,私有雲,混合雲,以及容器等相關的雲計算技術,也在推動者後端的技術改革,後端面對的不再僅僅是一個物理機器,或者虛擬機,而是一個更復雜更多樣性的環境,對後端業務之外的技術和調度要求將越來越高。
相對於前端,後端實在是一個特別籠統的說法,正如上面提出的觀點,很多的技術其實並不屬於後端工程師,他們有的時候叫 運營開發工程師,有的叫大數據工程師,但為了相對於前端的劃分,因此我把他們的工作內容都劃到了後端裡面去,畢竟相對於技術研究,他們面對的都是一些技術應用的場合,很多的開源軟體只要達到了理解原理如何使用的水平就已經足夠應付日常工作了。
9. webservice和消息隊列是什麼關系
webservice 可以通過soap協議 wsdl文件,在客戶端可以獲得方法返回對象。客戶端可以直接調用web service的公共方法。
消息隊列是通過報文來傳送。
10. 什麼是 Web 框架
在Clojure里有大量的web框架,但是初學者應該把他們自己的伺服器棧移動到Ring生態系統。 我經常被Clojure的初學者問到的一個問題是「我應該使用什麼web框架?」這是一個好問題。Python有Django。PHP有Drupal。當然Ruby有所有web框架之王,Ruby on Rails。 在Clojure里你應該使用什麼框架?實際上這個問題是難以回答的。外面有很多web框架了。有人把 Compojure 叫做框架,雖然它真正是一個類庫。 lib-noir 為你做了大量工作。然而有屬於你的真正框架,像 Pedestal 或 Hoplon ,它們提供基礎功能和解決web開發的抽象。所有這些項目是偉大的,但是對於初學者,我不得不推薦建立你自己的web棧,從Ring開始。 Compojure實際上只是一個路由類庫,而不是框架。雖然有 playnice , bidi , Route One 和 gu 等其它替代品,但是你能夠用它滿足路由需要。如果你不想下決定,那就使用Compojure。它使用廣泛、表現優秀。如果你想深入,可以看看其他文檔。它們針對不同的場景各有優點。 lib-noir 來自於 Noir ,後者是一個web框架(現在廢棄了)。它比較容易,還為你提供了一些管道,因此你剛好藉助建好的大量基礎設施來開始一個項目。lib-noir是以類庫形式存在的基礎設施。我還沒有用過,但是很多人喜歡它。然而,當我研究它的時候,我發現它提供了太多我不需要的東西,或太過瑣碎。如果得到了大規模的應用(像Rails),你就能得到生態系統的效應,這通常是良性的,但是還沒有這樣。lib-noir被應用了,只是完全不佔優勢。 Pedestal 有很多支持者。它的目標是通過提供使用ClojureScript、消息隊列形式的、一個明智的前端環境來處理單頁app。如果你需要「實時app」,它或許為是你准備的。盡管如此,我仍然警告你,它不適合Clojure初學者。Pedestal引入了大量新概念,甚至有經驗的Clojure程序員也不得不去學習。 這個教程 又長又費力。如果你不了解Clojure,你去學習Pedestal會遇到問題的。 Hoplon 也是為web app設計的。它為你提供了用ClojureScript實現的DOM(包括自定義組件),數據流編程(像電子表格)和客戶端-伺服器端通信。這是勇敢的一步,但是再一次,需要你接受花很長時間才能理解的編程模型。如果你還不熟悉Clojure,你就是在自找麻煩。 外面還有其它框架。但是我推薦你考慮自己條件。如果你在學習Clojure,掌握web app如何工作的最好方法就是得到一個配置了一些基本handler的 Ring Jetty適配器。根據需要添加中間件。寫一些自己的中間件。使用Compojure做路由。使用 Hiccup 生成HTML。這個安裝將讓你學到很多。 Ring僅僅是個函數。藉助一些基本概念和Ring SPEC,你可以快速建立正是你想要的web伺服器,你能夠全面理解它。自己建立的經歷能夠讓你在框架如何整合上受益良多。 況且,Ring有優勢。大多數人寫功能(以中間件或handler的形式)是以Ring為假設、而不是其它。因此保持靠近本質,你就會接近龐大的彼此兼容的、預編寫的類庫池。Ring就是Clojure web生態系統的所在地。