引出問題
互聯網發展迅猛,互聯網系統也由原來的單機服務逐步的演化為分布式服務,同樣,服務架構也由原來的單體架構逐步演化為如今的分布式架構,由此衍生出許多架構類型。今天就談談微服務架構和傳統的SOA架構到底有什么區別。
近年來微服務火遍中小型企業,似乎看起來SOA已經成為將要過時的技術,事實是真的這樣子嗎?
重要概念
當單體架構滿足不了日益增長的客戶需求時,就要將數據庫和應用程序等拆分開,也就是將一個應用程序部署到多台服務器上。通常服務和數據的拆分,分成垂直拆分和水平拆分。
同步分層的架構和異步分層架構只差了一個消息隊列(MQ),異步操作雖然可以增強用戶的體驗,但是其弱一致性會帶來許多數據不一致的問題(這個問題在后續博文中會做出解釋和解決方案,關注我喲~)。
垂直拆分
對業務的不同進行分類,不同的業務划分到不同的應用和數據庫中。這種拆分往往是根據系統的改造,將原來的功能模塊按照更加細粒度的拆分成多個弱耦合的服務。
水平拆分
數據庫層面的水平拆分,就是將一個數據表中的數據按照某種規則分化到不同的數據庫中,也就是分庫分表。
應用層面的水平拆分,最經典的就是將整個應用分層。數據庫訪問層和業務邏輯層拆分、網關層和業務邏輯層拆分等等。
同步分層架構
異步分層架構
SOA是什么?
(鋪墊了這么多,終於到正題了)
面向服務的架構(SOA)是一個組件模型,它將應用程序的不同功能單元(稱為服務)進行拆分,並通過這些服務之間定義良好的接口和協議聯系起來。(這是百度的解釋)
SOA其實是按照業務進行垂直方向的拆分的,每個服務其實還是單機,對ESB依賴嚴重。
微服務是什么?
微服務的終極目的就是為了項目的快速迭代和持續交付。
微服務架構既進行垂直拆分,又進行了水平拆分。
數據庫拆分
數據庫拆分也分為垂直拆分和水平拆分。
垂直拆分比較容易理解,就是按照業務進行拆分;水平拆分就比較難了,其實一般的能不用水平拆分就不用水平拆分。
這里我推薦一個專門用來做分布式的數據庫,TiDB。(在后續博文中會介紹它的使用和應用場景,關注我喲~)
分布式AKF拆分原則: