#249 - Các metrics mới của CloudWatch
3 metrics mới trên Amazon CloudWatch hỗ trợ cho việc trace log events, monitor các tính năng liên quan đến AWS Lambda, ...
📻News
(by lpv & MS)
TikTok expands its research API to nonprofit academic institutions in the U.S.
Titok đã công bố chính thức mở rộng quyền truy cập vào Research API của hãng cho các tổ chức học thuật phi lợi nhuận tại Hoa Kỳ, việc mở rộng quyền truy cập vào các Research API của hãng đã được bắt đầu với bản thử nghiệm vào tháng 11 năm 2022.
Coinbase says some employees’ information stolen by hackers
Sàn giao dịch tiền ảo Coinbase vừa xác nhận việc hệ thống bị xâm nhập trong thời gian ngắn bởi những hacker đã từng tấn công vào Twilio, Cloudflare, DoorDash và hơn một trăm tổ chức khác vào năm ngoái.
Confluent + Immerok: Cloud Native Kafka Meets Cloud Native Flink
Confluent thông báo ý định mua lại Immerok để tăng tốc phát triển dịch vụ cung cấp Apache Flink trên nền tảng đám mây của mình.
AlloyDB for PostgreSQL goes global with sixteen new regions
AlloyDB, dịch vụ cơ sở dữ liệu tương thích với PostgreSQL của Google, hiện đã có mặt ở 16 khu vực mới trên toàn cầu. AlloyDB là sự kết hợp giữa PostgreSQL với sức mạnh cơ sở hạ tầng của Google, cung cấp một cơ sở dữ liệu với quy mô rất lớn, tính khả dụng cao và hiệu suất vượt trội.
📰Những bài viết hay
New CloudWatch Metrics for AWS Lambda Asynchronous Invocations
(by quangle)
AWS vừa công bố thêm 3 metrics mới trên Amazon CloudWatch hỗ trợ cho việc trace log events, monitor các tính năng liên quan đến AWS Lambda, xác định các root causes khi system xảy ra issues như throttling, concurrency limit, function errors, latency, v.v.
AsyncEventsReceived: đo tổng số events mà Lambda có thể đẩy vào queue để xử lý, cung cấp cho developers các metric monitor và alert cảnh báo về số lượng events phát sinh do các nguyên nhân đến từ việc cấu hình sai hoặc functions chạy sai.
AsyncEventAge: đo thời gian từ lúc Lambda đẩy event vào queue thành công đến lúc invoke được function, cung cấp cho developers các metrics minh bạch về thời gian xử lý events của hệ thống, các cảnh báo về số liệu thống kê khi có phát sinh vấn đề về độ trễ.
AsyncEventsDropped: đo số lượng events bị dropped khi xử lý function failed, các nguyên nhân gây ra dropped events như: vượt ngưỡng Maximum Event Age, vượt quá Maximum Retry Attempts, v.v
Việc các metrics mới được tích hợp thêm vào CloudWatch sẽ giúp cho developers nhanh chóng phát hiện những issues bất thường để có thể khắc phục, ngoài ra AWS cũng sẽ hỗ trợ các service Lambda có thể gửi các metrics này đến CloudWatch mà không phát sinh thêm chi phí. Để tìm hiểu chi tiết hơn về các metrics, mời bạn đọc cùng tham khảo bài viết.
How Korean Air succeeded in managing the vaccine cold chain with Amazon Managed Blockchain
(by n^4)
Blockchain không chỉ để dùng làm tiền ảo mà còn được ứng dụng ngày càng nhiều trong các bài toán đòi hỏi sự minh bạch về thông tin giữa nhiều bên khác nhau. Trong bài báo này, đội ngũ AWS chia sẻ một ứng dụng của blockchain trong việc ghi nhận thông tin vận chuyển vaccine COVID-19 được xây dựng bởi Korean Air.
Demystifying Containers - Part I: Kernel Space
(by curioustien)
Chắc hẳn các software engineers chúng ta cũng không quá xa lạ gì về Docker và containers nói chung. Tuy nhiên, để có được containers ngày hôm nay thì Linux kernel space đã trải qua khá nhiều cột mốc để dần dần hình thành đủ chức năng đáp ứng được nhu cầu chế tạo được các công nghệ containers. Bài viết sau đây được tác giả viết chi tiết về hành trình Linux hình thành những chức năng cốt lỗi để các công nghệ containers có thể tạo dựng được như là: chroot, linux namespace, cgroup, pid, … Mời các bạn đọc qua bài viết sau đây để biết thêm chi tiết về các cột mốc này.
👨💻Góc lập trình
(by ndaadn and phucnh)
Đề ra tuần này: Battleships in a Board
Cho một ma trận m x n tượng trưng cho biển. Tàu chiến được đặt ngang hoặc dọc trên biển, và được đánh dấu bởi ký tự 'X', những chỗ trống được đánh dấu bằng ký tự '.'. Do tàu chiến chỉ được đặt ngang hoặc dọc trên biển, tàu chiến sẽ luôn có kích cỡ là 1 x k với k là chiều dài của tàu. Luôn có khoảng cách giữa 2 tàu chiến trên biển.
Hãy đếm số lượng tàu chiến trên biển. Ví dụ:
Lời giải tuần trước: Minimum Height Trees
Do đây là đồ thị liên thông không có chu trình, ta có thể tìm được chiều cao của cây tại một nút bất kỳ bằng phương pháp duyệt theo chiều sâu (DFS). Sau khi tìm được chiều cao của những cây được tạo bởi các nút, ta sẽ dễ dàng tìm được nút gốc cho cây với chiều cao nhỏ nhất.
Hướng tiếp cận này đòi hỏi thực hiện n lần DFS, vì vậy độ phức tạp về thời gian là O(n^2)
. (Do tổng số cạnh luôn luôn là n - 1).
Một hướng tiếp cận khác để giải bài này là tìm nút trung tâm của đồ thị. Ta thực hiện các bước như sau:
Lập danh sách toàn bộ các nút lá - các nút chỉ nối với 1 nút duy nhất
Loại bỏ tất các nút lá khỏi đồ thị
Lặp lại bước 1 với đồ thị mới
Những nút lá cuối cùng chính là các nút trung tâm, đây cũng chính là những nút cho ta cây có chiều cao nhỏ nhất. Bạn đọc có thể hình dung phương pháp này này giống với việc bóc vỏ củ hành tây.
Giải thuật được thực hiện với độ phức tạp về thời gian là O(n)
như sau:
class Solution {
List<List<Integer>> graph;
int[] degrees;
public List<Integer> findMinHeightTrees(int n, int[][] edges) {
initGraph(n, edges);
// leaf is a node that has degree is 1, find all current leaves
List<Integer> leaves = new LinkedList<>();
for (int i = 0; i < n; i++) {
if (degrees[i] == 0 || degrees[i] == 1) {
leaves.add(i);
}
}
int done = leaves.size();
while (done < n) {
List<Integer> next = new LinkedList<>();
// remove all leaf nodes from graph, and find next leaf nodes
for (int at : leaves) {
for (int to : graph.get(at)) {
degrees[to]--;
// new leaf node
if (degrees[to] == 1) {
next.add(to);
}
}
}
done += next.size();
leaves = next;
}
return leaves;
}
private void initGraph(int n, int[][] edges) {
graph = new ArrayList<>();
degrees = new int[n];
for (int i = 0; i < n; i++) {
graph.add(new ArrayList<>());
}
for (int i = 0; i < edges.length; i++) {
graph.get(edges[i][0]).add(edges[i][1]);
graph.get(edges[i][1]).add(edges[i][0]);
}
for (int i = 0; i < n; i++) {
degrees[i] = graph.get(i).size();
}
}
}
🛠️Code & Tools
Dataform - một open source giúp tạo ra các bảng và workflow theo cấu trúc SQL. Dataform core mở rộng SQL bằng cách cung cấp hệ thống quản lý dependency, kiểm tra chất lượng dữ liệu tự động và documentation. Việc sử dụng Dataform giúp các data team có thể xây dựng các pipelines chuyển đổi dữ liệu SQL ở quy mô lớn đồng thời vẫn đảm bảo các quy trình quan trọng của phát triển phần mềm như version control hay testing. Dataform tương thích tốt với các Data Warehouse phổ biến như BigQuery, Snowflake, Redshift, Postgres, hay Azure SQL data warehouse.
Database replication using CDC - Để đáp ứng nhu cầu phân tích dữ liệu, việc sử dụng Capture Data Change (CDC) như một công cụ để replicate data từ những cơ sở dữ liệu nguồn (Postgres, MySQL, … ) đến các Data Warehouse đã trở nên ngày phổ biến. Cùng tìm hiểu bài hướng dẫn của GCP để tìm hiểu các phương pháp để replicate CDC events từ database nguồn đến BigQuery nhằm hài hòa các yếu tố như dễ dàng sử dụng, chi phí, và mức độ đồng bộ.
Quotes
What happens when people open their hearts? They get better.
Haruki Murakami