站在架構師的角度來看分庫分表 1、單體應用架構 一個歸檔包(可以是JAR、WAR、EAR或其它歸檔格式)包含所有功能的應用程序,通常稱為單體應用。 優點 便于共享:單個歸檔文件包含所有功能,便于在團隊之間以及不同的部署階段之間共享。 易于測試:單體應用一旦部署,所有的服務或特性就都可以使用了,這簡化了測試過程,因為沒有額外的依賴,每項測試都可以在部署完成后立刻開始。 易于部署:只需將單個歸檔文件復制到單個目錄下。 缺點 復雜性高:由于是單個歸檔文件,所以整個項目文件包含的模塊非常多,導致模塊的邊界模糊、依賴關系不清晰、代碼的質量參差不齊,混亂的堆在一起,使得整個項目非常復雜。以致每次修改代碼,都非常小心,可能添加一個簡單的功能,或者修改一個Bug都會帶來隱藏的缺陷。 技術債務:隨著時間的推移、需求的變更和技術人員的更替,會逐漸形成應用程序的技術債務,并且越積越多。 擴展能力受限:單體應用只能作為一個整體進行擴展,無法根據業務模塊的需要進行伸縮。 阻礙技術創新:對于單體應用來說,技術是在開發之前經過慎重評估后選定的,每個團隊成員都必須使用相同的開發語言、持久化存儲及消息系統。 2、微服務應用架構 微服務架構風格是一種將一個單一應用程序開發為一組小型服務的方法,每個服務運行在自己的進程中,服務間通信采用輕量級通信機制。
這些服務圍繞業務能力構建并且可通過全自動部署機制獨立部署。這些服務共用一個最小型的集中式的管理,服務可用不同的語言開發關閉數據庫內存管理ora,使用不同的數據存儲技術。 優點 易于開發和維護:一個微服務只會關注一個特定的業務功能,所以業務清晰、代碼量較少。開發和維護單個微服務相對簡單。 單個微服務啟動較快 局部修改容易部署:單體應用只要有修改,就得重新部署整個應用。微服務解決了這樣的問題。一般來說,對某個微服務進行修改,只需要重新部署這個服務即可。 技術棧不受限制:在微服務架構中,可以結合項目業務及團隊的特點,合理的選擇技術棧。 按需伸縮:可根據需求,實現細粒度的擴展。 缺點 運維要求高:更多的服務意味著要投入更多的運維。 分布式固有的復雜性:使用微服務構建的是分布式系統。對于一個分布式系統,系統容錯、網絡延遲、分布式事務等都會帶來巨大的問題。 接口調整成本高:微服務之間通過接口進行通信。如果修改某一個微服務的API,可能所有用到這個接口的微服務都需要進行調整。 3、實例 V1.0 典型點單體應用架構 a.數據量太大,庫內存不足 b.查詢慢 c.連接數不足,并發插入連接數不夠 V1.x 分析: 數據庫壓力大、邏輯復用(代碼復用度很差)、模塊耦合度太高 OOD:模塊分解;面向接口編程(模塊在接口之后) V2.0 ??重構后: 解決了哪些問題? 業務拆分的問題 單表數據量問題詳解分庫分表 對數據庫的庫表進行拆分,用分片的方式對數據進行管理。
分庫分表兩個緯度:垂直、水平 可能出現的問題:跨庫Join、分布式事務 拆分規則:時間、hash、地區、id范圍、取模Mycat實現分庫分表 什么是MyCat 1、一個徹底開源的,面向企業應用開發的大數據庫集群 2、支持事務、ACID、可以替代MySQL的加強版數據庫 3、一個可以視為MySQL集群的企業級數據庫,用來替代昂貴的集群 4、一個融合內存緩存技術、NoSQL技術、HDFS大數據的新型SQL 5、結合傳統數據庫和新型分布式數據倉庫的新一代企業級數據庫產品 6、一個新穎的數據庫中間件產品 為什么使用MyCat 如今隨著互聯網的發展,數據的量級也是撐指數的增長,從GB到TB到PB。對數據的各種操作也是愈加的困難,傳統的關系性數據庫已經無法滿足快速查詢與插入數據的需求。這個時候NoSQL的出現暫時解決了這一危機。它通過降低數據的安全性,減少對事務的支持,減少對復雜查詢的支持,來獲取性能上的提升。但是,在有些場合NoSQL一些折衷是無法滿足使用場景的,就比如有些使用場景是絕對要有事務與安全指標的。這個時候NoSQL肯定是無法滿足的,所以還是需要使用關系性數據庫。
如何使用關系型數據庫解決海量存儲的問題呢?此時就需要做數據庫集群,為了提高查詢性能將一個數據庫的數據分散到不同的數據庫中存儲,為應對此問題就出現了——MyCat綜上所述:Mycat作用為:能滿足數據庫數據大量存儲;提高了查詢性能 支持的數據庫 支持MySQL 等一些主流的數據庫 核心技術(分庫分表) 數據庫分片指:通過某種特定的條件,將我們存放在一個數據庫中的數據分散存放在不同的多個數據庫(主機)中關閉數據庫內存管理ora,這樣來達到分散單臺設備的負載,根據切片規則,可分為以下兩種切片模式 MyCAT通過定義表的分片規則來實現分片,每個表格可以捆綁一個分片規則,每個分片規則指定一個分片字段并綁定一個函數,來實現動態分片算法 1.:邏輯庫,與MySQL中的(數據庫)對應,一個邏輯庫中定義了所包括的Table。 2.Table:邏輯表,即物理數據庫中存儲的某一張表,與傳統數據庫不同,這里的表格需要聲明其所存儲的邏輯數據節點。在此可以指定表的分片規則。 3.:MyCAT的邏輯數據節點,是存放table的具體物理節點,也稱之為分片節點,通過來關聯到后端某個具體數據庫上 4.:定義某個物理庫的訪問地址,用于捆綁到上 5.分片規則:前面講了數據切分,一個大表被分成若干個分片表,就需要一定的規則,這樣按照某種業務規則把數據分到某個分片的規則就是分片規則,數據切分選擇合適的分片規則非常重要,將極大的避免后續數據處理的難題 案例