"Thời đại AI chỉ bằng một cú nhấp chuột" Đột phá bằng nguyên lý Node.js và CS Phần 3: TCP/UDP Socket và Network Core

Trong thời đại mà AI có thể viết mã thay cho con người, giá trị của một "kiến trúc sư thực thụ" – người có khả năng thấu hiểu và kiểm soát khung sườn vĩ mô của hệ thống – càng trở nên cao hơn bao giờ hết. Khóa học này sẽ đi sâu vào bản chất của mạng cấp thấp (low-level network) và socket TCP/UDP ẩn sau các framework, giúp bạn rèn luyện khả năng thiết kế các công cụ cốt lõi (core engine) vững chắc, không bao giờ đổ vỡ ngay cả trước lưu lượng truy cập hàng triệu người và dữ liệu khổng lồ. Hãy vượt xa giới hạn của một lập trình viên chỉ biết sao chép - dán một cách mù quáng để trở thành một bậc thầy không thể thay thế, người có thể chỉ thị và kiểm soát AI đưa ra những giải pháp chính xác ở cấp độ hệ thống.

2 học viên đang tham gia khóa học này

Độ khó Cơ bản

Thời gian Không giới hạn

JavaScript
JavaScript
Node.js
Node.js
Computer Architecture
Computer Architecture
frontend
frontend
backend
backend
JavaScript
JavaScript
Node.js
Node.js
Computer Architecture
Computer Architecture
frontend
frontend
backend
backend

Bạn sẽ nhận được điều này sau khi học.

  • Nâng cao kỹ năng Prompt AI: Thay vì chỉ đơn thuần cầu xin AI sửa lỗi, bạn sẽ có khả năng kiểm soát hệ thống để chỉ đạo các giải pháp ở cấp độ kiến trúc bằng các thuật ngữ Khoa học Máy tính (CS) chính xác.

  • Đảm bảo tính độc lập với framework: Loại bỏ lớp vỏ bọc của Express hay NestJS để đạt được kỹ năng 'backend thực thụ', xây dựng máy chủ hiệu suất cao chỉ với các module tích hợp sẵn của Node.js.

  • Phòng chống tràn bộ nhớ (OOM): Xác định nguyên nhân gây sập máy chủ khi xử lý dữ liệu lớn lên đến hàng Gigabyte (GB) và giảm thiểu mức chiếm dụng RAM.

  • Kiểm soát Backpressure thủ công: Giải quyết một cách tinh tế sự mất cân bằng tốc độ I/O giữa đĩa và mạng bằng việc điều khiển van ở cấp độ OS (tạm dừng, tiếp tục, xả).

  • Tự động hóa đường ống luồng (stream pipeline): Thấu hiểu nguyên lý máy trạng thái nội bộ của phương thức .pipe(), đồng thời triển khai các luồng nâng cao tự điều chỉnh dòng dữ liệu và áp suất ngược (backpressure).

  • Thiết kế giao thức truyền thông tùy chỉnh: Không phụ thuộc vào HTTP, sáng tạo từ con số không một quy tắc truyền thông riêng bằng cách trực tiếp lắp ráp và phân tích cú pháp siêu dữ liệu (metadata) ở phần đầu của gói tin.

  • Kiểm soát phân mảnh và hợp nhất TCP: Trong dòng chảy TCP liên tục, dữ liệu bị chia nhỏ hoặc gộp lại khi đến sẽ được khôi phục không mất mát bằng kỹ thuật 'đệm tích lũy' và 'NDJSON'.

  • Tối ưu hóa cấu trúc dữ liệu O(1): Chỉ ra điểm nghẽn của tìm kiếm tuyến tính và tái cấu trúc sang kiến trúc sử dụng bảng băm (Map) để kiểm soát hàng chục nghìn người truy cập mà không bị trễ.

  • Triển khai hệ thống định tuyến đa kết nối: Vượt qua môi trường socket bị cô lập 1:1, tạo ra một máy chủ trung gian có khả năng phát dữ liệu đồng thời cho vô số máy khách.

  • Phòng chống Zombie Socket và các tình huống ngoại lệ: Tối đa hóa khả năng sinh tồn của máy chủ bằng cách ngăn chặn tình trạng cạn kiệt tài nguyên hạt nhân (kernel resource) xảy ra khi máy khách bị đóng cưỡng bức hoặc gặp sự cố đường truyền.

  • Hiện thực hóa 7 tầng OSI: Bằng cách ánh xạ 1:1 mô hình các tầng vốn chỉ học thuộc lòng trên lý thuyết với mã nguồn thực tế (bộ đệm, gói tin, tuần tự hóa), bạn sẽ có được tầm nhìn xuyên suốt để thấu hiểu mạng lưới một cách minh bạch.

  • Ứng dụng thực tế rõ ràng của TCP và UDP: Phân biệt giữa nơi cần tính toàn vẹn dữ liệu (TCP) và máy chủ thời gian thực cần tốc độ tối đa (UDP), đồng thời xử lý linh hoạt các socket phù hợp với từng đặc tính.

  • Chẩn đoán khung cơ sở hạ tầng mạng: Tự chẩn đoán các vấn đề hạ tầng phát sinh khi triển khai máy chủ thông qua IPv4, phép toán bit mặt nạ mạng con (subnet mask) và nguyên lý chuyển tiếp cổng (port forwarding) của NAT (bộ định tuyến).

  • Làm chủ IPv6 - Cơ sở hạ tầng thế hệ mới: Hiểu rõ về các tiêu chuẩn mới trong môi trường đám mây như hệ thống địa chỉ 128-bit vượt qua giới hạn 4,3 tỷ địa chỉ và cơ chế tự cấu hình SLAAC.

  • Thấu hiểu kiến trúc phân tán toàn cầu và hoàn thiện danh mục dự án: Bạn sẽ hiểu được bức tranh toàn cảnh về DNS Lookup và hệ thống GSLB, dựa trên đó trực tiếp hoàn thiện 'Máy chủ trò chuyện CLI đa người chơi' và 'Trình tải lên dung lượng lớn không lỗi OOM'.

  • Giải phẫu nhân lõi mạng: Quy trình đường ống 6 bước đưa dữ liệu từ tín hiệu điện vật lý, đi qua MAC, IP, Port cho đến khi khớp vào bộ đệm bộ nhớ của công cụ Node.js V8.

  • Làm chủ Socket TCP/UDP: Triển khai nội bộ của giao tiếp 3-Way Handshake đảm bảo độ tin cậy và giao tiếp Datagram đạt tốc độ cực hạn với tiêu đề 8 byte.

  • Lý thuyết cấu trúc hạ tầng kỹ thuật máy tính: Phép toán bit mặt nạ mạng con (Subnet Mask), kỹ thuật hoán đổi IP riêng/công cộng của NAT, kiến trúc phân tán DNS, phạm vi (Scope) IPv6.

  • Bảo mật/Xử lý ngoại lệ cấp độ Production: Xác định rủi ro của Spoofing (giả mạo), Sniffing (nghe lén) và logic tối ưu hóa backend để ngăn chặn lỗi crash máy chủ.

