SlideShare a Scribd company logo
1 of 44
1
Hệ thống chịu tải cao
Pham Van Dong
2 2
LB
API
CACHE
memcached
DB
WEB・・・
master
・・
CACHE
Redis
slave
s/m
slave backup
s/m
slave backup
s/m
slave backup
s/m
slave backup
UserDB01 UserDB02 LogDB02LogDB01
MasterDB01
3 3
LB
API
CACHE
memcached
DB
WEB・・・
master
・・
CACHE
Redis
slave
s/m
slave backup
s/m
slave backup
s/m
slave backup
s/m
slave backup
UserDB01 UserDB02 LogDB02LogDB01
MasterDB01
Scaleout
Replication
Chia dọc
Chia ngang
Giảm access DB
bằng Cache
Scaleout
Replication
Ranking
Nội dung
• DB Sharding
– Giới thiệu
– Sử dụng trong dự án game
– Replication
• Cache
– Memcache
– Redis
4
5
DB Sharding
DB Sharding
• DB không sharding
6
A Table
B Table
C Table
D Table
F Table
垂直分割
Chia theo chiều dọc
DB Sharding
7
Master
Slave SlaveSlave
Master
Slave SlaveSlave
Master
Slave SlaveSlave
Master
Slave SlaveSlave
Master
Slave SlaveSlave
水平分割
Chia theo chiều ngang
DB Sharding
• Điều kiện
– Số connect: vài chục nghìn đến hàng trăm
nghìn connect
– Số lượng connect đồng thới lớn
– Những trường hợp khó dự đoán, bất ngờ
– Bắt đầu với số lượng nhỏ server
– Thêm server trong tương lai
=> Khi cần hê thống Scale out tốt
8
DB Sharding
• Server Web có thể dễ dàng thêm server
• Thêm DB có đơn giản?
9
Web WebWebWeb … xN
DB x ?
DB Sharding
• Để DB scale tốt chia Master, Slave
10
Master
Slave SlaveSlave
UPDATE
SELECT SELECT SELECT
… xN
DB Sharding
• Tuy nhiên Master Server chỉ có một
• Update dữ liệu sẽ bị giới hạn
11
Master
Slave SlaveSlave
UPDATE
SELECT SELECT SELECT
… xN
DB Sharding
• Dẫn tới Lock wait sụp đổ server
12
Master
Slave SlaveSlave
UPDATE
SELECT SELECT SELECT
… xN
DB Sharding
Vậy nên nào như nào
• Sử dụng storage như Fusion-io
– Không hản có thể chuẩn bị được
– Dù áp dụng vào nhưng chua chắc giải quyết được
• Cluster
– Vẫn còn nhiều hạn chế
– Việc đưa vào sử dụng trở nên nguy hiểm
13
Cluster
• MariaDB Galera Cluster
– https://mariadb.com/kb/en/library/what-is-mariadb-
galera-cluster/
– Các node chứa 100% data
• MySQL Cluster
– https://www.mysql.com/products/cluster/
– Các node chưa 1/n data
14
15
Chia nhiều Master/Slave
Chia theo User
16
Mst
MstDB
Không liên quan đến User, chứa common data
User1 User3User2
Log1 Log3Log2
…
…
Data không
tăng
Log hành động
của user. Log
chia đêu các
server
Data user
User chia đều
các server
DB Sharding
Khó khăn về thiết kế
• Không thể JOIN giữa 2 DB
– Chia tách biệt data của các user
– Tất cả các DB phải có Mst data
• Chia nhỏ quá sẽ làm giảm performance
17
DB Sharding
Khó khăn về sử dụng thư viện
• Tìm tất cả các User
– Hiển thị danh sách trên trang Admin rất khó
• Quản lý các transaction rất khó
18
19
DB Sharding trong C2
DB Sharding trong C2
20
udb01 udb05udb03 udb07
udb00 udb04udb02 udb06
DB01
DB02
DB Sharding trong C2
2121
udb01 udb05udb03 udb07
udb00 udb04udb02 udb06
DB01
DB02
User_id%8
22
public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'database_name',
'prefix' => '',
//'encoding' => 'utf8',
);
public $test = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'test_database_name',
'prefix' => '',
//'encoding' => 'utf8',
);
DB Sharding trong C2
23
public function __get($name)
{
// $name: user_master, user_slave, mst_master,
tdb_master,...
// $user_id = Configure::read('User.Id')
return array(
'datasource' => 'Database/MysqlEx',
'persistent' => false,
'host' => $host,
'login' => $user,
'password' => $password,
'database' => $db_schema,
'prefix' => '',
'encoding' => 'utf8mb4',
);
}
DB Sharding trong C2
• $name: user_master, user_slave, mst_master,
tdb_master,...
– use_slave_01, use_slave_02 cũng được
• Trường hợp tìm trong bản ghi khác
– find($query, ‘user_slave_02’);
– setDbConfig(‘user_slave_02’);
24
DB Sharding trong C2
User1 User2
UPDATE
COMMIT
UPDATE
COMMIT
25
User1 User2
UPDATE
UPDATE
COMMIT
COMMIT
DB Sharding trong C2
• Transaction cho trường hợp update tất cả
các user
26
try {
for ($db_num = 0; $db_num < Configure::read('DB_COUNT'); $db_num++) {
$db = ConnectionManager::getDataSource('user_master_0' . $db_num);
$db->begin();
// UPDATE, CREATE
}
for ($db_num = 0; $db_num < Configure::read('DB_COUNT'); $db_num++) {
$db = ConnectionManager::getDataSource('user_master_0' . $db_num);
$db->commit();
}
} catch (Exception $e) {
// 例えば$db_num=3まで失敗しました、db01->db03だけロールバックします
for ($i = 0; $i < $db_num; $i++) {
$db = ConnectionManager::getDataSource('user_master_0' . $i);
$db->rollback();
}
return;
}
DB Sharding trong C2
User Log
UPDATE
COMMIT
UPDATE
COMMIT
27
User Log
UPDATE
UPDATE
COMMIT
COMMIT
28
public function executeTransaction($callback, $log_callback = null)
{
$user_db = ConnectionManager::getDataSource('user_master');
try {
$user_db->begin();
$callback();
$this->updateMissionState();
$user_db->commit();
} catch (Exception $e) {
$user_db->rollback();
throw $e;
}
if ($log_callback == null) {
return 0;
}
$log_db = ConnectionManager::getDataSource('log_master');
try {
$log_db->begin();
$log_callback();
$log_db->commit();
} catch (Exception $e) {
$log_db->rollback();
return 2;
}
return 0;
29
Replication
Replication
• Ví dụ với Master/Slave
30
master
slave
Replication
• 3 layer
31
master
slaveslave/m
aster
slave backup
SlaveDB có thể trùng
MasterDB
Replication
32
Cấu hình Master server
33
sudo nano /etc/mysql/my.cnf
bind-address = 127.0.0.1 sửa thành ip của server
server-id = 1
binlog_do_db = <db càn nhân bản>
sudo service mysql restart
# phân quyền cho các slave
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED
BY 'password';
FLUSH PRIVILEGES;
Cấu hình Slave server
34
CREATE DATABASE newdatabase;
# Import DB nếu lần đầu config
server-id = 2
relay-log = /var/log/mysql/mysql-relay-bin.log
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = <db càn nhân bản>
CHANGE MASTER TO
MASTER_HOST='12.34.56.789',MASTER_USER='slave_user',
MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-
bin.000001', MASTER_LOG_POS= 107;
Tổng hợp
• Common hóa được và chia bao nhiêu DB cũng
được
• Tốc độ đã được cải thiện đáng kể
• Nhiều DB nên tự động hóa càng nhiều càng tốt
• Quá trình code rất là vất vả
– Test debug ở local
– Cần thực hiện lại các thể loại test
– Ảnh hưởng đến logic sử dụng memcached
– Giải thích cái mình làm cho member khác cũng rất
khó
35
36
Cache
Cache
• Thượng sách để tăng tốc độ truy cập
• Giảm thiểu hoạt động mạng
• Giảm CPU, RAM, tăng hiệu suất phần cúng
37
Cache
• Cache Page
– Giảm toàn bộ tính toán của server
• Cache Fragment
– Một phần HTML được lưu vào cache
• Cache Action
– Kết quả của action được lưu vào cache
• Cache Object
– Lưu kết quả tính toán mà trả về object
• Cache SQL
– Lưu kết quả câu truy vấn SQL
38
Cache
• Các cache engine
– Memcache
– Redis
– File
– Amazon ElastiCache
– DynamoDB
– Apache Cassandra
– etc
39
Memcache
• Dữ liệu được tham chiếu nhanh chóng
• Dữ liệu chỉ tồn tại một thời gian nhất định
• Sẽ tự xóa nếu đầy dữ liệu
• Có thể lưu theo kiểu pool cho nhiều server
– Server1 -> server2 -> ..
40
Redis
• Dữ liệu được tham chiếu nhanh chóng
• Thích hớp cho việc tính Ranking (sort set)
• Dữ liệu lưu vào ram và sẽ tự backup ra ổ cứng
• Có thể chia theo master/slave
41
Cache chú ý
• Memory
– Memcached sẽ tự xóa
– Redis sẽ lưu ra ổ cứng
• Cạn kiệt port
– Truy cập quá nhiều
– Cache server = 1/5 Web server
• Logic để nhất quán dữ liệu rất dễ lỗi
42
43
Cảm ơn các bạn đã lắng
nghe
44

More Related Content

Similar to He thong chiu tai cao

Hadoop trong triển khai Big Data
Hadoop trong triển khai Big DataHadoop trong triển khai Big Data
Hadoop trong triển khai Big DataNguyễn Duy Nhân
 
Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012
Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012
Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012Eddie Bui
 
1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn
1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn
1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vnAiTi Education
 
Hướng dẫn cấu hình database availability group
Hướng dẫn cấu hình database availability groupHướng dẫn cấu hình database availability group
Hướng dẫn cấu hình database availability grouplaonap166
 
Ha active active bang gfs2
Ha active  active bang gfs2Ha active  active bang gfs2
Ha active active bang gfs2laonap166
 
Giải pháp hệ thống high availability mail exchange 2016
Giải pháp hệ thống high availability mail exchange 2016Giải pháp hệ thống high availability mail exchange 2016
Giải pháp hệ thống high availability mail exchange 2016laonap166
 
Python Beginner Class day-11-12-13-database
Python Beginner Class day-11-12-13-databasePython Beginner Class day-11-12-13-database
Python Beginner Class day-11-12-13-databaseKhánh Nguyễn
 
Tìm hiểu về RAID và Erasure Coding .pptx
Tìm hiểu về RAID và Erasure Coding .pptxTìm hiểu về RAID và Erasure Coding .pptx
Tìm hiểu về RAID và Erasure Coding .pptxLngThKimOanh1
 
Khac nhau bridge & route cho cấu hình cisco 878 megawan
Khac nhau bridge & route cho cấu hình cisco 878 megawanKhac nhau bridge & route cho cấu hình cisco 878 megawan
Khac nhau bridge & route cho cấu hình cisco 878 megawanthanhthat1
 
Postgre sql & enterprise level database features
Postgre sql & enterprise level database featuresPostgre sql & enterprise level database features
Postgre sql & enterprise level database featuresthekid0611
 
Postgre sql and_enterprise_level_database_features
Postgre sql and_enterprise_level_database_featuresPostgre sql and_enterprise_level_database_features
Postgre sql and_enterprise_level_database_featuresthekid0611
 
Triển khai nhiều domain controller chạy song song trên windows server 2012
Triển khai nhiều domain controller chạy song song trên windows server 2012Triển khai nhiều domain controller chạy song song trên windows server 2012
Triển khai nhiều domain controller chạy song song trên windows server 2012laonap166
 
Linux thietlaphethongmangubunt-45879
Linux thietlaphethongmangubunt-45879Linux thietlaphethongmangubunt-45879
Linux thietlaphethongmangubunt-45879Son Giap
 
Bài 9: Sao lưu và khôi phục hệ thống Domain - Giáo trình FPT
Bài 9: Sao lưu và khôi phục hệ thống Domain - Giáo trình FPTBài 9: Sao lưu và khôi phục hệ thống Domain - Giáo trình FPT
Bài 9: Sao lưu và khôi phục hệ thống Domain - Giáo trình FPTMasterCode.vn
 
Server MDK.pptx
Server MDK.pptxServer MDK.pptx
Server MDK.pptxson2483
 
Server MDK.pptx
Server MDK.pptxServer MDK.pptx
Server MDK.pptxson2483
 

Similar to He thong chiu tai cao (20)

Hadoop trong triển khai Big Data
Hadoop trong triển khai Big DataHadoop trong triển khai Big Data
Hadoop trong triển khai Big Data
 
Hadoop
HadoopHadoop
Hadoop
 
Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012
Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012
Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012
 
1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn
1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn
1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn
 
Báo cáo tuần đồ án
Báo cáo tuần đồ ánBáo cáo tuần đồ án
Báo cáo tuần đồ án
 
Hướng dẫn cấu hình database availability group
Hướng dẫn cấu hình database availability groupHướng dẫn cấu hình database availability group
Hướng dẫn cấu hình database availability group
 
Ha active active bang gfs2
Ha active  active bang gfs2Ha active  active bang gfs2
Ha active active bang gfs2
 
Giải pháp hệ thống high availability mail exchange 2016
Giải pháp hệ thống high availability mail exchange 2016Giải pháp hệ thống high availability mail exchange 2016
Giải pháp hệ thống high availability mail exchange 2016
 
Python Beginner Class day-11-12-13-database
Python Beginner Class day-11-12-13-databasePython Beginner Class day-11-12-13-database
Python Beginner Class day-11-12-13-database
 
Tìm hiểu về RAID và Erasure Coding .pptx
Tìm hiểu về RAID và Erasure Coding .pptxTìm hiểu về RAID và Erasure Coding .pptx
Tìm hiểu về RAID và Erasure Coding .pptx
 
Khac nhau bridge & route cho cấu hình cisco 878 megawan
Khac nhau bridge & route cho cấu hình cisco 878 megawanKhac nhau bridge & route cho cấu hình cisco 878 megawan
Khac nhau bridge & route cho cấu hình cisco 878 megawan
 
Postgre sql & enterprise level database features
Postgre sql & enterprise level database featuresPostgre sql & enterprise level database features
Postgre sql & enterprise level database features
 
Postgre sql and_enterprise_level_database_features
Postgre sql and_enterprise_level_database_featuresPostgre sql and_enterprise_level_database_features
Postgre sql and_enterprise_level_database_features
 
Triển khai nhiều domain controller chạy song song trên windows server 2012
Triển khai nhiều domain controller chạy song song trên windows server 2012Triển khai nhiều domain controller chạy song song trên windows server 2012
Triển khai nhiều domain controller chạy song song trên windows server 2012
 
Linux thietlaphethongmangubunt-45879
Linux thietlaphethongmangubunt-45879Linux thietlaphethongmangubunt-45879
Linux thietlaphethongmangubunt-45879
 
Bài 9: Sao lưu và khôi phục hệ thống Domain - Giáo trình FPT
Bài 9: Sao lưu và khôi phục hệ thống Domain - Giáo trình FPTBài 9: Sao lưu và khôi phục hệ thống Domain - Giáo trình FPT
Bài 9: Sao lưu và khôi phục hệ thống Domain - Giáo trình FPT
 
Server MDK.pptx
Server MDK.pptxServer MDK.pptx
Server MDK.pptx
 
Server MDK.pptx
Server MDK.pptxServer MDK.pptx
Server MDK.pptx
 
Linux 05.pdf
Linux 05.pdfLinux 05.pdf
Linux 05.pdf
 
Sapo Microservices Architecture
Sapo Microservices ArchitectureSapo Microservices Architecture
Sapo Microservices Architecture
 

More from Đông Đô

Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...
Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...
Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...Đông Đô
 
TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)Đông Đô
 
