Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Redis

Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

Phiên trong môi trường cân bằng tải truyền thống

Nói chung, chúng tôi sử dụng các phiên trong bộ nhớ (dữ liệu được lưu trữ trong RAM) trong tất cả các Ứng dụng web. Nó hoạt động tốt trong hầu hết các môi trường lưu trữ truyền thống nơi chúng tôi lưu trữ ứng dụng của mình trong máy ảo chuyên dụng hoặc bất kỳ gói lưu trữ dùng chung nào.

Tuy nhiên, khi lưu lượng truy cập tăng lên, chúng tôi lên kế hoạch cân bằng tải bằng cách tạo nhiều Máy chủ Web và kiểm soát lưu lượng bằng cách sử dụng Cân bằng tải. Trong những trường hợp này, phiên sẽ không hoạt động vì các yêu cầu (liên quan đến một phiên) sẽ được phân phát bởi nhiều máy chủ (cùng một máy chủ cũng có thể phân phát các yêu cầu của một phiên duy nhất, nhưng điều này không được đề xuất). Giải pháp là lưu trữ các phiên trong Máy chủ SQL có thể truy cập được trên tất cả các Máy chủ Web của môi trường Cân bằng tải.

Phiên trong môi trường tự động mở rộng quy mô Azure

Thay vì thảo luận lý thuyết về vấn đề này, hãy trực tiếp chuyển sang thảo luận thực tế bằng cách phát triển một chương trình nhỏ sử dụng phiên và xem cách phiên hoạt động trong Azure.

Hãy tạo một Trang web (bạn cũng có thể tạo Ứng dụng MVC) với các Trang web sau và triển khai ứng dụng như trong một trong các bài viết trước của tôi,

  • Dịch vụ ứng dụng Azure - Định cấu hình ứng dụng hiện có từ Visual Studio

Đăng nhập.aspx

Trang này chỉ chấp nhận tên người dùng và mật khẩu. Khi nhấp vào nút “Đăng nhập”, hãy tạo một phiên và lưu trữ giá trị của tên người dùng đã đăng nhập trong một phiên và chuyển hướng người dùng đến “Default.aspx”.

Xin lưu ý rằng trang này cũng hiển thị Địa chỉ IP “10.202.116.91” của Máy ảo nơi lưu trữ trang web.

Mặc định.aspx

Trang này hiển thị các thông báo sau dựa trên giá trị trong Phiên.

Nếu Phiên có một số giá trị thì nó sẽ hiển thị "Người dùng đã đăng nhập với tư cách quản trị viên. Bạn đang ở 10.202.116.91" như minh họa trong ảnh chụp màn hình bên dưới.

Nếu phiên không có bất kỳ giá trị nào thì nó sẽ hiển thị "Phiên là NULL. Bạn đang ở 10.202.116.91" như minh họa trong ảnh chụp màn hình bên dưới.

Vui lòng lưu ý rằng Địa chỉ IP của Máy chủ trong cả login.aspx và Default.aspx đều giống nhau. Tất cả các yêu cầu đang được chuyển hướng đến cùng một máy chủ.

Ngoài ra, theo ảnh chụp màn hình bên dưới, các phiên được duy trì bằng Cookie có tên “ASP.NET_SessionID”. Điều này chắc hẳn đã quen thuộc với hầu hết chúng ta.

Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

Giả sử rằng lưu lượng truy cập vào trang web của chúng tôi đã tăng lên và chúng tôi muốn mở rộng quy mô thành hai Phiên bản. Hãy tiếp tục và tăng số lượng Phiên bản lên hai.

Lưu ý: Xin lưu ý rằng bạn không thể tăng số lượng phiên bản ở bậc Miễn phí và Dùng chung. Dịch vụ ứng dụng của bạn phải ở cấp "Cơ bản", "Tiêu chuẩn" hoặc "Cao cấp".

Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

Hãy truy cập lại Trang đăng nhập và truy cập nhiều lần bằng cách làm mới trang. Làm mới trang nhiều lần sẽ KHÔNG thay đổi Địa chỉ IP.

Bạn sẽ nhận thấy rằng cùng một Máy chủ Web đang phục vụ các trang. Mặc dù chúng tôi đã bật chia tỷ lệ thành hai phiên bản nhưng Dịch vụ ứng dụng vẫn đang phân phát yêu cầu từ một máy chủ.

Đây có thể là một vấn đề trong các tình huống thực tế vì cùng một máy chủ đang phân phát các yêu cầu ngay cả khi Cân bằng tải được bật và các máy chủ khác không được sử dụng đúng cách.

