Kết nối đồng thời

Kết nối đồng thời

Proxy có thể hoạt động ổn định khi tải nhẹ nhưng bắt đầu trả lỗi khi nhiều tiến trình xử lý hoặc chương trình cùng chạy. Một nguyên nhân có thể là số kết nối đồng thời được phép đã bị vượt quá.

Đây là một trong những giới hạn sử dụng proxy. Để hiểu nó kiểm soát điều gì và vì sao bị chạm tới, trước tiên cần giải thích kết nối mạng là gì và cách nó hoạt động qua proxy.

Kết nối là gì và hoạt động như thế nào

Kết nối mạng là một đường liên lạc mà hai chương trình thiết lập để trao đổi dữ liệu. Ví dụ, trình duyệt kết nối đến máy chủ web để yêu cầu một trang và nhận nội dung. Kết nối cung cấp đường đi cho sự trao đổi đó; yêu cầu và phản hồi là các thông điệp được gửi qua nó.

Hãy xét kết nối TCP thông thường. Ứng dụng liên hệ địa chỉ IP của máy chủ và cổng của dịch vụ cần dùng. Hai bên trao đổi thông điệp điều khiển để thiết lập kết nối. Sau đó dữ liệu đi qua dưới dạng các đơn vị nhỏ gọi là gói tin. TCP theo dõi việc chuyển dữ liệu, tổ chức truyền lại phần bị mất và cung cấp dữ liệu cho bên nhận theo đúng thứ tự. Cả hai bên duy trì thông tin về quá trình trao đổi trong suốt thời gian kết nối tồn tại.

Với proxy TCP thông thường, ứng dụng trước hết kết nối đến máy chủ proxy. Proxy thiết lập một kết nối riêng đến trang web đích rồi truyền dữ liệu giữa hai kết nối theo cả hai chiều. Vì vậy, nó duy trì liên lạc với cả máy khách và đích.

Ứng dụng có thể gửi yêu cầu, nhận phản hồi và dùng kết nối đã thiết lập cho lần trao đổi tiếp theo. Ví dụ, nhận xong một trang không nhất thiết đóng kết nối: trình duyệt có thể giữ nó cho các yêu cầu tiếp theo đến máy chủ. Khi không còn cần, một bên đóng kết nối; lỗi hoặc hết thời gian chờ cũng có thể kết thúc nó. Cho đến khi đóng, kết nối có thể tồn tại mà không liên tục truyền dữ liệu.

Chương trình có thể duy trì nhiều kết nối như vậy cùng lúc: nhận dữ liệu trên một kết nối, chờ phản hồi trên kết nối khác và giữ kết nối thứ ba sẵn sàng cho yêu cầu sau. Đó là các kết nối đồng thời. Con số mô tả các kênh liên lạc đang mở tại thời điểm đó, không phải tổng số yêu cầu kể từ khi chương trình khởi chạy.

Lấy mã trang qua một kết nối so với tải toàn bộ trang trong trình duyệt qua nhiều kết nối proxy đồng thời.

Giới hạn này đo điều gì

Một kết nối đang mở chiếm một chỗ trong hạn mức liên quan. Sau khi nó đóng và dịch vụ loại nó khỏi bộ đếm, chỗ đó lại có thể sử dụng. Đây là giới hạn hoạt động hiện tại, nên chạm giới hạn không làm cạn một số dư kết nối hàng tháng.

Cách tính kết nối vào hạn mức khách hàng là một quy tắc riêng của dịch vụ. Hai chặng mạng tại proxy không tự động tiêu thụ hai đơn vị hạn mức.

Nhà cung cấp đặt giới hạn vì kết nối mở tiêu thụ tài nguyên máy chủ ngay cả khi truyền ít dữ liệu. Kết nối đang chờ phản hồi vẫn cần được duy trì. Kiểm soát số lượng giúp dịch vụ giữ đủ năng lực cho khối lượng công việc đã cam kết hỗ trợ.

Nhiều giới hạn khác nhau có thể cùng áp dụng cho một dịch vụ:

Giới hạn Yếu tố được kiểm soát
Kết nối đồng thời Số kết nối có thể cùng duy trì trạng thái mở
Yêu cầu đồng thời Số yêu cầu có thể được xử lý cùng lúc
Yêu cầu mỗi giây Tần suất có thể gửi hoặc xử lý yêu cầu
Tốc độ truyền Lượng dữ liệu có thể truyền mỗi giây
Hạn mức dữ liệu truyền Lượng dữ liệu có thể truyền trong một kỳ tính phí

