7

Giả sử tôi có một ứng dụng web chạy trên một số máy chủ EC2 cân bằng tải, lưu trữ và truy xuất siêu dữ liệu từ SimpleDB với khối dữ liệu lớn hơn được lưu trữ trên S3 (do toàn bộ giới hạn 1 KB của SimpleDB). Vì S3 là độ trễ khá cao và tôi không muốn thực hiện một tấn yêu cầu trên đó, tôi sẽ muốn có một lớp lưu trữ cho thông tin ... nhập ElastiCache. Ok, vì vậy tôi cung cấp một máy chủ ElastiCache với điểm cuối X vì vậy tôi hardcode X vào ứng dụng của tôi trên EC2 và nó chạy hạnh phúc cho đến khi tôi nhận được vài trăm nghìn người dùng mới và tất cả đột ngột máy chủ bộ nhớ cache của tôi không đủ mạnh cho nhu cầu . May mắn là tôi chỉ có thể khởi động một vài máy chủ cache mới lớn hơn ... nhưng sau đó tôi nhận ra rằng tôi có điểm cuối X, Y và Z và ứng dụng của tôi chỉ biết dùng X, vì vậy tôi vẫn gặp vấn đề.Làm cách nào để có thể ứng dụng trên các phiên bản ElastiCache tự động phát hiện EC2?

Vì vậy, ngay bây giờ tôi chỉ cố gắng để có được đầu của tôi quấn quanh các mảnh khác nhau để câu đố này, và tôi đã không nhận được phần mã hóa được nêu ra, nhưng điều này sẽ không là một vấn đề? Tôi đã đọc tài liệu cho ElastiCache và nó đề cập rằng nó là một cụm cache, nhưng sau đó mỗi máy chủ trong cluster có vẻ có điểm cuối riêng của nó. Có cách nào cho một ứng dụng chạy trên EC2 để biết về tất cả các máy chủ bộ nhớ cache đang chạy, và nhiều hơn nữa đến điểm mà một máy chủ chứa dữ liệu cho một khóa cụ thể không? Có thể hỏi toàn bộ cụm sao để lưu trữ hoặc lấy một mẩu thông tin không?

+0

Tôi nghi ngờ điều đó quan trọng một thỏa thuận tuyệt vời để câu trả lời của câu hỏi này, nhưng đối với bất cứ giá trị của nó EC2 của tôi ứng dụng sẽ nhiều hơn khả năng được thực hiện trong PHP. –

+0

Tôi nhận thấy yêu cầu tính năng dọc theo các dòng tương tự này tại https://forums.aws.amazon.com/thread.jspa?threadID=74852, vì vậy rất tiếc, có vẻ như có tệp cấu hình với điểm cuối bộ nhớ cache của bạn trong đó là về tất cả các bạn có thể làm ngay bây giờ. –

Trả lời

0

Nếu ứng dụng của bạn được triển khai từ versioncontrol (Tôi hy vọng nó là), bạn chỉ cần chỉnh sửa tệp cấu hình và triển khai lại ứng dụng. Tôi không thấy một vấn đề lớn với cách tiếp cận này, nhưng có lẽ tôi đang thiếu điều hiển nhiên.

Hãy cho tôi biết.

+2

Tôi đã hy vọng có một cơ chế đàn hồi để trình bày cụm bộ nhớ cache cho ứng dụng như thể nó là một máy chủ duy nhất. không phải lo lắng về điểm cuối nào sẽ nhấn cho một khóa cụ thể, không phải lo lắng về cấu hình bộ nhớ cache khi quay lên hoặc tắt nút bộ nhớ cache, vv Có vẻ như một thứ như vậy chưa tồn tại. –

+0

Không. Nói chung, ElastiCache của AWS cung cấp cho bạn các nút. Cách các nút đó được sử dụng (ví dụ: bạn có sử dụng tất cả các nút đó làm cửa hàng khổng lồ hay bạn phản chiếu, v.v.) tùy thuộc vào bạn. Đây chỉ là cách memcache hoạt động. Bạn có lẽ có thể bọc khám phá của bạn vào một cuộc gọi API định kỳ, nhưng tôi sẽ không khuyên bạn nên. Chúng tôi tái triển khai cho những thay đổi này. – Till

+0

Tôi sẽ không đặt ma thuật mở rộng xung quanh điều này. Ví dụ. chỉ cần thêm một nút thường không phải là một ý tưởng tốt hoặc một cái gì đó ứng dụng của bạn có thể có thể đối phó với. Ví dụ.khi tôi thêm một nút khác vào cụm ElasticCache của chúng tôi, tôi cần cân bằng lại cụm bộ nhớ cache để nói. Thông thường, nó dễ dàng hơn để thêm nó vào cấu hình, điều chỉnh các thiết lập cho ext/memcache (chúng tôi sử dụng PHP) và sau đó bắt đầu từ đầu bằng cách làm trống bộ nhớ cache và để nó trở lại. – Till

0

Tính năng Tự động phát hiện đau của Amazon là hoàn toàn khủng khiếp. Nó là cơ bản không thể cài đặt, đó là điên vì nó phải rất đơn giản.

Tôi đã viết một hàm đơn giản trong PHP để tạo một URL nút đàn hồi cho số lượng nút bạn đang chạy. Có, bạn phải cập nhật mã của bạn nếu bạn thay đổi số lượng các nút (hoặc có thể đặt giá trị này trong một var env).

Nó bản đồ các phím tương tự cho các nút giống nhau:

function get_elasticache_node_url($key, $config_url, $num_nodes) { 
    $node = hexdec(substr(md5($key), 0, 15)) % $num_nodes + 1; 
    $nodestr = str_pad($node, 4, "0", STR_PAD_LEFT); 
    return str_replace('.cfg.','.'.$nodestr.'.',$config_url); 
} 

$num_nodes = 10; 
$config_url = 'cluster-name.xyzxyz.cfg.use1.cache.amazonaws.com'; 

echo get_elasticache_node_url("key1", $config_url, $num_nodes); 
echo get_elasticache_node_url("key2", $config_url, $num_nodes); 

Output:

cluster-name.xyzxyz.0001.use1.cache.amazonaws.com 
cluster-name.xyzxyz.0004.use1.cache.amazonaws.com