/ / Làm thế nào để xếp hạng các ứng dụng giới hạn lượt truy cập

Làm thế nào để xếp hạng các ứng dụng giới hạn lượt truy cập

Một trong những yếu tố bạn có thể muốn xem xét khi xây dựng ứng dụng của mình là lượng truy cập bạn mong đợi từ người dùng. Số lượng lưu lượng truy cập có thể quyết định nhiều yếu tố hơn có thể bao gồm phân bổ tài nguyên, đặc biệt nếu bạn đang lưu trữ ứng dụng của mình trên một nhà cung cấp dịch vụ đám mây.


Giới hạn tốc độ là một trong những kỹ thuật bạn có thể sử dụng để kiểm soát lưu lượng truy cập trên ứng dụng hoặc mạng của mình.


Giới hạn tỷ giá là gì?

Giới hạn tốc độ là một kỹ thuật hạn chế truy cập phổ biến để hạn chế lưu lượng mạng, chủ yếu trong các khung thời gian được suy đoán hoặc khi người dùng đã thực hiện một số yêu cầu.

Giới hạn tỷ lệ là phổ biến để giảm các cuộc tấn công mạng như bạo lực và DDoS (Từ chối dịch vụ phân tán), hạn chế việc quét web, yêu cầu API và các tương tác không thường xuyên khác của người dùng như tự động hóa bot và căng thẳng máy chủ.

Go cung cấp hỗ trợ hạng nhất cho các ứng dụng giới hạn tỷ lệ trong tỷ lệ gói cung cấp bộ giới hạn tốc độ và tương tác với thời gian bưu kiện.

tổng quan về gói giá

Các tỷ lệ gói là một phần của dự án Go, nhưng gói này không có sẵn trong thư viện chuẩn. Bạn sẽ cần cài đặt gói với lấy yêu cầu.

Chạy lệnh này trong phần cuối của thư mục làm việc của bạn để thêm gói vào phần phụ thuộc dự án của bạn.

go get "golang.org/x/time/rate"

Nhập các gói này vào tệp Go của bạn cho hướng dẫn này.

import (
"encoding/json"
"golang.org/x/time/rate"
"log"
"net/http"
)

Các json gói là để mã hóa một cấu trúc dưới dạng JSON cho máy khách. Bạn sẽ sử dụng khúc gỗ gói đến khúc gỗ lỗi đối với bảng điều khiển và http gói để xây dựng điểm cuối và phần mềm trung gian và khởi động máy chủ.

Xây dựng một API đơn giản với một điểm cuối

Thông thường, bạn sẽ viết một phần mềm trung gian cho các chức năng xử lý mà bạn muốn xếp hạng giới hạn. Mỗi lần người dùng gửi yêu cầu, phần mềm trung gian sẽ xác nhận trạng thái yêu cầu trước khi chuyển tiếp quyền truy cập vào chức năng xử lý, tùy từng trường hợp.

Đây là mô hình cấu trúc với các trường chuỗi bạn sẽ mã hóa cho máy khách.

type Message struct {
Response string `json:"response"`
Description string `json:"description"`
}

Hàm xử lý sẽ đặt loại nội dung thành JSON, viết mã trạng thái thành công và trả về một cá thể cấu trúc được mã hóa cho máy khách.

func endpointExample(writer http.ResponseWriter, request *http.Request) {
writer.Header().Set("Content-Type", "application/json")
writer.WriteHeader(http.StatusOK)
message := Message{
Response: "Successful",
Description: "You've successfully hit the API endpoint",
}
err := json.NewEncoder(writer).Encode(&message)
if err != nil {
return
}
}

Các endpointExample hàm xử lý có trong một http bưu kiện nhà vănlời yêu cầu cá thể phương thức và trả về một thông báo cho máy khách với nhà văn ví dụ.

Xếp hạng giới hạn một ứng dụng đơn giản

Giới hạn tỷ lệ thông qua số lượng yêu cầu của người dùng hoặc số lượng yêu cầu có sẵn là tương tự. Bạn sẽ luôn cần tạo một giới hạn trước khi quy trình ủy quyền.

Đây là cách bạn có thể tạo giới hạn tỷ lệ và ủy quyền cho người dùng dựa trên số lượng yêu cầu.

func rateLimiterMiddleware(next func(writer http.ResponseWriter, request *http.Request)) http.HandlerFunc {
limiter := rate.NewLimiter(3, 6)
return http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
if !limiter.Allow() {
writer.Write([]byte("rate limit exceeded "))
return
} else {
endpointExample(writer, request)
}
})
}

Các rateLimiterMiddleware hàm xử lý là một phần mềm trung gian chấp nhận một hàm xử lý làm đối số và trả về kết quả của ủy quyền sau khi tạo bộ giới hạn tốc độ mới với NewLimiter phương thức nhận hai tham số cho số lượng yêu cầu mỗi giây sau các yêu cầu tối đa được chỉ định.

Các Cho phép phương thức của thể hiện giới hạn trả về một boolean dựa trên trạng thái của các yêu cầu được ủy quyền. Các rateLimiterMiddleware trả về thông báo JSON nếu yêu cầu được ủy quyền hoặc “vượt quá giới hạn tốc độ “ tin nhắn khi khách hàng đã gửi số lượng yêu cầu tối đa.

func main() {
http.HandleFunc("/home", rateLimiterMiddleware(endpointExample))
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Println("There was an error listening on port :8080", err)
}
}

Các chính chức năng gắn kết /Trang Chủ điểm cuối của rateLimiterMiddleware hàm xử lý có trong endpointExample hàm xử lý.

Các ListenAndServe phương thức khởi động máy chủ trên cổng localhost 8080 và trả về các lỗi có thể xảy ra.

Bạn có thể chạy lệnh này trên thiết bị đầu cuối của thư mục làm việc của mình hoặc với một tập lệnh bash để kiểm tra điểm cuối sau khi chạy máy chủ.

for i in {1..10}; do curl http://localhost:8080/home; done

Mã truy cập vào /Trang Chủ điểm cuối mười lần với một yêu cầu. Đây là kết quả của các yêu cầu.

Kết quả từ chương trình giới hạn tỷ lệ

Sau yêu cầu thứ sáu (tối đa), máy khách không được phép và không còn có thể truy cập vào điểm cuối.

Giới hạn tỷ lệ là quan trọng

Giới hạn tỷ lệ là điều cần thiết, đặc biệt nếu bạn đang muốn cắt giảm chi phí lưu trữ ứng dụng của mình, muốn giảm sự can thiệp của bot hoặc bảo mật ứng dụng của bạn khỏi các cuộc tấn công mạng. Tương tự với Go’s tỷ lệ gói, npm cung cấp tốc độ giới hạn gói cho các ứng dụng nhanh có giới hạn tỷ lệ.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *