微服務就是一些協同工做的小而自治的服務。數據庫
微服務將單一職責原則應用到了獨立的服務上,根據業務範圍來肯定服務的邊界,一個服務專一於一個業務範圍,避免代碼庫過大。通常來說,一個微服務應該在兩週以內能夠徹底重構,但不能盲目追求小,一個微服務的業務範圍越小,獨立性帶來的好處就越多,整個系統所需管理的服務就越多。編程
一個微服務就是一個獨立的實體,能夠單獨部署在PAAS(Platform as a service 平臺即服務)上,咱們要儘可能避免把多個服務部署到同一臺機器上,服務之間均經過網絡調用來進行通訊,增強了服務之間的隔離性,避免緊耦合。服務暴露出API(Application Programming Interface,應用編程接口),服務之間經過API進行通訊。API的實現不該該和消費方耦合,在微服務方案中,任何一個微服務出問題,都不會影響其餘功能。服務器
在微服務的系統中,每個微服務均可以使用全新的技術來開發,所以每一個微服務均可以選擇最適合本身業務的語言,數據庫來開發,不受其餘模塊的限制。好比文章模塊更加適合採用文檔數據庫,而對於處理好友之間的關係,採用圖數據庫也許更加合適。網絡
在單體應用程序中,若是服務發生故障,那麼會致使全部功能不可用,單體應用程序中爲了不這種狀況,一般將同一個應用部署到不一樣的服務器上。而微服務天生就有這種處理服務降級和服務,雖然微服務有很好的彈性,可是仍是要謹慎對待,分佈式系統中網絡和機器所引起的問題。架構
龐大的單體應用只能做爲一個總體來擴展,哪怕只有一小部分存在性能問題,也須要對整個系統進行擴展。若是使用微服務,則能夠只對須要擴展的服務進行擴展,把不經常使用的服務運行在較小,性能較差的硬件上。分佈式
在單體應用中即便只修改了一行代碼,也須要從新部署整個應用。這種部署的影響很大,風險很大,所以相關負責人不敢輕易進行發佈。因而部署的頻率就低了不少,但兩次發佈之間差距越大,出現問題的可能性就越大。微服務
微服務架構能夠很好地將架構與組織結構相匹配,避免出現過大的代碼庫。從而得到理想的團隊大小及生產力。性能
在過去單體應用程序強調主要好處是方便重用已有功能,而在微服務中,根據不一樣的目的,人們能夠經過不一樣的方式使用同一功能。如今咱們須要考慮的應用的種類包括Web,手機APP,移動端Web,平板應用,可穿戴設備。
在微服務系統中,系統會開放不少接口供外部程序使用,當狀況改變時,可使用不一樣的方式構建應用。優化
想要重構單體應用的成本是高昂的,想要刪除某個模塊有可能引起其餘問題,而在微服務中,想要重構或移除一個微服務,所面臨的阻礙也很小。orm