一、單體應用的缺點html
1)部署效率低下java
2)協做開發成本高spring
3)系統高可用性能差數據庫
4)線上發佈變慢json
二、微服務的簡單介紹後端
2.1)將一個單一應用程序,按照業務拆分呢爲一組小型服務.api
2.2)每一個服務只作一件事,每一個服務運行在本身的進程中安全
2.3)服務之間經過輕量級的通訊機制(httprestapi)服務器
2.4)每一個服務都可以獨立的部署網絡
2.5)每一個服務甚至能夠擁有本身的數據庫
2.6)微服務以及微服務架構的是二個徹底不一樣的概念。微服務強調的是服務的大小和對外提供的單一功能,而微服務架構是指把一個一個的微服務組合管理起來,對外提供一套完整的服務
三、微服務的優勢
①:每一個服務足夠小,足夠內聚,代碼更加容易理解,專一一個業務功能點(對比傳統應用,可能改幾行代碼須要瞭解整個系統)
②:開發簡單,一個服務只幹一個事情。(加入你作支付服務,你只要瞭解支付相關代碼就能夠了)
③:微服務可以被2-5我的的小團隊開發,提升效率(你應該能夠想象咱們那時的情況。若是一次上線超過五我的參與的話,就會常常出現各類問題:有的人忘記提交代碼、有的人忘記打包、有的人忘記修改工程依賴到最新版本。一次上線過程須要反覆確認,耗費了大量精力,嚴重影響了總體的開發和部署效率。)
④:服務鬆耦合,每一個服務都可以開發部署。
⑤:先後段分離,做爲java開發人員,咱們只要關係後端接口的安全性以及性能,不要去關注頁面的人機交互(H5工程師)根據先後端接口協議,根據入參,返回json的回參
⑥:一個服務可用擁有本身的數據庫。也能夠多個服務鏈接同一個數據庫
四、微服務的缺點
①:增長了運維人員的工做量,之前只要部署一個war包,如今可能須要部署成百上千個war包
②:服務之間相互調用,增長通訊成本
③:數據一致性問題(分佈式事物問題)
④:系能監控等..
五、springcloud的技術論壇
https://springcloud.cc/spring-cloud-dalston.html
六、CAP理論
**Consistency(一致性):**多節點數據數據一致
** Availability(可用性):**用戶能夠選擇向G1或G2發起讀操做。不論是哪臺服務器,只要收到請求,就必須告訴用戶,究竟是v0仍是v1,不然就不知足可用性
**Partition tolerance(分區容錯性):**大多數分佈式系統都分佈在多個子網絡。每一個子網絡就叫作一個區(partition)。分區容錯的意思是,區間通訊可能失敗(因爲網路緣由)。好比,一臺服務器放在北京,另外一臺服務器放在上海,這就是兩個區,它們之間因爲網絡抖動緣由致使不能通訊
6.一、Consistency和Availability的矛盾一致性和可用性,爲何不可能同時成立?
答案很簡單,由於可能通訊失敗(即出現分區容錯),若是保證G2的一致性,那麼G1必須在寫操做時,鎖定G2的讀操做和寫操做。只有數據同步後,才能從新開放讀寫。鎖按期間,G2不能讀寫,沒有可用性不。若是保證G2的可用性,那麼勢必不能鎖定G2,因此一致性不成立。綜上所述,G2沒法同時作到一致性和可用性。系統設計時只能選擇一個目標。若是追求一致性,那麼沒法保證全部節點的可用性;若是追求全部節點的可用性,那就無法作到一致性。
6.二、取捨策略
CAP三個特性只能知足其中兩個,那麼取捨的策略就共有三種:
CA without P:若是不要求P(不容許分區),則C(強一致性)和A(可用性)是能夠保證的。但若是若是在分佈式的架構下,P是避免不了的。
CP without A:若是不要求A(可用),至關於每一個請求都須要在服務器之間保持強一致,而P(分區)會致使同步時間無限延長(也就是等待數據同步完才能正常訪問服務),一旦發生網絡故障或者消息丟失等狀況,就要犧牲用戶的體驗,等待全部數據所有一致了以後再讓用戶訪問系統。設計成CP的系統其實很多,最典型的就是分佈式數據庫,如Redis、HBase等。對於這些分佈式數據庫來講,數據的一致性是最基本的要求,由於若是連這個標準都達不到,那麼直接採用關係型數據庫就好,不必再浪費資源來部署分佈式數據庫。
AP wihtout C:要高可用並容許分區,則需放棄一致性。一旦分區發生,節點之間可能會失去聯繫,爲了高可用,每一個節點只能用本地數據提供服務,而這樣會致使全局數據的不一致性。這其實就是先在 A(可用性)方面保證系統能夠正常的服務,而後在數據的一致性方面作了些犧牲,雖然多少會影響一些用戶體驗,但也不至於形成用戶購物流程的嚴重阻塞。
6.三、總結 現現在,對於多數大型互聯網應用的場景,主機衆多、部署分散,並且如今的集羣規模愈來愈大,節點只會愈來愈多,因此節點故障、網絡故障是常態,所以分區容錯性也就成爲了一個分佈式系統必然要面對的問題。那麼就只能在C和A之間進行取捨。但對於傳統的項目就可能有所不一樣,拿銀行的轉帳系統來講,涉及到金錢的對於數據一致性不能作出一絲的讓步,C必須保證,出現網絡故障的話,寧肯中止服務,能夠在A和P之間作取捨。