21 điểm bởi GN⁺ 2025-02-13 | 8 bình luận | Chia sẻ qua WhatsApp

"WebAssembly thực sự là Write-Once-Run-Anywhere"
"Đến năm 2030, sẽ không còn ai nhớ đến Kubernetes nữa"

Tính di động (Portability)

  • Container đã լուծ quyết nhiều vấn đề của phát triển phần mềm và dễ dùng hơn VM
  • Nhưng hiện nay container trở nên khó xử lý do bộ công cụ phức tạp và sự gắn kết chặt chẽ giữa chương trình-container-Linux
  • Nhà phát triển muốn tập trung vào việc viết mã và triển khai tính năng, còn việc học Docker lại trở thành yếu tố gây cản trở
  • WebAssembly (WASM) đã thay thế container trong một số lĩnh vực và mang lại trải nghiệm "viết một lần, chạy mọi nơi"
  • Nhiều ngôn ngữ có thể được biên dịch sang WASM, và việc thiếu giao diện hệ thống đang ngăn cản việc được chấp nhận rộng rãi, nhưng điều này sẽ sớm được giải quyết
  • Hạn chế lớn nhất hiện nay của WASM là thiếu các giao diện hệ thống như truy cập tệp và mạng, nhưng đây là vấn đề sẽ được giải quyết theo thời gian

So sánh với JVM

  • WASM cung cấp khái niệm "viết một lần, chạy mọi nơi" tương tự JVM, nhưng JVM không chạy trong trình duyệt web
  • Trình duyệt web là đích triển khai ứng dụng quan trọng, và vì điều này mà nhiều nhà phát triển tránh dùng JVM
  • Gần đây, các trình biên dịch tạo nhị phân tĩnh như GraalVM, Kotlin Native và Scala Native đang nổi lên như lựa chọn thay thế cho JVM

Microservices

  • Trong kiến trúc microservices, các dịch vụ được kết nối bằng HTTP, RPC hoặc message broker
  • Chi phí và vấn đề độ tin cậy của giao tiếp mạng là nhược điểm chính, nhưng phần lớn doanh nghiệp cho rằng lợi ích lớn hơn
  • Khi các nền tảng serverless như AWS Lambda xuất hiện, microservices có thể được triển khai ở cấp độ từng hàm riêng lẻ
  • Cloudflare Workers chạy trong sandbox V8, cho phép gọi hàm trong cùng runtime mà không cần yêu cầu mạng
  • Điều này đồng thời mang lại lợi thế phát triển của microservices và hiệu năng runtime của kiến trúc nguyên khối
  • Các công ty khác như Wasmer cũng đang phát triển các giải pháp dựa trên WASM

Việc áp dụng WASM (Adoption)

  • WASM vẫn là công nghệ ở giai đoạn đầu nhưng đang phát triển rất nhanh và mức độ hỗ trợ cũng đang tăng lên
  • Hiện tại nó chưa hoạt động hoàn hảo trong mọi môi trường, nhưng có thể trải nghiệm trước tương lai thông qua các nền tảng như Cloudflare
  • Nếu bạn là người dùng các ngôn ngữ động như Python, Ruby hoặc PHP, sẽ có lợi nếu trong lúc chờ WASM phát triển thêm, bạn học thêm các ngôn ngữ biên dịch như Go hoặc Rust

8 bình luận

 
bus710 2025-02-14

K8s là công cụ điều phối container, vậy liệu vì wasm mà tính hiệu quả của nó sẽ giảm đi không? Nếu là Docker thì chắc chắn sẽ bị lấn sân ở một mức độ nào đó...

 
colus001 2025-02-14

WASM giống như một chiếc máy in 3D mới vậy. Người ta nói rằng "một thế giới mới đang đến", nhưng thực tế thì chẳng có mấy người dùng...

 
halfenif 2025-02-14

https://madewithwebassembly.com/

Ở đây có một bộ sưu tập các trường hợp triển khai.

(Cá nhân tôi thấy) chủ yếu những lĩnh vực như CAD hay xử lý ảnh trông có vẻ thuyết phục nhất.

