Mục lục

Không có mục lục

5 thiết lập máy chủ phổ biến cho ứng dụng web của bạn

Ngày đăng: 10 tháng 4 năm 2023

Ubuntu

Giới thiệu

Khi quyết định sử dụng kiến trúc máy chủ nào cho môi trường của bạn, có nhiều yếu tố cần xem xét, chẳng hạn như hiệu suất, khả năng mở rộng, tính khả dụng, độ tin cậy, chi phí và quản lý.

Trong hướng dẫn này, bạn sẽ tìm hiểu về các thiết lập máy chủ thường được sử dụng, với một mô tả ngắn về từng thiết lập, bao gồm ưu và nhược điểm. Hãy nhớ rằng tất cả các khái niệm được đề cập ở đây có thể được sử dụng theo nhiều cách kết hợp với nhau và mọi môi trường đều có các yêu cầu khác nhau, vì vậy không có cấu hình chính xác duy nhất.

Thiết lập mọi thứ trên một máy chủ

Thiết lập một máy chủ là khi toàn bộ môi trường nằm trên một máy chủ. Đối với một ứng dụng web điển hình, điều này bao gồm máy chủ web, máy chủ ứng dụng và máy chủ cơ sở dữ liệu. Một biến thể phổ biến của thiết lập này là LAMP stack, viết tắt của Linux, Apache, MySQL và PHP, trên một máy chủ. Một trường hợp sử dụng ví dụ cho điều này là khi bạn muốn thiết lập một ứng dụng nhanh chóng. Một thiết lập cơ bản như thế này có thể được sử dụng để thử nghiệm một ý tưởng hoặc thiết lập và chạy một trang web đơn giản.

Thật không may, điều này cung cấp rất ít khả năng mở rộng và cách ly thành phần. Ngoài ra, ứng dụng và cơ sở dữ liệu tranh giành các tài nguyên máy chủ giống nhau như CPU, Bộ nhớ, I/O, v.v. Do đó, điều này có thể gây ra hiệu suất kém và gây khó khăn cho việc xác định nguyên nhân gốc rễ. Sử dụng một máy chủ cũng không dễ dàng mở rộng theo chiều ngang. Bạn có thể tìm hiểu thêm về chia tỷ lệ theo chiều ngang trong hướng dẫn của chúng tôi về Hiểu cơ sở dữ liệu Sharding. Tìm hiểu thêm về LAMP stack cũng như trong hướng dẫn của chúng tôi về Cách cài đặt LAMP trên Ubuntu 22.04. Sau đây là một đại diện trực quan của việc sử dụng một máy chủ duy nhất:

description image

Thiết lập một máy chủ cơ sở dữ liệu riêng biệt

Hệ thống quản lý cơ sở dữ liệu (DBMS) có thể được tách biệt khỏi phần còn lại của môi trường để loại bỏ sự tranh chấp tài nguyên giữa ứng dụng và cơ sở dữ liệu, đồng thời để tăng cường bảo mật bằng cách xóa cơ sở dữ liệu khỏi DMZ hoặc internet công cộng.

Một trường hợp sử dụng ví dụ là điều này có thể giúp ứng dụng của bạn được thiết lập nhanh chóng và ngăn không cho ứng dụng và cơ sở dữ liệu tranh giành cùng một tài nguyên hệ thống. Bạn cũng có thể chia tỷ lệ theo chiều dọc cho từng tầng ứng dụng và cơ sở dữ liệu riêng biệt. Điều này có thể thực hiện được bằng cách thêm nhiều tài nguyên hơn vào bất kỳ máy chủ nào cần tăng dung lượng. Tùy thuộc vào thiết lập của bạn, điều này cũng có thể tăng cường bảo mật bằng cách xóa cơ sở dữ liệu của bạn khỏi DMZ.

Thiết lập này phức tạp hơn một chút so với một máy chủ. Các vấn đề về hiệu suất, chẳng hạn như độ trễ cao, có thể phát sinh nếu kết nối mạng giữa hai máy chủ cách xa nhau về mặt địa lý. Cũng có thể có vấn đề về hiệu suất nếu băng thông quá thấp so với lượng dữ liệu được truyền. Bạn có thể đọc thêm về Cách thiết lập cơ sở dữ liệu từ xa để tối ưu hóa hiệu suất trang web với MySQL. Sau đây là một minh họa trực quan về việc sử dụng một máy chủ cơ sở dữ liệu riêng biệt:

description image

Thiết lập cân bằng tải (Proxy ngược)