🎓 "Thời đại AI chỉ bằng một cú nhấp chuột" Đột phá bằng nguyên lý Node.js và CS Phần 3: TCP/UDP Socket và Cốt lõi Mạng

Trong thời đại AI tạo ra mã nguồn hàng loạt, vũ khí thực sự của một nhà phát triển backend là gì?

Không chỉ dừng lại ở việc 'tạo ra' các API bằng framework, đó còn là sức mạnh để kiểm soát 'công cụ lõi mạng' từ cấp độ thấp nhất, nơi hàng triệu lượt truy cập đổ về. Đây là thời đại mà chỉ cần vài lần "nhấp chuột" với các câu lệnh prompt là có thể tạo ra một máy chủ trông có vẻ ổn thỏa.

Nhưng chuyện gì sẽ xảy ra vào những khoảnh khắc kinh hoàng khi hàng vạn người dùng truy cập cùng lúc khiến session bị lỗi, hay dữ liệu bùng nổ lên đến hàng chục GB gây ra lỗi OOM(Out Of Memory) trên máy chủ? Phương pháp chỉ sao chép nhật ký lỗi rồi hỏi AI câu trả lời sẽ không bao giờ có thể cứu vãn được hệ thống thực tế đang vận hành. Nếu không hiểu rõ nguyên lý của chiếc hộp đen mà các framework đang che giấu, cuối cùng chúng ta sẽ vấp phải giới hạn của việc phụ thuộc vào những dòng mã do AI viết sẵn.

Khóa học này sẽ mở toang chiếc mui xe của ExpressNestJS, là một lớp học kiến trúc cao cấp giúp bạn trực tiếp khai thông đường ống Low-level nơi bộ nhớ nhân OScard mạng (NIC) giao tiếp với nhau.

Chúng ta bắt đầu từ câu hỏi khoa học máy tính cơ bản là "Ở tầng thấp nhất của mạng, các gói tin di chuyển vật lý như thế nào và bộ nhớ được bảo vệ ra sao?".

  • TCP với tính toàn vẹn và UDP với tốc độ cực hạn cùng sự kiểm soát ở mức phần cứng

  • Phân mảnh (Fragmentation) luồng TCP Khôi phục hoàn hảo cạm bẫy

  • Kiểm soát thủ công áp suất ngược (Backpressure) để ngăn chặn bùng nổ bộ nhớ và tự động hóa .pipe()

  • Tự tay sáng tạo giao thức truyền thông tùy chỉnh(NDJSON) từ con số 0

  • IPv6 tự hành và thiết lập bản đồ hạ tầng phân tán toàn cầu dựa trên DNS/GSLB

Chinh phục hoàn toàn khung sườn đồ sộ của mạng và hệ thống, đồng thời trực tiếp trải nghiệm logic phòng thủ không lỗi không cho phép mất dù chỉ 1 byte dữ liệu hay một lần crash máy chủ thông qua 2 dự án thực tế (Xây dựng máy chủ chat CLI đa người chơi, Trình tải lên video 10GB).

Vượt ra ngoài việc phụ thuộc một cách thụ động vào mã do AI viết, giờ là lúc dựa trên các nguyên lý khoa học máy tính chuyên sâu để chỉ đạo và kiểm soát một 'kiến trúc hệ thống' rõ ràng cho AI. Hãy bắt đầu hành trình để trở thành một nhà thiết kế công cụ thuộc top 1% không thể thay thế ngay bây giờ.


🧱 Triết lý cốt lõi trong cấu trúc bài giảng

📌 Đừng dựa dẫm vào phép màu của framework, hãy trực tiếp kiểm soát khung xương của hệ thống.

→ AI có thể tạo ra mã boilerplate của các framework cấp cao như Express hay NestJS chỉ trong vài giây. Tuy nhiên, nếu không thể kiểm soát chính hộp đen (blackbox) ẩn sau framework đó, bạn sẽ trở nên bất lực trước những điểm nghẽn hạ tầng. Hãy mạnh dạn từ bỏ việc học thuộc lòng cách sử dụng thư viện, và trực tiếp khai thông đường ống cấp thấp (low-level pipeline) nơi hệ điều hành (OS) và card mạng (NIC) giao tiếp với nhau chỉ bằng các module tích hợp sẵn của Node.js thuần túy, từ đó nắm giữ quyền kiểm soát của một 'nhà thiết kế động cơ' mà AI tuyệt đối không thể bắt chước.

📌 Dữ liệu không phải là một khối tĩnh lặng, mà là một làn sóng đang bùng nổ.

→ Khi xử lý hàng gigabyte (GB) dữ liệu, những đoạn mã ngây thơ cố gắng tải toàn bộ tệp vào bộ nhớ cùng một lúc sẽ ngay lập tức khiến máy chủ rơi vào trạng thái chết (OOM). Bạn cần nhận thức được sự mất cân bằng tốc độ khi dữ liệu đi qua bộ nhớ để ra mạng, đồng thời hiểu rõ quy trình tự động hóa của .pipe() và việc kiểm soát 'Backpressure' (áp suất ngược) – kỹ thuật đóng mở cửa xả bằng cách giám sát bộ đệm nội bộ của luồng (Stream). Chỉ khi làm chủ được dòng chảy vĩ mô này, bạn mới có thể thiết kế một máy chủ mạnh mẽ, không bao giờ bị sập dù phải đối mặt với bất kỳ lượng dữ liệu khổng lồ nào.

📌 Không phải mọi quá trình truyền tải đều cần xác nhận biên nhận kỹ lưỡng.

