Bài viết
Chia sẻ kiến thức của bạn.
Tôi có cần gửi tx song song không? ,
các bạn tôi có máy thu sui bằng ngôn ngữ go, nhưng tps thấp, làm thế nào tôi có thể làm cho nó nhanh hơn, tôi có cần gửi tx song song không? , RequestType: “waitForEffectsCert”, thực sự chậm đối với từng cái
- Sui
Câu trả lời
10Có, gửi giao dịch song song có thể cải thiện đáng kể thông lượng của bạn. Sử dụng WaitForEffectScert cho mỗi giao dịch tuần tự sẽ làm bạn chậm lại. Thay vào đó, hãy xếp hàng loạt các giao dịch của bạn và xử lý phản hồi không đồng bộ. Ngoài ra, hãy xem xét sử dụng waitForLocalExecution chỉ khi cần thiết. Tối ưu hóa bằng cách sử dụng lại các kết nối và điều chỉnh cài đặt đồng thời của SDK.
Có, sử dụngTX song biểnđể tăng TPS. WaitForEffectsCert
thêm độ trễ — chuyển sang WaitForLocalExecution
hoặc yêu cầu hàng loạt.
// Example: Send TXs concurrently in Go
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
defer wg.Done()
// Your Sui TX code here
}()
}
wg.Wait()
Tối ưu hóa chính:
1.** TX song bình**: Sử dụng goroutines (tránh giới hạn tỷ lệ).
2.** Yêu cầu hàng loại**: Kết hợp TX nếu có thể.
3. WaitForLocalExecution``WaitForEffectsCert
Xác nhận nhanh hơn: Thích hơn.
Có, nếu bạn đang trải quagiao dịch mỗi giây (TPS) chậm chạp vàBộ thu Suicủa bạn trong Go bị trễ khi xử lý giao dịch tuần tự, việc gửigiao dịch song bảncó thể cải thiện đáng kể thông lượng. Hoạt độ WaitForEffectsCert
ng****có thể là một nút thắt trong thực thi đơn luồng, nhưng song song việc gửi giao dịch và chờ đợi hiệu ứng có thể làm tăng hiệu quả. Dưới đây là bảng phân tích về cách giải quyết vấn đề này:
1.** Song song hóa các giao dịch chuyển nhận**
*Gửi giao dịch song bản: Thay vì chờ đợi hiệu quả của mỗi giao dịch một cách tuần tự, bạn có thể gửi nhiều giao dịch song song. Điều này cho phép hệ thống xử lý các giao dịch đồng thời, cải thiện TPS.
- Trong Go, bạn có thể sử dụnggoroutinesđể gửi giao dịch song song, điều này có thể giúp tối đa hóa thông lượng. Đảm bảo rằng các giao dịch độc lập với nhau (tức là chúng không phụ thuộc vào kết quả của nhau).
Ví dụsử dụnggoroutinesđể gửi giao dịch song song:
package main
import (
"fmt"
"sync"
)
// Simulate sending a transaction
func sendTransaction(txID int, wg *sync.WaitGroup) {
defer wg.Done()
// Send transaction logic here
fmt.Printf("Transaction %d sent\n", txID)
}
func main() {
var wg sync.WaitGroup
txCount := 10 // Number of transactions to send
for i := 0; i < txCount; i++ {
wg.Add(1)
go sendTransaction(i, &wg) // Launch goroutine to send transaction
}
wg.Wait() // Wait for all transactions to be sent
fmt.Println("All transactions sent.")
}
2. WaitForEffectsCert
Tối ưu hóa
*** Parallelize WaitForEffectsCert
Waiting for Effects**: Có thể làm chậm quá trình thực thi tuần tự vì nó chờ hiệu ứng của mỗi giao dịch được xác nhận từng cái một. Để giảm thiểu điều này:
*** Chờ hàng đầu**: Thay vì chờ đợi hiệu ứng của mỗi giao dịch theo thứ tự, bạn có thể quản lý và chờảnh hưởng của nhiều giao dịch cùng một lần. Điều này làm giảm thời gian chờ đợi.
WaitForEffectsCert
*Sử dụng đồng lượng: Triển khai nhóm công nhân hoặc sử dụnggoroutinesđể xử lý song song nhiều yêu cầu.
WaitForEffectsCert
Ví dụđể song song (mã giả):
// Pseudo-code to parallelize effect wait
effectsChannel := make(chan Result, txCount)
for i := 0; i < txCount; i++ {
go func(txID int) {
// Wait for effect cert
result := waitForEffectsCert(txID)
effectsChannel <- result
}(i)
}
// Collect results
for i := 0; i < txCount; i++ {
result := <-effectsChannel
fmt.Printf("Effect for Transaction %d: %v\n", result.txID, result)
}
3.** Sử dụng TransactionBlock
API hiệu quả**
Khối giao dịch: Thay vì gửi các giao dịch riêng lẻ, hãy nhóm nhiều hoạt động thành một khối giao dịch*. Điều này làm giảm chi phí gửi từng giao dịch riêng lẻ và có thể tăng tốc độ xử lý.
*Gửi hàng lần: API của Sui cho phép bạn gửi nhiều hành động trong một giao dịch, điều này có thể cải thiện đáng kể thông lượng. Tổ chức các hoạt động thành các giao dịch lớn hơn làm giảm số lượng WaitForEffectsCert
cuộc gọi cần thiết.
4.** Giám sát và điều chỉnh cấu hình Sui Client**
- Nếu bạn đang sử dụng máy khách Sui RPCđể gửi giao dịch, hãy kiểm tra xem cấu hình máy khách (chẳng hạn như kích thước lô hoặc thời gian chờ yêu cầu) có được tối ưu hóa cho thông lượng cao hay không. *** Kích thước lô động: Điều chỉnh kích thước lô để gửi nhiều giao dịch có thể giúp giảm chi phí. *Thời gian chờ và truy xu: Đảm bảo rằng khách hàng của bạn được thiết lập để xử lý thời gian chờ và thử lại một cách hiệu quả. Các vấn đề về mạng hoặc tải máy chủ có thể gây ra sự chậm trễ, vì vậy tối ưu hóa thời gian chờ và chính sách thử lại có thể giúp cải thiện thời gian phản hồi.
5.** Cân bằng tải và chia sẻ**
- Nếu bạn đang xử lý một khối lượng giao dịch lớn**, hãy cân nhắccân bằng tải hoặchoặcchia sẻyêu cầu của bạn. Chia giao dịch của bạn trên nhiều node hoặc khách hàng để tránh tắc nghẽn do một kết nối duy nhất gây ra.
- Điều này có thể được thực hiện bằng cách phân phối các tập hợp giao dịch khác nhau cho các** xác thực Sui hoặchoặc điểm cuối RPC**khác nhau, đảm bảo xử lý song song trên nhiều tài nguyên.
6.** Xem lại phụ thuộc giao dịch**
- Nếu các giao dịch phụ thuộc vào nhau (ví dụ: nếu một giao dịch phải xảy ra trước giao dịch khác), bạn sẽ cần phải chờ ảnh hưởng của mỗi giao dịch một cách tuần tự. Tuy nhiên, nếu các giao dịch là** độc lập**, bạn có thể gửi song song và chờ hiệu ứng một cách độc lập.
- Nếu có thể, cơ cấu lại các giao dịch để giảm sự phụ thuộc lẫn nhau, cho phép song song hóa lớn hơn.
7.** Tối ưu hóa yêu cầu RPC**
*Gộp kết nối: Nếu bạn đang thực hiện nhiều yêu cầu RPC, hãy đảm bảo rằng bạn đang sử dụng lạikết nối liên tụcđể tránh chi phí thiết lập kết nối mới cho mỗi yêu cầu. *Yêu cầu phân loại: Nếu Sui RPC hỗ trợ nó, hãy cân nhắcghép nhiều yêu cầu thành mộtđể giảm chi phí của nhiều cuộc gọi mạng khứ hồi.
8.** Xem xét hiệu suất node**
Tải xác thị: Nếu bạn đang gửi giao dịch đến một nút xác thực Sui duy nhất, hãy đảm bảo rằng nút đó có khả năng xử lý TPS cao*. Bạn có thể cần mở rộng cơ sở hạ tầng hoặc phân phối các yêu cầu trên nhiều trình xác thực để có hiệu suất tốt hơn.
Tóm lại:
Giao dịch song biển: Sử dụnggoroutinestrong Go để gửi và chờ giao dịch đồng thời, giảm độ trễ.
Giao dịch hàng loại: Nhóm nhiều hành động thành một giao dịch để giảm chi phí.
*** Tối ưu h WaitForEffectsCert
óa: Xử lý nhiều WaitForEffectsCert
cuộc gọi đồng thời để cải thiện thông lượng.
*** Cấu hình máy khác**: Kiểm tra cài đặt máy khách như thời gian chờ và kích thước lô để đảm bảo hiệu suất tối ưu.
***Mở rộng cơ sở hạ tầng: Nếu cần thiết, phân phối tải trên nhiều trình xác thực hoặc nút Sui để tăng TPS.
Bằng cách áp dụng các chiến lược này, bạn sẽ có thể cải thiện đáng kể thông lượng và hiệu suất của máy thu Sui của mình, làm cho nó phù hợp hơn với các trường hợp sử dụng thời gian thực.
Có,giao dịch song bảnsẽ tăng TPS của bạn. Thiết kế của Sui phát triển mạnh nhờ thực hiện song song. Đây là cách tối ưu hóa:
###** Sửa chữa nhanh:**
1.Gửi TX đồng lời- Sử d���ng goroutines để giao dịch hàng loạt (Sui xử lý chúng song song).
2.Bỏ qua WaitForEffectsCert
- Đối với TX không phụ thuộc, sử dụng:
RequestType: "ImmediateReturn" // Faster, but check status later
ProgrammableTransactionBlock
Batch PTB- Kết hợp các hành động trong một.
Lợi ích chính: ✔** Không có xung đột?** → Song song tự do (Sui tự động xử lý khóa đối tượng). ✔** TX phụ thuộc?** Nhóm thành PTB hoặc chỉ trình tự các bước quan trọng.
Lưu lượng ví dụ:
// Launch 100 TXs concurrently
for i := 0; i < 100; i++ {
go submitTx(txData[i])
}
Theo dõi: -** Khí tăng động**trong điều kiện đồng thời cao. -Phụ thuộc thứ hàng(sử dụng PTB nếu TX chia sẻ đối tượng).
Có, gửi giao dịch song song để tăng TPS. WaitForEffectsCert
chậm vì nó chờ đợi sự đồng thuận từng cái một. Sử dụng thực thi đồng thời với các đối tượng người gửi duy nhất hoặc dấu thời gian để tránh xung đột. Sui xử lý song song hóa — chỉ cần đảm bảo các giao dịch độc lập và hàng loạt đúng cách.
###1. Xử lý TX song song (Cần thiết)
// Worker pool pattern
func processInParallel(txChan <-chan *Transaction, workers int) {
var wg sync.WaitGroup
wg.Add(workers)
for i := 0; i < workers; i++ {
go func() {
defer wg.Done()
for tx := range txChan {
submitTx(tx) // Your TX submission logic
}
}()
}
wg.Wait()
}
Cài đặt chính:
- Công nhân tối ưu =
2 * CPU cores
- Kích thước lô =
50-100 TXs/worker
###2. Chế độ xác nhận nhanh hơn
Thay thế WaitForEffectsCert
bằng:
requestType := "WaitForLocalExecution" // 3-5x faster
// OR for max speed (risky):
requestType := "ImmediateReturn" // + async status checks
###3. Gộp kết nối
import "github.com/valyala/fasthttp"
client := &fasthttp.Client{
MaxConnsPerHost: 1000, // Default is 512
ReadTimeout: 10 * time.Second,
WriteTimeout: 10 * time.Second,
MaxIdleConnDuration: 30 * time.Second,
}
###4. Tối ưu hóa dành riêng cho SUI ####Quản lý đối tượng khí
// Pre-load 1000 gas objects
gasObjects := make(chan string, 1000)
go func() {
for i := 0; i < 1000; i++ {
obj := getNewGasObject() // Your implementation
gasObjects <- obj
}
}()
####** Tòa nhà Batch TX**
txBatch := make([]*Transaction, 0, 50)
for i := 0; i < 50; i++ {
txBatch = append(txBatch, buildTx())
}
submitParallel(txBatch) // Implement batch RPC
###5. Điểm chuẩn hiệu suất | Cách tiếp cận | TPS (Go) | Độ trễ | | -------------------| ---------| | tuần tự | 50-100 | 500ms + | | Song song (10 công nhân) | 800-1200 | 80ms | | Hàng loạt (50 TX/RPC) | 3000+ | 200ms |
###Kiểm tra quan trọng 1.** Tải nối**
watch -n 1 'curl -s http://localhost:9000/metrics | grep "rpc_queue"'
2.** Xử lý lỗi**
if errors.Is(err, sui.ErrTxQueueFull) {
time.Sleep(100 * time.Millisecond)
retry(tx)
}
Để có hiệu suất tối đa:
sui.NewClient(grpcDialOpts)
- Sử dụngGRPCthay vì JSON-RPC ()
- Bật**nén:
dialOpts := []grpc.DialOption{
grpc.WithDefaultCallOptions(grpc.UseCompressor("gzip")),
}
Có, nếu bạn thấy thông lượng thấp trong khi sử dụng RequestType: "WaitForEffectsCert"
trong máy thu Sui dựa trên GO, thìgửi giao dịch tuần tự là nút thắt chính của bạn. Để tăng đáng kể TPS (giao dịch mỗi giây) của bạn, bạn hoàn toàn cầngửi các giao dịch song bảnthay vì đợi mỗi giao dịch xác nhận đầy đủ trước khi gửi giao dịch tiếp theo.
WaitForEffectsCert
Chế độ chờ cho đến khi giao dịch được thực hiện và các hiệu ứng của nó được chứng nhận trước khi trả lại—điều này làan toàn nhưng chậmđối với các ứng dụng thông lượng cao như vòi nước, máy đúc NFT hoặc bot DeFi. Khi bạn chờ từng hiệu ứng một, bạn đang giới hạn thông lượng trong thời gian khứ hồi cho mỗi giao dịch, có thể là 1—2 giây.
Đây là cách bạn có thể tăng tốc nó:
✅ Các phương pháp hay nhất để tăng thông lượng
*** Hàng loạt và song song các giao dịch**bằng cách sử dụng Goroutines.
- Sử dụng loại yêu cầu**"None” hoặc “waitForLocalExecution"**nếu bạn có thể chấp nhận độ trễ nhỏ trong quá trình xác minh hiệu lực.
- Giới hạn đồng thời để tránh đạt đến giới hạn tỷ lệ RPC (ví dụ: 20—50 TX song song tùy thuộc vào nút).
- Chuẩn bị các giao dịch trước thời hạn bằng
TransactionBlockBuilder
cách sử dụng, ký tên và đẩy chúng song song.
Mẫu ví dụ trong Go (Khái niệm) :
for i := 0; i < txCount; i++ {
go func(i int) {
tx := BuildTx(i) // your custom tx builder
resp, err := suiClient.ExecuteTransaction(tx, "WaitForLocalExecution")
if err != nil {
log.Println("TX error:", err)
} else {
log.Println("TX confirmed:", resp.Digest)
}
}(i)
}
⚠️ Ghi chú:
- “waitForLocalExecution” nhanh hơn nhiều và vẫn mang lại cho bạn sự tự tin rằng node đã nhìn thấy TX.
- Giám sát mempool và chặn lan truyền nếu bạn đang xây dựng bot cấp sản xuất.
- Sử dụngví nóng với số dư gas cao, hoặc xoay nhiều thanh toán gas để giảm va chạm nonce.
Đọc thêm về các tùy chọn thực hiện giao dịch: [https://docs.sui.io/build/transaction-types](https://docs.sui.io/build/transaction-types]
Có, gửi giao dịch song song có thể cải thiện đáng kể thông lượng của bạn. Sử dụng WaitForEffectScert cho mỗi giao dịch tuần tự sẽ làm bạn chậm lại. Thay vào đó, hãy xếp hàng loạt các giao dịch của bạn và xử lý phản hồi không đồng bộ. Ngoài ra, hãy xem xét sử dụng waitForLocalExecution chỉ khi cần thiết. Tối ưu hóa bằng cách sử dụng lại các kết nối và điều chỉnh cài đặt đồng thời của SDK.
Nếu bạn gặp phải TPS thấp trong người gửi giao dịch Sui dựa trên GO, nút thắt có thể là do gửi giao dịch tuần tự với requestType: “waitForEffectScert”. Loại yêu cầu này chờ tính cuối cùng đầy đủ trước khi tiến hành, loại yêu cầu này không được tối ưu hóa cho thông lượng khi thực hiện từng yêu cầu một. Để cải thiện hiệu suất, bạn nên thực hiện gửi giao dịch song song hoặc theo lô.
Song song hóa cho phép nhiều giao dịch được thực hiện cùng một lúc, tận dụng hiệu quả khả năng của Sui để xử lý các giao dịch đồng thời, đặc biệt là khi các giao dịch chạm vào các đối tượng rời rạc. Bạn nên triển khai một nhóm công nhân hoặc goroutines để gửi giao dịch đồng thời. Đảm bảo rằng bạn quản lý nonce (số thứ tự) hoặc tham chiếu đối tượng một cách chính xác để bạn không gây ra xung đột trong quyền sở hữu đối tượng.
Khi gửi các giao dịch song song, tránh các đối tượng đầu vào chồng chèn trừ khi logic hợp đồng cho phép truy cập được chia sẻ (ví dụ: với tham chiếu & mut). Hãy nhận thức được khả năng gây tranh chấp đối tượng và đảm bảo mã của bạn xử lý các lần thử lại và lỗi tạm thời một cách duyên dáng. Bạn có thể tối ưu hóa hơn nữa bằng cách điều chỉnh mức đồng thời — bắt đầu từ nhỏ (ví dụ: 10 goroutines) và mở rộng quy mô dựa trên kết quả.
Ngoài ra, bạn có thể cân nhắc sử dụng waitForLocalExecution thay vì waitForEffectScert nếu bạn muốn xác nhận nhanh hơn một chút nhưng có thể chấp nhận kết quả không phải là cuối cùng. Tuy nhiên, đối với các bản cập nhật trạng thái nhạy cảm hoặc số dư đối mặt với người dùng, WaitForEffectScert an toàn hơn. Bạn cũng có thể ký trước các giao dịch và gửi chúng theo từng đợt để giảm thiểu độ trễ giữa mỗi yêu cầu.
Đảm bảo nút Sui hoặc điểm cuối RPC của bạn có thể xử lý khối lượng yêu cầu cao — hãy cân nhắc sử dụng nhà cung cấp RPC cân bằng tải hoặc hiệu suất cao. Lập hồ sơ ứng dụng khách Go của bạn để xem liệu chi phí HTTP hoặc sê-ri hóa có góp phần vào độ trễ hay không. Sử dụng các máy khách HTTP không đồng bộ như fasthttp hoặc kết nối gRPC liên tục nếu có trong SDK.
Cuối cùng, ghi lại và phân tích các giao dịch thất bại để phát hiện tắc nghẽn hoặc mô hình tranh chấp. Với tính song song thích hợp và các đối tượng đầu vào được phân phối tốt, bạn sẽ có thể cải thiện đáng kể TPS của mình.
Nếu bạn gặp phải TPS thấp trong người gửi giao dịch Sui dựa trên GO, nút thắt có thể là do gửi giao dịch tuần tự với requestType: “waitForEffectScert”. Loại yêu cầu này chờ tính cuối cùng đầy đủ trước khi tiến hành, loại yêu cầu này không được tối ưu hóa cho thông lượng khi thực hiện từng yêu cầu một. Để cải thiện hiệu suất, bạn nên thực hiện gửi giao dịch song song hoặc theo lô.
Bạn có biết câu trả lời không?
Hãy đăng nhập và chia sẻ nó.
Sui is a Layer 1 protocol blockchain designed as the first internet-scale programmable blockchain platform.
Kiếm phần của bạn từ 1000 Sui
Tích lũy điểm danh tiếng và nhận phần thưởng khi giúp cộng đồng Sui phát triển.
- Tại sao BCS yêu cầu thứ tự trường chính xác để khử chuỗi khi cấu trúc Move có các trường được đặt tên?65
- Cách tối đa hóa lợi nhuận nắm giữ SUI: Sui Staking vs Liquid Staking515
- Nhiều lỗi xác minh nguồn” trong các ấn phẩm về mô-đun Sui Move - Giải quyết lỗi tự động55
- Lỗi Sui Move - Không thể xử lý giao dịch Không tìm thấy đồng xu gas hợp lệ cho giao dịch419
- Giao dịch Sui thất bại: Đối tượng được dành riêng cho giao dịch khác410