Điều này lại khiến tôi nhớ đến đội phát triển giải pháp trước đây từng trăn trở về việc triển khai hình ảnh y tế độ phân giải cao trên web.

 
halfenif 2025-02-14

Học WASM qua ví dụ
https://vi.news.hada.io/topic?id=11891

Tôi thử làm theo.

 
jujumilk3 2025-02-14

Có vẻ như ngay cả đến năm 2030, k8s vẫn sẽ tiếp tục vững vàng.

 
yangeok 2025-02-14

Cuối cùng thì có phải cũng sẽ cần biết cả Docker lẫn WASM không nhỉ haha. Dù vậy, Docker cũng đã trở nên dễ tiếp cận hơn khi công nghệ dần chín muồi, nên mình nghĩ WASM có lẽ cũng sẽ đi theo hướng tương tự và ngày càng dễ tiếp cận hơn.

 
clickin 2025-02-13

Rốt cuộc thì có vẻ sẽ là dựa vào hiệu năng của runtime wasm, vậy chẳng phải V8 sẽ trở thành tầng tương đương với JVM sao.
Tôi lo rằng rồi sẽ đến một tương lai mà WASM hoạt động khác nhau tùy theo phiên bản V8, và chúng ta phải gỡ lỗi cho chuyện đó.

 
GN⁺ 2025-02-13
Ý kiến Hacker News
  • Yếu tố chính đang cản trở việc được chấp nhận rộng rãi là thiếu các system interface. Truy cập tệp, mạng và các phần tương tự rồi sẽ được tích hợp theo thời gian
    • Tuy nhiên, việc thêm truy cập tệp, mạng... có thể tạo ra lỗ hổng bảo mật. Đây cũng là yếu tố đã phá vỡ lời hứa "write once, run anywhere" của Java
    • WASM giải quyết một bài toán khác với container. WASM hiệu quả cho việc chạy mã trong sandbox
    • WASM nhiều khả năng sẽ trở thành tiêu chuẩn trong các triển khai như Functions-as-a-Service
    • Container không giải quyết được bài toán đó. Chúng không phù hợp để làm ranh giới bảo mật, nặng hơn WASM binary và có chi phí khởi động cao hơn
    • Container phù hợp để chạy nhiều process, thread và sử dụng các tính năng gốc của OS
  • WebAssembly mang lại trải nghiệm "write once, run anywhere" thực sự
    • Nhưng khi tương tác với bên ngoài thì câu chuyện lại khác. Mỗi V8 runtime có các interface hơi khác nhau
    • Thành công của Docker là nhờ POSIX đã là một tiêu chuẩn được thiết lập sẵn
  • PlatformOps (trước đây là DevOps, SRE, Ops) đang bị bào mòn lời hứa do công cụ phức tạp và sự gắn kết chặt giữa chương trình-container-Linux
    • Nhà phát triển muốn viết code và triển khai tính năng
    • PlatformOps đang chật vật để giải quyết vấn đề
  • WASM không phải là giải pháp thay thế container. Container giải quyết bài toán chạy các phiên bản PHP khác nhau mà không xung đột
    • WASM không giải quyết được bài toán đó
  • Tương lai của WASM sẽ đến khi nào? Đã 8 năm trôi qua nhưng vẫn chưa có toolchain ổn định và dễ dùng
    • Rust ra mắt năm 2012 và sau 8 năm đã ổn định
  • WASM không chạy trên phần cứng thực. Nó có thể được xem là một máy ảo
    • Container đóng gói các ứng dụng chạy trực tiếp trên phần cứng thực
    • WASM cần runtime. Nó chạy bên trong ứng dụng
    • WASM giải quyết bài toán "tính di động" mà JVM và .NET xử lý
    • Container đóng gói ứng dụng cùng các dependency
    • Hai công nghệ này có thể bổ trợ cho nhau
  • Học cách dùng Docker không phải là trở ngại
    • Chỉ cần có Dockerfile là được
    • Ứng dụng WASM vẫn cần Kubernetes
    • WebAssembly sẽ không tăng trưởng mạnh trong 5 năm tới
  • WASM là một lớp trừu tượng hóa nữa. Việc nó có thay thế mọi thứ hay không còn phụ thuộc vào sự đánh đổi với các giải pháp khác