→ Giải phẫu sự khác biệt về mặt triết học ở cấp độ phần cứng giữa TCP, nơi tính toàn vẹn tuyệt đối là sự sống còn, và UDP, nơi tốc độ cực hạn là ưu tiên hàng đầu. Bạn sẽ nhận ra việc xác nhận phản hồi của TCP có thể trở thành "độc dược" chí mạng như thế nào trong các môi trường streaming hay máy chủ trò chơi thời gian thực, nơi vị trí nhân vật thay đổi hàng trăm lần mỗi giây. Từ đó, bạn sẽ được trải nghiệm giá trị thực sự của kiến trúc socket UDP – thứ rũ bỏ mọi gánh nặng để bứt tốc chỉ với header nhẹ nhàng 8 byte và công nghệ DMA (Direct Memory Access).

📌 Giao thức mạng không phải là thứ được ban cho, mà là thứ để thiết kế.

→ Khi đối mặt với tình trạng phân mảnh (Fragmentation) và bài toán hợp nhất khi các gói tin bị chia nhỏ hoặc gộp lại trong dòng chảy TCP liên tục, chúng ta không ẩn mình sau các giao thức HTTP do người khác tạo ra. Thay vào đó, chúng ta trực tiếp lắp ghép nhãn tên tệp (Header) vào ngay đầu dữ liệu, kết hợp giữa đệm tích lũy (cumulative buffering) và giao thức tiêu chuẩn toàn cầu NDJSON để sáng tạo nên giao thức truyền thông tùy chỉnh của riêng mình từ con số không.

📌 Hãy vẽ bản đồ khoảnh khắc mã của bạn gặp gỡ thế giới vật lý.

→ Phần mềm chúng ta viết không tự nhiên bay lơ lửng trong không trung một cách thần kỳ. Từ phép toán bit subnet mask, kỹ thuật hoán đổi IP riêng/công khai của NAT, hệ thống chuyển tiếp địa chỉ ARP / MAC, cho đến cơ chế tự cấu hình (SLAAC) của thế hệ IPv6 mới giúp cách mạng hóa mạng nội bộ, bạn sẽ nắm trọn luồng vật lý của hạ tầng nơi dữ liệu xuyên qua các bộ định tuyến để vươn ra toàn thế giới.

📌 Vượt qua giới hạn của một máy chủ duy nhất, tầm nhìn hướng tới kiến trúc phân tán toàn cầu.

→ Để thiết kế một dịch vụ thương mại không bao giờ ngừng hoạt động ngay cả trước lưu lượng truy cập hàng chục triệu người, bạn cần thông thạo quy trình chuyển tiếp 5 bước của DNS lookup. Vượt xa một cỗ máy chỉ trả về IP đơn thuần, hãy khắc sâu vào tâm trí bản thiết kế khổng lồ của GSLB, CDNSession Clustering – những công nghệ giúp xác định vị trí vật lý của người dùng để chỉ ra lộ trình tối ưu và tự động thực hiện phục hồi sau thảm họa (DR).

📌 Năng lực cạnh tranh thực sự trong kỷ nguyên AI không nằm ở việc tạo ra mã nguồn, mà là khả năng gỡ lỗi để giải mã chiếc hộp đen.

→ Thời đại mà việc xuất ra mã nguồn nhanh chóng là điều AI làm tốt hơn đã đến. Tuy nhiên, khi một lỗi rò rỉ socket nhỏ xảy ra trong mã mạng do AI tạo ra, hoặc khi việc kiểm soát áp lực ngược (backpressure) bất đồng bộ bị lỗi khiến các máy chủ đồng loạt gặp sự cố, thì chỉ có những kỹ sư con người hiểu rõ nguyên lý cấp thấp (low-level) mới có thể tìm ra nguyên nhân và khắc phục chúng. Khả năng nhìn thấu suốt bên trong hệ thống chính là năng lực tuyệt đối duy nhất để không bị đào thải trong kỷ nguyên AI.

📌 Đừng cầu xin AI viết mã, hãy chỉ thị cấu trúc hệ thống.

→ Những câu hỏi vụn vặt như "Hãy sửa lỗi này cho tôi" chỉ làm lãng phí token và chi phí vô nghĩa. Bằng cách khắc sâu các nguyên lý khoa học máy tính chuyên sâu vào cốt lõi, bạn sẽ tiến hóa thành một 'Kiến trúc sư ngữ cảnh cao' (High-context Architect) thuộc top 1% — người có thể chỉ đạo và kiểm chứng các giải pháp rõ ràng ở cấp độ hệ thống bằng các thuật ngữ CS chính xác, chẳng hạn như: "Hãy thiết kế logic đệm NDJSON và mã kiểm soát áp suất ngược (backpressure) để phòng chống phân mảnh TCP".


