Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

vấn đề về hiệu suất trình lập lịch đồng thời golang + redis

Ở cấp độ bề mặt, điều duy nhất mà tôi có thắc mắc là sắp xếp nhóm chờ tăng dần và sắp xếp công việc:

func (s *Scheduler) Enqueue(req interface{}) {
    select {
    case s.reqChan <- req:
        s.wg.Add(1)
    }
}

Tôi không nghĩ rằng những điều trên sẽ gây ra nhiều vấn đề trong thực tế với khối lượng công việc lớn này, nhưng tôi nghĩ nó có thể là một điều kiện chạy đua hợp lý. Ở các mức đồng thời thấp hơn và quy mô công việc nhỏ hơn, nó có thể xếp hàng đợi một tin nhắn, tệp hình nón chuyển sang một quy trình bắt đầu công việc trên thông báo đó, THÌ công việc trong nhóm chờ.

Tiếp theo, bạn có chắc chắn process không phương thức là threadsafe ?? Tôi giả định như vậy dựa trên tài liệu redis go, chạy với go run -race có đầu ra nào không?

Tại một số điểm, nó hoàn toàn hợp lý và được kỳ vọng là hiệu suất sẽ giảm xuống. Tôi khuyên bạn nên bắt đầu kiểm tra hiệu suất để xem độ trễ và thông lượng bắt đầu giảm ở đâu:

có thể là một nhóm 10, 100, 500, 1000, 2500, 5000, 10000 hoặc bất cứ thứ gì có ý nghĩa. IMO có vẻ như có 3 biến quan trọng cần điều chỉnh:

  • Quy mô nhóm công nhân
  • Kích thước bộ đệm hàng đợi công việc
  • Redis MaxActive

Điều lớn nhất xuất hiện là có vẻ như redis.Pool được định cấu hình để cho phép số lượng kết nối không giới hạn:

 pool := &redis.Pool{
        MaxIdle:     50,
        IdleTimeout: 240 * time.Second,
        TestOnBorrow: func(c redis.Conn, t time.Time) error {
            _, err := c.Do("PING")
            return err
        },
        Dial: func() (redis.Conn, error) {
            return dial("tcp", address, password)
        },
    }

// Số lượng kết nối tối đa được phân bổ bởi nhóm trong một giventime.// Khi bằng không, không có giới hạn về số lượng kết nối trong nhóm. MaxActive int

Cá nhân tôi sẽ cố gắng hiểu vị trí và thời điểm hiệu suất bắt đầu giảm so với quy mô của nhóm công nhân của bạn. Điều này có thể giúp bạn dễ dàng hiểu chương trình của bạn bị hạn chế bởi những gì.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sự khác biệt giữa StackExchange.Redis và StackExchange.Redis.StrongName là gì?

  2. Tuần tự hóa Redis có tiền tố là chuỗi bổ sung

  3. Hiểu độ trễ bằng Redis-Cli

  4. Chẩn đoán lỗi máy chủ redis không mong muốn

  5. tiện ích mở rộng phpredis không hoạt động, không thể tải 'redis.so'