傳統的總體式架構都是模塊化的設計邏輯,如展現(Views)、應用程序邏輯(Controller)、業務邏輯(Service)和數據訪問對象(Dao),程序在編寫完成後被打包部署爲一個具體的應用。如圖所示:java
若是要對系統進行水平擴展,一般狀況下,只須要增長服務器的數量,並將打包好的應用拷貝到不一樣的服務器,而後經過負載均衡器(Nginx)就能夠輕鬆實現應用的水平擴展。面試
應用複雜度增長,更新、維護困難。服務器
易形成系統資源浪費。架構
影響開發效率。併發
應用可靠性低。負載均衡
不利於技術更新。分佈式
面向服務的架構SOA(Service-Oriented Architecture)模塊化
SOA的思路是把應用中相近的功能聚合在一塊兒,以服務的形式提供出去。如圖所示:微服務
缺點高併發
雖然SOA解決了總體式架構中的問題,但多數狀況下,SOA中相互獨立的服務仍然會部署在同一個運行環境中。和總體式架構相似,隨着業務功能的增多,SOA的服務會變得愈來愈複雜。本質上看,總體式架構的問題並無由於使用SOA而變得更好。
微服務架構
微服務架構是一種架構風格和架構思想,它倡導咱們在傳統軟件應用架構的基礎上,將系統業務按照功能拆分爲更加細粒度的服務,所拆分的每個服務都是一個獨立的應用,這些應用對外提供公共的API,能夠獨立承擔對外服務的職責,經過此種思想方式所開發的軟件服務實體就是「微服務」,而圍繞着微服務思想構建的一系列結構(包括開發、測試、部署等),咱們能夠將它稱之爲「微服務架構」。如圖所示:
開發人員必須處理建立分佈式系統的複雜性。
部署的複雜性。
增長內存消耗。
微服務架構的組件
(1)服務註冊中心:註冊系統中全部服務的地方。
(2)服務註冊:服務提供方將本身調用地址註冊到服務註冊中心,讓服務調用方可以方便地找到本身。
(3)服務發現:服務調用方從服務註冊中心找到本身須要調用服務的地址。
(4)負載均衡:服務提供方通常以多實例的形式提供服務,使用負載均衡可以讓服務調用方鏈接到合適的服務節點。
(5)服務容錯:經過斷路器(也稱熔斷器)等一系列的服務保護機制,保證服務調用者在調用異常服務時能快速地返回結果,避免大量的同步等待。
(6)服務網關:也稱爲API網關,是服務調用的惟一入口,能夠在這個組件中實現用戶鑑權、動態路由、灰度發佈、負載限流等功能。
(7)分佈式配置中心:將本地化的配置信息(properties、yml、yaml等)註冊到配置中心,實現程序包在開發、測試、生產環境的無差異性,方便程序包的遷移。
(1)微服務實例的開發:SpringBoot
(2)服務的註冊與發現:Spring Cloud Eureka
(3)負載均衡:Spring Cloud Ribbon
(4)服務容錯:Spring Cloud Hystrix
(5)API網關:Spring Cloud Zuul
(6)分佈式配置中心:Spring Cloud Config
(7)調試:Swagger
(8)部署:Docker
(9)持續集成:Jenkins
若是對java微服務、分佈式、高併發、高可用、大型互聯網架構技術、面試經驗交流。
能夠加我架構圈子羣:692-845-439 領取資料,羣內天天更新資料,免費領取。