✨ Đặc điểm của bài giảng này

  • Kiểm soát hoàn toàn các module lõi mạng thuần túy của Node.js → Loại bỏ lớp vỏ bọc trừu tượng của các gói và framework bên ngoài, xây dựng một cách an toàn giao tiếp socket ở tầng L4 từ con số 0 chỉ với các module net, dgram, và fs.

  • Không còn lỗi OOM, tự động hóa áp suất ngược (Backpressure) của luồng → Từ việc kiểm soát van thủ công tinh vi bằng cách sử dụng pause, resume, drain cho đến cơ chế tự động xả nước của máy trạng thái bên trong .pipe(), bạn sẽ nắm vững tinh túy của việc truyền tải dữ liệu dung lượng lớn.

  • Thiết kế và triển khai giao thức mạng tùy chỉnh của riêng bạn → Để kiểm soát luồng TCP không có ranh giới gói tin, bạn sẽ hoàn thiện một giao thức độc lập bằng cách nhúng trực tiếp các dấu phân cách duy nhất (-----BOF-----) vào bộ đệm nhị phân và phân tách chúng một cách linh hoạt.

  • Trang bị ngôn ngữ 'High-Context' (ngữ cảnh cao) để làm chủ AI → Thay vì giải thích mơ hồ, hãy định nghĩa hệ thống bằng các thuật ngữ khoa học máy tính tinh vi để đạt được khả năng kiểm soát tối cao, trích xuất mã kiến trúc hoàn hảo từ AI chỉ với một câu lệnh duy nhất.

  • Tối ưu hóa nút thắt cổ chai tìm kiếm tuyến tính O(N) sang phạm vi O(1) → Cải tổ toàn diện sự kém hiệu quả nghiêm trọng của sổ cái cấu trúc mảng sang cấu trúc dữ liệu Bảng băm (Map), giúp quản lý phiên làm việc với tốc độ cực nhanh chỉ trong một lần tính toán, bất kể số lượng người dùng là một trăm hay một triệu người.

  • Kiểm soát phần cứng và đầu vào/đầu ra chuẩn của runtime → Kiểm soát hoàn toàn các luồng chuẩn process.stdin / process.stdout và bộ mô tả tệp (File Descriptor - FD), đồng thời xây dựng môi trường CLI dựa trên process.argv và mã ANSI escape để điều khiển con trỏ terminal.

  • Làm chủ hạ tầng thế hệ mới và bản đồ phân tán toàn cầu → Vượt xa các nguyên lý của IPv4 / IPv6, Subnet, NAT để thấu hiểu kiến trúc phân tán DNS, GSLB, CDN, và cả mô hình HTTP/3 (QUIC) hiện đại – nơi sự tin cậy được đặt lên trên các socket UDP nhẹ nhàng thay vì TCP nặng nề.

  • Trực tiếp xây dựng 2 công cụ cốt lõi cấp độ Production → Tự tay hoàn thiện 'Máy chủ trò chuyện CLI đa người chơi thời gian thực' kết hợp quản lý session bằng bảng băm, và 'Chương trình tải lên tệp TCP dung lượng lớn không lỗi' giúp truyền tải video 10GB một cách hoàn hảo mà không gây tràn bộ nhớ.

  • Thiết kế mạng lưới phòng thủ kép chống Zombie Socket và sập máy chủ → Tiếp thu chiến lược phòng thủ ngoại lệ giúp ngăn chặn triệt để rò rỉ bộ nhớcạn kiệt tài nguyên, đảm bảo máy chủ không bao giờ bị sập ngay cả khi đối mặt với việc khách hàng ngắt kết nối bất thường (ECONNRESET) hay bị tấn công bởi dữ liệu rác độc hại.


1️⃣ Xây dựng trung tâm giao tiếp trực tiếp với hệ điều hành:
Xóa bỏ ranh giới giữa giao tiếp cục bộ siêu tốc (IPC) không qua phần cứng bên ngoài (NIC) và giao tiếp TCP toàn cầu qua mạng internet, đồng thời khai thông đường hầm socket chỉ với mô-đun net mà không cần framework.

2️⃣ Luồng nhập xuất tiêu chuẩn và điều khiển phần cứng:
process.stdinprocess.stdout kiểm soát hoàn toàn các luồng tiêu chuẩn, đồng thời sử dụng mã ANSI escape để hoàn thiện giao diện CLI UI hai chiều mà không gây xung đột màn hình terminal.

3️⃣ Kiến trúc định danh duy nhất Vật lý · Logic:
Vượt qua giới hạn của cổng vật lý tạm thời (Ephemeral Port) do hệ điều hành chỉ định ngẫu nhiên, thiết kế sổ cái phiên (session ledger) chỉ dành cho tầng ứng dụng để theo dõi người dùng một cách an toàn ngay cả khi kết nối socket bị ngắt.


5️⃣ Thiết lập quy ước dữ liệu tùy chỉnh:
Loại bỏ phương pháp cắt chuỗi thủ công đầy rủi ro, thay vào đó áp dụng tuần tự hóa JSON cho các đối tượng dữ liệu và định tuyến phân nhánh dựa trên thuộc tính để tạo ra giao thức truyền thông riêng biệt, không bị sụp đổ trước các tình huống ngoại lệ.


4️⃣ Vô hiệu hóa nút thắt cổ chai của tìm kiếm tuyến tính bằng O(1):
Thay thế hoàn toàn việc tìm kiếm O(N) chậm chạp của sổ cái dạng mảng bằng bảng băm (Map) - tinh hoa của khoa học máy tính, giúp quản lý phiên làm việc với tốc độ hằng số O(1) cực nhanh bất kể quy mô người kết nối.


6️⃣ Tiến thoái lưỡng nan về phân mảnh (Fragmentation) luồng TCP: Đối mặt với giới hạn bẩm sinh của luồng TCP khi các gói tin bị gộp lại hoặc chia nhỏ do vấn đề hiệu suất mạng, chúng tôi thiết lập chiến lược phân tích cú pháp siêu dữ liệu (header) để trực tiếp lắp ráp các ranh giới dữ liệu.

7️⃣ Khôi phục bộ đệm không lỗi dựa trên NDJSON:
Bằng cách kết hợp kỹ thuật đệm tích lũy sử dụng không gian closure cho từng người dùng với tiêu chuẩn truyền phát toàn cầu NDJSON, chúng tôi khôi phục dữ liệu gốc một cách mượt mà mà không làm mất dù chỉ 1 byte.

8️⃣Mất cân bằng tốc độ và kiểm soát áp suất ngược (Backpressure) thủ công:
Phân tích cách hiện tượng nghẽn cổ chai giữa đĩa cứng tốc độ cao và mạng chậm gây ra tràn bộ nhớ (OOM), đồng thời nắm vững việc kiểm soát áp suất ngược thủ công bằng cách trực tiếp điều chỉnh các van pause(), resume(), và drain.

9️⃣ .pipe() Tự động hóa và Kiến trúc Header Động:
Tự động hóa việc điều khiển van thủ công bằng máy trạng thái nội bộ của .pipe() - chỉ với một dòng lệnh duy nhất, kết hợp với kỹ thuật truyền tham số động CLI dựa trên process.argv để hoàn thiện trình tải lên tệp tin cấp độ thực tế (production level).


🔟 Làm chủ cơ sở hạ tầng toàn cầu và truyền thông siêu tốc UDP:
Từ cơ chế Subnet mask, NAT, IPv6 tự cấu hình (SLAAC) đến việc thiết kế bản vẽ DNS lookup và GSLB, chinh phục hoàn toàn kiến trúc phân tán toàn cầu cho đến truyền thông UDP socket với tốc độ cực hạn.

Nhà phát triển Backend đang bị chững lại trong sự nghiệp trước những rào cản về mở rộng logic và nghẽn lưu lượng do quá phụ thuộc vào việc sao chép mã từ AI

Kỹ sư muốn thấu hiểu và trực tiếp kiểm soát các điểm nghẽn ở cấp độ thấp (TCP fragmentation, backpressure, v.v.) đằng sau framework

