什麼是微服務?java
微服務沒有一個標準統一的概念,我的理解爲:微服務是一種可讓軟件職責單1、鬆耦合、自包含、能夠獨立運行和部署的架構思想。架構
關鍵思想就是:拆分、單1、獨立、組件化。把本來一個龐大、複雜的項目按業務邊界拆分一個一個獨立運行的小項目,經過接口的方式組裝成一個大的項目。微服務
微服務解決了什麼問題?組件化
微服務的出現及流行,必定有它的過人之處,既解決了非微服務項目的部分問題或缺點。編碼
相對於微服務,普通的項目都會包含不少功能的,是一個大而全的「超級」工程。好比:以普通架構方式實現的電商平臺會是一個包含:登陸、權限、會員、商品庫存、訂單、收藏、關注、購物車等功能的單一項目。隨着項目業務愈來愈複雜、開發人員愈來愈多相應開發、編譯、部署、技術擴展、水平擴展都會受到限制。接口
開發開發
太多功能在一個項目中,可能會讓代碼複雜、結構混亂、業務關聯混亂、技術單一。過多的功能,讓整個項目結構複雜,業務相互交織,可能致使開發人員對業務的理解和代碼實現相互交織,最後沒人能徹底理解整個項目。並且也很難控制每一個開發人員能「合法合規」的編碼,可能會把兩個原本鬆耦合、互不影響的功能由於實現「簡單」就偷懶強關聯在一塊兒。部署
技術單一編譯
單一的項目爲了技術的統一和管理的簡單方便,通常都會採用統一的技術實現。可是超大型業務如電商平臺,不可能只採用一種技術(如:java),可能會結合業務及不一樣技術優缺點和技術團隊優執採用不一樣的技術。若是把項目拆分紅不一樣的小項目,每一個小項目能夠根據本身的特色採用不一樣技術,只須要提供統一的接口實現對接便可,最大化技術的優點。電商