Vì vậy, lưu lượng không giới hạn không cho biết số kết nối đồng thời. Cũng có thể có giới hạn riêng về tốc độ mở kết nối mới. Mở và đóng liên tục có thể chạm giới hạn đó dù tại mỗi thời điểm chỉ còn ít kết nối đang mở.

Vì sao số luồng thực thi không bằng số kết nối

Số luồng hoặc tiến trình xử lý trong ứng dụng mô tả cách nó tổ chức tác vụ. Con số đó không cho biết một cách đáng tin cậy proxy sẽ đếm bao nhiêu kết nối. Một tác vụ có thể liên hệ nhiều máy chủ, còn tập lệnh bất đồng bộ có thể quản lý nhiều thao tác mạng mà không tạo một luồng hệ điều hành riêng cho từng thao tác.

Không phải mỗi yêu cầu HTTP đều cần kết nối mới. Máy khách có thể tái sử dụng kết nối hiện có, còn HTTP/2 có thể truyền nhiều yêu cầu cùng lúc trên một kết nối. Vì vậy số yêu cầu khác với số kết nối.

Thuật ngữ của nhà cung cấp cũng quan trọng. Giới hạn được gọi là “luồng” hoặc “phiên” có thể chỉ kết nối mở hoặc yêu cầu đang được xử lý. Phiên giữ nguyên IP, giúp các yêu cầu liên quan dùng cùng IP proxy, không nhất thiết tương ứng với một kết nối mạng. Định nghĩa hữu ích là dịch vụ thực sự đếm điều gì.

Những chương trình nào dùng chung hạn mức?

Giới hạn có thể thuộc về tài khoản, gói đã mua, một IP proxy riêng lẻ hoặc một gateway cụ thể. Với giới hạn tài khoản hoặc gói, hãy cộng kết nối từ mọi chương trình và thiết bị dùng hạn mức đó. Chia danh sách IP cho nhiều máy tính không tạo hạn mức riêng cho từng máy.

Với giới hạn theo IP, cách phân bổ khác đi: một địa chỉ bận có thể chạm trần trong khi địa chỉ khác vẫn còn chỗ. Chuyển một phần công việc sang địa chỉ thứ hai có thể giúp ích, miễn là dịch vụ không đồng thời áp dụng một giới hạn chung thấp hơn. Gói có thể vừa có hạn mức tổng vừa có phần phân bổ nhỏ hơn cho từng người dùng hoặc IP máy khách.

Số IP máy khách được phép xác thực là một thiết lập khác. Nó kiểm soát những mạng nào có thể truy cập proxy, không phải số kết nối mà các mạng đó có thể mở. Nhiều thiết bị sau một IP công cộng có thể cùng chia sẻ quy tắc truy cập lẫn phần kết nối được phân bổ cho IP đó.

Đổi IP proxy mà trang web nhìn thấy không đặt lại hạn mức kết nối toàn tài khoản. Tương tự, đổi tên phiên giữ IP hoặc giao thức không tự động cung cấp thêm năng lực. Giới hạn vẫn gắn với tài khoản, gói hoặc điểm kết nối mà nhà cung cấp dùng để tính.

Vì sao kết nối tích tụ

Kết nối tích tụ khi tốc độ mở kết nối mới nhanh hơn tốc độ đóng kết nối hiện có. Điều này có thể xảy ra khi tải trang, tải tệp hoặc chạy tác vụ mạng song song: một số kết nối vẫn đang truyền dữ liệu hoặc chờ phản hồi trong khi ứng dụng mở thêm kết nối. Chúng cùng được tính vào hạn mức tại một thời điểm và có thể cùng làm cạn giới hạn kết nối proxy.

Người dùng mở năm hồ sơ trên một mạng xã hội giả định trong trình duyệt chống phát hiện. Máy tính xách tay hiển thị danh sách hồ sơ. Mỗi hồ sơ dùng một nhóm tám kết nối đến proxy dùng chung: tổng cộng bốn mươi. Mười kết nối mở trước đó vẫn đang chiếm chỗ. Tất cả cùng chiếm đủ năm mươi kết nối của hạn mức minh họa. Bộ đếm tăng khi các hồ sơ khởi chạy. Hai cửa sổ nữa mở ra nhưng báo lỗi tải vì kết nối mới bị từ chối. Hình mô tả hoạt động song song thông thường, không phải lỗi phần mềm. Các con số giải thích hình vẽ, không phải một gói ProxyCompass. Tám kết nối không phải hạn mức chung cho mỗi hồ sơ. Mỗi đường mang nhãn tám biểu thị một nhóm kết nối, không phải một yêu cầu.

