18/10/2018, 00:20

Những kiến thức giúp website của bạn nhanh lên gấp N lần

Introduction ISUCON là một cuộc thi ở Nhật, và cũng chỉ có riêng ở Nhật. Đây là một cuộc thi khá đặc trưng bởi sự thú vị của cách thi của nó, những người thi thay vì build sản phẩm như hackathon, hay là giải bài toán như là competitive programming, Tại ISUCON thì mỗi 1 team ...

Introduction

ISUCON là một cuộc thi ở Nhật, và cũng chỉ có riêng ở Nhật. Đây là một cuộc thi khá đặc trưng bởi sự thú vị của cách thi của nó, những người thi thay vì build sản phẩm như hackathon, hay là giải bài toán như là competitive programming, Tại ISUCON thì mỗi 1 team (thường là 2-3 members) sẽ được phát một host trên đó đã được chạy sẵn một trang web (có cả source code), và công việc phải làm của bạn là trong vòng 8 tiếng, phải tune thế nào để trang web đó đạt được throughput cao nhất. Kết quả team Việt Nam lần đầu tham dự, gồm có tôi và một bạn nữa, đứng khoảng thứ 20 trên 300 đội tham dự, không được vào vòng kế tiếp

Bạn có thể dùng bất kì cách gì như thay đổi cấu trúc database, dán index, thêm middleware, viết lại logic của app, tuy nhiên vẫn phải đảm bảo:

  • Test của chương trình benchmark để tính điểm của ban tổ chức phải pass (thường test sẽ có cả update , xoá dữ liệu nên bạn nào nghĩ đến giải pháp page cache toàn bộ endpoint thì bỏ đi nhé =)) )
  • Không được thay đổi spec của host như là thêm RAM hay là thêm CPU.

Như vậy để thi được ISUCON thì đòi hỏi bạn phải có các kĩ năng:

  • Biết một trang web chạy thế nào, các stack để chạy trang web đó
  • Vận hành, tuning middleware layer với các stack hay được sử dụng như là nginx, mysql….
  • Sử dụng tool để benchmarking, phát hiện bottleneck
  • Sử dụng thành thạo các ngôn ngữ mà ban tổ chức cung cấp, thông thường sẽ có : ruby, python, golang, perl, java, scala

Để tham gia cuộc thi này thì tôi đã bỏ ra một vài tuần để ôn luyện, quá trình ôn luyện cũng đã thu được một vài kiến thức mà tôi thấy khá hữu ích, đặc biệt cho những người làm web. Dưới đây sẽ là list những thứ tôi thấy khá thú vị.

Đánh index cho mysql thế nào cho tốt ?

Để tăng tốc cho một trang web thì kĩ năng tôi nghĩ quan trọng nhất chính là mysql query tuning. Về cơ bản mysql, hay bất kì một database nào cũng là một hệ thống tìm kiếm, tức là nó support cho bạn con đường ngắn nhất để tìm đến với data mà bạn cần tìm, tuy nhiên không phải lúc nào mysql cũng tự tìm được đường ngắn nhất, mà cần support từ developer. Đánh index cho mysql chính là việc bạn “hỗ trợ” cho mysql tìm đươc con đường ngắn nhất đó.

Chắc nhiều bạn đã biết thì mysql sử dụng B-Tree để lưu index (Storage engine là InnoDB)

screen-shot-2016-10-10-at-3-32-13-pm

Bạn không cần biết quá nhiều về B-Tree, chỉ cần biết

  • Nó là 1 cái cây =)))
  • Nó support range query
  • Và để support range query nó sẽ có pointer giữa các leaf (thay vì chỉ có pointer từ cha -> con như một cây thông thường). Việc này sẽ dấn đến một sự thật khá thú vị về đánh index cho mysql mà tôi sẽ nói ở dưới đây
0