NỘI DUNG BÀI VIẾT
Bài viết này là một phần của series “Hướng dẫn lập trình web cho người mới bắt đầu”. Bạn có thể xem Phần 1: Frontend | Hướng dẫn lập trình web cho người mới bắt đầu, Phần 3: Nền tảng và công cụ | Hướng dẫn lập trình web cho người mới bắt đầu
Hôm nay, chúng ta tiếp tục phần giới thiệu về lập trình web. Ở bài viết trước, chúng ta đã bắt đầu với việc khám phá Frontend – phát triển giao diện người dùng và hôm nay chúng ta sẽ nói về Backend.
Backend hay còn gọi là phát triển phía máy chủ, đề cập đến việc phát triển các quy trình xảy ra trên máy chủ và thường không hiển thị cho người dùng. Giao diện người dùng web có thể gửi các request tới Backend để yêu cầu hiển thị HTML, lưu thông tin input từ người dùng vào cơ sở dữ liệu, xác thực người dùng, gửi email hoặc xử lý yêu cầu thanh toán,…
Mặc dù phần này của ứng dụng là phần ẩn đi đối với người dùng, nhưng nó không kém phần quan trọng. Đây là trái tim và bộ não trong ứng dụng của bạn.
Các đường màu vàng hiển thị những điều cơ bản bạn cần học để lập trình web, màu cam biểu thị các chủ đề nâng cao hơn mà bạn có thể để lại sau này và màu xám là các chủ đề thích hợp có thể hữu ích cho các dự án đặc biệt.
Ngôn ngữ
So với phát triển giao diện người dùng, sự lựa chọn ngôn ngữ lập trình phát triển Backend rộng hơn nhiều và bạn có thể tự do lựa chọn một giải pháp tùy thuộc vào trường hợp sử dụng và môi trường của mình.
Có nhiều cách để phân loại ngôn ngữ lập trình và mình sẽ nhóm chúng theo ngôn ngữ kịch bản (scripting languages) và ngôn ngữ biên dịch (compiled languages). Phải thừa nhận rằng điều này không hoàn toàn chính xác.
Một số ngôn ngữ kịch bản thực sự được biên dịch nhanh chóng và một số ngôn ngữ biên dịch có thể có thông dịch. Tuy nhiên, sự phân chia này đóng vai trò là điểm khởi đầu thuận tiện cho việc phân tích.
Ngôn ngữ kịch bản
Các ngôn ngữ không yêu cầu biên dịch rõ ràng trước khi thực thi được gọi là ngôn ngữ kịch bản hoặc ngôn ngữ thông dịch. Trái ngược với các ngôn ngữ biên dịch, chúng không tạo ra các tệp nhị phân. Đôi khi, các ngôn ngữ kịch bản dễ bắt đầu hơn, vì bạn không phải viết mã theo cách nghiêm ngặt mà trình biên dịch yêu cầu.
Vì vậy, các lỗi có thể được phát hiện trong quá trình biên dịch sẽ chỉ trở nên rõ ràng trong thời gian chạy. Một số ngôn ngữ kịch bản phổ biến trong lập trình web Backend:
JavaScript (Node.js)
Node.js là một hệ thống phần mềm được thiết kế để viết các ứng dụng phía máy chủ web. Nó hỗ trợ các tính năng của JavaScript và cung cấp một tập các API để đáp ứng các trường hợp sử dụng, ví dụ như làm việc với file,…
Học Node.js là một lựa chọn tuyệt vời vì chỉ cần học một ngôn ngữ duy nhất, bạn sẽ có thể làm việc được với cả Frontend và Backend. Một số Framework Node.js hay dùng là Express, koa hay LoopBack.
Python
Python là một ngôn ngữ lập trình có cú pháp đơn giản và cấu trúc rõ ràng nên nó khá dễ học cho người mới bắt đầu. Python được sử dụng rộng rãi để phát triển các ứng dụng nhưng cũng được dùng để nghiên cứu khoa học và làm việc với trí tuệ nhân tạo.
Hiện tại có hai phiên bản chính đang được sử dụng: Python 2 và Python 3. 2 Framework nổi tiếng là Django và Flask.
PHP
PHP – một ngôn ngữ lập trình phổ biến khác cho các ứng dụng web. Bản thân ngôn ngữ này rất dễ đối với người mới bắt đầu nhưng cũng cung cấp nhiều tính năng xịn xò.
Một số Framework phổ biến nhất được tạo trên PHP là WordPress và Drupal, trước đây được sử dụng nhiều nhất trên thế giới. Còn bây giờ, các framework đáng chú ý hơn là Laravel, Symfony và CodeIgniter.
Ruby
Ruby – một ngôn ngữ kịch bản được thiết kế để đọc và viết đơn giản và tự nhiên do người Nhật phát triển. Framework phổ biến nhất cho Ruby là Ruby on Rails. Nếu bạn muốn làm việc với người Nhật, hãy học Ruby để có ngay 1 slot trong công ty.
Ngôn ngữ biên dịch
Mã được viết bằng ngôn ngữ biên dịch đầu tiên cần được biên dịch thành tệp nhị phân trước khi nó có thể được thực thi. Trình biên dịch có thể phân tích mã nếu đoạn mã của bạn đang có vấn đề. Một số trình biên dịch cũng có thể tối ưu hóa mã bytecode thu được cho một nền tảng cụ thể để đảm bảo hiệu suất vượt trội.
Mặc dù các ngôn ngữ biên dịch có thể mất nhiều thời gian để học và khó hơn so với các ngôn ngữ kịch bản, nhưng chúng thường được ưu tiên hơn trong các dự án lớn do cú pháp rõ ràng và an toàn hơn.
Có rất nhiều ngôn ngữ để bạn lựa chọn với lập trình web Backend:
Java
Java là một ngôn ngữ lập trình hướng đối tượng cấp cao được phát triển bởi Sun Microsystems và hiện đang được Oracle duy trì. Java được thiết kế để chạy trên mọi nền tảng chỉ với 1 code base: mã nguồn được biên dịch sang mã bytecode của Java có thể chạy trên Máy ảo Java (JVM) cho bất kỳ nền tảng nào.
Đây là một ngôn ngữ hoàn thiện cao với nhiều Framework khác nhau để phát triển các ứng dụng web, phổ biến nhất là Spring. Ngoài ra, Java có thể được sử dụng để phát triển các ứng dụng Android.
Mặc dù có xu hướng coi Java là lỗi thời và kém hơn so với các ngôn ngữ JVM khác, chẳng hạn như Kotlin nhưng nó vẫn là một trong những ngôn ngữ lập trình phổ biến nhất trong lĩnh vực doanh nghiệp, đặc biệt là về tài chính, tiền tệ,…
C#
C# là một ngôn ngữ lập trình hướng đối tượng cấp cao khác được phát triển bởi Microsoft. Ban đầu được phát triển để sử dụng trên Windows, giờ đây nó có thể được sử dụng để xây dựng các ứng dụng đa nền tảng .NET Core.
Một trong những Framework phổ biến nhất để xây dựng các ứng dụng web bằng C# là ASP.NET Core. C# phổ biến trong số các công ty áp dụng công nghệ của Microsoft.
Go
Go là một ngôn ngữ tương đối mới do Google phát triển và nhanh chóng trở nên phổ biến. Nó được thiết kế để ít dài dòng hơn Java hoặc C# và dựa trên những yếu tố nguyên thuỷ đơn giản nhất, loại bỏ một số cấu trúc phức tạp có trong các ngôn ngữ khác.
Go cực kỳ nhanh, tốn ít bộ nhớ, vì vậy, nó là ứng cử viên sáng giá cho các dự án có tầm quan trọng về tốc độ và mức tiêu thụ tài nguyên thấp. Hệ sinh thái thư viện và công cụ xung quanh Go vẫn đang phát triển và mình đang thấy rất nhiều dự án thú vị xuất hiện trong cộng đồng. Go đã trở nên phổ biến đáng kể trong phát triển blockchain.
Kotlin
Kotlin là một ngôn ngữ được phát triển bởi JetBrains và là đối thủ cạnh tranh của Java. Kotlin chạy trên máy ảo Java, nhưng cũng có thể được biên dịch sang JavaScript. Nó được thiết kế để ít dài dòng hơn Java và cung cấp các biện pháp an toàn bổ sung để tránh các lỗi phổ biến.
Giống như Java, nó cũng có thể được sử dụng để phát triển các ứng dụng Android. Kotlin đang dần dần thay thế Java trong các ứng dụng Android bởi hầu hết hiện nay, không còn các dự án di động mới nào sử dụng Java nữa.
Scala
Scala là một ngôn ngữ dựa trên JVM và là ngôn ngữ thay thế cho Java. Nó có cú pháp ngắn gọn hơn, bổ sung các tính năng an toàn và sử dụng lập trình hướng chức năng.
Erlang
Erlang – một ngôn ngữ hướng chức năng có tính khả dụng cao được thiết kế để lập trình đồng thời và và tất cả việc thực thi diễn ra trong ngữ cảnh của các luồng. Erlang phổ biến trong các ứng dụng mà hiệu suất cao và khả năng mở rộng là rất quan trọng. Các trường hợp sử dụng phổ biến bao gồm xử lý hình ảnh và tín hiệu hoặc phân tích một lượng lớn dữ liệu.
Haskell
Haskell – một ngôn ngữ lập trình hướng chức năng khác được đánh giá cao nhờ tạo ra mã nguồn rõ ràng và đáng tin cậy. Vì là ngôn ngữ hướng chức năng nên nó cũng khả năng mở rộng quy mô hiệu quả và mang lại hiệu suất tốt.
Cơ sở dữ liệu
Một khả năng quan trọng của hầu hết các ứng dụng là lưu trữ dữ liệu của người dùng. Nó thường được thực hiện bằng cách sử dụng phần mềm đặc biệt được gọi là hệ thống quản lý cơ sở dữ liệu (DBMS). Một DBMS cung cấp quyền truy cập vào các kho dữ liệu cơ bản, cho phép các ứng dụng lưu trữ, truy xuất và cập nhật dữ liệu.
Có nhiều loại cơ sở dữ liệu khác nhau được tối ưu hóa cho các hình dạng và khối lượng dữ liệu khác nhau. Trong bài viết hướng dẫn lập trình web này, chúng ta sẽ tìm hiểu về 2 loại phổ biến nhất: Relational (quan hệ) và Non-relational (phi quan hệ).
Cơ sở dữ liệu quan hệ
Cơ sở dữ liệu quan hệ lưu trữ dữ liệu trong các bảng, trong đó các hàng biểu thị các dữ liệu và cột biểu thị các loại thuộc tính. Các hàng trong các bảng khác nhau có thể được liên kết bằng cách sử dụng khóa ngoại để biểu diễn mối quan hệ.
Ví dụ: nếu bạn đang xây dựng một cửa hàng trực tuyến, bạn có thể có một bảng để lưu trữ các đơn đặt hàng với các cột như “số đơn đặt hàng”, “tên khách hàng” và “địa chỉ giao hàng” trong đó mỗi hàng đại diện cho một đơn đặt hàng riêng biệt. Thông tin về các mặt hàng đã đặt hàng sẽ được lưu trữ trong một bảng khác được gọi là “các mặt hàng đặt hàng”, với các tham chiếu đến bảng đơn đặt hàng.
Hầu hết các cơ sở dữ liệu quan hệ sử dụng ngôn ngữ được gọi là Ngôn ngữ truy vấn có cấu trúc (SQL) hoặc phương ngữ của nó để truy vấn hoặc sửa đổi dữ liệu. Do đó, chúng thường được gọi là cơ sở dữ liệu SQL.
Cơ sở dữ liệu quan hệ phổ biến là:
Oracle
Cơ sở dữ liệu Oracle là một cơ sở dữ liệu được phát triển bởi Oracle. Do khả năng mở rộng cao và bộ tính năng mạnh mẽ, nó thường được các doanh nghiệp lớn sử dụng. Nó ít được sử dụng cho các dự án vừa và nhỏ do chi phí giấy phép cao.
MySQL
MySQL – một cơ sở dữ liệu mã nguồn mở miễn phí được phát triển bởi một công ty Thụy Điển MySQL AB và hiện thuộc sở hữu của Oracle. MySQL có thể sử dụng các công cụ lưu trữ khác nhau cho mỗi bảng để lưu trữ và sử dụng dữ liệu khác nhau.
MySQL được sử dụng cho nhiều trường hợp, tuy nhiên, nó rất phổ biến cho các ứng dụng web, đặc biệt là trong cái gọi là LAMP (Linux, Apache, MySQL, PHP). Nó cũng cung cấp một số phiên bản trả phí cho người dùng quy mô lớn.
SQL Server
SQL Server còn được gọi là MSSQL, là một cơ sở dữ liệu được duy trì bởi Microsoft. Nó có một số phiên bản khác nhau để xử lý các khối lượng công việc và khối lượng dữ liệu khác nhau. SQL Server là một đối thủ cạnh tranh lớn của Oracle và được nhiều người dùng Microsoft ưa chuộng.
PostgreSQL
PostgreSQL – là một cơ sở dữ liệu mã nguồn mở miễn phí được phát triển bởi một đội ngũ tình nguyện viên trên toàn thế giới. Nó cung cấp một tập hợp các tính năng phong phú và có khả năng xử lý khối lượng công việc lớn.
Cơ sở dữ liệu phi quan hệ
Cơ sở dữ liệu phi quan hệ lưu trữ dữ liệu trong các mô hình không phải là bảng. Có nhiều mô hình khác nhau mà bạn có thể chọn tùy thuộc vào trường hợp sử dụng của mình, chẳng hạn như lưu trữ các cặp khóa-giá trị, tài liệu, đồ thị hoặc chuỗi thời gian.
Mặc dù cơ sở dữ liệu phi quan hệ đã xuất hiện được một thời gian, nhưng gần đây chúng mới được sử dụng phổ biến, rộng rãi do thiết kế đơn giản hơn và mở rộng quy mô dễ dàng hơn.
Cơ sở dữ liệu phi quan hệ được gọi là cơ sở dữ liệu NoSQL vì hầu hết chúng sử dụng ngôn ngữ truy vấn của riêng chúng thay vì SQL.
3 cơ sở dữ liệu này thường xuyên được sử dụng trong lập trình web:
MongoDB
MongoDB là một cơ sở dữ liệu tài liệu, mã nguồn mở, miễn phí lưu trữ các đối tượng giống JSON. Bạn có thể lưu trữ và truy xuất các đối tượng này và ánh xạ chúng tới các đối tượng trong ứng dụng của mình.
Nó cũng có các khả năng truy vấn và các phép toán tập hợp thông thường. MongoDB là một ứng cử viên sáng giá cho các ứng dụng mà tính nhất quán của dữ liệu không phải là mối quan tâm chính.
Redis
Redis là một cơ sở dữ liệu khóa-giá trị trong bộ nhớ, thường được sử dụng để lưu trữ tạm thời dữ liệu được lưu trong bộ nhớ cache và chuyển các tin nhắn, thông báo.
Vì dữ liệu như vậy không nhất thiết phải được duy trì, nên việc lưu dữ liệu vào đĩa có thể bị vô hiệu hóa hoặc bị trì hoãn để tăng hiệu suất. Redis có thể lưu trữ các loại giá trị khác nhau, chẳng hạn như chuỗi, số, list, map, object,…
Elastic Search
Elastic Search là một công cụ phân tích và tìm kiếm văn bản mã nguồn mở. Nó cho phép bạn lưu trữ các tài liệu văn bản và tạo ra một chỉ mục văn bản có thể tìm kiếm được. Elastic Search được sử dụng để phân tích nhật ký (đặc biệt là một phần của ngăn xếp ELK) và tìm kiếm tài liệu văn bản miễn phí.
Elastic Search thường được ứng dụng trong các ứng dụng đòi hỏi tìm kiếm nhiều như thương mại điện tử, tra cứu thông tin,…
Trung chuyển tin nhắn
Đôi khi các thành phần phía máy chủ cần kích hoạt các công việc cần được thực thi ở chế độ nền. Ví dụ: yêu cầu báo cáo kinh doanh có thể kích hoạt một quy trình kéo dài sẽ tạo báo cáo và gửi báo cáo qua e-mail cho người dùng mà người dùng không cần phải đợi.
Để làm điều đó, chúng ta cần có thể gửi tin nhắn đến một thành phần khác và đảm bảo rằng nó được xử lý thành công. Nếu công việc không thành công, nó cần được khởi động lại.
Phần mềm cung cấp chức năng như vậy được gọi là trình trung chuyển tin nhắn (Messages Brokers). Hiểu nôm na nó là một chương trình cho phép nhận “Message” từ hệ thống gửi, sau đó gửi đến một hệ thống nhận.
2 nhà trung chuyển tin nhắn phổ biến nhất là:
RabbitMQ
RabbitMQ là một nhà trung chuyển tin nhắn truyền thống hỗ trợ các mô hình gửi tin nhắn và quy tắc định tuyến khác nhau. Nó đảm bảo rằng thông điệp sẽ được chuyển đến và xử lý bởi người dùng. Tin nhắn gửi không thành công có thể được lưu trữ trong hàng đợi.
RabbitMQ hoạt động thông qua giao thức AMPQ tiêu chuẩn cũng được hỗ trợ bởi các nhà trung chuyển tin nhắn và thư viện khác.
Apache Kafka
Apache Kafka là một công cụ xử lý luồng, cũng có thể được sử dụng như một nhà trung chuyển tin nhắn. Ngoài việc cung cấp hầu hết các tính năng trung chuyển tin nhắn tiêu chuẩn, nó còn cung cấp các tính năng nâng cao, chẳng hạn như có thể xử lý lại các tin nhắn từ lịch sử. Nó cũng cung cấp hiệu suất cao hơn cho phép xử lý khối lượng lớn tin nhắn.
Kết luận
Nếu bạn đã đọc xong 2 phần Frontend và Backend của series “Hướng dẫn lập trình web cho người mới bắt đầu”, thì bạn hẳn đã có ý tưởng về các công nghệ được sử dụng cho cả phát triển phía máy chủ và giao diện người dùng rồi phải không? Mình khuyến khích bạn theo dõi các liên kết giữa chúng và thực hiện một số nghiên cứu và bạn muốn chuyên về lĩnh vực nào trước khi bạn quyết định học nó.
Trong phần tiếp theo, chúng ta sẽ bàn bạc về công cụ không chỉ riêng lập trình web mà mọi lập trình viên nên biết.
Các bạn có thể tham khảo các bài viết hay về JavaScript tại đây.
Hãy tham gia nhóm Học lập trình để thảo luận thêm về các vấn đề cùng quan tâm.
TỔNG HỢP TÀI LIỆU HỌC LẬP TRÌNH CƠ BẢN CHO NGƯỜI MỚI BẮT ĐẦU
KHOÁ HỌC BOOTCAMP JAVA/PHP/.NET TRỞ THÀNH LẬP TRÌNH VIÊN TRONG 5-6 THÁNG