Phản hồi chậm giữ kết nối bị chiếm dụng lâu hơn. Nếu chương trình tiếp tục khởi chạy công việc mới với cùng nhịp độ, công việc chưa xong sẽ tích tụ. Nếu giữ mức hoạt động song song cố định, trang web chậm hơn thường khiến ít tác vụ hoàn thành hơn mỗi phút. Cả hai tình huống có thể xảy ra mà không có thay đổi nào với gói proxy.

Lượt tải dài và kết nối chờ hết thời gian cũng có thể gây hiệu ứng tương tự. Vì vậy, nhiều kết nối mở có thể đi cùng tốc độ truyền thấp: phần lớn thời gian dành cho chờ đợi thay vì truyền dữ liệu.

Một số kết nối được cố ý giữ mở giữa các yêu cầu. Cơ chế này thường được gọi là keep-alive. Nó tránh thiết lập lại kết nối mỗi lần, nhưng kết nối rảnh vẫn có thể chiếm một chỗ nếu dịch vụ đếm kết nối mở. Kết nối được trả về nhóm kết nối của ứng dụng có thể dùng lại; nó chưa chắc đã đóng tại proxy.

Một vấn đề riêng là giải phóng kết nối không đúng. Nó có thể xuất hiện ở phần mềm có sẵn lẫn tập lệnh tự viết. Ví dụ, mã bắt đầu đọc phản hồi, gặp lỗi rồi gửi yêu cầu khác mà chưa đọc xong hoặc đóng phản hồi trước. Nếu kết nối mới cứ mở còn kết nối cũ vẫn chiếm chỗ, ứng dụng có thể dùng hết hạn mức mà không làm thêm công việc hữu ích. Đây là lý do phải kiểm tra việc giải phóng sau lỗi và hủy tác vụ, không chỉ sau yêu cầu thành công.

Giải phóng đúng giúp máy khách tái sử dụng kết nối phù hợp hoặc đóng kết nối không còn cần. Thời gian chờ giới hạn ngăn thao tác bị bỏ dở chờ vô hạn. Tắt tái sử dụng ở mọi nơi không phải cách sửa chung: nó tăng công việc thiết lập và có thể tăng tần suất kết nối mới. Mục tiêu là kiểm soát số kết nối có thể tái sử dụng, đồng thời giải phóng hoặc đóng đúng các kết nối không cần thiết.

Vì sao proxy dường như hoạt động, rồi ngừng, rồi lại hoạt động

Lỗi gián đoạn khi có tải là lý do nên kiểm tra giới hạn kết nối sớm. Một số địa chỉ proxy có vẻ hoạt động trong khi số khác lỗi; ngay sau đó tình hình lại thay đổi. Từ góc nhìn ứng dụng, dường như các phần khác nhau của danh sách proxy cứ lần lượt mất kết nối.

Một cách giải thích là hạn mức chung đã đầy. Kết nối hiện có có thể tiếp tục, còn các lần mở thêm bị từ chối hoặc phải chờ. Khi kết nối trước đóng, một số lần thử mới đi qua được. Những lần khác thất bại khi chỗ trống lại đầy. Kết quả thay đổi do cạnh tranh cùng một hạn mức, không phải do một nhóm IP hỏng cố định.

Hành vi này đôi khi được gọi là điều tiết. Ở đây, hạn chế tác động đến việc chấp nhận kết nối mới; nó không nhất thiết giảm tốc độ mọi kết nối đã thiết lập. Phản ứng cụ thể phụ thuộc dịch vụ: có thể trả thông báo giới hạn rõ ràng, từ chối kết nối hoặc để máy khách hết thời gian chờ. Không đảm bảo có hàng đợi chờ.

