Tài liệu về Firestore transactions: https://firebase.google.com/docs/firestore/manage-data/transactions
Mình thử deploy 1 function với mục đích:
- lấy thông tin balance hiện tại
- random operator là + (cộng) hoặc - (trừ) 1 số ngẫu nhiên với balance hiện tại
- lưu balance mới vào profile
- tạo 1 record transactionHistory
- Thao tác
update balance
&create transactionHistory
phải đồng thờisuccess
hoặc đồng thờifail
firebase deploy --only functions
Gọi từ localhost file worker.js
, file này có các thông số:
- endpoint: lấy từ environment, là endpoint từ Firebase functions
- totalCall: tổng số lượt request lên api
- concurrency: số request gọi đồng thời
node worker.js
Lần 1
totalCall = 180000, concurrency = 3000
{
"successCount": 175929,
"errCount": 4071
}
Lần 2
totalCall = 180000, concurrency = 3000
{
"successCount": 176411,
"errCount": 3589
}
Tổng 2 lần gọi 360000
requests chỉ có 554
TX được ghi.
Giảm concurrency request thêm 2 lần nữa
Lần 3
totalCall = 60000, concurrency = 1000
{
"successCount": 59987,
"errCount": 13
}
Lần 4
totalCall = 60000, concurrency = 1000
{
"successCount": 59986,
"errCount": 14
}
Tổng 2 lần gọi 120000
requests chỉ có 241
TX được ghi.
- Số lượng instance & request handle trong Firebase Functions HTTP có thể scale gần như vô hạn
- Mặc dù handle được rất nhiều request nhưng số lượng TX tạo ra cực kì nhỏ, nguyên nhân có thể do request từ 1 client lên và instance bị timeout (sẽ tìm hiểu nguyên nhân sâu hơn ở phần sau)
Instance specs
Region us-central1
Memory allocated 256 MB
Timeout 60 seconds