[Network Basic] Giải ngố về "Host": Khái niệm quen mặt nhưng 90% anh em hiểu sai
Chào anh em, lại là mình đây.
Dạo này anh em làm backend chắc mải mê chạy deadline, hì hục dựng mấy con API bán vé xem phim bằng Golang hay vật lộn tối ưu tính năng real-time chat bên Laravel sướng tay quá nên thỉnh thoảng hay quên mất mấy khái niệm nền tảng.
Sáng nay rảnh rỗi ngồi lướt dạo xem CV mấy bé fresher, mình hay hỏi một câu tưởng như "cho điểm" thế này: "Thế theo em, Host là cái quái gì?". Kết quả: 10 ông thì 9 ông ấp úng, rồi đánh lái sang mấy gói "Hosting 50k/tháng" mua trên mạng để treo web.
Thực ra "Host" nó bao la hơn thế rất nhiều. Hôm nay, chúng ta cùng lùi lại một bước, tạm cất mấy cái system design to tát sang một bên để bóc trần bản chất của từ "Host" nhé.
1. Bản chất thực sự: Host không (chỉ) là chỗ chứa Web!
Nếu dịch sát nghĩa đen, "Host" mang nghĩa là chủ nhà hoặc vật chủ.
Trong thế giới mạng (Networking), Host là bất kỳ thiết bị nào có kết nối với một mạng máy tính (Network) và được gán một địa chỉ IP duy nhất.
Nghĩa là sao?
Nghĩa là cái laptop bạn đang gõ code cũng là một host. Cái điện thoại bạn đang dùng lướt Facebook qua Wifi cũng là một host. Thậm chí cái tủ lạnh thông minh, con robot hút bụi hay cái máy in trong văn phòng... một khi nó cắm dây mạng hoặc bắt Wifi và có IP, nó đều chễm chệ mang danh xưng "Host" trong cái mạng LAN đó. Nhiệm vụ của Host là gì? Là nhận hoặc gửi thông tin. Nó là các điểm nút (node) trong một mạng lưới giao thông khổng lồ. Địa chỉ IP chính là số nhà của nó.
2. Sự lú lẫn kinh điển: Host và Server khác gì nhau?
Đây là cái bẫy mà rất nhiều anh em dẫm phải. Mọi người hay dùng từ "Host" và "Server" thay thế cho nhau (interchangeably), nhưng bản chất chúng nó khác bọt:
- Mọi Server đều là Host: Rõ ràng rồi, máy chủ (Server) thì chắc chắn phải cắm mạng, có IP để người ta còn gọi tới. Nên nó là một Host.
- Nhưng KHÔNG PHẢI Host nào cũng là Server: Cái điện thoại của bạn là một Host trên mạng Wifi, nhưng nó không hề chạy một dịch vụ nào (như web, database) để phục vụ các máy khác cả. Nó chỉ đóng vai trò là Client (đi xin xỏ data) thôi.
Nói một cách dân dã: Host là danh xưng chỉ sự Tồn tại (mày có nhà ở, có hộ khẩu IP), còn Server là danh xưng chỉ Nghề nghiệp (mày làm dịch vụ, mở cửa hàng phục vụ tụi khác).
3. Những loại "Host" giang hồ hay gặp
Là dev, anh em sẽ thường xuyên va chạm với từ "Host" trong các ngữ cảnh sau:
A. Localhost (Quê nhà) Như mình từng phân tích ở bài 127.0.0.1 trước, localhost chính là cái máy tính anh em đang xài. Khi anh em chạy server Node.js hay bật Laravel lên test, anh em đang biến chính cái "Host" của mình thành một cái "Server" cục bộ. Nó vừa đóng vai trò Client (mở trình duyệt), vừa đóng vai trò Server (chạy code backend).
B. Web Host / Hosting (Dịch vụ lưu trú)
Đây là cái mà các bé fresher hay nhầm. Khi làm xong cái web, anh em cần một cái máy tính luôn luôn bật 24/7, có đường truyền mạng mạnh để ai cũng vào được. Thay vì tự mua máy chủ rườm rà, anh em đi thuê một góc ổ cứng và RAM trên máy chủ của mấy nhà cung cấp (như AWS, DigitalOcean, hay mấy bên bán Shared Hosting). Cái đó gọi là Web Hosting.
C. Database Host (Nhà kho)
Anh em để ý trong file .env của project lúc nào cũng có dòng DB_HOST=.... Khai báo này để chỉ định: "Ê code ơi, cái máy (Host) đang chạy hệ quản trị cơ sở dữ liệu (MySQL, Redis, PostgreSQL...) nó nằm ở địa chỉ nào?". Nếu để chung máy thì là 127.0.0.1, còn nếu anh em tách database ra một con server xịn xò khác để tăng bảo mật và performance, thì DB_HOST sẽ là IP của con server đó.
Chốt hạ
Tóm cái váy lại, Host đơn giản là bất cứ cái máy nào đang cắm mặt vào mạng và có địa chỉ IP để gọi tên.
Hiểu rõ những khái niệm hạ tầng như thế này giúp anh em config server tự tin hơn, đọc file cấu hình hệ thống không bị ngợp, và nhất là lúc hệ thống sập thì biết đường mà "ping" đúng cái Host đang lăn ra chết. Đừng để code logic bay bổng mượt mà mà đến lúc deploy lại không biết phân biệt IP nào của Host nào nhé.
Hy vọng bài viết ngắn này giúp anh em clear được kiến thức. Anh em nào đi phỏng vấn bị hỏi câu này thì cứ tự tin mà chém nhé!
All rights reserved