Tôi đã cố gắng tìm hiểu lý do tại sao việc yêu cầu mã thông báo truy cập thông qua OpenStack Keystone lại tương đối chậm (thấp nhất là khoảng 400 ms đến trong một số trường hợp là hơn một giây).
Để tìm hiểu nguyên nhân, tôi đã sử dụng OSProfiler và có vẻ như phần lớn thời gian dành cho việc nói chuyện với cơ sở dữ liệu. Tôi có thể thấy Keystone thực hiện khoảng một trăm lệnh gọi cơ sở dữ liệu khi yêu cầu mã thông báo. Các cuộc gọi riêng lẻ đến cơ sở dữ liệu tương đối nhanh (từ 2-6 ms) nhưng thực hiện điều đó 100 lần có thể dễ dàng dẫn đến độ trễ 500 ms chỉ trong các yêu cầu cơ sở dữ liệu.
Hiện tại, cơ sở dữ liệu được truy cập qua mạng (có khoảng 0,3 ms trong thời gian khứ hồi của mạng). Thời gian cho mỗi truy vấn cơ sở dữ liệu có ý nghĩa khi xem xét chi phí TCP và MySQL, vì vậy điều đó không quá điên rồ.
Điều chính mà tôi băn khoăn là liệu đây có phải là hành vi dự kiến hay không, Keystone có thực hiện nhiều truy vấn như vậy để yêu cầu mã thông báo hay không. Bộ nhớ đệm được bật và tôi biết bộ nhớ đệm đang hoạt động vì tôi có thể thấy Keystone sử dụng cơ sở dữ liệu và khi gỡ lỗi thư viện bộ nhớ đệm, trên thực tế, nó cho thấy nó bị truy cập khi tiếp cận bộ đệm.
Hiện tại, tùy chọn duy nhất mà tôi thấy là loại bỏ hoàn toàn mạng và di chuyển cơ sở dữ liệu sang cùng một máy với Keystone API.
Cập nhật: Đây là trên Ussuri sử dụng mã thông báo Fernet