Để kiểm tra cách giải thích này, hãy đối chiếu lỗi với số kết nối và tạm giảm hoạt động song song trên các chương trình dùng chung hạn mức. Nếu lỗi ngừng khi hoạt động xuống dưới giới hạn rồi trở lại khi hạn mức đầy, mức trần kết nối có thể là nguyên nhân. Gián đoạn tương tự cũng có thể đến từ trang web đích hoặc mạng. Chỉ riêng hết thời gian chờ hay phản hồi HTTP 429, 502 hoặc 503 không chứng minh đã chạm giới hạn kết nối proxy; nguồn và nội dung lỗi đều quan trọng.

Giữ công việc hữu ích trong giới hạn

Bắt đầu với các trang và thao tác phần mềm thực sự cần thực hiện. Tăng hoạt động song song từ từ rồi quan sát kết quả thành công, thời gian phản hồi và đỉnh kết nối. Thử ngắn trên một trang nhanh có thể không đại diện cho lượt chạy đầy đủ có đăng nhập, phản hồi lớn và điểm cuối chậm hơn.

  1. Phân bổ một ngân sách kết nối chung cho mọi chương trình. Dành chỗ cho hoạt động khác và các đợt tăng ngắn. Nếu nhiều tiến trình dùng cùng gói, đặt từng tiến trình bằng toàn bộ hạn mức gói có thể gây quá tải khi chúng chạy cùng nhau.
  2. Kiểm soát cả tác vụ lẫn kết nối. Nhóm kết nối lưu các kết nối để dùng lại. Kiểm tra thiết lập kích thước là giới hạn cứng hay chỉ là số được giữ lại sau đó; một số máy khách mở thêm kết nối trừ khi bật chế độ chờ. Duy trì việc giải phóng phản hồi và giới hạn thời gian chờ, kể cả khi công việc thất bại.
  3. Giãn thời điểm khởi chạy và thử lại. Mở mọi trình duyệt cùng lúc hoặc lập tức gửi lại mọi yêu cầu lỗi tạo thêm một đỉnh tải. Giới hạn số lần thử lại với thời gian đợi tăng dần và giữ chúng trong cùng ngân sách công việc. Hết thời gian chờ cũng không chứng minh hành động đã gửi thất bại, nên cần thận trọng khi lặp lại giao dịch mua hoặc cập nhật.
  4. Đo công việc đã hoàn thành. Thêm tiến trình xử lý chỉ hữu ích khi tăng lượng kết quả thành công. Khi chủ yếu làm tăng chờ đợi và lỗi, thiết lập thấp hơn có thể hoàn thành cùng công việc sớm hơn. Nếu bảng điều khiển lấy trung bình hoạt động theo thời gian, các đỉnh ngắn có thể khó thấy hơn so với mốc thời gian lỗi của ứng dụng.

Với tác vụ trình duyệt, tránh lượt tải không cần thiết cũng có thể giảm hoạt động mạng. Chặn hình ảnh hoặc video có thể giúp khi tác vụ không cần chúng; bỏ tập lệnh có thể làm hỏng chính thao tác. Hãy đánh giá thay đổi dựa trên việc tác vụ dự kiến vẫn hoàn thành đúng hay không.

Khi nào giới hạn cao hơn có ích

Thêm năng lực kết nối hữu ích khi ứng dụng quản lý kết nối đúng và khối lượng cần xử lý liên tục chạm mức trần của nhà cung cấp. Nó cho phép thêm tác vụ chạy cùng nhau mà không tranh cùng hạn mức nhỏ.

Khoản mua phải tăng đúng giới hạn đang bị chạm. Thêm IP có thể giúp với hạn chế theo IP khi công việc được phân bổ giữa chúng. Với giới hạn gói chung, gói mới hoặc tiện ích bổ sung phải tăng hạn mức chung đó. Chỉ tăng số IP không chứng minh điều này sẽ xảy ra.

Còn có các mức trần khác. Máy khách có thể có nhóm kết nối nhỏ hơn, máy tính có thể thiếu tài nguyên mạng hoặc đích có thể giới hạn yêu cầu. Một kết nối di động cũng có băng thông riêng, bất kể số kết nối proxy được phép. Mua thêm khả năng hoạt động đồng thời không loại bỏ các ràng buộc đó và không sửa được tập lệnh liên tục để rò rỉ kết nối.

Mục tiêu thực tế là có đủ chỗ cho đỉnh tải bình thường và giữ tỷ lệ lỗi thấp. Khi đã đạt điều đó, hạn mức kết nối bổ sung có thể là nâng cấp năng lực hữu ích thay vì cách trì hoãn việc sửa ứng dụng.

Quay lại cơ sở kiến thức