#126 - Kỹ thuật Áp lực ngược (Backpressure ) là gì?
Những bài viết hay
LogDevice: hệ thống lưu trữ logs của Facebook — engineering.fb.com
LogDevice là một hệ thống chứa dữ liệu phân tán (distributed data store) cho logs. Hệ thống này được đội ngũ kỹ sư Facebook thiết kế với 2 yêu cầu chính là phải có tính sẵn sàng cao (high availability) và lưu trữ được dữ liệu bền vững. Do đa số các hệ thống ở Facebook viết dữ liệu logs nhiều hơn là đọc nên LogDevice được thiết kế để tối ưu hóa băng thông viết (write throughput) tại từng máy chủ. Dữ liệu phía dưới của LogDevice được lưu trữ local tại LogsDB - tầng storage dựa trên RocksDB, một key-value store với cấu trúc LSM trees.
Tìm hiểu cơ chế hoạt động Apache Impala — medium.com
Apache Impala là một hệ thống mã nguồn mở được đội ngũ kỹ sư Cloudera thiết kế dựa trên Google F1. Apache Impala đã trở thành một trong những tools phổ biến, được data scientists biết tới do họ có thể viết SQL để lấy dữ liệu được chứa trên Hadoop HDFS và HBase một cách nhanh chóng. Apache Impala không được dựa theo nguyên lý MapReduce để xử lý dữ liệu như những hệ thống khác trong mảng data warehouse mà nó được dựa theo nguyên lý Massively Parallel Processing (MPP). Apache Impala bao gồm 3 bộ phận chính:
Impalad: tiến trình nền (daemon) chính để tiếp nhận và xử lý SQL query từ clients. Daemon này sẽ thành lập query planner cho câu lệnh SQL đã được gửi tới và sau đó sẽ chỉ dẫn những trình nền Impalad khác để xử lý SQL query này
Impala Statestored: bộ phận chính để kiểm tra và công bố trạng thái (state) của những daemon Impalad
Impala Catalogd: bộ phận chứa metadata cho những bảng được thành lập trên hệ thống HDFS
Zookeeper và những ứng dụng điển hình — medium.com
Apache Zookeeper ngày càng trở nên thông dụng và đóng một vai trò quan trọng trong việc tăng cường tính kết nối của các thành phần trong hệ thống phân tán nhờ khả năng:
Quản lý và giúp các ứng dụng có thể chia sẻ config với nhau: Zookeeper đóng vai trò là trung tâm để lưu trữ các config trong môi trường phân tán.
Đề cử node trở thành leader: hữu ích nếu cụm yêu cầu chỉ có một điểm tiếp nhận xử lý.
Thiết kế Lock trong hệ thống phân tán: giúp quản lý các ứng dụng trong việc áp dụng thay đổi lên 1 tài nguyên nào đó
Quản lý trạng thái các node: phát hiện nếu có thay đổi kết nối giữa các node.
Zookeeper có thể giải quyết được các vấn đề phức tạp trên nhờ thiết kế hệ thống files rất linh hoạt và hiệu quả gọi là znodes. Những znodes này tương tự các files và folders trong Unix files system, nhưng có thêm nhiều tính năng thông minh giúp chúng ta vượt qua các khó khăn trong môi trường phân tán.
Vậy znodes đã được thiết kế ra sao và giải quyết các vấn đề cụ thể trên như thế nào? Chúng ta hãy cũng thử thực hành việc thiết kế và xây dựng 1 cluster database gồm nhiều servers trong môi trường phân tán với sự trợ giúp từ Zookeeper để hiểu rõ hơn.
Bài thực hành sẽ có các tính năng cơ bản như:
- Replication ở nhiều servers
- Có thể thêm hoặc bớt server vào cluster
- Đảm bảo Data Consistency
- Dữ liệu đồng nhất khi được đọc từ các server khác nhau
- Tất cả các server đều chứa thông tin trạng thái của cluster một cách nhất quán như thông tin leader, thành viên, …
- Trong trường hợp trạng thái của cluster thay đổi (như leader hay bất cứ server nào ngưng hoạt động), tất cả các servers trong cluster sẽ được thông báo
Xác định vật thể bằng Transformers — ai.facebook.com
Để giải bài toán Object Detection trong Computer Vision, các mô hình thường sử dụng những pipeline phức tạp, "hand crafted" một phần và phải tạo những lớp tùy chọn để trích xuất đặc trưng của từng tấm ảnh. Thêm nữa, việc sử dụng kiến trúc RNN dẫn tới mô hình chậm chạp và ko hiệu quả trong cả quá trình "training" và "evaluation". Trong mô hình Detection Transformers (DETR), kiến trúc Transformers đã được một nhóm nghiên cứu tại Facebook sử dụng để giải quyết những vấn đề này.
Transformers được coi là một trong những đột phá lớn nhất trong Deep Learning những năm gần đây. Kiến trúc này dựa trên một cơ chế rất mạnh là “attention” giúp cho việc "embed" và "reason" dữ liệu đầu vào được tốt hơn. Tuy nhiên, Transformers mới được dùng cho dữ liệu dạng chuỗi trong xử lý ngôn ngữ tự nhiên (NLP) hay Reinforcement Learning (RL) chứ chưa được ứng dụng rộng rãi trong Computer Vision. Khi dùng Transformers cho DETR, nhóm tác giả cho rằng dù "pipeline" đơn giản hơn nhưng DETR vẫn hoạt động hiệu quả ngang ngửa mô hình Faster R-CNN khi chạy trên dataset COCO. Ngoài ra, việc đơn giản hóa "pipeline" giúp cho mô hình trở nên linh hoạt và "scalable" hơn nhiều so với những mô hình trước đó. Những kết quả bước đầu này cho thấy tiềm năng to lớn của Transformers khi được ứng dụng vào những lĩnh vực khác của Computer Vision như "panoptic segmention".
Áp lực ngược (Backpressure) là gì? — medium.com
Áp lực ngược (Backpressure) là một trong những vấn đề mà hầu hết các kỹ sư phần mềm thường gặp phải. Nhưng không phải ai cũng có thể dễ dàng hiểu rõ và xác định được chúng trong quá trình làm việc.
Mục đích cơ bản của một phần mềm là nhận dữ liệu đầu vào và cho ra kết quả, quá trình này đòi hỏi nó cần phải có nơi tiếp nhận dữ liệu đầu vào và nơi xử lý dữ liệu để cho kết quả đầu ra.
Thử tưởng tượng nếu như ứng dụng của bạn phải tiếp nhận rất nhiều dữ liệu nhưng bộ phận xử lý lại phải tốn rất nhiều thời gian để có thể xử lý lượng input đó, thế là những dữ liệu đầu vào phải nằm trong vùng nhớ tạm để có thể chờ được xử lý và đến một lúc nào đó sẽ bị tràn bộ nhớ, có thể dẫn tới crash. Quá trình kiểm soát luồng dữ liệu đầu vào dựa trên khả năng xử lý của hệ thống này gọi là Backpressure
Đó là tóm tắt cơ bản về Backpressure, trong bài viết này tác giả giải thích khá chi tiết khái niệm của Backpressure cùng với những ví dụ rất cụ thể mà có thể chúng ta đã từng gặp nhưng lại không nhận ra nó.
Góc Database
Trước khi có Database và DBMS, các phần mềm thường hay ghi xuống những file có cấu trúc đặc thù của riêng mình, và người dùng có thể copy file từ máy này sang máy khác để mở.
Dần dần với sự phát triển của mạng internet, và khuynh hướng cloud hoá, các phần mềm đang có khuynh hướng đưa dữ liệu lên lưu trữ online để người dùng không cần phải lệ thuộc vào phần mềm cài đặt trên một máy. Từ đó, càng ngày chúng ta sẽ càng ít thấy những file với những đuôi khá đặc biệt được chia sẻ, .ext, .rtf, ...
Tuy nhiên, nếu vì một lý do nào đó bạn vẫn muốn tạo ra một format file của riêng mình để back-up, lưu trữ, convert, ... thì bên cạnh xây dựng một format file mới từ đầu, bạn có thể cân nhắc sử dụng chính định dạng file của SQLite với nhiều lợi ích. Tham khảo bài viết ở đây: link
Code & Tools
Gocker: Tìm hiểu về cách hoạt động của Docker thông qua việc "viết lại từ đầu" bằng golang.
The State of Developer Ecosystem 2020: Survey được tổng hợp bởi JetBrains với sự tham gia của gần 20.000 developer.
Tin tức khác
Adobe hỗ trợ Flash tới hết 2020: https://www.adobe.com/products/flashplayer/end-of-life.html
Windows sẽ hỗ trợ GPU trên Subsytem for Linux: https://blogs.windows.com/windowsdeveloper/2020/06/17/gpu-accelerated-ml-training-inside-the-windows-subsystem-for-linux/
Postgres Conference 2020: https://www.pgcon.org/2020/
Quotes
Optimism is an occupational hazard of programming: feedback is the treatment
- Kent Beck