The Art of Readable Code - DongPV
The Art of Readable Code - DongPVThe Art of Readable Code - DongPV
The Art of Readable Code - DongPVĐông Đô
 

More from Đông Đô (8)

Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...
Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...
Xây dụng và kết hợp Kafka, Druid, Superset để đua vào ứng dụng phân tích dữ l...
 
Daily scrum
Daily scrumDaily scrum
Daily scrum
 
Training sql3
Training sql3Training sql3
Training sql3
 
Training sql2
Training sql2Training sql2
Training sql2
 
Training sql1
Training sql1Training sql1
Training sql1
 
TDD (Test Driven Development)
TDD (Test Driven Development)TDD (Test Driven Development)
TDD (Test Driven Development)
 
Pair programing
Pair programingPair programing
Pair programing
 
The Art of Readable Code - DongPV
The Art of Readable Code - DongPVThe Art of Readable Code - DongPV
The Art of Readable Code - DongPV
 

He thong chiu tai cao

  • 1. 1 Hệ thống chịu tải cao Pham Van Dong
  • 2. 2 2 LB API CACHE memcached DB WEB・・・ master ・・ CACHE Redis slave s/m slave backup s/m slave backup s/m slave backup s/m slave backup UserDB01 UserDB02 LogDB02LogDB01 MasterDB01
  • 3. 3 3 LB API CACHE memcached DB WEB・・・ master ・・ CACHE Redis slave s/m slave backup s/m slave backup s/m slave backup s/m slave backup UserDB01 UserDB02 LogDB02LogDB01 MasterDB01 Scaleout Replication Chia dọc Chia ngang Giảm access DB bằng Cache Scaleout Replication Ranking
  • 4. Nội dung • DB Sharding – Giới thiệu – Sử dụng trong dự án game – Replication • Cache – Memcache – Redis 4
  • 6. DB Sharding • DB không sharding 6 A Table B Table C Table D Table F Table
  • 7. 垂直分割 Chia theo chiều dọc DB Sharding 7 Master Slave SlaveSlave Master Slave SlaveSlave Master Slave SlaveSlave Master Slave SlaveSlave Master Slave SlaveSlave 水平分割 Chia theo chiều ngang
  • 8. DB Sharding • Điều kiện – Số connect: vài chục nghìn đến hàng trăm nghìn connect – Số lượng connect đồng thới lớn – Những trường hợp khó dự đoán, bất ngờ – Bắt đầu với số lượng nhỏ server – Thêm server trong tương lai => Khi cần hê thống Scale out tốt 8
  • 9. DB Sharding • Server Web có thể dễ dàng thêm server • Thêm DB có đơn giản? 9 Web WebWebWeb … xN DB x ?
  • 10. DB Sharding • Để DB scale tốt chia Master, Slave 10 Master Slave SlaveSlave UPDATE SELECT SELECT SELECT … xN
  • 11. DB Sharding • Tuy nhiên Master Server chỉ có một • Update dữ liệu sẽ bị giới hạn 11 Master Slave SlaveSlave UPDATE SELECT SELECT SELECT … xN
  • 12. DB Sharding • Dẫn tới Lock wait sụp đổ server 12 Master Slave SlaveSlave UPDATE SELECT SELECT SELECT … xN
  • 13. DB Sharding Vậy nên nào như nào • Sử dụng storage như Fusion-io – Không hản có thể chuẩn bị được – Dù áp dụng vào nhưng chua chắc giải quyết được • Cluster – Vẫn còn nhiều hạn chế – Việc đưa vào sử dụng trở nên nguy hiểm 13
  • 14. Cluster • MariaDB Galera Cluster – https://mariadb.com/kb/en/library/what-is-mariadb- galera-cluster/ – Các node chứa 100% data • MySQL Cluster – https://www.mysql.com/products/cluster/ – Các node chưa 1/n data 14
  • 16. Chia theo User 16 Mst MstDB Không liên quan đến User, chứa common data User1 User3User2 Log1 Log3Log2 … … Data không tăng Log hành động của user. Log chia đêu các server Data user User chia đều các server
  • 17. DB Sharding Khó khăn về thiết kế • Không thể JOIN giữa 2 DB – Chia tách biệt data của các user – Tất cả các DB phải có Mst data • Chia nhỏ quá sẽ làm giảm performance 17
  • 18. DB Sharding Khó khăn về sử dụng thư viện • Tìm tất cả các User – Hiển thị danh sách trên trang Admin rất khó • Quản lý các transaction rất khó 18
  • 20. DB Sharding trong C2 20 udb01 udb05udb03 udb07 udb00 udb04udb02 udb06 DB01 DB02
  • 21. DB Sharding trong C2 2121 udb01 udb05udb03 udb07 udb00 udb04udb02 udb06 DB01 DB02 User_id%8
  • 22. 22 public $default = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'user', 'password' => 'password', 'database' => 'database_name', 'prefix' => '', //'encoding' => 'utf8', ); public $test = array( 'datasource' => 'Database/Mysql', 'persistent' => false, 'host' => 'localhost', 'login' => 'user', 'password' => 'password', 'database' => 'test_database_name', 'prefix' => '', //'encoding' => 'utf8', );
  • 23. DB Sharding trong C2 23 public function __get($name) { // $name: user_master, user_slave, mst_master, tdb_master,... // $user_id = Configure::read('User.Id') return array( 'datasource' => 'Database/MysqlEx', 'persistent' => false, 'host' => $host, 'login' => $user, 'password' => $password, 'database' => $db_schema, 'prefix' => '', 'encoding' => 'utf8mb4', ); }
  • 24. DB Sharding trong C2 • $name: user_master, user_slave, mst_master, tdb_master,... – use_slave_01, use_slave_02 cũng được • Trường hợp tìm trong bản ghi khác – find($query, ‘user_slave_02’); – setDbConfig(‘user_slave_02’); 24
  • 25. DB Sharding trong C2 User1 User2 UPDATE COMMIT UPDATE COMMIT 25 User1 User2 UPDATE UPDATE COMMIT COMMIT
  • 26. DB Sharding trong C2 • Transaction cho trường hợp update tất cả các user 26 try { for ($db_num = 0; $db_num < Configure::read('DB_COUNT'); $db_num++) { $db = ConnectionManager::getDataSource('user_master_0' . $db_num); $db->begin(); // UPDATE, CREATE } for ($db_num = 0; $db_num < Configure::read('DB_COUNT'); $db_num++) { $db = ConnectionManager::getDataSource('user_master_0' . $db_num); $db->commit(); } } catch (Exception $e) { // 例えば$db_num=3まで失敗しました、db01->db03だけロールバックします for ($i = 0; $i < $db_num; $i++) { $db = ConnectionManager::getDataSource('user_master_0' . $i); $db->rollback(); } return; }
  • 27. DB Sharding trong C2 User Log UPDATE COMMIT UPDATE COMMIT 27 User Log UPDATE UPDATE COMMIT COMMIT
  • 28. 28 public function executeTransaction($callback, $log_callback = null) { $user_db = ConnectionManager::getDataSource('user_master'); try { $user_db->begin(); $callback(); $this->updateMissionState(); $user_db->commit(); } catch (Exception $e) { $user_db->rollback(); throw $e; } if ($log_callback == null) { return 0; } $log_db = ConnectionManager::getDataSource('log_master'); try { $log_db->begin(); $log_callback(); $log_db->commit(); } catch (Exception $e) { $log_db->rollback(); return 2; } return 0;
  • 30. Replication • Ví dụ với Master/Slave 30 master slave
  • 31. Replication • 3 layer 31 master slaveslave/m aster slave backup SlaveDB có thể trùng MasterDB
  • 33. Cấu hình Master server 33 sudo nano /etc/mysql/my.cnf bind-address = 127.0.0.1 sửa thành ip của server server-id = 1 binlog_do_db = <db càn nhân bản> sudo service mysql restart # phân quyền cho các slave GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;
  • 34. Cấu hình Slave server 34 CREATE DATABASE newdatabase; # Import DB nếu lần đầu config server-id = 2 relay-log = /var/log/mysql/mysql-relay-bin.log log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = <db càn nhân bản> CHANGE MASTER TO MASTER_HOST='12.34.56.789',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql- bin.000001', MASTER_LOG_POS= 107;
  • 35. Tổng hợp • Common hóa được và chia bao nhiêu DB cũng được • Tốc độ đã được cải thiện đáng kể • Nhiều DB nên tự động hóa càng nhiều càng tốt • Quá trình code rất là vất vả – Test debug ở local – Cần thực hiện lại các thể loại test – Ảnh hưởng đến logic sử dụng memcached – Giải thích cái mình làm cho member khác cũng rất khó 35
  • 37. Cache • Thượng sách để tăng tốc độ truy cập • Giảm thiểu hoạt động mạng • Giảm CPU, RAM, tăng hiệu suất phần cúng 37
  • 38. Cache • Cache Page – Giảm toàn bộ tính toán của server • Cache Fragment – Một phần HTML được lưu vào cache • Cache Action – Kết quả của action được lưu vào cache • Cache Object – Lưu kết quả tính toán mà trả về object • Cache SQL – Lưu kết quả câu truy vấn SQL 38
  • 39. Cache • Các cache engine – Memcache – Redis – File – Amazon ElastiCache – DynamoDB – Apache Cassandra – etc 39
  • 40. Memcache • Dữ liệu được tham chiếu nhanh chóng • Dữ liệu chỉ tồn tại một thời gian nhất định • Sẽ tự xóa nếu đầy dữ liệu • Có thể lưu theo kiểu pool cho nhiều server – Server1 -> server2 -> .. 40
  • 41. Redis • Dữ liệu được tham chiếu nhanh chóng • Thích hớp cho việc tính Ranking (sort set) • Dữ liệu lưu vào ram và sẽ tự backup ra ổ cứng • Có thể chia theo master/slave 41
  • 42. Cache chú ý • Memory – Memcached sẽ tự xóa – Redis sẽ lưu ra ổ cứng • Cạn kiệt port – Truy cập quá nhiều – Cache server = 1/5 Web server • Logic để nhất quán dữ liệu rất dễ lỗi 42
  • 43. 43 Cảm ơn các bạn đã lắng nghe
  • 44. 44