Lý do tại sao tất cả các yêu cầu được phục vụ là do Cookie ARR như hiển thị bên dưới. Để biết thêm thông tin, vui lòng xem tại đây.

Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

Nói một cách đơn giản, cookie này có thông tin Máy chủ mà từ đó yêu cầu ban đầu đã được phân phát để tất cả các yêu cầu tiếp theo từ cùng một phiên đều được phân phát bởi cùng một VM.

Hãy tắt tính năng cookie ARR bằng cách điều hướng đến Cài đặt ứng dụng của Dịch vụ ứng dụng như hiển thị bên dưới.

Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

Tắt “ARR Affinity” như minh họa trong ảnh chụp màn hình ở trên và nhấp vào nút “Save” để lưu các thay đổi. Vui lòng khởi động lại Dịch vụ ứng dụng chỉ để xóa tất cả các phiên.

Từ nay về sau hãy cẩn thận một chút. Một vài đoạn văn sau đây hơi khó hiểu.

Quan trọng

Việc tắt ARR Affinity sẽ vô hiệu hóa quá trình tạo cookie ARRAffinity. Vì vậy, khi tắt cookie, các yêu cầu có thể được gửi đến bất kỳ máy chủ khả dụng nào. Vì vậy, không có gì đảm bảo rằng Phiên sẽ được duy trì đúng cách. Phiên sẽ CHỈ hoạt động khi các yêu cầu được phục vụ từ cùng một máy chủ. Nếu bất kỳ yêu cầu nào được phục vụ bởi một máy chủ khác (thay vì máy chủ lưu trữ phiên) thì Phiên sẽ là NULL.

Bây giờ, hãy quay lại Ứng dụng web và điều hướng đến trang Đăng nhập và chú ý Địa chỉ IP mới “10.202.174.84”. (Trong trường hợp của bạn, ban đầu bạn có thể thấy Địa chỉ IP giống như trước. Làm mới trang sẽ thay đổi Địa chỉ IP. Trong trường hợp của tôi, tôi đã làm mới trang hai lần để nhận Địa chỉ IP mới như hiển thị bên dưới.)

Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

Nhấp vào nút Đăng nhập sẽ KHÔNG đảm bảo rằng biểu mẫu sẽ được đăng lên 10.202.174.84. Nó có thể đăng dữ liệu lên máy chủ khác, trong trường hợp của tôi là “10.202.116.91”.

Trong trường hợp của tôi, khi tôi nhấp vào nút “Đăng nhập” của ảnh chụp màn hình ở trên, nó sẽ đưa tôi đến trang Mặc định với các giá trị sau.

Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

  • Địa chỉ IP là 10.202.174.84 (địa chỉ này giống với trang đăng nhập của tôi).
  • Phiên là NULL. Lý do là khi nhấp vào đăng nhập, yêu cầu có thể đã chuyển sang phiên bản khác (“10.202.116.91”) nơi phiên của tôi được lưu trữ.
  • Làm mới trang một vài lần.
    Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

Hãy tuân thủ những điều sau.

  • Phiên có một số giá trị là “quản trị viên”.
  • Địa chỉ IP là 10.202.116.91.

Vì vậy, kết luận ở đây là “Phiên” sẽ không hoạt động như mong đợi trong Dịch vụ ứng dụng Azure khi bạn định cấu hình Cân bằng tải bằng tính năng tự động điều chỉnh quy mô.

Đây là vị cứu tinh. Nhà cung cấp Redis Cache. Dưới đây là định nghĩa từ trang web chính thức của Azure.

Azure Redis Cache dựa trên bộ đệm Redis nguồn mở phổ biến. Nó cung cấp cho bạn quyền truy cập vào bộ đệm Redis chuyên dụng, an toàn, do Microsoft quản lý và có thể truy cập được từ bất kỳ ứng dụng nào trong Azure.

Dưới đây là các bước cần thiết để phiên của chúng tôi diễn ra như mong đợi.

  • Tạo bộ nhớ đệm Redis từ Cổng quản lý Azure.
  • Định cấu hình Ứng dụng để sử dụng Bộ đệm ẩn Azure Redis.
  • Sử dụng Phiên.

Tạo Redis Cache từ Cổng quản lý Azure.

Hãy bắt đầu tạo Redis Cache bằng Cổng quản lý Azure như hiển thị bên dưới.

Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

