#251 - The human side of Airbnb’s Microservice Architecture
Các giai đoạn cũng như các thử thách về mặt con người, tổ chức của Airbnb trong quá trình chuyển đổi hệ thống từ Monolith sang Microservices.
📻News
Google Cloud brings generative AI to developers, businesses, and governments
Generative AI mở ra một làn sóng mới về trải nghiệm tương tác, đa phương thức, thay đổi cách chúng ta tương tác với thông tin, thương hiệu và với nhau. Với việc hỗ trợ Generative AI trên Vertex AI và Generative AI App Builder, Google Cloud sẵn sàng cho phép và trao quyền cho một thế hệ hoàn toàn mới gồm các nhà xây dựng, nhà đổi mới, nhà phát triển khai thác sức mạnh của AI theo những cách mới lạ.
Copilot for Docs
Github vừa công bố bản thử nghiệm cho công cụ Copilot for Docs. Với công cụ này, bạn có thể đặt câu hỏi các vấn đề kỹ thuật và nhận được câu trả lời một cách thân thiện ứng với từng trình độ khác nhau. Một lập trình viên mới bắt đầu có thể nhận được câu trả lời đơn giản hơn, còn một lập trình viên đã quen với công cụ, ngôn ngữ tương ứng sẽ nhận được câu trả lời mang tính chuyên sâu hơn.
📰Những bài viết hay
The human side of Airbnb’s Microservice Architecture
( by n^4)
Khi nghe đến việc chuyển đổi một hệ thống đang được xây dựng theo kiến trúc monolith sang kiến trúc microservices hẳn nhiều bạn sẽ nghĩ ngay đến yếu tố công nghệ như nên dùng dịch vụ gì để làm discovery, rate limiting thế nào, authenticate thế nào, … Tuy nhiên, quá trình chuyển đổi này không chỉ là một bài toán kỹ thuật, mà còn là một bài toán về mặt tổ chức và phối hợp của các đội ngũ khác nhau. Mời các bạn cùng theo dõi bài talk này để hiểu thêm về các giai đoạn cũng như các thử thách về mặt con người, tổ chức của Airbnb trong quá trình chuyển đổi hệ thống của họ từ Monolith sang Microservices.
Sparks of Artificial General Intelligence - Early experiments with GPT-4
( by n^4)
Trong bài báo này, các nhà nghiên cứu Trí tuệ nhân tạo (AI) đã phân tích phiên bản mới nhất của GPT (GPT-4), một trong những mô hình ngôn ngữ lớn (LLMs) mới nhất được phát triển bởi OpenAI.
GPT-4, cùng với ChatGPT và PaLM của Google, được cho là có khả năng thông minh tổng quát hơn các mô hình Trí tuệ nhân tạo trước đó. GPT-4 có thể giải quyết các nhiệm vụ mới và khó trong các lĩnh vực toán học, lập trình, thị giác, y học, luật pháp, tâm lý học và nhiều lĩnh vực khác mà không cần bất kỳ yêu cầu đặc biệt nào, với hiệu suất gần như bằng cấp độ con người.
Tuy nhiên, nhà nghiên cứu cũng đưa ra những thách thức và giới hạn của mô hình, cùng với những suy nghĩ về ảnh hưởng của công nghệ Trí tuệ nhân tạo và hướng phát triển trong tương lai.
Sử dụng BigQuery External table để đọc Delta Lake
( by MS)
Delta Lake lớp dữ liệu của mẫu Lake House. Khác với các Data Lake thông thường, Delta Lake cung cấp hỗ trợ cho các giao dịch ACID trong Data Lake, hợp nhất Batch & Streaming, Source & Sink, tận dụng sức mạnh xử lý phân tán của Spark để xử lý tất cả siêu dữ liệu cho các bảng quy mô hàng petabyte với hàng tỷ file một cách dễ dàng, dễ dàng truy cập và hoàn lại những phiên bản trước của dữ liệu … Thông thường để xử lý được dữ liệu từ Delta Lake và lưu trữ output ra một Data warehouse (như BigQuery), chúng ta cần triển khai một Spark job, cung cụ có khả năng đọc tương thích với các bảng trong Delta Lake. Tuy nhiên, tận dụng cách thức lưu trữ của Delta Lake là các files Parquet và delta logs dưới dạng json, cùng khả năng đọc các nguồn dữ liệu bên ngoài của BigQuery (tính năng External table), tác giả đã chia sẻ cách tạo ra một Delta Lake View trong BigQuery mà không cần load data vào BigQuery. Qua đó, người dùng luôn luôn có thể đọc toàn bộ dữ liệu mới nhất trong một bảng Delta Lake một cách hiệu quả và đơn giản.
👨💻Góc lập trình
(by ndaadn and phucnh)
Đề ra tuần này: Convert Sorted List to Binary Search Tree
Cho một danh sách liên kết đơn (singly linked list) với các phần tử đã được sắp xếp theo thứ tự tăng dần, hay tạo một cây nhị phân cân bằng từ danh sách đã cho.
Ví dụ:
Input: head = [-10, -3, 0, 5, 9]
Output: [0, -3, 9, -10, null, 5]
Lời giải tuần trước: Top k Frequent Elements
Đề bài yêu cầu trả về những phần tử xuất hiện thường xuyên thứ k trong mảng đầu vào, nên bước đầu tiên ta cần đếm tần suất xuất hiện của từng phần tử.
Bước tiếp theo, ta có nhiều cách tiếp cận để tìm những phần tử xuất hiện thường xuyên thứ k. Ví dụ như sử dụng heapsort hay quick select sẽ cho ta giải thuật với độ phức tạp về thời gian lần lượt là O(nlogk) hoặc O(n).
Ngoài ra ta cũng có thể thực hiện bucket sort, với tần suất xuất hiện luôn là số nguyên dương. Độ phức tạp của giải thuật cũng là O(n) như sau:
class Solution {
public int[] topKFrequent(int[] nums, int k) {
final int n = nums.length;
// find frequencies
final Map<Integer, Integer> freq = new HashMap<>();
for (int i=0; i<n; i++) {
freq.compute(nums[i], (key,count) -> count==null ? 1 : count+1);
}
// sort by frequencies using bucket sort
final List<Integer>[] bucket = new ArrayList[n + 1];
freq.forEach((key, f) -> {
if (bucket[f] == null) {
bucket[f] = new ArrayList<>();
}
bucket[f].add(key);
});
// find top k most frequent elements
final int[] res = new int[k];
for (int i=n; i>=0 || k>0; i--) {
if (bucket[i] != null) {
for (final Integer num : bucket[i]) {
res[k - 1] = num;
k--;
if (k == 0) {
return res;
}
}
}
}
return res;
}
}
🛠️Code & Tools
AWS Builder Library: Kho bài viết hay được chia sẻ bởi các kỹ sư ở Amazon về kinh nghiệm giải quyết các bài toán kiến trúc trong hệ thống của mình.
Quotes
“Writing is the process by which you realize that you do not understand what you are talking about. Importantly, writing is also the process by which you figure it out.”