Business Information Learning

  1. Trang chủ
  2. Lưu
  3. Thẻ
  4. Hỏi - Đáp

 
 
Trang chủ
BIL'log, ⌚ 2016-12-11
***
☕ Nhàn đàm ICT: From Multi-Threading to Map/Reduce Framework
Tác giả: Lê Văn Lợi
Bài đã đăng trên diễn đàn ICT_VN (ict_vn@googlegroups.com).
Ngày đăng: 11-12-2016.

Những ai đã từng lập trình trên vi xử lý 8 bit (như Intel 8085, Zilog Z80) chắc đều trải nghiệm lập trình đa nhiệm, tự tay mình lập đa nhiệm. Nói là đa nhiệm nhưng bộ xử lý trong thực tế thực hiện công việc của mình một cách tuần tự. Ví dụ, chúng ta có 10 thread T1, T2, …, T10 thì bộ xử lý chạy T1 trước, sau đó chuyển sang T2 (nhớ điểm dừng ở T1), rồi chuyển sang T3, …, sau đó quay lại T1 và thực hiện từ điểm dừng T1 đã được ghi lại trước đó. Cơ chế nào để chuyển từ T1 sang T2? Dĩ nhiên là phép ngắt (Interrupt), và thường là dùng ngắt thời gian, Timer. Tất cả các bộ xử lý đều phải sử dụng một quartz timer, ví dụ, 100 MHz. Có thể lập một timer cứ 10 miliseconds thì ngắt một lần và nhờ phép ngắt timer chúng ta chuyển từ T1 sang T2 sang T3, … Do thời gian ngắt là rất nhỏ nên chúng ta có cảm giác như các chương trình đang chạy song song. (Chuyện này thì nay đã thành kinh điển, tôi chỉ nhắc lại để cho những ai đã từng mày mò lập trình trên vi xử lý, nhớ lại một trải nghiệm khó quên về đa nhiệm.)

Cùng với thời gian, vào những năm 90 của thế kỷ trước, với sự ra đời của Internet, các bộ xử lý trước đây được coi là nhanh nhưng vào thời điểm đó đã tỏ ra quá chậm chạp nếu một server phải chịu tải hàng chục ngàn người truy cập đồng thời. Thách thức là: một máy tính, dù có đạt tốc độ cao đến bao nhiêu đi nữa thì vẫn rất khó lòng giải được bài toán số lượng người cùng truy cập đồng thời lên đến hàng trăm ngàn, hàng triệu.

Nhân loại luôn có người xuất chúng đứng ra giải quyết vấn đề. Hẳn chúng ta còn nhớ vào năm 1999, 2000 xuất hiện công cụ tìm kiếm Google. Google cho kết quả tìm kiếm và thời gian tìm kiếm thường dưới 1 giây đồng hồ, kiểu như: About 508,000 results (0.61 seconds). Đối với những người lập trình thì công cụ tìm kiếm Google vào thời điểm đó thật là magical - có lẽ đến bây giờ Google vẫn là magical - (Từ của giới sô bít ở ta là “ảo diệu” 😊). Giới thạo tin lúc đó nói đến các server farms của Google (những cánh đồng máy chủ) và thuật toán magical của họ.

Thuật toán mà Google đưa ra có tên gọi là Map/Reduce, tôi tạm dịch là thuật toán “Lan tỏa/Rút gọn”. Nói một cách đơn giản là thế này: Google họ để dữ liệu trên hàng chục ngàn máy chủ, mỗi lần có nhu cầu tìm kiếm một cụm từ nào đó thì họ sẽ “áp” việc kiếm này lên tất cả các máy chủ (gọi là thuật toán Map – Lan tỏa), sau đó họ “gom” tất cả kết quả lại (gọi là thuật toán Reduce – Rút gọn”. Toàn bộ ý tưởng vĩ đại nằm ở chỗ đó. Việc của hệ điều hành là điều phối Map và Reduce, còn việc của người viết ứng dụng là cung cấp hai hàm Map() và Reduce().

Doug Cutting, Mike Cafarella và cộng sự đã lấy giải pháp của Google và phát triển thành một dự án nguồn mở có tên là HADOOP. HADOOP xây dựng kiến trúc khung (framework) cho phép các ứng dụng xử lý dữ liệu cực lớn với thời gian cực nhanh. Có thể nói HADOOP là “de facto standard” (chuẩn mặc nhiên) để điều hành các data centers.

Cách mà HADOOP vận hành là “gom” tất cả các servers (con số có thể lên đến hàng trăm ngàn servers) thành một thể thống nhất (Hadoop Distributed File System). Các server xử lý theo cách “local” – nghĩa là server nào lo việc của server đó, còn HADOOP đứng ra “lo việc chung”. Một cách hình tượng: HADOOP đứng ra phân việc cho hàng ngàn servers cùng xử lý và sau đó HADOOP gom các kết quả lại và “thanh lý hợp đồng” với khách hàng. Khách hàng = Application.

Dưới góc nhìn của cá nhân tôi, tôi đặc biệt ấn tượng với 2 đột phá trong thuật toán, đó là thuật toán Multi-Threading (Đa nhiệm) và thuật toán Map/Reduce (Lan tỏa/Rút gọn). Chúng đóng vai trò là các mốc tiến hóa trong computing.