Kiến trúc Node.js - Giới thiệu về Node.js

Kiến trúc Node.js - Giới thiệu về Node.js

Tin ngắn hàng ngày dành cho bạn
  • Chà, quả là một bước tiến mới khi Microsoft vừa thông báo cập nhật cho mô hình Magma của họ. Cho những ai chưa biết thì đây là một mô hình dành cho AI agents, được thiết kế để xử lý các tương tác phức tạp trên cả môi trường ảo và thực.

    Để làm được điều đó, Magma được trang bị khả năng hiểu biết và dự đoán hành vi như con người. Magma có thể nhìn thấy, phân tích các thành phần và dự đoán công dụng cũng như các bước tiếp theo có thể xảy ra để hoàn thành một nhiệm vụ. Mình lấy ví dụ bạn sai khiến Magma vào Youtube, tìm kiếm một kênh nào đó rồi theo dõi. Cái này hoàn toàn có thể làm được bằng một số agent đã có từ trước, nhưng bản thân Magma là một agent rồi và nó biết được nó nên làm bước nào tiếp theo thay vì chúng ta phải viết mã để chỉ bảo từng bước cụ thể. Nghe hấp dẫn nhỉ.

    Chưa hết, Magma còn có thể "nhìn" theo thời gian thực, phân tích sự việc mà nó nhìn thấy để đưa ra hành động. Tưởng tượng ứng dụng vào công nghệ Robot thì sẽ thế nào? Chúng ta không cần viết mã từng li từng tí nữa mà chỉ cần ra lệnh bằng văn bản, bằng giọng nói thôi.

    Magma hiện chưa công bố mã nguồn, nhiều thông tin cho rằng cuối tháng này phiên bản đầu tiên sẽ được phát hành. Chúng ta cùng chờ xem nó ra sao nhé!

    » Xem thêm
  • Cũng giống như 12 Days of OpenAI - một chuỗi sự kiện diễn ra trong 12 ngày liên tiếp của OpenAI, mỗi ngày họ sẽ giới thiệu một công cụ "đột phá", và cứ như thế.

    DeepSeek đã bắt "trend" ngay sau đó với chuỗi 202502 Open-Source Week diễn ra ngay trong tuần sau. Mỗi ngày họ sẽ công bố một công cụ mã nguồn mở, trái được hoàn toàn với tính "Open" của AI. Chúng ta hãy chờ xem họ mang đến những dự án thú vị nào nhé 🤓. Chắc sẽ hấp dẫn lắm đây vì ai cũng biết từ lúc ra mô hình R1, Deepseek đã chiếm trọn tin tức nổi bật trên toàn thế giới.

    » Xem thêm
  • Grok 3 beta vừa ra mắt và cho mọi người dùng thử miễn phí có giới hạn số lần trong ngày (tài khoản trả phí hình như được dùng nhiều hơn). Trong đó có 2 tính năng nổi bật là Think và DeepSearch.

    Think thì chắc ai cũng biết hoặc dùng ở một số mô hình suy luận như ở ChatGPT rồi. Còn DeepSearch thì mới hơn, gõ điều bạn muốn vào thì nó sẽ tự lên mạng tìm kiếm thông tin rồi tổng hợp lại kết quả mà nó tìm thấy được. Khá hay nhưng chắc để tham khảo hoặc muốn tổng hợp thông tin nhanh chóng thôi chứ vẫn nên tự mình tìm kiếm thông tin 😅

    » Xem thêm

Vấn đề

Series bài viết này hy vọng sẽ mang đến cho mọi người một cái nhìn tổng quan về mô hình kiến trúc của Node.js, về cách mà nó hoạt động, qua đó phần nào giúp cho bạn đọc hiểu được chương trình được thực như thế nào với Node. Bạn sẽ biết cách viết và tổ chức mã tối ưu hơn.

Dự kiến số lượng bài viết trong chủ đề này sẽ bao gồm 4 bài đi từ cơ bản đến nâng cao. Nội dung trong mỗi phần đều có liên quan đến nhau vì thế bạn không nên bỏ qua một phần nào, hãy theo dõi nội dung lần lượt theo thứ tự để nội dung được xuyên suốt.

Xem thêm các bài viết trong series này:

Ở bài viết đầu tiên, tôi sẽ nói về ngôn ngữ JavaScript cùng các khái niệm cơ bản của Node.js. Tại sao JavaScript lại liên quan đến Node.js? Hãy cùng nhau tìm hiểu nhé.