Kiến trúc sư muốn thiết kế hệ thống phân phối lưu lượng truy cập quy mô toàn cầu như DNS, GSLB, CDN và bản thiết kế cơ sở hạ tầng thế hệ mới

Những người muốn chủ động kiểm soát AI bằng các thuật ngữ CS chính xác và nguyên lý kiến trúc để tiết kiệm thời gian và chi phí

Những nhà phát triển đã từng thức trắng đêm vì vấn đề tràn bộ nhớ (OOM) xảy ra trong quá trình xử lý tệp dung lượng lớn và giao tiếp thời gian thực


Những người muốn hiện thực hóa các kiến thức CS như TCP, UDP, Socket vốn chỉ được học qua lý thuyết thành mã nguồn thực tế

Những người muốn vượt xa giới hạn của một lập trình viên đơn thuần để trở thành một kiến trúc sư không thể thay thế, người có khả năng vẽ nên bức tranh toàn cảnh của toàn bộ hệ thống

Những ai muốn đi sâu vào nguyên lý hoạt động ở cấp độ Node.js stream và OS/phần cứng, thay vì chỉ dừng lại ở cách sử dụng Express hay NestJS

Những ai muốn hiểu rõ lý do tại sao máy chủ local không mở được ở mạng bên ngoài và ý nghĩa vật lý của việc liên kết (binding) 0.0.0.0

👥 Đề xuất cho những đối tượng sau

  • "Các lập trình viên cấp thấp (junior) đang lập trình theo kiểu 'phó mặc cho số phận', mỗi khi gặp lỗi lại không biết phải sửa ở đâu nên đành sao chép toàn bộ mã nguồn rồi dán vào AI."

  • "Có thể thực hiện các chức năng bằng cách nào đó, nhưng khi gặp hàng triệu lượt truy cập hoặc các tệp tin đơn vị gigabyte trong thực tế thì không biết tại sao máy chủ lại bị treo và từ bỏ việc mở rộng hệ thống."

  • "Vì thiếu đi cái nhìn tổng quan về kiến trúc toàn bộ hệ thống, nên chỉ biết đặt những câu hỏi chung chung cho AI như 'hãy tối ưu hóa cấu trúc giúp tôi' để rồi nhận lại những kết quả sai lệch và chỉ làm lãng phí chi phí token."

  • "Những lập trình viên trẻ đang cảm thấy giới hạn đau đớn và ngừng phát triển do không thể mở rộng hoặc bảo trì mã nguồn mà AI đã viết."

  • "Những nhà phát triển nhận ra rằng 'năng lực thiết kế kiến trúc hệ thống để vẽ nên bức tranh lớn' đã trở nên quan trọng hơn cả tốc độ sản xuất mã nguồn."

  • "Những ai muốn gỡ bỏ lớp vỏ của các framework như Express, NestJS để trực tiếp kiểm soát nguyên lý hoạt động bên trong của truyền thông mạng."

  • "Nhà phát triển backend từng thức trắng nhiều đêm vì vấn đề tràn bộ nhớ (OOM) xảy ra khi tải lên tệp dung lượng lớn."

  • "TCP, UDP, Socket, Port và các kiến thức CS khác vốn chỉ được học vẹt ở trường đại học, nay muốn được hiện thực hóa thành những dòng code sống động bởi các sinh viên chuyên ngành."

  • "Người đang chuẩn bị xin việc không chuyên ngành muốn vượt qua bằng thực lực áp đảo trước những câu hỏi gây áp lực của người phỏng vấn (về kiến trúc, chiều sâu mạng)."

  • "Những người muốn tìm hiểu về máy chủ trò chơi đa người chơi thời gian thực hoặc cấu trúc truyền thông nền tảng của hệ thống hội nghị truyền hình (WebRTC)."

  • "Những ai cảm thấy khái niệm Stream và Buffer vốn là cốt lõi của Node.js vẫn còn mơ hồ nên chưa thể áp dụng chính xác vào mã nguồn thực tế."

  • "Những người còn lúng túng trong việc thiết kế logic xử lý zombie socket phát sinh khi xảy ra lỗi đường truyền mạng hoặc khi client bị đóng cưỡng bức."

  • "Những người không biết tại sao máy chủ local mình vừa chạy hoạt động tốt trên localhost nhưng lại không mở được ở mạng bên ngoài, và chưa hiểu ý nghĩa thực sự của việc binding 0.0.0.0."

  • "Những ai muốn nắm vững cấu trúc cốt lõi của hạ tầng đám mây như IPv4, Subnet, NAT, IPv6 một cách trực quan trong thời gian ngắn."

  • "Dành cho những ai muốn vượt xa giới hạn của việc phát triển máy chủ đơn thuần để phác thảo nên bản thiết kế hệ thống phân tán lưu lượng quy mô toàn cầu như DNS, GSLB, CDN."

  • "Những ai muốn khám phá ở cấp độ thấp (low-level) về cách các hàm nội bộ quen thuộc như indexOf, substring hoạt động như thế nào ở cấp độ bộ nhớ và CPU."

  • "Những ai muốn tự mình tạo ra các công cụ CLI (process.argv, ANSI Escape Codes) xử lý các lệnh terminal."

  • "Vượt ra ngoài những kỹ năng lập trình rời rạc, đây là khóa học dành cho những kỹ sư cấp trung đã sẵn sàng để vươn mình trở thành một 'kiến trúc sư hệ thống' làm chủ kỷ nguyên AI."


🎓 Sau khi hoàn thành khóa học

  • Nâng cao kỹ năng Prompt AI: Thay vì cầu xin AI sửa lỗi một cách đơn thuần, bạn sẽ sở hữu khả năng kiểm soát hệ thống để chỉ đạo các giải pháp ở cấp độ kiến trúc bằng các thuật ngữ CS chính xác.

  • Đảm bảo tính độc lập của framework: Loại bỏ lớp vỏ bọc của Express hay NestJS, bạn sẽ đạt được kỹ năng 'backend thực thụ' để xây dựng máy chủ hiệu suất cao chỉ với các mô-đun tích hợp sẵn của Node.js thuần túy.

  • Phòng chống tràn bộ nhớ (OOM): Tìm hiểu nguyên nhân gây sập máy chủ khi xử lý dữ liệu lớn lên đến hàng Gigabyte (GB) và giảm thiểu tối đa việc chiếm dụng RAM.

  • Kiểm soát Backpressure thủ công: Giải quyết một cách tinh tế sự mất cân bằng tốc độ I/O giữa đĩa và mạng bằng cách điều khiển van ở cấp độ OS (pause, resume, drain).

  • Tự động hóa đường ống luồng (Stream Pipeline): Nắm vững nguyên lý máy trạng thái nội bộ của phương thức .pipe(), đồng thời triển khai các luồng nâng cao tự động điều chỉnh dòng dữ liệu và áp suất ngược (backpressure).

  • Thiết kế giao thức truyền thông tùy chỉnh: Không phụ thuộc vào HTTP, bạn sẽ tự tay sáng tạo từ con số 0 một quy ước truyền thông riêng bằng cách trực tiếp lắp ráp và phân tích cú pháp siêu dữ liệu (metadata) ở phần đầu của gói tin.

  • Kiểm soát phân đoạn và hợp nhất TCP: Trong dòng chảy TCP liên tục, các dữ liệu bị chia nhỏ hoặc gộp lại khi đến nơi sẽ được khôi phục không sai sót bằng kỹ thuật 'bộ đệm tích lũy' và 'NDJSON'.

  • Tối ưu hóa cấu trúc dữ liệu O(1): Xác định điểm nghẽn của tìm kiếm tuyến tính và tái cấu trúc thành kiến trúc sử dụng bảng băm (Map) để kiểm soát hàng vạn người kết nối mà không bị trễ.

  • Triển khai hệ thống định tuyến đa kết nối: Vượt qua môi trường socket cô lập 1:1 để tạo ra một máy chủ trung gian có khả năng phát dữ liệu (broadcasting) đồng thời cho vô số máy khách.

  • Phòng chống zombie socket và các tình huống ngoại lệ: Bảo vệ chống lại sự cạn kiệt tài nguyên kernel xảy ra khi máy khách bị đóng cưỡng bức hoặc lỗi đường truyền, từ đó tối đa hóa khả năng sinh tồn của máy chủ.

  • Hiện thực hóa mô hình OSI 7 tầng: Ánh xạ mô hình phân tầng vốn chỉ học qua lý thuyết với mã nguồn thực tế (buffer, packet, serialization) theo tỷ lệ 1:1, giúp bạn có được tầm nhìn thấu suốt vào hệ thống mạng.

  • Ứng dụng thực tế rõ ràng của TCP và UDP: Phân biệt nơi cần tính toàn vẹn (TCP) và máy chủ thời gian thực cần tốc độ tối đa (UDP), đồng thời sử dụng linh hoạt các socket phù hợp với từng đặc tính.

  • Chẩn đoán khung cơ sở hạ tầng mạng: Tự mình chẩn đoán các vấn đề hạ tầng phát sinh khi triển khai máy chủ thông qua IPv4, tính toán bit mặt nạ mạng con (subnet mask) và nguyên lý chuyển tiếp cổng (port forwarding) của NAT (bộ định tuyến).

  • Làm chủ IPv6 - Hạ tầng thế hệ mới: Hiểu về tiêu chuẩn mới của môi trường đám mây như hệ thống địa chỉ 128-bit vượt qua giới hạn 4,3 tỷ địa chỉ và cơ chế tự cấu hình SLAAC.

  • Thấu hiểu kiến trúc phân tán toàn cầu và hoàn thiện Portfolio: Thấu hiểu bức tranh lớn về hệ thống DNS Lookup và GSLB, dựa trên đó bạn sẽ trực tiếp hoàn thiện 'Máy chủ chat CLI đa người chơi' và 'Trình tải lên dung lượng lớn không lỗi OOM'.

💻 Lưu ý trước khi khóa học bắt đầu

🔗 [Khuyến nghị mạnh mẽ nên học các phần trước (Phần 1, 2)]

Khóa học này là chương cuối cùng (Phần 3) trong lộ trình thiết kế hệ thống quy mô lớn. Những hiểu biết về V8 engine và kiểm soát bộ nhớ cục bộ (Phần 1), cùng với kiến trúc đường ống và luồng dữ liệu lớn (Phần 2) sẽ được kết nối trực tiếp với socket mạng (Phần 3). Vì tất cả các chương đều có sự liên kết hữu cơ với nhau, chúng tôi đặc biệt khuyến khích bạn nên hoàn thành Phần 1 và Phần 2 trước khi chuyển sang khóa học này.

(※ Tuy nhiên, nếu bạn là kỹ sư cấp cao đã có kiến thức nền tảng vững chắc về CS và các module cốt lõi của Node.js, bạn hoàn toàn có thể học riêng khóa học này.)

Tôi đã tinh chỉnh nội dung để duy trì phong cách kỹ thuật cao cấp (high-end engineering) trang trọng, đồng thời bố trí các biểu tượng cảm xúc phù hợp và tối ưu hóa khả năng đọc để các thông điệp cốt lõi được truyền tải một cách trực quan và ấn tượng nhất.

⌨️ [Đừng chỉ nhìn bằng mắt, hãy lĩnh hội bằng đôi tay]

Đừng chỉ dừng lại ở việc xem video và quan sát mã nguồn do người khác viết. Tôi khuyến khích bạn hãy trực tiếp mở terminal của server và client, gửi và nhận các gói tin, rồi tự tay gõ từng dòng log và lỗi phát sinh để thực sự đối mặt với chúng. Kiến trúc thực thụ không được hoàn thiện bằng đầu óc, mà bằng trí nhớ cơ bắp nơi đầu ngón tay.

🔍 [Hãy kiên trì đặt câu hỏi "Tại sao?"]

Những nghi vấn dai dẳng về nguyên lý như "Tại sao bộ nhớ lại bùng nổ ở đây?", "Tại sao gói tin này lại bị chia nhỏ khi truyền vào?" chính là vũ khí chắc chắn nhất giúp bạn bứt phá từ một lập trình viên đơn thuần trở thành một 'nhà thiết kế động cơ'. Trong quá trình học, nếu có bất kỳ thắc mắc nào về hạ tầng chưa được giải đáp hay các khái niệm CS lạ lẫm, đừng tự mình chịu đựng mà hãy đặt câu hỏi bất cứ lúc nào. Tôi sẽ trả lời một cách rõ ràng dưới góc nhìn của một kiến trúc sư hệ thống.

🗺️ [Hãy tận dụng 100% 'Ghi chú bài giảng' với chi tiết áp đảo]

