Bộ nhớ Cache là gì?
Cache (/ˈkæʃ/ KASH[1]) là bộ nhớ đệm chứa dữ liệu, các dữ liệu được nằm chờ yêu cầu từ ứng dụng hoặc phần cứng. Dữ liệu được chứa trong cache có thể là các thuật toán đã được thực hiện khi được yêu cầu, hoặc các dữ liệu trùng được lưu trữ ở một nơi khác. --- Theo Wikipedia ---
Tổng quan về Amazon ElastiCache
ElastiCache trên AWS hoạt động tương tự như cách mà RDS được sủ dụng để cung cấp dịch vụ CSDL quan hệ. ElastiCache sẽ cho phép người dùng "thuê" các in-memory storage như Redis hay Memcached.
Ở local, Redis hay Memcached cho phép lưu trữ dữ liệu dạng key - value trong bộ nhớ của máy tính. Điều này giúp tăng hiệu suất cũng như giảm độ trễ khi truy cập các giá trị này, tuy nhiên có thể sẽ mất nếu thiết bị bị restart. Chúng thường được dùng để lưu trữ các dữ liệu không quá quan trọng và chỉ cần sử dụng trong thời gian ngắn. Điều này làm giảm áp lực lên các CSDL.
Tương tự như các phiên bản Redis hay Memcached thường được sử dụng, ElastiCache cũng mang lại các lợi ích như giảm áp lực lên CSDL khi phải xử lý nhiều cũng như không cần lưu trữ các giá trị không cần thiết,... Bên cạnh đó, do được triển khai và quản lý bởi AWS nên ta còn thu được các lợi ích nổi bật sau:
- Giúp ứng dụng trở thành Stateless: Các dịch vụ được quản lý bởi AWS nhìn chung hiếm khi gặp tình trạng bị sập bất ngờ dẫn đến việc mất dữ liệu lưu trong bộ nhớ, ngoài ra nó còn có thể cho phép nhiều thiết bị, instance khác nhau có thể truy cập (điều này khác với các hệ thống thông thường khi Server A dĩ nhiên sẽ không thể truy cập vào dữ liệu trên RAM của server B). Vậy nên khi một instance sập hoặc đơn giản được các requests của 1 user được điều phối thông qua 1 bộ cân bằng tải tới các instances khác nhau, hệ thống vẫn có thể đáp ứng được các requests này.
- Amazon sẽ lo hết: Như đã nhắc đến ở phía trên, dịch vụ này được quản lý bởi AWS, AWS sẽ lo hết các công việc như OS maintenance / patching, cấu hình, tối ưu hóa, các hoạt động backups hay chuyển đổi dự phòng... Điều này giúp tiết kiệm rất nhiều công sức.
- Cân nhắc về chi phí và code change: Cần lưu ý rằng dịch vụ này của AWS không miễn phí, vậy nên cần quản lý chặt chẽ cũng như thiết lập các chiến lược lưu trữ hiệu quả để tối ưu chi phí cũng như tránh các chi phí phát sinh không cần thiết. Ngoài ra việc sử dụng ElastiCache có thể sẽ phức tạp hơn các cơ chế Cache trên local.
ElastiCache – Redis vs Memcached
AWS Elasticache cung cấp 2 dịch vụ chạy các ứng dụng khác nhau là Redis và Memcached. Một cách tổng quan, 2 dịch vụ này có các đặc tính như sau:
Redis
- Được triển khai Multi-AZ, có khả năng tự động chuyển đổi dự phòng (Auto-Failover).
- Cung cấp các Read Replicas cho phép tập trung phục vụ các thao tác đọc (tương tự RDS) và cung cấp khả năng sẵn sàng cao (high availablity).
- Độ bền của dữ liệu được đảm bảo bằng AOF persistence.
- Cung cấp đầy đủ các tính năng liên quan đến Backup và Restore.
Memchached
- Dữ liệu được phân mảnh và lưu trữ ở nhiều node khác nhau (sharding).
- Dữ liệu không có tính bền (Non persistent).
- Không cung cấp các tính năng liên quan đến Backup, Restore cũng như không cung cấp các tính năng liên quan đến High Availability (Replication).
- Được triển khai theo kiến trúc Multi-threaded.
Cache Security
- Tương tự như các dịch vụ AWS khác, ElastiCache hỗ trợ IAM Authentication for Redis.
- IAM Policies trên ElastiCache chỉ được sử dụng cho AWS API-level security.
- Đối với ElastiCache Redis AUTH:
- Có thể cấu hình password/token khi thiết lập Redis cluster. Lớp bảo mật này được xây dựng trên IAM, không thay thế IAM.
- Hỗ trợ mẫ hóa dữ liệu trên đường truyền sử dụng SSL.
- Có thể cấu hình password/token khi thiết lập Redis cluster. Lớp bảo mật này được xây dựng trên IAM, không thay thế IAM.
- Đối với Memcached:
- Hỗ trợ SASL-based authentication.
- Hỗ trợ SASL-based authentication.
Use cases
Cache nói chung hay ElastiCache nói riêng có thể sử dụng trong nhiều kịch bản, kiến trúc hệ thống khác nhau. Bài viết này sẽ đề cập đến 02 loại kiến trúc phổ biến nhất là DB Cache và User Session Store.
User Session Store
Một trong số những ứng dụng hay gặp nhất của các bộ nhớ Cache đó là sử dụng làm User Session Store. Trong các hệ thống Microservice hoặc được xây dựng trên các cơ chế cân bằng tải, việc đảm bảo request từ 1 người dùng sẽ luôn được thực thi bởi 1 server nhất định là điều rất phức tạp và tốn kém. Giải pháp khi làm việc với ElastiCache có thể mô tả như sau:
- Sau khi User login vào hệ thống, ứng dụng sẽ ghi dữ liệu về Session truy cập của user đó lên ElastiCache.
- Khi các requests tiếp theo của user đó được gửi đến instance nhất định, chúng sẽ truy cập vào ElastiCache để lấy dữ liệu Session của user, từ đó biết được các instances trước đó đã phục vụ user đó những gì và tiếp tục phục vụ tiếp user đó.
DB Cache
Tốc độ đọc dữ liệu từ cache sẽ nhanh hơn nhiều so với từ CSDL, vậy nên đối với các nhóm dữ liệu cần đọc thường xuyên, chúng ta có thể thiết lập một ElastiCache thay vì phải cấu hình thêm một Read Replica cồng kềnh.
Kiến trúc này có thể được mô tả như sau:
- Ứng dụng sẽ lấy dữ liệu từ ElastiCache thay vì Database, trừ khi dữ liệu không có trong ElastiCache, Ứng dụng mới lấy dữ liệu từ Database. Điều này sẽ giảm một lượng lớn tải lên Database.
- Phương án này dù rất hiệu quả nhưng cũng yêu cầu phải thiết lập các chiến lược Revalidate Cache một cách hợp lý, do dữ liệu trong bộ nhớ Cache có thể đã bị outdate so với dữ liệu trên CSDL, nếu không được update có thể gây ra các lỗi không mong muốn.