自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

數(shù)據(jù)庫中間件Atlas調(diào)研筆記

開發(fā) 開發(fā)工具 數(shù)據(jù)庫
數(shù)據(jù)庫中間件Atlas調(diào)研筆記,死磕了。13年底負責數(shù)據(jù)庫中間件設(shè)計時的調(diào)研筆記,拿出來和大家分享,輕拍。

13年底負責數(shù)據(jù)庫中間件設(shè)計時的調(diào)研筆記,拿出來和大家分享,輕拍。

數(shù)據(jù)庫中間件Atlas調(diào)研筆記

一、Atlas是什么

  • 奇虎360的一個mysql數(shù)據(jù)庫中間層項目
  • 在mysql官方推出的mysql-proxy0.8.2的基礎(chǔ)上改的
  • 基于服務(wù)端的中間件

畫外音:數(shù)據(jù)庫中間件有基于服務(wù)端的,也有基于客戶端的,TDDL屬于后者;而cobar和Atlas是一個中間層服務(wù),屬于前者。

二、Atlas相對mysql-proxy的優(yōu)勢

既然Atlas是基于mysql-proxy改的,有一些什么優(yōu)化呢?

  • 主流程中的Lua腳本用C重寫
  • 網(wǎng)絡(luò)模型,線程模型重寫
  • 實現(xiàn)了“真正意義”上的連接池,真正連接復(fù)用
  • 優(yōu)化了鎖機制,性能提高數(shù)十倍

畫外音:性能提高數(shù)十倍是傳說,用過的同學(xué)可以出來說一說。

  • 官方mysql-proxy主庫宕機從庫亦不可用,Atlas優(yōu)化為可讀不可寫

優(yōu)化之外,還新增了什么特性呢?

  • ip過濾
  • 分表支持
  • dba可平滑上下線db
  • 自動摘除宕機db

三、Atlas最吸引人的分表功能

分表功能是Atlas相對于mysql-proxy最具有吸引力的功能。

1. 分表設(shè)置

為了支持分表,需要增加分表設(shè)置

  1. tables = $db_name 
  2.     .$table_name 
  3.     .$partition_column_name 
  4.     .$table_count 

例如

  1. tables = school:stu:id:100 
  • 數(shù)據(jù)庫名叫school
  • 表名叫stu
  • 分表字段叫id
  • 總共分為100張表

這100張子表需要用戶手動逐個建立的,stu_0, stu_1, stu_2, … stu_99,并且所有的子表必須在一個數(shù)據(jù)庫里。

畫外音:額,這個需要用戶手動執(zhí)行,還是有點坑的。

畫外音:分表并且要求子表在一個庫里,如果數(shù)據(jù)量過大,無法通過擴展實例來擴容,不確定Atlas對于這個問題是如何考慮“擴展性”的。

2. 操作支持

Atlas支持select, delete, update, insert, replace操作,它會根據(jù)$partition_column_name 的值來對表的個數(shù)進行取模,以定位到sql請求要落到哪個子表。

需要注意的是,sql語句必須帶上分表id作為查詢條件,如果不帶上id,則會提示stu表不存在。

畫外音:不支持夸庫分表,不支持非partition_column上的查詢,應(yīng)用場景應(yīng)該會比較受限。

四、Atlas的參數(shù)擴展

1. min-idle-connections

  • 用來實現(xiàn)mysq連接池功能,進行連接限制
  • Atlas為每臺DB建立一個連接池
  • 當有客戶端連接Atlas時,Atlas會先在第一臺DB上建立連接,直到第一臺DB連接池內(nèi)的空閑連接數(shù)達到min-idle-connections,再在下一臺DB上建立連接,直到所有DB連接池內(nèi)的空閑連接數(shù)都達到min-idle-connections,便不再建立新連接,而開始復(fù)用連接池內(nèi)的連接
  • Atlas啟動時,配置里的所有DB會按照主庫在前從庫在后的順序在內(nèi)存里排好次序,所以初始階段會先在主庫上建立連接
  • Atlas在運行過程中,某連接如果觸發(fā)了DB的wait_timeout,Atlas會把該連接銷毀,如果因此而導(dǎo)致連接池內(nèi)的空閑連接數(shù)低于min-idle-connections,Atlas將在客戶端下一次連接時重新在該DB上建立連接
  • 初使用者常常會誤認為讀寫分離不起作用,其實是由于min-idle-connections設(shè)置得較大,而測試時只連接了一次或幾次,這樣的話建立的連接都在主庫上,從庫上還沒有建立連接,此時發(fā)送讀語句,自然也只能打向主庫
  • DB的wait_timeout建議不要設(shè)得太小,因為Atlas有連接池機制,不會一直新建連接導(dǎo)致DB上連接數(shù)過多,所以DB不需要依賴wait_timeout防止過多連接,如果wait_timeout太小會導(dǎo)致Atlas的一些不必要的銷毀超時連接的開銷

