#106 - Vì sao Discord chuyển từ Go sang Rust
Hy vọng các bạn đã có một kỳ nghỉ vui vẻ và an toàn. Bắt đầu từ tuần này, team Newsletter sẽ trở lại hoạt động bình thường với những bài viết hay dành cho các bạn kỹ sư. Chúc các bạn đọc có một sự khởi đầu thuận lợi trong năm mới, và đừng quên giữ gìn sức khoẻ, tránh bị lây nhiễm các bạn nhé.
Để giúp cải thiện chất lượng nội dung của newsletter, mong bạn dành ít thời gian phản hồi cũng như đóng góp ý tưởng giúp team thông qua link khảo sát hàng tuần tại đây nhé.
Những bài viết hay
Why Discord is switching from Go to Rust — blog.discordapp.com
Đội ngũ phát triển chat tool của Discord đã gặp một vài vấn đề khi phát triển hệ thống với Golang. Họ cần lưu trữ những thông tin về quá trình hoạt động của user như bao nhiêu message được gửi, bao nhiêu message đã được đọc hay bao nhiêu hay user được nhắc đến trong channel bao nhiêu lần, etc. Những thông tin này được cache lại theo cấu trúc LRU. Khi ứng dụng được sử dụng với số lượng khổng lồ user, data cần cache ngày càng lớn và hiệu năng xử lý của hệ thống giảm xuống do memory model và Garbage Collector của Golang không đáp ứng được nữa. Vì vậy họ quyết định sử dụng Rust. Bài này cung cấp những lý do mà đội ngũ Discord quyết định chuyển sang sử Rust để xây dựng ứng dụng.
Four things to avoid in HTTP API’s — code.scottshipp.com
Có bao giờ bạn gặp trường hợp API trong hệ thống bị rối tung sau một thời gian phát triển như tên các API không đồng bộ hay không diễn tả đúng chức năng của nó, dùng lẫn lộn HTTP verbs.... Đặc biệt khi API được phát triển bởi nhiều người hay nhiều team. Hãy tránh 4 sai lầm sau đây khi thiết kế API.
Writing a High-Level Design — medium.com
Để thiết kế tính năng của phần mềm, những engineer cần phải có những tài liệu thiết kế cụ thể về tính năng đó, đồng thời cần phải có những trao đổi giữa đội ngũ phát triển sản phẩm và đội ngũ engineer dựa trên một thiết kế chung mà cả hai bên (engineer và PO) đều hiểu được.
Những bước thiết kế và phát triển tính năng phần mềm mà một Principal Software Engineer đã áp dụng và được chia sẻ trong bài viết này sẽ giúp các bạn đọc có một best practice để có thể phát triển phần mềm tốt hơn.
Lessons from AWS NLB Timeouts — medium.com
Trong kiến trúc Microservices, việc các dịch vụ downstream gặp lỗi như 500 từ các service upstream là việc thường xảy ra. Trong đa phần các tình huống, lỗi có thể dễ dàng được phát hiện thông qua logs và thu thập các metrics để so sánh kết quả giữa upstream và downstream services.
Tuy nhiên, đội ngũ kỹ sư ở Tenable.io - một nền tảng hỗ trợ việc phân tích, nhận diện các lỗ bảo mật trong hệ thống - lại gặp một tình huống khó đó là phía downstream services gặp rất nhiều lỗi khi truy vấn đến upstream, nhưng phía upstream service lại hoạt động bình thường. Điều gì đã xảy ra?
Code & Tools
GitHub - mozilla-mobile/fenix: Firefox Preview — github.com
Một dự án mã nguồn mở của Mozilla Firefox về một web browser trên Android tên Fenix.
Quarkus - Supersonic Subatomic Java
Do những mặt hạn chế của Java/JVM khi chạy trong các container (tốn bộ nhớ + thời gian khởi động chậm), Quarkus đã ra đời. Đây là một framework được mô tả là Supersonic Subatomic giúp chạy tương thích trong các container trên môi trường cloud.
Tin tức khác
Watch this legendary short movie from 1895 colorized and in 4K — mashable.com
Một đoạn video từ năm 1895 đã được nâng cấp chất lượng lên tới 4K 60fps nhờ có AI (trí tuệ nhân tạo).
Quote
"The cleaner and nicer the program, the faster it's going to run. And if it doesn't, it'll be easy to make it fast."
― Joshua Bloch