Javascript

Javascript hẳn không còn quá xa lạ với những người trong giới lập trình. Nó hiện tại đang là bá chủ trên các trình duyệt web, là ngôn ngữ được sử dụng rất nhiều để lập trình front-end. Nhờ nó mà các lập trình viên mới tạo ra được website tối ưu hóa các trải nghiệm của người dùng.

JavaScript được tạo trong mười ngày bởi Brandan Eich, một nhân viên của Netscape, vào tháng 9 năm 1995. Được đặt tên đầu tiên là Mocha, tên của nó được đổi thành Mona rồi LiveScript trước khi thật sự trở thành JavaScript nổi tiếng như bây giờ.

Trong năm 1996, JavaScript được chính thức đặt tên là ECMAScript. ECMAScript 2 phát hành năm 1998 và ECMAScript 3 tiếp tục ra mắt vào năm 1999. Nó liên tục phát triển thành JavaScript ngày nay, giờ đã hoạt động trên khắp mọi trình duyệt và trên khắp các thiết bị từ di động đến máy tính bàn.

Tính đến năng 2016 đã có hơn 92% các website đều sử dụng JavaScript và nó hiện tại cũng đứng đầu trên github về độ phổ biến của các project có sử dụng JavaScript.

Javascript trên trình duyệt & Javascript Runtime

JavaScript được sử dụng phổ biến trong lập trình website, khiến chúng trở nên linh động và có tính tương tác tốt. Do đó mã JavaScript sẽ phụ thuộc vào việc được các trình duyệt hỗ trợ thực thi và điều này được thực hiện bởi JavaScript Engine.

JavaScript Engine được sử dụng để chuyển đổi mã JavaScript thành mã máy. JavaScript Engine hoạt động như một trình thông dịch, nó bao gồm Memory Heap (lưu trữ các đối tượng như các biến, hàm) và Call Stack (để thực thi các hàm).

JavaScript Engine

Hầu hết các trình duyệt hiện đại hiện nay sử dụng Javascript Runtime bằng cách sử dụng các Javascript Engine hỗ trợ chuyển đổi mã Javascript và thực thi. Các trình duyệt khác nhau sẽ sử dụng các Javascript Engine khác nhau.

Ví dụ Chrome sử dụng Javascript V8 Engine, Mozilla FireFox sử dụng SpiderMonkey Javascript Engine, Còn Microsoft Edge phiên bản cũ trước khi chưa dùng nhân Chromium thì sử dụng Chakra Javascript Engine.

Trình duyệt cũng cung cấp Web APIs cho phép mã Javascript truy cập vào một số đối tượng như window, document mà chúng không phải là "core" của JavaScript. Hiểu đơn giản, DOM là của trình duyệt còn JavaScript thì không.

Chính vì mỗi trình duyệt sử dụng một Engine khác nhau nên chúng có thể diễn giải mã JavaScript theo cách khác nhau, điều này dẫn đến một số mã có thể mang lại những kết quả khác nhau. Đó cũng là minh chứng cho việc một trang web chạy rất tốt trên Chrome nhưng sang đến IE, Firefox... thì lại hoạt động một cách bất bình thường.

Chính vì thế, từ năm 2016 - Ecma International (hiểu nôm na là đơn vị quản lý tiêu chuẩn của ngôn ngữ Javascript) đã đặt ra cách quy tắc gọi tên các phiên bản Javascript. ES5 là phiên bản ECMAScript từ năm 2009 đến 2015, từ 2015 trở đi các phiên bản lần lượt là ES6 - 2015, ES7 - 2016... Mỗi năm hội đồng sẽ phê duyệt và phát hành các phiên bản ES. Tính đến thời điểm viết bài là 2021 đã có phiên bản ES12. Mỗi phiên bản đều có những cải tiến và những tính năng mới, tuy nhiên việc triển khai nó lại hoàn toàn phụ thuộc vào việc các đơn vị phát triển trình duyệt có hỗ trợ nó hay không.

Javascript và Node.js có liên quan gì với nhau?

JavaScript ban đầu là ngôn ngữ lập trình front-end, được biết đến như một trong những ngôn ngữ lập trình phổ biến nhất trên thế giới. Node.js được tạo ra với một nỗ lực là mang Javascript về phát triển trên môi trường máy chủ.

