天天看點

《MySQL DBA修煉之道》——1.2MySQL 的基礎架構和版本

本節書摘來自華章出版社《mysql dba修煉之道》一書中的第1章,第1.2節,作者:陳曉勇,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

1.2.1 軟體架構中資料庫的定位

資料庫一般位于整個軟體架構的後端,而不直接服務于使用者,資料的展示、應用邏輯的處理都是由其他層次的程式來實作的。比較流行的一種軟體架構的分類是“雙層”、“三層”、“多層”架構。用戶端直接和資料庫伺服器通信,比如通過odbc、jdbc連接配接資料庫,一般稱為“雙層架構”或“client-server”架構。若用戶端和資料庫之間有一個中間伺服器(如web伺服器,中間件),則由中間伺服器負責轉發請求給資料庫伺服器,這種模式稱為“三層架構”。在很多較大規模的web應用中,在web伺服器和資料庫伺服器之間還可能存在一個應用伺服器,這種結構稱為“四層架構”。

本書探讨的mysql是基于目前網際網路最常見的架構,如,網站應用、移動網際網路應用。它們一般是三層架構,這三層架構分别如下。

1)使用者接口層,即各種終端,比如,運作在最終使用者計算機上的浏覽器。

2)業務邏輯和資料處理層,即應用程式伺服器,比如,php、java ee、asp.net、ruby on rails等應用服務。網站處理網絡通路請求的過程可能是這樣的:由nginx接受使用者請求,處理靜态頁面,并且将動态請求轉發給後端的php服務,php服務處理完動态請求後,将結果返還給nginx,nginx再返還給使用者。有時也稱該層為中間件(middle ware)。

3)dbms,即後端資料存儲,如mysql、postgresql、redis、memcached等産品。

相應地,在軟體系統架構設計中也存在一種分層設計的方法學。我們熟知的三層架構(3-tier application)是一種應用廣泛的分層設計,它把應用分解為表現層、業務邏輯層、資料通路層3個層次。三層(多層)架構主要的好處是提供了一個靈活的、可重用的模型,開發者可以通過簡單地修改某一層的功能或增加某一層的功能來實作某種需求,而不需要修改整個應用程式。

表現層(ui),即直接和使用者互動的界面。

業務邏輯層(bll),即對業務邏輯進行處理,處理使用者的請求,它将許多最終使用者的業務邏輯集中到了應用伺服器上。

資料通路層(dal),直接操作資料庫,即針對資料的增加、删除、修改、查找等

操作。

傳統行業的商業資料庫往往還承載了許多業務邏輯的功能,這其中就會經常用到存儲過程、觸發器。網際網路世界的開源資料庫雖然也有存儲過程、觸發器之類的特性,但絕大部分場合下并不會用到這些非核心的基本特性,開發者把資料庫更多地看作一個存儲資料的容器,并已将核心業務邏輯從資料庫功能中分離了出來。

本書主要是講述mysql的使用,由于mysql的優化與軟體整體架構的其他元件的關系密切,是以對于web伺服器、緩存産品、隊列等産品,也會做一些簡單介紹。作為一個合格的dba,有必要了解各種應用服務的運作機制,以及是否需要對它們進行優化。

1.2.2 mysql的基礎架構

mysql是一種關系資料庫産品。關系資料庫,顧名思義,是建立在關系模型基礎上的資料庫。現實世界中,實體與實體之間的各種聯系一般都可以用關系模型來表示。經過數十年的發展,關系資料庫在理論和工業實踐中都已經很成熟了。

資料庫産品的架構一般可以分為應用層、邏輯層、實體層,對于mysql,同樣可以了解為如下的3個層次。

應用層。負責和用戶端、使用者進行互動,需要和不同的用戶端和中間伺服器進行互動,建立連接配接,記住連接配接的狀态,響應它們的請求,傳回資料和控制資訊(錯誤資訊、狀态碼等)。

邏輯層。負責具體的查詢處理、事務管理、存儲管理、恢複管理,以及其他的附加功能。查詢處理器負責查詢的解析、執行。當接收到用戶端的查詢時,資料庫就會配置設定一個線程來處理它。先由查詢處理器(優化器)生成執行計劃,然後交由計劃執行器來執行,執行器有時需要通路更底層的事務管理器、存儲管理器來操作資料,事務管理器、存儲管理器主要負責事務管理、并發控制、存儲管理。這其中,将由事務管理器來確定“acid”特性,通過鎖管理器來控制并發,由日志管理器來確定資料持久化,存儲管理器一般還包括一個緩沖管理器,由它來确定磁盤和記憶體緩沖之間的資料傳輸。

實體層。實際實體磁盤(存儲)上的資料庫檔案,比如,資料檔案、日志檔案等。

圖1-1是mysql官方文檔的一個基礎架構圖,其中connectors可以了解為各種用戶端、應用服務;connection pool 可以了解為應用層,負責連接配接、驗證等功能;management services & utilities、sql interface、parser、optimizer、caches & buffers、pluggable storage engines可以了解為資料庫的大腦——邏輯層;最下方的files& logs可以了解為實體層。

《MySQL DBA修煉之道》——1.2MySQL 的基礎架構和版本

圖1-1 mysql的基礎架構

1.2.3 mysql的版本及特性mysql支援的平台

mysql支援目前市面上的大部分平台,包括32位和64位平台,一般情況下程式運作在64位平台上比32位更快。mysql支援的平台如下所示。

solaris

linux

windows