Bộ cân bằng tải (Load balancers) có thể được thêm vào môi trường máy chủ để cải thiện hiệu suất và độ tin cậy bằng cách phân phối khối lượng công việc trên nhiều máy chủ. Nếu một trong các máy chủ cân bằng tải bị lỗi, các máy chủ khác sẽ xử lý lưu lượng truy cập đến cho đến khi máy chủ bị lỗi hoạt động bình thường trở lại. Nó cũng có thể được sử dụng để phục vụ nhiều ứng dụng thông qua cùng một miền và cổng, bằng cách sử dụng proxy ngược lớp ứng dụng lớp 7. Một số loại phần mềm có khả năng cân bằng tải proxy ngược là HAProxy, Nginx và Varnish.

Một trường hợp sử dụng ví dụ là trong một môi trường yêu cầu mở rộng quy mô bằng cách thêm nhiều máy chủ hơn, còn được gọi là thay đổi quy mô theo chiều ngang (horizontal scaling). Khi bạn thiết lập bộ cân bằng tải, bộ cân bằng tải sẽ cho phép dung lượng môi trường có thể được điều chỉnh theo quy mô bằng cách thêm nhiều máy chủ hơn vào dung lượng đó. Nó cũng có thể bảo vệ chống lại các cuộc tấn công DDOS bằng cách giới hạn các kết nối máy khách ở một số lượng và tần suất hợp lý.

Việc thiết lập bộ cân bằng tải có thể gây ra tắc nghẽn hiệu suất nếu bộ cân bằng tải không có đủ tài nguyên hoặc nếu bộ cân bằng tải được định cấu hình kém. Nó cũng có thể đưa ra những vấn đề phức tạp cần xem xét thêm, chẳng hạn như nơi thực hiện chấm dứt SSL và cách xử lý các ứng dụng yêu cầu các phiên cố định. Ngoài ra, bộ cân bằng tải là một điểm lỗi duy nhất, điều này có nghĩa là nếu nó gặp sự cố, toàn bộ dịch vụ của bạn có thể ngừng hoạt động. Thiết lập tính sẵn sàng cao (high availability - HA) là cơ sở hạ tầng không có một điểm lỗi nào. Để tìm hiểu cách triển khai thiết lập HA, bạn có thể đọc tài liệu của chúng tôi về Reserved IPs. Bạn cũng có thể đọc thêm trong hướng dẫn của chúng tôi về Giới thiệu về HAProxy và Cân bằng tải. Sau đây là phần trình bày trực quan về cách thiết lập bộ cân bằng tải:

description image

Thiết lập Trình tăng tốc HTTP (Proxy đảo ngược bộ đệm)

Có thể sử dụng trình tăng tốc HTTP hoặc proxy ngược HTTP lưu vào bộ đệm ẩn để giảm thời gian cần thiết để cung cấp nội dung cho người dùng thông qua nhiều kỹ thuật khác nhau. Kỹ thuật chính được sử dụng với trình tăng tốc HTTP là lưu các phản hồi từ máy chủ web hoặc ứng dụng vào bộ nhớ đệm, vì vậy các yêu cầu trong tương lai cho cùng một nội dung có thể được phục vụ nhanh chóng, với ít tương tác không cần thiết hơn với máy chủ web hoặc ứng dụng. Một vài ví dụ về phần mềm có khả năng tăng tốc HTTP là Varnish, Squid, Nginx. Một trường hợp sử dụng ví dụ là trong môi trường có các ứng dụng web động chứa nhiều nội dung hoặc nhiều tệp thường được truy cập.

Tăng tốc HTTP có thể tăng hiệu suất trang web bằng cách giảm tải CPU trên máy chủ web, thông qua bộ nhớ đệm và nén, do đó tăng dung lượng người dùng. Nó cũng có thể được sử dụng làm cân bằng tải proxy ngược và một số phần mềm bộ nhớ đệm thậm chí có thể bảo vệ chống lại các cuộc tấn công DDOS. Thật không may, nó có thể làm giảm hiệu suất nếu tỷ lệ truy cập vào bộ nhớ cache thấp và yêu cầu điều chỉnh để đạt được hiệu suất tốt nhất từ nó. Sau đây là phần trình bày trực quan về việc thiết lập Trình tăng tốc HTTP:

description image

Thiết lập sao chép cơ sở dữ liệu bản sao chính

Một cách để cải thiện hiệu suất cho hệ thống cơ sở dữ liệu thực hiện nhiều lần đọc so với ghi, chẳng hạn như CMS, là sử dụng sao chép cơ sở dữ liệu bản sao chính. Bản sao yêu cầu một node chính và một hoặc nhiều node bản sao. Trong thiết lập này, tất cả các bản cập nhật được gửi đến node chính và các lần đọc có thể được phân phối trên tất cả các node. Một trường hợp sử dụng ví dụ là tăng hiệu suất đọc của tầng cơ sở dữ liệu của một ứng dụng. Việc thiết lập bản sao cơ sở dữ liệu bản sao chính giúp cải thiện hiệu suất đọc cơ sở dữ liệu bằng cách phân bổ số lần đọc trên các bản sao và cải thiện hiệu suất ghi bằng cách sử dụng riêng cho các bản cập nhật mà không mất thời gian cho việc phục vụ các yêu cầu đọc.

