#247 - DoorDash đã scale hệ thống với CockroachDB như thế nào
CockroachDB - một storage engine được xây dựng với khả năng chịu lỗi cao, dễ scale và có tính consistently-replicated, transactional datastore.
📻News
(by lpv)
Microsoft is permanently killing off Internet Explorer today
IE sẽ được disable vĩnh viễn trên Windows 10. Grokking cũng đã từng viết một bài về lịch sử các trình duyệt, các bạn có thể đọc tại đây (mục History).
AI-powered Bing Chat spills its secrets via prompt injection attack
Bằng cách yêu cầu "Sydney" bỏ qua các hướng dẫn trước đó, nó tiết lộ các chỉ thị ban đầu của nó.
New Bing, and an Interview with Kevin Scott and Sam Altman About the Microsoft-OpenAI Partnership
Interview với Microsoft CTO Kevin Scott và OpenAI CEO Sam Altman về Microsoft và OpenAI’s partnership.
Intel Cuts Pay For Employees To Keep Their Quarterly Dividend
Các nhân viên Intel sẽ bị cắt giảm tiền thưởng và lương cơ bản từ 5% đến 15%. Ban lãnh đạo của Intel đã quyết định rằng cổ tức quan trọng hơn việc giữ chân nhân viên, đây có thể là một tin xấu cho tương lai lâu dài của công ty.
📰Những bài viết hay
A Gentle Introduction to CRDTs
(by lpv)
Nội dung bài viết này tập trung giới thiệu về Conflict Free Replicated Data types (CRDTs). CRDT là một loại cấu trúc dữ liệu có thể được sao chép trên nhiều node trong một hệ thống phân tán mà không có xung đột.
Trong phần đầu bài viết giải thích khái niệm về hệ thống phân tán và những thách thức phát sinh khi nhiều node cố gắng sửa đổi cùng một dữ liệu đồng thời. Sau đó, giới thiệu CRDT như một cách để đảm bảo tính nhất quán trong các hệ thống như vậy.
Sau đó, bài viết đi sâu vào hai loại CRDT: Kiểu dữ liệu sao chép hội tụ (Convergent Replicated Data Types - CvRDT) và kiểu dữ liệu sao chép giao hoán ( Commutative Replicated Data Types - CmRDTs). CvRDT đảm bảo rằng tất cả các bản sao cuối cùng hội tụ về cùng một trạng thái, trong khi CmRDT đảm bảo rằng thứ tự hoạt động không ảnh hưởng đến trạng thái cuối cùng.
Bài viết cũng thảo luận về một số thách thức và hạn chế của CRDT, chẳng hạn như khó triển khai các cấu trúc dữ liệu phức tạp và cần xem xét một cách cẩn thận các chức năng để đảm bảo tính chính xác của dữ liệu. Bài viết cũng đề cập ngắn gọn về chủ đề Anti-Entropy, đây là một cơ chế để đảm bảo tính nhất quán giữa các bản sao.
Nhìn chung, bài báo đã giới thiệu một cách rõ ràng, ngắn gọn về CRDT và việc sử dụng chúng trong các hệ thống phân tán. Đây là một bài viết hữu ích cho bất kỳ ai quan tâm đến việc hiểu cách CRDT có thể giúp đảm bảo tính nhất quán trong các hệ thống phân tán như thế nào. Mời các bạn cùng đọc.
How We Scaled New Verticals Fulfillment Backend with CockroachDB
(by quangle)
Để giải quyết các vấn đề về khả năng mở rộng hệ thống đáp ứng cho nhu cầu business mới, đội ngũ kỹ sư tại DoorDash đã thực hiện một cuộc cách mạng lớn với việc sử dụng CockroachDB - một storage engine được xây dựng với khả năng chịu lỗi cao, dễ scale và có tính consistently-replicated, transactional datastore.
store_items: được xây dựng ở hệ thống cũ là một dạng materialized-view (chứa các thông tin về catalog, inventory, giá cả mặt hàng của các cửa hàng tạp hóa hiện lợi), hosted trên Postgres của AWS cung cấp metadata cho Dasher service trong quá trình điều phối đơn hàng. Nhưng thiết kế này đối mặt với những thử thách khi nhu cầu scale tăng cao
Performance concerns: để đáp ứng nhu cầu sử dụng, mức sử dụng các tables của họ tăng vượt ngưỡng 500GB, điều mà AWS khuyến cáo nên giữ cho size table Postgres nhỏ hơn 500GB. Các table có kích thước quá giới hạn sẽ ảnh hưởng đến việc ghi chậm đặc biệt lúc peak traffic, hệ thống ghi nhận có độ trễ tăng lên gấp đôi, mức usage CPU cao hơn 80%.
Maintenance concerns: Mô hình single write - multi read được họ triển khai trước đó, tuy nhiên việc chỉ có một instance write không đáp ứng được quy mô mở rộng business, gây ra độ trễ cho các cụm read khác ảnh hưởng trải nghiệm users, cũng như đặt ra bài toán single point failure (SPF) khá phổ biến.
Anti-patterns: một số anti-patterns lặp đi lặp lại trong quá trình triển khai store_items trên Postgres cũng được họ ghi nhận, ví dụ như: truy cập db từ tầng business mà không thông qua tầng data-service, foreign-keys join và secondary indices quá nhiều làm tăng tải db, limit request, v.v
Và cuối cùng, nhóm đã chọn giải pháp sử dụng CockroachDB thay thế cho Postgres để giải quyết các vấn đề về scaling. Để tìm hiểu kỹ hơn về cách triển khai cũng như kết quả mà nhóm kỹ sư DoorDash đạt được, mời bạn đọc cùng tham khảo bài viết.
How We Use Terraform At Slack
(by hungngph)
Tại Slack, các kỹ sư ở đây đã sử dụng Terraform làm công cụ để quản lý và cung cấp resource của mình dưới dạng code (IAC - infrastructure as code), bao gồm AWS, DigitalOcean, NS1, and GCP. Một trong những lợi ích chính của việc sử dụng Terraform tại Slack là khả năng tự động hoá. Với Terraform, các service ở Slack có thể tự động hoá quá trình tạo, cập nhật và xóa tài nguyên trong cơ sở hạ tầng của mình. Điều này không chỉ tiết kiệm thời gian và công sức mà còn giảm rủi ro do lỗi tới từ con người. Một ưu điểm khác của việc sử dụng Terraform tại đây là tăng khả năng visibility, Terraform cung cấp chế độ xem centralized cho toàn bộ cơ sở hạ tầng, giúp các nhóm dễ dàng hiểu được trạng thái của các tài nguyên mà họ quản lý. Tăng khả năng visibility cũng giúp các kỹ sư tại đây có thể dễ dàng xác định các sự cố tiềm ẩn và giải quyết chúng nhanh chóng. Hơn nữa, Terraform cũng giúp đội kỹ sư ở Slack thực thi các best practice và standard trong việc xây dựng cơ sở hạ tầng, đảm bảo tính consistency và predictability trên tất cả các resource, bất kể ai đã tạo ra chúng. Ngoài ra, Terraform cho phép Slack quản lý nhiều môi trường và phối hợp một cách hiệu quả giữa nhiều nhóm với nhau, bằng cách sử dụng các workspace của công cụ này để phân tách các môi trường, chẳng hạn như production và staging, đồng thời để duy trì các cấu hình riêng biệt cho từng workspace. Việc này cho phép các nhóm làm việc song song và đảm bảo rằng những thay đổi được thực hiện trong môi trường này sẽ không gây ảnh hưởng đến các môi trường khác.
Tổng quan lại Terraform đã được chứng minh là một công cụ có giá trị cho Slack trong việc quản lý cơ sở hạ tầng của mình. Bằng cách tự động hóa quản lý cơ sở hạ tầng, tăng khả năng visibility, thực thi các best practice và thay đổi cách làm việc nhóm. Công cụ này đã giúp đội kỹ sư tại đây cung cấp một nền tảng cơ sở hạ tầng reliable và scalable cho người dùng hệ thống của mình. Mời các bạn cùng đọc.
👨💻Góc lập trình
(by ndaadn and phucnh)
Đề ra tuần này: Longest Nice Substring
Một chuỗi được xem là “đẹp” khi mọi ký tự trong chuỗi xuất hiện ở cả dạng chữ hoa lẫn chữ thường. Ví dụ “AaBbB” là chuỗi ký tự đẹp, nhưng “Aac” thì không.
Cho trước chuỗi ký tự s, tìm chuỗi ký tự con đẹp dài nhất trong s. Nếu có nhiều câu trả lời thì trả về chuỗi xuất hiện đầu tiên.
Ví dụ:
Input: s =
YazaAay
Output: aAa
Lời giải tuần trước: Minimum Add to Make Parentheses Valid
Trong một dãy ngoặc, gọi một dấu mở ngoặc ‘(‘ là “cân bằng” khi phía sau nó có một dấu đóng ngoặc ‘)’ tương ứng và ngược lại, từ đó ta có thể tóm tắt yêu cầu bài toán một cách đơn giản hơn như sau, tìm số dấu ngoặc “chưa cân bằng” trong chuỗi cho trước.
Dễ thấy nếu một dấu đóng ngoặc xuất hiện sau dấu mở ngoặc, thì chúng sẽ “cân bằng” lẫn nhau. Các trường hợp còn lại đều là các dấu ngoặc chưa được cân bằng.
Gọi open và close lần lượt là số dấu mở ngoặc và đóng ngoặc chưa cân bằng trong chuỗi. Thực hiện duyệt qua chuỗi.
Nếu gặp dấu mở ngoặc thì open = open + 1
Nếu gặp dấu đóng ngoặc thì có 2 trường hợp:
Phía trước nó tồn tại một dấu mở ngoặc chưa cân bằng, tức là open > 0, thì 2 dấu ngoặc sẽ “cân bằng” nhau, từ đó số lượng dấu mở ngoặc chưa cân bằng giảm đi 1: open = open - 1.
Phía trước nó không tồn tại một dấu mở ngoặc chưa cân bằng nào, tức là open == 0 thì số lượng dấu đóng ngoặc không cân bằng tăng lên 1: close = close + 1.
Cuối cùng trả về giá trị open + close là kết quả của bài toán.
Độ phức tạp thời gian của giải thuật là O(N), với N là số ký tự trong chuỗi đầu vào.
Cài đặt tham khảo bằng Java như sau:
class Solution {
public int minAddToMakeValid(String s) {
int open = 0, close = 0;
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c == '(') {
open++;
} else {
if (open > 0) {
// ‘(‘ can form with an ‘)’ to make the string valid
open--;
} else {
close++;
}
}
}
return open + close;
}
}
🛠️Code & Tools
Dozzle - một ứng dụng nhỏ gọn cung cấp giao diện trực quan giúp bạn có thể theo dõi log từ Docker một cách dễ dàng ngay trên trình duyệt web. Ngoài ra, công cụ còn hỗ trợ bạn tải file log về máy local của một hoặc nhiều cụm containers đang hoạt động trên Docker.
Quotes
What happens when people open their hearts? They get better.
Haruki Murakami
Các bạn thích bài viết nào nhất nhỉ?