微服務一詞源自 馬丁·福勒(Martin Fowler) 在2014 年的一篇博客:Microservices 該文章中對微服務定義以下:html
the microservice architectural style [1] is an approach to developing
a single application as a suite of small services, each running in its
own process and communicating with lightweight mechanisms, often an
HTTP resource API. These services are built around business
capabilities and independently deployable by fully automated
deployment machinery. There is a bare minimum of centralized
management of these services, which may be written in different
programming languages and use different data storage technologies.web
微服務架構風格是將單體應用程序 拆分爲多個小型的服務 而且每一個服務在獨立的進程中。服務間的通訊採用輕量級通訊的機制 一般是HTTP方式提供API 來實現。這些服務經過自動化部署的方式進行獨立部署。每一個服務能夠根據自身的特色採用不一樣的語言開發同時也可使用不一樣的數據存儲技術。數據庫
服務的拆分是基於業務和公司的組織架構進行拆分,也稱之爲康威定律。tomcat
另外 Adrian Cockcroft 更是將微服務比喻成 細粒度的 SOA(面向服務的架構)服務器
雖然我對微服務的定義進行解釋,可是若是想更深層次的瞭解微服務 咱們不得不先從單體架構提及。架構
單體架構就是 將 web項目應用實例 的全部功能模塊打包到一塊兒並放在一個web容器中運行的系統。 例如 咱們的一個電商網站 其中包含 商品模塊 訂單模塊 等咱們能夠經過maven多模塊 或者 放入到不一樣的包中來區分。 可是最終仍是將其打包成一個war 部署在咱們的tomcate中。app
隨着業務規模的發展咱們的單體架構會出現以下問題負載均衡
不敢作新的技術的嘗試
因爲咱們的項目是單體的架構,項目成員必須使用同一種技術棧進行項目的開發。切換新的技術和語言要對整個項目進行重頭開發。這使得嘗試新的語言變得比較困難。框架
簡單點說微服務的好處正式用來彌補單體架構的不足的。具體的好處以下:maven
嘗試新的技術變得更容易
個人我的理解就是微服務是在SOA 上進一步的延伸而產生的新名詞。
微服務不是銀彈,使用微服務業務也有困難須要解決。當咱們將服務拆分多個服務 多是幾十個服務 也有多是上百甚至上千個服務。這個多服務如何區治理就是咱們要面臨的困難,具體細分的話包含以下內容:
若是你的項目代碼模塊 代碼邏輯 比較混亂是不可以經過微服務來解決的。引入微服務須要對整個項目的功能進行梳理劃分後才能在考慮切換爲微服務。
和堅 簡書博主當咱們在說微服務治理的時候究竟在說什麼:
Rick Osowski:微服務介紹
承諾一時的華麗 簡書博主:Go - Micro微服務框架實踐 - 相關概念(六)
每日一拾 簡書博主:架構設計漫步:從單體架構、SOA到微服務