Một số nhược điểm đối với sao chép cơ sở dữ liệu bản sao chính là ứng dụng truy cập cơ sở dữ liệu phải có cơ chế xác định node cơ sở dữ liệu nào sẽ gửi yêu cầu cập nhật và đọc tới. Ngoài ra, nếu lỗi chính, không thể thực hiện cập nhật trên cơ sở dữ liệu cho đến khi sự cố được khắc phục. Nó cũng không có tính năng chuyển đổi dự phòng tích hợp trong trường hợp node chính bị lỗi. Sau đây là phần trình bày trực quan về thiết lập sao chép bản sao chính, với một node bản sao duy nhất:

description image

Kết hợp các khái niệm

Có thể cân bằng tải cho các máy chủ bộ nhớ đệm, ngoài các máy chủ ứng dụng và sử dụng sao chép cơ sở dữ liệu trong một môi trường duy nhất. Mục đích của việc kết hợp các kỹ thuật này là để gặt hái những lợi ích của từng kỹ thuật mà không gây ra quá nhiều vấn đề hoặc sự phức tạp. Dưới đây là một sơ đồ ví dụ về loại môi trường máy chủ được thiết lập:

description image

Ví dụ: hãy tưởng tượng một kịch bản trong đó bộ cân bằng tải được định cấu hình để nhận dạng các yêu cầu tĩnh (như hình ảnh, CSS, JavaScript, v.v.) và gửi các yêu cầu đó trực tiếp đến máy chủ bộ nhớ đệm, đồng thời gửi các yêu cầu khác đến máy chủ ứng dụng.

Dưới đây là bảng phân tích quy trình khi người dùng gửi yêu cầu về nội dung động:

  1. Người dùng yêu cầu nội dung động từ http://example.com/ (bộ cân bằng tải)
  2. Bộ cân bằng tải gửi yêu cầu đến phụ trợ ứng dụng
  3. Ứng dụng phụ trợ đọc từ cơ sở dữ liệu và trả lại nội dung được yêu cầu cho bộ cân bằng tải
  4. Bộ cân bằng tải trả về dữ liệu được yêu cầu cho người dùng

Khi người dùng yêu cầu nội dung tĩnh, quy trình sau sẽ được áp dụng:

  1. Bộ cân bằng tải kiểm tra cache-backend để xác nhận xem nội dung được yêu cầu có được lưu vào bộ đệm (cache-hit) hay không (cache-miss)
  2. Nếu nội dung bị truy cập vào bộ đệm, điều này có nghĩa là nó sẽ trả lại nội dung được yêu cầu cho bộ cân bằng tải và chuyển đến bước cuối cùng trong quy trình và trả lại dữ liệu cho người dùng. Nếu nội dung bị lỗi bộ đệm, máy chủ bộ đệm sẽ chuyển tiếp yêu cầu đến phụ trợ ứng dụng thông qua bộ cân bằng tải
  3. Bộ cân bằng tải chuyển tiếp yêu cầu đến phụ trợ ứng dụng
  4. Ứng dụng phụ trợ đọc từ cơ sở dữ liệu và trả lại nội dung được yêu cầu cho bộ cân bằng tải
  5. Bộ cân bằng tải chuyển tiếp phản hồi tới cache-backend
  6. Cache-backend lưu trữ nội dung và trả về bộ cân bằng tải
  7. Bộ cân bằng tải trả về dữ liệu được yêu cầu cho người dùng

Môi trường này vẫn có hai điểm lỗi duy nhất, bộ cân bằng tải và máy chủ cơ sở dữ liệu chính, nhưng nó cung cấp tất cả các lợi ích về hiệu suất và độ tin cậy khác đã được mô tả trong các phần trước.

Kết luận

Bây giờ bạn đã quen thuộc với một số thiết lập máy chủ cơ bản, bạn nên biết rõ về loại thiết lập nào bạn sẽ sử dụng cho (các) ứng dụng của riêng mình. Nếu bạn đang làm việc để cải thiện môi trường của chính mình, hãy nhớ rằng một quy trình lặp đi lặp lại là tốt nhất để tránh đưa ra quá nhiều điều phức tạp một cách quá nhanh chóng.

0 câu trả lời