#118 - Ứng dụng giao thức P2P tại Spotify
Vừa qua, Grokking cùng VNOI đã tổ chức thành công Webinar #04 với chủ đề "How To Prepare & Succeed In A Coding Interview" với sự tham gia của hơn 300 bạn engineers. Tại webinar lần này, các bạn đã được tìm hiểu kỹ hơn về quy trình phỏng vấn coding và được hướng dẫn chuẩn bị để có được buổi phỏng vấn thành công.
Ngoài ra webinar lần này còn có session Mock Interview được tổ chức như một buổi online coding interview. Bài toán đặt ra là "Xây dựng cây nhị phân từ một dãy các số đã được sắp xếp", mời các bạn xem lại: buổi interview này cùng những nhận xét, đánh giá và góp ý của interviewer nhé!
Những bài viết hay
[TMĐT] Xử lý hotdeals trong giờ cao điểm? — engineering.tiki.vn
Trong thương mại điện tử, "hot deal" là một cách rất hiệu quả để quảng cáo. Các nhà tiếp thị có thể giảm giá sâu một sản phẩm trong thời gian rất ngắn để thu hút một lượng lớn khách hàng. Nhưng nghiệp vụ này cũng đòi hỏi một hệ thống có khả năng mở rộng tốt, phải xử lý một lượng request không hề nhỏ từ lượng lớn người dùng tham gia. Thêm vào đó, các sản phẩm "hot deal" thường được bán với số lượng nhỏ. Vì vậy, hệ thống phải đảm bảo tính nhất quán của hàng trong kho và giá lúc đặt một cách chính xác nhất.
Giảm độ trễ & chi phí vận hành bằng cách ghép các service — engineering.linkedin.com
Nói về microservices, các hệ thống thiết kế theo kiến trúc này sẽ bao gồm các service được chia đủ nhỏ làm sao để giảm được sự phức tạp và quan trọng là xử lý tốt một nghiệp vụ nào đó. Việc đảm bảo những tính chất này đôi khi lại phải đánh đổi bằng sự phức tạp trong quản lý & chi phí vận hành.
Giống như ý tưởng phi chuẩn hóa khi thiết kế CSDL, thì đối với kiến trúc microservice một phương án được đưa ra là ghép các service nhỏ lại (và chỉ phụ thuộc vào nhau) để giảm bớt giao tiếp giữa các service & chi phí hoạt động.
Ở LinkedIn họ cũng có 1 case study khi ghép 2 service identity thành một.
Liệu phương án này có lý tưởng?
Tìm hiểu về sharding database — www.digitalocean.com
Sharding là một kỹ thuật đã nhận được rất nhiều sự chú ý trong những năm gần đây, nhưng nhiều người chưa có một sự hiểu biết rõ ràng về sharding là gì. Trong bài viết này chúng ta sẽ tìm hiểu xem sharding là gì, một số lợi ích và nhược điểm chính của nó, và một vài phương pháp sharding phổ biến.
Góc database
Những chia sẻ thú vị về database mà các lập trình viên nên biết — medium.com
Không quá khi nói rằng Database là trái tim của mọi ứng dụng ngày nay. Do đó khi thiết kế hay phát triển ứng dụng, developer cần phải biết về các đặc tính và cách thức hoạt động của Database như ACID, optimistic locking hay query planners.
Mời bạn tham khảo những lời khuyên & kinh nghiệm hữu ích của một kĩ sư đang làm việc cho hệ thống database phân tán Spanner tại Google.
An Overview of DDL Algorithm’s in MySQL — mydbops.wordpress.com
Với nhu cầu phát triển các hệ thống thay đổi liên tục như hiện nay thì việc thay đổi database schema trở thành một thao tác khá thường xuyên.
Đối với mySQL thì việc hỗ trợ thay đổi Schema online bắt đầu từ phiên bản 5.6 bao gồm 3 thuật toán chính:
COPY - Thay đổi schema của bảng hiện tại bằng cách tạo ra 1 bảng tạm với schema mới, sau đó migrate toàn bộ dữ liệu từ bảng cũ sang bảng mới rồi đổi tên.
INPLACE - Thực hiện thao tác thêm, sửa cột ngay chính bảng hiện tại mà không cần tạo ra bảng tạm.
INSTANT - Phiên bản cải tiến hơn của thuật toán INPLACE cho các tình huống thêm cột mới. (hỗ trợ từ phiên bản 8.0)
Mới bạn đọc bài viết để hiểu biết chi tiết hơn về các thuật toán này
Tin tức khác:
Góc system design
Large Scale, Low Latency, P2P Music-on-Demand Streaming
Spotify là dịch vụ nghe nhạc trực tuyến có độ trễ khá thấp so với các dịch vụ tương tự (~265ms từ lúc click nghe đến lúc chạy bài hát). Để làm được điều này, team Spotify đã tận dụng mạng peer-to-peer thay vì kiến trúc client-to-server như các hệ thống khác.
Trong bài báo này, team Spotify chia sẻ lại những vấn đề mà team phải giải quyết để đảm bảo độ trễ tối ưu (265ms) như: Caching, Random Access, Predictable Track Selection, Regular Streaming, Play-out delay, ...
Ngoài ra bài báo cũng chia sẻ những phần trong việc thiết kế kiến trúc peer-to-peer của Spotify bao gồm: Split overlay network, locating peers, Neighbor Selection, State Exchanged Between Peers, NAT Traversal, ...
Code & Tools
Quote
It is not enough for code to work
― Robert C. Martin