Khái niệm về pipeline.
Trong Swift Storage, một pipeline
là một chuỗi các middleware và ứng dụng server được xây dựng để xử lý các yêu cầu HTTP. Mỗi middleware hoặc ứng dụng trong pipeline có thể thực hiện các tác vụ như xác thực, ghi log, quản lý cache và nhiều hơn nữa.
Khi một yêu cầu HTTP đến, nó sẽ đi qua từng middleware hoặc ứng dụng trong pipeline theo thứ tự từ trái sang phải. Mỗi middleware có thể quyết định xử lý yêu cầu và trả về phản hồi, hoặc chuyển yêu cầu đến middleware tiếp theo trong pipeline.
Ví dụ trong đoạn cấu hình dưới đây, pipeline được định nghĩa như sau:
[pipeline:main]
pipeline = catch_errors gatekeeper healthcheck proxy-logging cache domain_remap container_sync bulk tempurl ratelimit authtoken s3api s3token keystoneauth iam iprange_acl pattern_expiration leak_segment copy container-quotas account-quotas slo dlo versioned_writes symlink keymaster encryption proxy-logging proxy-server
Điều này có nghĩa là khi một yêu cầu HTTP đến, nó sẽ được xử lý lần lượt qua các middleware và ứng dụng catch_errors
, gatekeeper
, healthcheck
, proxy-logging
, cache
, domain_remap
, container_sync
, bulk
, tempurl
, ratelimit
, authtoken
, s3api
, s3token
, keystoneauth
, iam
, iprange_acl
, pattern_expiration
, leak_segment
, copy
, container-quotas
, account-quotas
, slo
, dlo
, versioned_writes
, symlink
, keymaster
, encryption
, proxy-logging
và proxy-server
.
Khái niệm về middleware.
Trong Swift Storage, middleware là các thành phần phần mềm được thiết kế để xử lý các yêu cầu HTTP trước khi chúng đến server. Middleware có thể thực hiện nhiều tác vụ khác nhau, bao gồm nhưng không giới hạn ở việc xác thực, ghi log, quản lý cache và nhiều hơn nữa.
Mỗi middleware trong Swift được định nghĩa trong một pipeline và mỗi yêu cầu HTTP sẽ đi qua pipeline này. Mỗi middleware có thể quyết định xử lý yêu cầu và trả về phản hồi, hoặc chuyển yêu cầu đến middleware tiếp theo trong pipeline.
Ví dụ, trong đoạn cấu hình ở ví dụ trên có một số middleware như catch_errors
, gatekeeper
, healthcheck
, proxy-logging
, cache
, domain_remap
, container_sync
, bulk
, tempurl
, ratelimit
, authtoken
, s3api
, s3token
, keystoneauth
, iam
, iprange_acl
, pattern_expiration
, leak_segment
, copy
, container-quotas
, account-quotas
, slo
, dlo
, versioned_writes
, symlink
, keymaster
, encryption
, proxy-logging
và proxy-server
. Mỗi middleware này sẽ thực hiện một tác vụ cụ thể khi xử lý yêu cầu HTTP.
Thiết kế middleware.
Bạn hoàn toàn có thể tự thiết kế middleware của riêng mình để đưa vào pipeline trong Swift Storage. Điều này cho phép bạn tùy chỉnh cách xử lý các yêu cầu HTTP theo nhu cầu cụ thể của bạn.
Để tạo một middleware mới, bạn cần tạo một class Python mới thực hiện các phương thức cần thiết để xử lý yêu cầu HTTP. Thông thường, một middleware sẽ cần thực hiện phương thức __call__
để xử lý yêu cầu.
Sau khi tạo middleware, bạn cần thêm nó vào file cấu hình của Swift Storage. Điều này thường được thực hiện bằng cách thêm một mục mới vào phần [pipeline:main]
và một mục mới vào phần [filter:your_middleware_name]
.
Ví dụ, nếu bạn tạo một middleware tên là my_middleware
, bạn có thể thêm nó vào pipeline như sau:
[pipeline:main]
pipeline = catch_errors gatekeeper healthcheck proxy-logging cache domain_remap container_sync bulk tempurl ratelimit authtoken s3api s3token keystoneauth iam iprange_acl pattern_expiration leak_segment copy container-quotas account-quotas slo dlo versioned_writes symlink keymaster encryption proxy-logging proxy-server my_middleware
[filter:my_middleware]
use = egg:my_middleware
Trong đoạn cấu hình trên, use = egg:my_middleware
nghĩa là middleware my_middleware
sẽ được tải từ một Python egg có tên my_middleware
.
Middleware trong Swift Storage lấy dữ liệu từ các yêu cầu HTTP đến. Khi một yêu cầu HTTP đến, nó sẽ được chuyển qua từng middleware trong pipeline. Mỗi middleware có thể đọc hoặc thay đổi thông tin trong yêu cầu HTTP này.
Thông tin mà một middleware có thể lấy từ một yêu cầu HTTP bao gồm:
- Phương thức HTTP (GET, POST, PUT, DELETE, v.v.)
- URL của yêu cầu
- Headers của yêu cầu
- Body của yêu cầu
Ngoài ra, middleware cũng có thể lấy thông tin từ file cấu hình của Swift Storage và middleware cũng có thể lấy thông tin từ các nguồn dữ liệu khác, như cơ sở dữ liệu hoặc các dịch vụ API, tùy thuộc vào cách bạn thiết kế middleware.
Để xem nội dung của middleware, bạn cần tìm đến mã nguồn của middleware đó. Trong trường hợp của mình, middleware swift_storage_policy
được định nghĩa ở đâu đó trong mã nguồn của dự án của mình hoặc trong một thư viện Python mà dự án của bạn đang sử dụng.
Trong file cấu hình, dòng paste.filter_factory = swift_storage_policy.swift_storage_policy:filter_factory
cho biết rằng factory function để tạo middleware
nằm trong module swift
_storage_policyswift_storage_policy.swift_storage_policy
và có tên là filter_factory
.
Bạn cần tìm đến file Python chứa module swift_storage_policy.swift_storage_policy
để xem nội dung của middleware. Đường dẫn chính xác đến file này sẽ phụ thuộc vào cấu trúc của dự án của bạn.
Nếu bạn không tìm thấy module này trong mã nguồn của dự án của bạn, có thể middleware
được cài đặt từ một thư viện Python khác. Trong trường hợp này, bạn có thể sử dụng pip để kiểm tra các thư viện Python đã được cài đặt:swift
_storage_policy
pip freeze
Sau đó, tìm kiếm thư viện có chứa
trong danh sách các thư viện đã được cài đặt.swift
_storage_policy