2009, Ryan Dahl đã quyết định sử dụng Javascript Engine nhanh nhất - V8 của Chrome, làm cho nó hoạt động mà không cần trình duyệt, đặt tiền đề cho Node.js ra đời. Mã của V8 được viết bằng C++ giúp nó có thể thực thi trực tiếp trên hệ điều hành.

Node.js sử dụng V8 Engine để diễn giải mã JavaScript thành mã máy. Vì Node.js được viết cho hệ điều hành chứ không phải trình duyệt, một số API Web cho trình duyệt như window, document không được triển khai trong Node.

Cũng cần lưu ý rằng Node.js không hỗ trợ tất cả các tính năng JavaScript (chuẩn ECMAScript) ngay lập tức mà phải thông qua các bản cập nhật. Điều đó đồng nghĩa với việc nếu muốn sử dụng tính năng của ES mới, bạn phải chờ đợi Node.js tung ra các bản cập nhật.

Tóm lại, Node.js cung cấp một môi trường chạy mã JavaScript bên ngoài trình duyệt.

Bạn đọc có thể tham khảo thêm bài viết hướng dẫn cài đặt Node.js Cài đặt node.js, chạy ứng dụng node.js đầu tiên.

Thế thì Node.js có phải là một ngôn ngữ lập trình?

Không! Node.js chỉ là một môi trường chạy mã JavaScript. Bởi vì thực tế, Node chỉ cung cấp môi trường chạy mã JavaScript thông qua V8 Engine của Chrome.

Dưới đây là một vài kết luận về Node.js:

  • Node.js không phải là một ngôn ngữ lập trình.
  • Node.js không phải là một Framework cho ứng dụng máy chủ, nó là nền tảng.
  • Node.js cung cấp môi trường chạy mã JavaScript phía máy chủ.

Node.js được cấu tạo gồm có nhiều thành phần kết nối với nhau để tạo ra một môi trường hoàn hảo. Dưới đây là sơ đồ mô tả kiển trúc node.js:

Mô hình kiến trúc

Trong đó các thành phần được mô tả như sau:

  • V8: Đây là bộ Engine V8 của Chrome, bao gồm Memory Heap, Call Stack, Garbage Collector và chuyển đổi mã JavaScript thành mã máy của hệ điều hành.

  • Libuv: Là một thư viện quan trọng, bao gồm Thread Pool và Event Loop, Event Queue. Nó là thư viện C đa nền tảng tập trung vào các tác vụ I/O không đồng bộ.

  • Node.js Standard Library: Bao gồm các thư viện, các chức năng liên quan đến hệ điều hành cho Timers như setTimeout , File system như fs, Network Calls như http.

  • llhttp: Phân tích request/response HTTP (trước đây là http-parse).

  • c-ares: Thư viện C cho DNS không đồng bộ được sử dụng trong dns module.

  • open-ssl: Các chức năng mã hóa được sử dụng trong TLS (SSL), crypto module.

  • zlib: Nén và giải nén bằng cách chạy đồng bộ, không đồng bộ và streaming.

  • Node.js API: Cung cấp JavaScript API được sử dụng bởi các ứng dụng.

Kết luận

Nội dung trên trong bài viết cung cấp khái niệm cơ bản về JavaScript, JavaScript Runtime, JavaScript Engine, về việc tại sao lại có những trang web tương thích rất tốt với trình duyệt này nhưng lại "tệ hại" trên trình duyệt khác, về khái niệm của Node.js và cả thành phần trong mô hình kiến trúc của Node.

Về cơ bản, Node.js được cấu tạo từ nhiều phần nhỏ. Vậy thì cách mà các thành phần đó hoạt động, liên kết với nhau như thế nào? Hãy xem tiếp Phần 2 của loạt series Kiến trúc Node.js trên 2COFFEE.DEV.

Cao cấp
Hello

5 bài học sâu sắc

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Mỗi sản phẩm đi kèm với những câu chuyện. Thành công của người khác là nguồn cảm hứng cho nhiều người theo sau. 5 bài học rút ra được đã thay đổi con người tôi mãi mãi. Còn bạn? Hãy bấm vào ngay!

Xem tất cả

Đăng ký nhận thông báo bài viết mới

hoặc
* Bản tin tổng hợp được gửi mỗi 1-2 tuần, huỷ bất cứ lúc nào.

Bình luận (0)

Nội dung bình luận...