Nguồn
Top 7 Ways to 10x Your API Performance
Lời tựa
Bạn có thấy mệt mỏi vì mấy cái API chậm chạp làm cho ứng dụng của bạn như rùa bò không? Bạn đến đúng chỗ rồi đấy. Trong bài viết này, chúng ta sẽ tìm hiểu 7 kỹ thuật để tối ưu hiệu suất API của bạn.
Trước khi bắt đầu, có một điều quan trọng cần lưu ý. Tối ưu không nên là bước đầu trong quá trình của bạn. Tối ưu mạnh mẽ thật đấy nhưng nó có thể làm API của bạn phức tạp hơn mức cần thiết nếu làm không cẩn thận. Bước đầu tiên luôn là phải xác định chỗ nào làm chậm API, thông qua load test và profiling request. Chỉ bắt đầu tối ưu khi bạn chắc chắn rằng cái API đó có vấn đề về hiệu suất.
Giờ ta cùng bắt đầu nhé.
Caching
Caching là một trong những cách hiệu quả nhất để tăng tốc API. Với caching, ta sẽ lưu kết quả của một quá trình tính toán tốn kém nào đó vào cache để lấy thẳng nó ra trong những request tiếp theo mà không cần phải tính lại.
Nếu bạn có một API endpoint thường xuyên được gọi với cùng tham số, bạn có thể tránh việc gọi database nhiều lần bằng cách cache response vào Redis hay Memcached. Phần lớn các thư viện cache làm cho mọi việc trở nên dễ dàng hơn cho chúng ta bằng cách thêm vài dòng code. Cache trong một khoảng thời gian ngắn cũng tạo ra sự khác biệt cực lớn về tốc độ đấy.
Connection pooling
Tiếp theo là connection pooling. Kỹ thuật này cần ta phải duy trì một bể (pool) các kết nối (connection) mở, để tránh việc mở một connection mới đến database trong mỗi lần gọi API.
Việc tạo một connection mới mỗi lần gọi API như vậy bao gồm rất nhiều lần bắt tay (handshake) và setup, khiến API của bạn chậm đi. Việc sử dụng lại connection sẽ cải thiện thông lượng rất nhiều.
Nếu bạn sử dụng kiến trúc Serverless (như IBM OpenWhisk, API Gateway, AWS Lambda, Google Cloud Functions hay Microsoft Azure Functions), việc quản lý connection sẽ khó hơn một chút, bởi vì mỗi thằng serverless function thường mở database connection riêng và vì serverless có thể tăng quy mô nhanh chóng, nó có khả năng dẫn đến một số lượng lớn connection mở, gây nên quá tải database. Các giải pháp như AWS RDS Proxy và SQL database serverless của Azure được thiết kế để xử lý vấn đề này và quán lý connection pooling cho bạn.
Truy vấn N+1
Thêm một tip nữa cho việc cải thiện hiệu suất database, đó là việc tránh Truy vấn N+1.
Ví dụ, bạn đang tạo một API endpoint để lấy các blog post và các comment trong mỗi post. Vấn đề này sẽ xảy ra khi bạn truy vấn lần đầu để lấy các post, và với mỗi post, bạn truy vấn một lần để lấy các comment. Giờ nếu bạn có N post như thế, việc này sẽ tạo ra 1 truy vấn để lấy các post, cộng với N truy vấn cho các comment. Đây là lý do có cái tên Truy vấn N+1.
Để tránh vấn đề này, sẽ tốt hơn nếu bạn lấy data trong một truy vấn duy nhất hoặc 2 truy vấn trong một số trường hợp khác, một để lấy các post, và một để lấy tất cả comment trong các post đó. Giải pháp này giúp tránh việc truy vấn quá nhiều và giảm round trip giữa server và database, từ đó cải thiện hiệu suất.
Phân trang
Dùng phân trang (pagination) khi cần.
Nếu API của bạn trả về một lượng lớn data, nó có thể làm chậm ứng dụng. Thay vào đó, chia response thành nhiều trang nhỏ hơn với các tham số limit
và offset
. Điều này sẽ giúp tăng tốc độ truyền tải dữ liệu và tránh việc client bị chậm vì phải xử lý quá nhiều data một lúc.
Sử dụng thư viện JSON serialization nhẹ
Khi trả về JSON response từ API, tốc độ của quá trình serialization có thể tạo nên ảnh hưởng rất lớn đến thời gian trả về dữ liệu. Hãy cân nhất dùng một thư viện serialization nhanh để tối thiểu hoá thời gian dành cho việc chuyển đổi dữ liệu của bạn thành dạng JSON.
Nén dữ liệu
Khi nén dữ liệu cho các response lớn, bạn có thể giảm dung lượng chuyển dữ liệu trên mạng. Client sau đó sẽ giải nén data này.
Ngày nay, có rất nhiều thuật toán hiệu quả như Brotli cho phép nén dữ liệu tốt hơn. Các CDN như Cloudflare cũng có thể nén dữ liệu cho bạn, giúp giải phóng việc nén khỏi server.
Logging bất đồng bộ
Trong nhiều ứng dụng, thời gian cần để viết log thường không đáng kể.
Tuy nhiên, trong nhiều hệ thống thông lượng cao, mỗi một mili giây đều quý giá. Thời gian cần để viết log có thể khá lớn. Logging bất đồng bộ có thể giải quyết điều này. Trong logging bất đồng bộ, thread chính sẽ nhanh chóng đặt log entry vào một buffer in-memory trong khi một thread logging riêng biệt sẽ viết log vào file hoặc gửi chúng thông qua logging service. Nên nhớ rằng trong logging bất đồng bộ, bạn sẽ có khả năng nhỏ có thể mất vài log nếu ứng dụng bị crash trước khi log được ghi ra.
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội
=============================
cơ sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c/21c/23c/23ai, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, docker, k8s, micro service, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty