
Elixir là gì?
Elixir là ngôn ngữ lập trình hàm (functional) chạy trên Erlang Virtual Machine (BEAM). Ngôn ngữ này được José Valim tạo ra năm 2011, lấy cảm hứng từ Ruby syntax nhưng kế thừa khả năng đồng thời (concurrency) đáng tin cậy của Erlang. Elixir nổi tiếng với khả năng xử lý hàng triệu kết nối đồng thời mà không cần thread pool hay async framework phức tạp.
BEAM VM được thiết kế cho hệ thống viễn thông Thụy Điển — yêu cầu uptime 99.999% và xử lý concurrent connection. Các thuộc tính này khiến Elixir lý tưởng cho real-time web, IoT, và chat system.

Phoenix Framework
Phoenix là framework web chính thức của Elixir, ra mắt năm 2014 bởi Chris McCord. Phoenix cung cấp tính năng real-time out-of-the-box thông qua Channels — hệ thống WebSocket tích hợp sẵn, không cần library bổ sung như Socket.io.
Đặc điểm nổi bật của Phoenix:
- Channels: WebSocket hai chiều, xử lý hàng nghìn kết nối real-time trên mỗi node.
- LiveView: UI tương tác mà không cần viết JavaScript — dùng Elixir chạy phía server.
- Ecto: Database layer mạnh mẽ với migrations, queries, và validations.
- Phx.gen: Code generators tạo scaffold CRUD hoàn chỉnh trong 1 lệnh.

LiveView: Phá vỡ paradigm truyền thống
Phoenix LiveView là tính năng đột phá nhất của Phoenix. LiveView cho phép developer xây dựng giao diện tương tác chỉ bằng Elixir — không cần React, Vue, hay bất kỳ framework JS nào. LiveView hoạt động bằng cách gửi diff HTML qua WebSocket, trình duyệt áp dụng thay đổi trực tiếp.
So với SPA (Single Page Application) truyền thống:
- Không cần hydration: Không có giai đoạn chờ JavaScript load và mount.
- Mã nguồn ít hơn: Một file Elixir thay vì 3-4 file (component, state, effects, types).
- SEO tự nhiên: HTML render sẵn trên server.
- Progressive enhancement: Ứng dụng hoạt động kể cả khi WebSocket thất bại — trang vẫn load qua HTTP.

Ứng dụng thực tế
Nhiều hệ thống lớn sử dụng Elixir/Phoenix:
- Discord: Xử lý hàng triệu WebSocket connection trên BEAM.
- Pinterest: Sử dụng Phoenix Channels cho real-time notification.
- Bleacher Report: Xử lý 1 triệu concurrent user trong thời gian thực.
- Chef Software: Infrastructure automation với Erlang/Elixir.
Ngoài web, Elixir shines trong IoT (Nerves framework), DevOps (Mix, Hex package manager), và blockchain (Mina Protocol uses ZK with OCaml/Elixir).
Supervision Tree — Xương sống của hệ thống chịu lỗi
Một trong những khái niệm cốt lõi của Elixir/BEAM là supervision tree. Mỗi process trong Elixir có một supervisor giám sát; khi process con crash, supervisor quyết định restart, dừng, hoặc lan truyền lỗi lên cấp trên. Cấu trúc này cho phép hệ thống tự phục hồi (self-healing) mà không cần can thiệp thủ công — một đặc tính thiết kế từ thời viễn thông.
Khác với các ngôn ngữ khác dùng try/catch hay exception handling, Elixir khuyến khích “let it crash” — để process con crash và supervisor xử lý. Cách này tránhBUG từ state bị hỏng sau khi bắt exception, và đảm bảo tài nguyên được dọn dẹp đúng (process isolation). Supervision tree có thể cấu hình chiến lược: one-for-one, one-for-all, rest-for-one — tùy theo mức độ phụ thuộc giữa các process.
Ecto — Lớp truy cập dữ liệu an toàn kiểu
Ecto là thư viện database wrapper cho Elixir, cung cấp query DSL, schema validation, migration, và connection pooling. Điểm đặc biệt của Ecto so với ActiveRecord hay Django ORM là không có “magic” ẩn — mọi query đều rõ ràng, type-safe, và chạy trong transaction tự quản lý.
Ecto.Repo quản lý kết nối pool, Ecto.Schema định nghĩa mapping giữa bảng và struct Elixir, Ecto.Query cung cấp composable query API. Hỗ trợ PostgreSQL, MySQL, SQLite, và MSSQL. Ecto cũng tích hợp sẵn migration system: mix ecto.gen.migration tạo file migration, mix ecto.migrate áp dụng.
Phoenix Context và Domain-Driven Design
Phoenix khuyến khích tổ chức code theo “Context” — nhóm logic nghiệp vụ chặt chẽ thay vì chỉ phân chia theo CRUD. Mỗi context đóng vai trò bounded context trong Domain-Driven Design: bao đóng business logic, validation, và persistence cho một domain cụ thể (Accounts, Catalog, Billing). Cách này giảm coupling, tăng testability, và dễ dàng tách microservice khi cần.
Generators của Phoenix (phx.gen.context, phx.gen.html, phx.gen.live) tự động sinh code context pattern đúng chuẩn. Đây là lợi thế lớn so với Rails hay Django nơi generator thường sinh code theo controller/action pattern, buộc developer phải tự refactor sau.
Triển khai Elixir trong production
Triển khai ứng dụng Elixir/Phoenix đơn giản nhờ release system tích hợp. mix release tạo bản phân phối độc lập (standalone) bao gồm cả Erlang runtime — không cần cài Elixir trên server production. Bản release bao gồm: boot scripts, config, và tất cả dependency. Start/stop/restart quản lý bằng bin/my_app start, bin/my_app stop.
Hot code upgrade là tính năng độc đáo của BEAM: có thể nạp phiên bản mới của module vào running system mà không downtime. Phoenix tích hợp với Distillery, Gigalixir, Fly.io, Render, và có Dockerfile mẫu chính thức. Live dashboard (:observer, Phoenix.LiveDashboard) cung cấp metrics real-time: memory, scheduler, process count, latency — không cần APM bên ngoài.
Cộng đồng và tương lai
Elixir cộng đồng nhỏ nhưng chất lượng cao — tập trung vào correctness, maintainability, và operational excellence. Conferencia ElixirConf (Mỹ) và ElixirConf EU (Châu Âu) hàng năm. Các thư viện quan trọng: Broadway (data processing pipeline), Oban (background jobs), Nerves (embedded/IoT), Nx (numerical computing), Bumblebee (ML inference).
Phoenix 1.7+ đưa LiveView lên tầm mới với HEEx template engine, core components, và phx.gen.auth tích hợp sẵn authentication. Tương lai của Elixir gắn liền với real-time web, AI/ML inference tại edge (Nx/Bumblebee), và serverless functions (Fly.io machines, WASM).
Bắt đầu với Elixir Phoenix
Để bắt đầu:
- Cài Elixir qua
asdfhoặckiex:asdf install elixir 1.16.1 - Cài Phoenix:
mix archive.install hex phx_new - Tạo project:
mix phx.new my_app - Khởi động server:
mix phx.server - Tạo LiveView:
mix phx.gen.live Blog Post title:string body:text
Tham khảo thêm: Elixir Official, Phoenix Framework, Phoenix Documentation.