Cung cấp thông tin chi tiết về Redis Cache như hiển thị bên dưới.

Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

Nhấp vào nút “Tạo” của ảnh chụp màn hình ở trên. Sẽ mất vài phút để tạo Redis Cache.

Định cấu hình Ứng dụng để sử dụng Bộ đệm ẩn Azure Redis

Hãy định cấu hình ứng dụng để sử dụng Redis Cache mà chúng ta vừa tạo.

Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

Như minh họa trong ảnh chụp màn hình ở trên, hãy đi tới Bảng điều khiển quản lý gói và nhập lệnh “Cài đặt-Gói StackExchange.Redis” rồi nhấp vào “Enter”.

Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

Bây giờ chúng ta đã cài đặt thành công các gói cần thiết. (Xin lưu ý rằng .NET framework của bạn phải từ 4 trở lên.)

Để sử dụng các tập hợp, trước tiên chúng ta cần thêm không gian tên sau vào cả trang Đăng nhập.aspx và trang Default.aspx.

Sử dụng StackExchange.Redis;

Hãy thêm một lớp mới có tên “RedisConnection” vào dự án. Vui lòng tham khảo Dự án đính kèm.

Để kết nối với Redis Cache, chúng ta cần chuyển thông tin sau đến hàm ConnectionMultiplexer.Connect. Hãy lấy chúng từ Cổng thông tin.

Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

Quản lý phiên hiệu quả trên dịch vụ ứng dụng Azure bằng cách sử dụng Redis Cache trong thiết lập cân bằng tải

  • URL bộ đệm Redis.
  • Phím.

Vui lòng không lưu Chìa khóa trong Mã. Để đơn giản hóa mọi việc, tôi đang lưu trữ các khóa trong Mã nguồn. Vui lòng tham khảo trang này để cung cấp thông tin về cách lưu trữ thông tin xác thực.

Bây giờ chúng ta đã sẵn sàng với lớp có thể được sử dụng để kết nối với Redis Cache. Hãy sử dụng lớp này để tạo phiên trong Redis Cache.

Mở tệp login.aspx.cs của bạn và thay thế dòng mã sau.

Session["login"] = this.txtUsername.Text.Trim();

Với.

IDatabase cache = RedisConnection.Connection.GetDatabase();
cache.StringSet("login", this.txtUsername.Text.Trim());

Mở Default.aspx.cs và thay thế dòng mã sau.

protected void Page_Load(object sender, EventArgs e)
{
 if (Session["login"] == null)
 {
 Response.Write("Session is NULL. You are in " + Request.ServerVariables["LOCAL_ADDR"]);
 }
 else
 {
 Response.Write("Logged in user is " + Session["login"] + ". You are in " + Request.ServerVariables["LOCAL_ADDR"]);
 }
}

Với.

protected void Page_Load(object sender, EventArgs e)
{
 IDatabase cache = RedisConnection.Connection.GetDatabase();
 string strLoginValue = cache.StringGet("login");
 if (strLoginValue == null)
 {
 Response.Write("Session is NULL. You are in " + Request.ServerVariables["LOCAL_ADDR"]);
 }
 else
 {
 Response.Write("Logged in user is " + strLoginValue + ". You are in " + Request.ServerVariables["LOCAL_ADDR"]);
 }
}

Hãy triển khai mã cho Dịch vụ ứng dụng Azure và xem xét các thay đổi cũng như điều hướng đến Trang đăng nhập như hiển thị bên dưới.

Lưu ý địa chỉ IP. Đó là 10.202.174.84. Bây giờ bấm vào nút “Đăng nhập”. Bạn sẽ được đưa tới trang Default.aspx như hình bên dưới.

Lưu ý rằng trong ảnh chụp màn hình ở trên, mặc dù IPAddress khác nhau nhưng chúng ta vẫn có thể thấy tên người dùng “admin” vì các phiên hiện được lưu trữ ở một vị trí phân tán “Redis Cache” có thể truy cập được cho cả hai phiên bản.

Bây giờ, hãy tiếp tục làm mới trang nhiều lần. Bạn sẽ nhận thấy rằng Địa chỉ IP đang thay đổi nhưng không thay đổi giá trị của tên người dùng.

Thế thôi. Chúng tôi đã học cách lưu trữ các phiên trong Môi trường cân bằng tải. Bạn có thể lưu trữ bất kỳ loại dữ liệu nào trong Redis Cache.

Hy vọng bạn thích đọc bài viết. Phản hồi của bạn thực sự được đánh giá cao.