畫外音:并發(fā)量比較大的時候,連接幾乎不會被銷毀。

2. client-ips

  • 該參數(shù)用來實現(xiàn)多用戶的權(quán)限控制功能

配置格式如下:

  1. client-ips : 127.0.0.1, 192.168.0.* 

畫外音:簡單而實用的功能,多少事故是因為“線下將流量壓到線上”或者“ SecureCRT 窗口太多,切換錯了數(shù)據(jù)庫”。

3. lvs-ips

  • 該參數(shù)是Atlas前面掛接的LVS的物理網(wǎng)卡的IP,不是虛IP
  • 該參數(shù)用來實現(xiàn)平滑重啟功能,否則在重啟Atlas的瞬間的那些SQL請求都會失敗
  • 平滑重啟的條件:至少有兩臺配置相同的Atlas,且掛接在LVS之后

五、Atlas最受關(guān)注FAQ

1. 問:Atlas是否支持多字符集?

答:是,對多字符集的支持是Atlas對原版MySQL-Proxy的第一項改進。

2. 問:Atlas是否支持事務(wù)操作?

答:支持,且處于事務(wù)狀態(tài)的客戶端中途退出時,Atlas會銷毀該客戶端使用的連接,讓后臺的mysql回滾事務(wù),保證了事務(wù)的完整性。

畫外音:單庫多表。

3. 問:自動讀寫分離挺好,但有時候?qū)懲犟R上就想讀,萬一主從同步延遲怎么辦?

答:SQL語句前增加 /*master*/ 就可以將讀請求強制發(fā)往主庫,例如:

  1. /*master*/ select * from t; 

畫外音:額,需要調(diào)用方自己來強制讀主,說實話,不是特別實用。

4. 問:主庫宕機,讀操作受影響么?

答:不受影響,mysql-proxy不支持這個功能。

5. 問:想下線一臺DB, 又不想停掉server, 怎么辦?

答:可以通過管理接口手動上下線后端db:

  1. remove backend i 

6. 問:想給集群中增加一臺DB, 不想影響線上正常訪問可以嗎?

答:可以通過管理接口可以實現(xiàn):

  1. add master ip:port 
  2. add slave ip:port@weight 

7. 問:Atlas支持mysql的prepare特性嗎?

答:不支持,但打算在后續(xù)版本中支持。

8. 問:Altas支持多個主庫的運行模式嗎?

答:目前還未對于Atlas后面掛接多個主庫的情形進行測試過,不建議這樣使用。建議使用一主一從或一主多從的模式。

9. 問:Altas支持SQL安全性過濾嗎?

答:支持,不帶where字句的delete可以過濾。

10. 問:Altas未來有什么發(fā)展規(guī)劃?

答:支持跨機器的分庫分表,將數(shù)據(jù)分不到多臺機器上。

【本文為51CTO專欄作者“58沈劍”原創(chuàng)稿件,轉(zhuǎn)載請聯(lián)系原作者】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關(guān)推薦

2017-11-27 05:06:42

數(shù)據(jù)庫中間件cobar

2017-11-27 05:36:16

數(shù)據(jù)庫中間件TDDL

2018-02-24 19:37:33

Java8數(shù)據(jù)庫中間件

2017-05-23 18:55:05

mysql-proxy數(shù)據(jù)庫架構(gòu)

2011-08-10 13:03:58

CJDBC數(shù)據(jù)庫集群

2017-07-26 09:41:28

MyCATSQLMongoDB

2017-07-18 17:35:16

數(shù)據(jù)庫MyCATPreparedSta

2017-11-03 11:02:08

數(shù)據(jù)庫中間件

2017-11-30 08:56:14

數(shù)據(jù)庫中間件架構(gòu)師

2024-12-06 08:29:29

2017-12-01 05:40:56

數(shù)據(jù)庫中間件join

2017-11-27 06:01:37

數(shù)據(jù)庫中間件中間層

2017-12-11 13:30:49

Go語言數(shù)據(jù)庫中間件

2017-07-18 17:07:40

數(shù)據(jù)庫 MyCATJoin

2009-01-20 10:45:55

Oracle數(shù)據(jù)庫中間件

2021-07-27 05:49:59

MySQL數(shù)據(jù)庫中間件

2020-10-15 08:34:32

數(shù)據(jù)庫中間件漫談

2018-11-07 15:30:19

數(shù)據(jù)庫NewSQLNoSQL

2009-11-10 16:48:23

中間件操作系統(tǒng)數(shù)據(jù)庫

2022-04-01 10:55:30

數(shù)據(jù)庫混合云建設(shè)
點贊
收藏

51CTO技術(shù)棧公眾號