微服務(wù)架構(gòu)模式(MicroserviceArchitectPattern)。近兩年在服務(wù)的瘋狂增長與云計算技術(shù)的進步,讓微服務(wù)架構(gòu)受到重點關(guān)注
微型服務(wù)體系結(jié)構(gòu)是一種體系結(jié)構(gòu)模式,它主張把單個應(yīng)用分成一組服務(wù),這些服務(wù)相互協(xié)調(diào),相互協(xié)作,為用戶提供最終價值。每一個服務(wù)都在其獨立進程中運行,并且服務(wù)和服務(wù)之間采用輕量級通信機制(通常是基于HTTP的RESTfulAPI)來相互交流。每一個服務(wù)都是圍繞特定的業(yè)務(wù)構(gòu)建的,并且可以獨立地部署到生產(chǎn)環(huán)境,類生產(chǎn)環(huán)境等等。此外,還應(yīng)盡量避免統(tǒng)一的、集中的服務(wù)管理機制,對于特定的服務(wù),應(yīng)根據(jù)業(yè)務(wù)上下文,選擇適當?shù)恼Z言、工具來構(gòu)建。
本文首先簡要介紹了微服務(wù)(Microservices)的內(nèi)涵和優(yōu)勢,微服務(wù)體系結(jié)構(gòu)的本質(zhì),就是使用具有更多明確功能和更多復(fù)雜業(yè)務(wù)的服務(wù)來解決更大的實際問題。微型服務(wù)體系結(jié)構(gòu)將服務(wù)分開,采用相對獨立的服務(wù)對各個方面進行管理,彼此使用統(tǒng)一的接口進行通信,體系結(jié)構(gòu)變得復(fù)雜,優(yōu)點也十分明顯:
復(fù)雜性控制:在運用分解的同時,避免無限制地累積原來的復(fù)雜性。每個微服務(wù)都關(guān)注單個功能,并通過定義良好的接口清楚地描述服務(wù)邊界。因為這些微服務(wù)都很小,復(fù)雜度很低,所以每個微服務(wù)都可以被一個小型的開發(fā)團隊完全控制,很容易保持高的維護性和開發(fā)效率。
你可以點擊加入這個群:Java高級架構(gòu)入門群:854180697里面有Java高級大牛直播講解知識點走高端路線,(如果你想跳槽換工作,但技術(shù)不夠好,或工作遇到瓶頸,我這里有一個JAVA的免費直播課程,講的是高端知識點基礎(chǔ)不好的誤入喲,只要你有1-5年的開發(fā)經(jīng)驗可以加群找我要課堂鏈接,注意:這是沒有開發(fā)經(jīng)驗的免費直播課程哦)
單獨部署:因為微服務(wù)有獨立的運行流程,所以每個微服務(wù)也可以單獨部署。在更改某些微服務(wù)時,不需要編譯和部署整個應(yīng)用程序。包含微服務(wù)的應(yīng)用程序相當于具有一系列可并行的發(fā)布過程,這使得發(fā)布更高效,同時減少生產(chǎn)環(huán)境中的風(fēng)險,并最終縮短應(yīng)用程序的交付周期。
靈活的技術(shù)選擇:在微服務(wù)體系結(jié)構(gòu)中,技術(shù)選擇是去中心化的。每一個團隊都可以根據(jù)自己的服務(wù)需求和行業(yè)發(fā)展現(xiàn)狀,自由選擇最合適的技術(shù)組合。因為每一個微服務(wù)都比較簡單,所以在需要升級技術(shù)棧時風(fēng)險就會降低,甚至可以完全重構(gòu)一個微服務(wù)。
容錯:當一個組態(tài)出現(xiàn)故障時,在傳統(tǒng)的單進程結(jié)構(gòu)中,故障很可能在進程中擴散,并形成應(yīng)用程序無法使用的全局性。在微服務(wù)體系結(jié)構(gòu)中,故障被隔離在一個服務(wù)內(nèi)。如果設(shè)計良好,其他服務(wù)可以通過重試、平滑退化等機制在應(yīng)用層上實現(xiàn)容錯。
擴展性:單一體系結(jié)構(gòu)應(yīng)用也可以實現(xiàn)橫向擴展,即完整地復(fù)制整個應(yīng)用到不同節(jié)點。微服務(wù)架構(gòu)在應(yīng)用的不同組件之間存在著擴展需求差異的情況下表現(xiàn)出靈活性,因為每個服務(wù)都可以根據(jù)實際需求獨立地擴展。
互聯(lián)網(wǎng)高并發(fā)相關(guān)名詞。
頁面瀏覽數(shù)(pageviews)
唯一身份瀏覽量(UniquePageViews)
獨立訪問者數(shù)量(uniquevisitors)
重復(fù)訪問者數(shù)量(repeatvisitors)
每個訪問者的頁面瀏覽數(shù)(PageViewsperuser)
以前我把高并發(fā)解決方案誤認為線程或隊列就可以解決,因為高并發(fā)時有很多用戶在訪問,導(dǎo)致出現(xiàn)系統(tǒng)數(shù)據(jù)不正確、丟失數(shù)據(jù)的現(xiàn)象,所以想到了用隊列解決方案,其實隊列解決方案的方式也可以處理,比如我們在競拍商品,轉(zhuǎn)發(fā)評論微博或是秒殺商品,同時訪問量特別大,隊列在這一點上發(fā)揮著特殊的作用,把所有的請求都放到隊列中,按毫秒計時器,有序地進行,這樣就不會出現(xiàn)系統(tǒng)中數(shù)據(jù)不正確的情況。
通過查閱資料,高并發(fā)性解決方案有兩個,一個是使用緩存,另一個是使用生成靜態(tài)頁面;另外一個是優(yōu)化我們的代碼以減少不必要的資源浪費:(
一、不要經(jīng)常使用new對象,對于整個應(yīng)用程序中只需要存在一個實例的類,要使用StringBuffer或StringBuilder,對StringBuilder,StringBuilder,StringBuilder,通過靜態(tài)方法訪問單個類。
不要使用諸如Exception可以控制方法推出等錯誤的方法,但Exception要保持stacktrace消耗性能,除非必要時不使用instanceof進行條件判斷,并盡量使用比率的條件判斷.在JAVA中使用效率高的類,例如ArrayList,它比Vector更好。
高并發(fā)-需要解決的問題
應(yīng)用緩存
HTTP緩存
多級緩存
池化
異步并發(fā)
擴容
隊列