- vừa được xem lúc

Làm gì khi hệ thống bị bottle neck ở một service chịu tải cao? Bạn sẽ giải quyết vấn đề như thế nào nếu việc mở rộng theo chiều ngang không còn hiệu quả? (phần 2: database)

0 0 5

Người đăng: Hiếu học code

Theo Viblo Asia

I. Một số service hay bị bottle neck

Một số service thường bị bottle neck mà mình thường thấy có thể kể đến như:

  • Gateway service
  • Authentication service
  • Database service
  • File upload | download
  • Search service
  • Service chat, stream

II. Database

  • Vertical scaling: Trong một số trường hợp, nâng cấp phần cứng của database server cũng có thể là một giải pháp tạm thời.
  • Read replica: Với nhận xét rằng operations đọc thường gấp 9 lần operations ghi, việc áp dụng CQRS (Command Query Responsibility Segregation) có thể giúp tách biệt và tối ưu hóa riêng cho read và write operations.
  • Data archiving: Đề cập đến việc lưu trữ dữ liệu cũ để giảm kích thước của active database.
  • Tối ưu hóa các database queries, đảm bảo rằng chúng được thực thi hiệu quả. Việc thêm các index phù hợp có thể giúp giảm đáng kể thời gian truy vấn và tải CPU.
  • Implement caching strategy: Triển khai một hệ thống caching hiệu quả, như Redis, để giảm số lượng truy vấn trực tiếp đến database. Điều này đặc biệt hữu ích cho các dữ liệu đọc thường xuyên.
  • Database sharding: Triển khai database sharding để phân tán tải trên nhiều máy chủ, giúp cải thiện hiệu suất và khả năng mở rộng.
  • Sử dụng database phù hợp: Xem xét việc sử dụng các loại database chuyên biệt cho các use case cụ thể. Ví dụ, sử dụng Elasticsearch cho tìm kiếm, NoSQL cho dữ liệu phi cấu trúc.
  • Quản lý locks và transactions: Tối ưu hóa việc sử dụng locks và giảm thiểu thời gian của các transactions để giảm lock contention.
  • Tối ưu hóa connection management: Sử dụng connection pooling để quản lý hiệu quả số lượng kết nối đến database, giúp giảm overhead của việc tạo và đóng connections.
  • Tối ưu hóa stored procedures và triggers: Hạn chế sử dụng stored procedures và triggers quá nhiều, thay vào đó chuyển logic xử lý sang backend khi có thể.
  • Xử lý asynchrous và batch processing: Chuyển các tác vụ không cần đồng bộ cao sang xử lý bất đồng bộ hoặc batch processing, có thể thực hiện trong thời gian thấp điểm của hệ thống.

III. Service

  • Áp dụng event-driven architect để giảm sự phụ thuộc lẫn nhau giữa các service. các tác vụ năng nên được xử lý bất đồng bộ thông qua MQ.
  • Tách nhỏ trách nhiệm của các service chịu tải cao thành service chuyên biệt hơn. Áp dụng DDD để phân tách service một cách hợp lý.
  • Refactor code để cải thiện hiệu suất:
    • Giảm bớt n+1 query trong backend
    • Kiểm tra xem có memory leak không
    • Kiểm tra các vòng lặp
    • Áp dụng CDN cho nội dung tĩnh để giảm tải cho servers.
    • Implement background jobs cho các tác vụ không cần phản hồi ngay lập tức. (import, export, gửi mail…)
    • Thread deadlocks hoặc race conditions.
    • Quản lý connection pool kém.

IV. Infrastructure

  • Nâng cấp phần cứng nếu cần thiết.
  • Xem xét việc sử dụng serverless computing cho một số tác vụ.
  • Sử dụng các thuật toán load balancing phức tạp hơn để phân phối tải hiệu quả.
  • Xem xét việc sử dụng service mesh để quản lý traffic giữa các services.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Đề thi interview DevOps ở Châu Âu

Well. Chào mọi người, mình là Rice - một DevOps Engineers ở đâu đó tại Châu Âu.

0 0 88

- vừa được xem lúc

5 câu hỏi phỏng vấn Frontend giúp bạn tự tin hơn khi sử dụng bất đồng bộ trong Javascript

Một trong những điều khó khăn khi học Javascript là promises. Chúng không dễ hiểu và có thể cần một vài hướng dẫn và một thời gian kha khá để vận dụng chúng.

0 0 92

- vừa được xem lúc

Một số câu hỏi phỏng vấn liên quan đến SQL mà bạn nên biết^^

Những bài viết trước mình đã chia sẻ những kiến thức cơ bản về Database, MySQL, một số câu lệnh truy vấn cơ sở dữ liệu thường dùng mà các bạn có thể áp dụng vào công việc Tester, QA đang làm như:. MySQL cơ bản: https://link.

0 0 478

- vừa được xem lúc

Phỏng vấn tác giả Proxyman: Từ side project thành full-time business

Phỏng vấn tác giả Proxyman: Từ side project thành full-time business. Bắt đầu từ một pet product để giải quyết những vấn đề cá nhân gặp phải trong.

0 0 38

- vừa được xem lúc

[AI Interview] 12 câu hỏi phỏng vấn Deep Learning siêu hay không thể bỏ qua

Xin chào các bạn, hôm nay mình sẽ quay lại với các bạn về một chủ đề không mới những chưa bao giờ hết hot. Đó chính là các câu hỏi mà thường được hỏi khi phỏng vấn vị trí AI Engineer là gì?.

0 0 231

- vừa được xem lúc

NHỮNG CÂU TRẢ LỜI PHỎNG VẤN QC - MANUAL TESTER - FRESHER LEVEL _ DDTCMT

Em có thể mô tả life cycle của một bug. . . Nguồn hình: https://itguru.

0 0 368