aix

mac os

hpux

mysql許可協定?

oracle以雙重授權(dual licensed)的方式釋出mysql,它們是gpl和商業許可協定(commercial license)。如果你在一個遵循gpl的自由(開源)項目中使用mysql,那麼你可以遵循gpl協定使用mysql,無論是否将其用作商用。

如果某些商業軟體中結合了mysql或修改了mysql源碼,但又不願意按gpl協定公開軟體源碼,那麼就必須和oracle公司達成商業許可協定。簡而言之,如果你違反了gpl,則需要購買商業許可。

gpl授予使用者以下權利。

以任何目的運作此程式的自由。

再發行複制件的自由。

改程序式,并公開釋出改進内容的自由。

需要注意的是,gpl隻限制了對外分發的軟體,也就是說,如果該軟體隻在内部使用,無論開不開源都沒有關系。如何使用開源軟體并不受gpl的限制,隻有在你基于開源軟體,修改開源軟體的源碼時才受 gpl限制,如果你的應用程式隻是用到了mysql,無論是否商用,都不需要考慮開源。

mysql版本

mysql目前可分為4個版本:mysql社群版、mysql标準版、mysql企業版、mysql叢集版。

(1)mysql社群版

可免費下載下傳使用的開源版本,遵循gpl協定,包括如下的這些特性。

可插拔的存儲引擎架構

多存儲引擎支援innodb、myisam、ndb(mysql cluster即采用ndb存儲引擎)、memory、merge、archive、csv等

複制

分區

存儲過程、觸發器、視圖

資訊資料庫(information-schema)

mysql連接配接器

mysql工作台(mysql workbench)

目前已經釋出了mysql 5.0、mysql 5.1、mysql 5.5、mysql 5.6、mysql 5.7一共5個ga版本。一般來說,後面的版本比前面的版本功能更強、擴充性更好。

以下3個版本是給商業使用者使用的,商業客戶可靈活選擇多個版本,以滿足特殊的商業和技術需求。

(2)mysql标準版

和社群版差别不大,提供社群版所支援的各種特性。

(3)mysql企業版

mysql企業版提供7×24小時的技術支援服務,使用者可直接聯系mysql專業支援工程師,擷取關于mysql應用程式開發、部署和管理的全方位支援。

mysql企業版提供了更全面的進階功能、管理工具和技術支援,例如:mysql企業級備份可為資料庫提供線上“熱”備份,進而降低資料丢失的風險。它支援完全、增量和部分備份,以及時間點恢複和備份壓縮。

mysql線程池提供了一個高效的線程處理模型,旨在降低用戶端連接配接和語句執行線程的管理開銷。

mysql企業級安全性提供了一些立即可用的外部身份驗證子產品,可将mysql輕松內建到現有的安全基礎架構中。

其他特性還有mysql企業級審計、mysql企業級螢幕(mysql enterprise monitor)和mysql查詢分析器(mysql query analyzer)等。

mysql的一些新特性出現在了企業版中,但并沒有出現在社群版,這導緻很多人對于mysql産生了疑慮,但mysql的生态已經建立成熟,官方版本和其他分支也都在穩定地發展改進中,一般的中小公司選擇社群版本即可。一些行業、領域要求更好的服務,更高的穩定性,或者有其他複雜的業務需求,對于它們企業版是一個很好的選擇。

(4)mysql叢集(mysql cluster)版

oracle收購mysql之後,對mysql cluster做了大量改進,這也是oracle力推的産品。叢集版是一種分布式、無共享(share-nothing)的架構,也就是說把資料分布在各個節點的記憶體裡。據官方宣稱,叢集版可比單機資料庫提供更高的可用性,高達99.999%。它還有一些好處,比如自動分片、動态添加節點、支援跨idc複制、減少維護成本等。但這個産品比較複雜,國内也缺少精通mysql cluster的專家,如果一定要使用,建議做好充分的測試驗證工作。

據說現在的mysql cluster版本已經允許存儲部分資料到硬碟上,但由于主要資料需要存放在記憶體中,是以其部署成本會比較高。另外,随着mysql cluster節點的增多,節點之間通信、同步的代價也越來越大,是以其擴充性也是有限的。對于海量資料,mysql cluster可能不是很好的方案,從理論上來講,僅僅把熱點資料加載到記憶體是更經濟的做法。

1.2.4 mysql的開發周期

oracle公司是一家成熟的商業公司,擁有一流的工程能力和執行力,自收購mysql以來,就增加了相應的開發人員,并且提供了更成熟的開發模式,目前mysql的開發進度比收購之前高了很多,許多第三方的優化更新檔也都在官方版本中得到了實作。而之前mysql的400多名開發人員分布在25個國家,70%的開發人員在家工作,導緻了交流溝通不暢,産品開發進展緩慢。

目前mysql的發展路線更清晰,開發周期大緻分為4個階段。

1)新特性開發。

2)釋出實驗室版本。

實驗室版本可以提前預覽到一些正在開發的特性,供使用者試用,但是不保證這些特性會被整合到裡程碑版本和ga版本。

3)釋出裡程碑版本(development milestone releases)。

這個時候的版本稱為rc(release candidate候選)版本,有充分的文檔支援,在所有支援的平台上釋出,可以讓使用者試用,以收集回報。一般平均3~6個月釋出一個dmr(裡程碑版本)。

4)釋出ga版本(generally availability releases)。

ga版本是建議用于生産系統的版本。一般18~24個月為一個周期。