Luồng mạng vô hình vốn rất khó để hình dung trong đầu. Để giúp bạn thấu hiểu một cách trực quan các cấu trúc hạ tầng phức tạp như phân đoạn TCP, kiểm soát van áp suất ngược (Backpressure), hay các phép toán subnet mask, tôi cung cấp đầy đủ giáo trình chuyên sâu (ghi chép bài giảng) cho mỗi bài học. Những tài liệu này được trực quan hóa một cách tinh xảo, từ cấp độ vật lý của 0 và 1 cho đến kiến trúc toàn cầu. Hãy chắc chắn đọc kỹ sau khi xem video.

Khuyến nghị cho
những người này

Khóa học này dành cho ai?

  • Nhà phát triển cấp dưới (junior) đang cảm thấy giới hạn đau đớn và ngừng phát triển do không thể mở rộng hoặc bảo trì mã nguồn mà AI đã viết.

  • Một lập trình viên nhận ra rằng "năng lực thiết kế kiến trúc hệ thống với cái nhìn tổng thể" đã trở nên quan trọng hơn cả tốc độ tạo ra mã nguồn.

  • Những ai muốn gỡ bỏ lớp vỏ của các framework như Express, NestJS để trực tiếp kiểm soát nguyên lý hoạt động bên trong của giao tiếp mạng.

  • Một lập trình viên backend đã thức trắng nhiều đêm vì vấn đề tràn bộ nhớ (OOM) xảy ra khi tải lên các tệp tin dung lượng lớn.

  • Những người chuyên ngành muốn hiện thực hóa các kiến thức CS đã học thuộc lòng ở đại học như TCP, UDP, Socket, Port thành những dòng code sống động.

  • Kỹ sư cấp trung đã sẵn sàng vượt xa những kỹ năng lập trình rời rạc để vươn mình trở thành một 'kiến trúc sư hệ thống' thống trị kỷ nguyên AI.

  • Người chuẩn bị xin việc không chuyên ngành muốn vượt qua những câu hỏi gây áp lực của người phỏng vấn (về kiến trúc, chiều sâu mạng lưới) bằng kỹ năng áp đảo.

  • Những nhà phát triển đã nhận ra giới hạn của việc phát triển theo kiểu 'nhấp chuột' đơn thuần, và muốn tiết kiệm tối đa chi phí token cũng như thời gian bằng cách đưa ra phương hướng thiết kế hệ thống tối ưu cho AI một cách chính xác thông qua các thuật ngữ và nguyên lý.

  • Những kỹ sư muốn vượt qua mức độ chỉ đơn thuần sao chép và dán mã do các công cụ AI (như Claude, ChatGPT, v.v.) tạo ra, để phân tích rõ ràng nguyên lý hoạt động bên trong và chủ động thay đổi kiến trúc.

  • Những ai muốn sống sót như một kiến trúc sư không thể thay thế, người vẽ nên 'bức tranh lớn của toàn bộ hệ thống' để kiểm soát lưu lượng truy cập lớn và lỗi OOM (Out of Memory), thay vì chỉ là một lập trình viên vô nghĩa trong cuộc đua tốc độ tạo mã của AI.

  • Những ai cảm thấy khái niệm Stream và Buffer - cốt lõi của Node.js - vẫn còn mơ hồ và chưa thể áp dụng chúng một cách đúng đắn vào mã nguồn thực tế.

  • Những người chưa quen với việc thiết kế logic xử lý zombie socket phát sinh khi xảy ra sự cố đường truyền mạng hoặc client bị đóng cưỡng bức.

  • Những ai chưa biết ý nghĩa thực sự của việc liên kết (binding) 0.0.0.0, và tại sao máy chủ local mình chạy thì hoạt động tốt trên localhost nhưng lại không thể mở được từ mạng bên ngoài.

  • Những ai muốn nắm vững nền tảng hạ tầng đám mây như IPv4, Subnet, NAT, IPv6 một cách trực quan và nhanh chóng.

  • Những ai muốn vượt xa việc phát triển máy chủ đơn thuần để thiết kế bản thiết kế cho hệ thống phân phối lưu lượng quy mô toàn cầu như DNS, GSLB, và CDN.

  • Những ai muốn khám phá ở cấp độ thấp (low-level) về cách các hàm nội tại quen thuộc như indexOf, substring hoạt động như thế nào ở cấp độ bộ nhớ và CPU.

  • Những ai muốn tự tay tạo ra công cụ CLI xử lý các lệnh terminal (process.argv, ANSI Escape Codes).

  • Nhà thiết kế backend muốn nuôi dưỡng khả năng thấu hiểu và kiểm soát từ góc nhìn kiến trúc đối với các nguyên nhân gốc rễ của hiện tượng nghẽn cổ chai ở cấp độ thấp (low-level) mà AI không thể giải quyết (như phân mảnh TCP, kiểm soát áp suất ngược - backpressure, v.v.)

Cần biết trước khi bắt đầu?

  • Ôn tập cơ bản JavaScript

  • Cài đặt Node.js (khuyến nghị v20 trở lên): Vui lòng cài đặt trước bản LTS (phiên bản ổn định) từ trang web chính thức của Node.js. Trong bài giảng này, chúng ta sẽ học cách tương tác với hệ điều hành dựa trên môi trường này.

  • Trình chỉnh sửa mã (VS Code): Vui lòng chuẩn bị Visual Studio Code để viết mã thực hành.

  • Vứt bỏ nỗi sợ mơ hồ: Thay vì lo lắng "Liệu có khó không?", bạn chỉ cần mang theo sự tò mò thú vị muốn tự tay mình mở ra chiếc hộp đen của công nghệ.

  • (Khuyến nghị) Khóa học "Thời đại AI click chuột" Đột phá nguyên lý Node.js và CS Phần 1 - Giải mã V8 và Core

  • (Khuyến nghị) "Thời đại AI chỉ bằng một cú nhấp chuột" Đột phá nguyên lý Node.js và CS Phần 2 - Kiến trúc Stream và Bộ điều khiển phần cứng

Xin chào
Đây là nhcodingstudio

Xác minh Inflearn

Xác minh sự nghiệp

2,424

Học viên

142

Đánh giá

55

Trả lời

4.8

Xếp hạng

20

Các khóa học

Xin chào, chào mừng bạn đến với Woori Dongne Coding Studio!

