360 Atlas生產環境使用心得

2022-08-03 13:39:17 字數 3066 閱讀 2309

一、atlas介紹

atlas是360開源的乙個mysql proxy,以下是官方介紹:

atlas是由 qihoo 360公司web平台部基礎架構團隊開發維護的乙個基於mysql協議的資料中間層專案。它在mysql官方推出的mysql-proxy 0.8.2版本的基礎上,修改了大量bug,新增了很多功能特性。目前該專案在360公司內部得到了廣泛應用,很多mysql業務已經接入了atlas平台,每天承載的讀寫請求數達幾十億條。同時,有超過50家公司在生產環境中部署了atlas,超過800人已加入了我們的開發者***,並且這些數字還在不斷增加。

以下是其github**庫:

主要功能:

1.讀寫分離

2.從庫負載均衡

3.ip過濾

4.自動分表

5.dba可平滑上下線db

6.自動摘除宕機的db

「自動分表」需要打引號,對於新錶是沒問題的;

如果是一張有歷史資料的表需要拆分,atlas是不會幫我們拆分的,就需要自己寫工具遷移。

二、安裝

/releases

分表的方式有2種,1是單機分表,另1種是支援跨機器分表,可以根據情況選擇,我們選擇的是單機分表的,即一張總表拆成多張子表,子表和總表都在乙個mysql例項上。

因為是rpm安裝,直接用rpm命令安裝就可以了:

rpm -i atlas-2.2.1.el6.x86_64.rpm 

預設安裝目錄為 /usr/local/mysql-proxy。

啟動命令

/usr/local/mysql-proxy/bin/mysql-proxyd test start

test表示哪個例項

配置檔案在 usr/local/mysql-proxy/conf下,每個配置檔案表示乙個例項;

3、配置說明

以下是常用的配置項:

配置說明

admin-username

後台管理員賬號

admin-password

後台管理員密碼

proxy-backend-addresses

mysql例項,多項以,(逗號)分隔

pwds

密碼,必須和mysql例項的密碼一樣,

用安裝目錄 bin目錄下的加密程式encrypt加密

event-threads

工作執行緒數,對效能影響大

sql-log

sql日誌的開關,可設定為off、on、realtime,off代表不記錄sql日誌,on代表記錄sql日誌,realtime代表記錄sql日誌且實時寫入磁碟

proxy-address

atlas監聽的工作介面ip和埠

tables 

分表設定,此例中person為庫名,mt為表名,id為分表字段,3為子表數量,可設定多項,以逗號分隔,若不分表則不需要設定該項

關鍵引數:

tables:分表引數,格式:

資料庫名.表名.分表字段.子表數量

舉1個栗子,假如我們在做社群,社群主要功能是發帖和回帖,那主要是2張表(只是為了演示,不會把真實實際場景所有字段加上):

帖子表(posts)

欄位名型別

說明tid

int帖子id

title

varchar(200)

帖子標題

content

text

帖子內容

回覆表(replies)

欄位名型別

說明pid

int回覆id

tidint

帖子id

uidint

使用者id

content

text

回覆內容

create_time

datetime

插入時間

假設這些表都在資料庫forums中,

如果我們要對replies進行分表,則tables這樣設定

forums.replies.tid.64

上面表示對replies進行分表,分表字段為tid,即所有tid相同的回覆會在同一張表,總共分64張表。

1、atlas不支援壓縮選項,以下連線是不行的

mysql_connect($dbhost, $dbuser, $dbpw, 1, mysql_client_compress);

正確的寫法

mysql_connect($dbhost, $dbuser, $dbpw, 1);

2. count語句問題

分表後,count返回的結果會是針對多個表查詢的多個值(count結果為0的不返回),具體示例如下(當前分表為4張):

3.  分表後,如果刪掉主表,則不帶分表字段的查詢會報錯(如下圖);如果保留主表,則查詢的是主表資料。

4. 分頁問題

以上面舉例的場景來說,如果要從回覆表查詢uid為123,並且tid為100-200之間的記錄的第2頁(discuz裡就是這樣查使用者的回覆的),每頁顯示10條,按時間倒序,就有可能返回為空了;

為什麼這樣呢,設想這樣乙個場景,使用者一共有40條回覆,假設分布在4張表中,並且分布很均勻,每張表10條記錄,因為從每張子表取偏移10-20的記錄,子表返回為空了,實際是使用者是有資料的,正確的做法是從每張表取出前20條記錄,再合併然後進行分頁。

關於這個問題,我已經在另一篇文章詳細說明了,mysql中介軟體360 atlas踩坑

四、總結

1、如果你是新錶,並且預見以後資料很大,可以用上atlas來解決資料量的問題;

2、舊表的話,你還得自己寫指令碼導資料,核對資料;

3、如果有些分頁查詢的話,還需要自己重寫;

4、確定你的所有場景的查詢是否都有分表字段作為where,沒有的話,需要自己再寫工具將子表的資料同步到總表;

可以看到atlas如果需要產品化還要做很多的事情,如果確定上面都不是問題,就大膽的用吧~

模擬生產環境使用thrift c 版

本文簡單的模擬了實際生成環境場景中使用的c s模型,使用thrift作為框架來進行開發,服務端實現了兩個介面,使用threadpoolserver模型提供服務,由於只是學習thrift相關的使用,本文的 不是很嚴謹,設計基本沒有,請閱讀本文之前最好有基本的thrift相關的知識。如 thrift檔案...

hazelcast生產環境使用筆記

hazelcast雖然有很多優秀的特性,但是如果沒有掌握好原理和配置,難免會遇到各種問題。問題一.集群節點無反應。原因是hazelcast集群在預設配置下,執行緒耗盡,整個集群進入假死狀態。預設配置,併發15執行緒,集群就死掉。解決方式修改預設配置項,擴大執行緒池。問題二.集群反應超慢。但是未宕機。...

生產環境使用http服務要點

1 採用nginx作為反向 作用 1.1 配置nginx的upstram為backup模組,可以平滑公升級http服務。在http 服務時,要求http服務不再接受請求的http請求,而正在處理的請求需要等請求處理完畢後,再重啟。因此,在公升級http服務時,可以配置nginx,是http請求先匯入...