Woori Dongnae Coding Studio là một nhóm giáo dục được thành lập bởi các nhà phát triển tốt nghiệp chuyên ngành Khoa học máy tính tại các trường đại học hàng đầu Bắc Mỹ như Carnegie Mellon, Washington, Toronto, Waterloo và đã tích lũy kinh nghiệm thực tế tại các tập đoàn IT toàn cầu như Google, Microsoft, Meta.

Ban đầu, mọi thứ bắt đầu từ một nhóm học tập được tạo ra bởi các sinh viên chuyên ngành Khoa học máy tính tại Mỹ và Canada với mong muốn cùng nhau học hỏi và phát triển. Dù học tại các trường đại học khác nhau và ở các múi giờ khác nhau, nhưng khoảng thời gian cùng nhau giải quyết vấn đề và học hỏi lẫn nhau đó vô cùng đặc biệt, và một ý nghĩ đã tự nhiên nảy ra.

“Nếu chúng ta truyền đạt lại đúng phương pháp mà mình đã học cho người khác thì sẽ thế nào nhỉ?”

Câu hỏi đó chính là điểm khởi đầu của Woori-dongne Coding Studio.

Hiện tại, khoảng 30 nhà phát triển đang đi làm và sinh viên đại học chuyên ngành Khoa học máy tính đang đảm nhận từng lĩnh vực chuyên môn riêng, trực tiếp thiết kế và giảng dạy lộ trình học từ cơ bản đến thực chiến. Vượt xa việc truyền đạt kiến thức đơn thuần, chúng tôi mang đến một môi trường nơi bạn có thể học hỏi dưới góc nhìn của một nhà phát triển thực thụ và cùng nhau phát triển.

“Lập trình viên thực thụ phải được học từ lập trình viên thực thụ.”

Chúng tôi bao quát toàn bộ quy trình phát triển web một cách hệ thống từ đầu đến cuối, nhưng không chỉ dừng lại ở lý thuyết mà sẽ giúp bạn nâng cao kỹ năng thông qua thực hành và phản hồi tập trung vào thực tế.
Triết lý của chúng tôi là cùng trăn trở và dẫn dắt sự trưởng thành của từng học viên một.

🎯 Triết lý của chúng tôi rất rõ ràng.
"Học tập thực sự đến từ thực hành, và sự trưởng thành chỉ hoàn thiện khi chúng ta đồng hành cùng nhau."

Từ những người mới bắt đầu học lập trình, đến những sinh viên đang chuẩn bị xin việc muốn nâng cao kỹ năng thực tế, hay những thanh thiếu niên đang khám phá định hướng nghề nghiệp.
Neighborhood Coding Studio mong muốn trở thành điểm khởi đầu của tất cả mọi người và là người bạn đồng hành đáng tin cậy trên cùng một con đường.

Giờ đây, đừng lo lắng một mình nữa.
Neighborhood Coding Studio sẽ luôn đồng hành cùng sự phát triển của bạn.


Chào mừng bạn đến với Neighborhood Coding Studio!

Neighborhood Coding Studio được thành lập bởi một đội ngũ các nhà phát triển từng theo học ngành khoa học máy tính tại các trường đại học hàng đầu Bắc Mỹ như Carnegie Mellon, Đại học Washington, Đại học Toronto và Đại học Waterloo, sau đó tích lũy kinh nghiệm thực tế tại các công ty công nghệ toàn cầu như Google, Microsoft và Meta.

Mọi thứ bắt đầu từ một nhóm học tập được thành lập bởi các sinh viên khoa học máy tính trên khắp Hoa Kỳ và Canada, được tạo ra để cùng nhau phát triển bằng cách chia sẻ kiến thức, giải quyết vấn đề và học hỏi lẫn nhau.
Mặc dù chúng tôi học ở các trường khác nhau và ở các múi giờ khác nhau, nhưng trải nghiệm này ý nghĩa đến mức đã dẫn chúng tôi đến một suy nghĩ đơn giản:

“Chuyện gì sẽ xảy ra nếu chúng ta chia sẻ cách học này với những người khác?”

Ý nghĩ đó đã trở thành nền tảng của Neighborhood Coding Studio.

Ngày nay, chúng tôi là một đội ngũ gồm khoảng 30 nhà phát triển và sinh viên khoa học máy tính đang hoạt động, mỗi người chịu trách nhiệm về lĩnh vực chuyên môn của mình—thiết kế và truyền tải một chương trình giảng dạy trải dài từ kiến thức nền tảng đến phát triển thực tế.
Chúng tôi không chỉ ở đây để giảng dạy—chúng tôi ở đây để giúp bạn nhìn nhận qua lăng kính của những nhà phát triển thực thụ và cùng nhau phát triển.

“Để trở thành một nhà phát triển thực thụ, bạn phải học hỏi từ những nhà phát triển thực thụ.”

Các khóa học của chúng tôi sẽ đưa bạn đi qua toàn bộ hành trình phát triển web—từ đầu đến cuối—tập trung vào thực hành thực tế, các dự án thực tế và phản hồi thực tiễn.
Chúng tôi quan tâm sâu sắc đến sự phát triển của từng học viên và cam kết hỗ trợ con đường của bạn trên mọi bước đi.

🎯 Triết lý của chúng tôi đơn giản nhưng mạnh mẽ:
"Học thực sự đến từ hành động, và sự trưởng thành thực sự diễn ra khi đồng hành cùng nhau."

Cho dù bạn chỉ mới bắt đầu, đang chuẩn bị cho công việc đầu tiên hay đang khám phá tương lai của mình trong ngành công nghệ,
Neighborhood Coding Studio luôn ở đây để trở thành bệ phóng—và là người bạn đồng hành đáng tin cậy của bạn trên suốt hành trình.

Bạn không cần phải thực hiện điều đó một mình.
Hãy để Neighborhood Coding Studio đồng hành cùng bạn hướng tới tương lai trong ngành phát triển phần mềm.

Thêm

Chương trình giảng dạy

Tất cả

47 bài giảng ∙ (6giờ 9phút)

Tài liệu khóa học:

Tài liệu bài giảng
Ngày đăng: 
Cập nhật lần cuối: 

Đánh giá

Chưa có đủ đánh giá.
Hãy trở thành tác giả của một đánh giá giúp mọi người!

Khóa học khác của nhcodingstudio

Hãy khám phá các khóa học khác của giảng viên!

Khóa học tương tự

Khám phá các khóa học khác trong cùng lĩnh vực!

Ưu đãi có thời hạn

26 ₫

68%

2.297.274 ₫