AWS - DVA-C02

Ôn thi AWS DVA-C02: Memcached.

Giới Thiệu

Memcached là một trong những giải pháp bộ nhớ đệm (caching) quan trọng trong hệ sinh thái AWS, đặc biệt là trong kỳ thi AWS Certified Developer – Associate (DVA-C02). Bài viết này sẽ giúp bạn hiểu rõ về Memcached trong Amazon ElastiCache, cách thức hoạt động, và những kiến thức cần nắm vững cho kỳ thi.

Memcached Là Gì?

Memcached là một hệ thống bộ nhớ đệm đối tượng phân tán, mã nguồn mở, được thiết kế để tăng tốc các ứng dụng web động bằng cách giảm tải công việc từ cơ sở dữ liệu. Trong AWS, Memcached được cung cấp thông qua dịch vụ ElastiCache, cho phép triển khai, vận hành và mở rộng các triển khai Memcached một cách dễ dàng.

ElastiCache for Memcached: Đặc Điểm Chính

1. Kiến Trúc

  • Mô hình dữ liệu đơn giản: Lưu trữ key-value trong bộ nhớ RAM
  • Phân tán: Dữ liệu có thể được phân phối qua nhiều node
  • Không có tính bền vững: Dữ liệu sẽ mất khi khởi động lại
  • Không có khả năng sao chép: Không hỗ trợ replication giữa các node

2. Use Cases

  • Caching đơn giản: Lưu trữ kết quả truy vấn, kết quả tính toán
  • Giảm tải database: Lưu các truy vấn phổ biến
  • Session store: Lưu trữ thông tin phiên người dùng
  • Các trường hợp cần hiệu năng cao: Khi độ trễ thấp là ưu tiên hàng đầu

Memcached vs Redis trong AWS ElastiCache

Đây là một chủ đề hay xuất hiện trong kỳ thi DVA-C02. Hãy nắm rõ sự khác biệt:

Tính NăngMemcachedRedis
Cấu trúc dữ liệuChỉ key-value đơn giảnNhiều cấu trúc phức tạp (hash, list, set)
Bền vữngKhông (mất khi khởi động lại)Có (RDB và AOF)
Sao chépKhông hỗ trợHỗ trợ multi-AZ replication
ShardingTự nhiên, tại clientCluster mode
TransactionsKhông
Pub/SubKhông
Lua scriptingKhông
Mở rộngThêm/bớt node dễ dàngPhức tạp hơn

Cấu Hình Memcached trong AWS

Node Types

Memcached hỗ trợ nhiều loại node khác nhau:

  • T2, T3: Cho môi trường phát triển/thử nghiệm
  • M5, M6: Cân bằng giữa tính toán và bộ nhớ
  • R5, R6: Tối ưu cho bộ nhớ (memory-optimized)

Auto Discovery

ElastiCache for Memcached cung cấp Auto Discovery, cho phép ứng dụng client tự động nhận diện tất cả các node trong cluster mà không cần cập nhật thủ công cấu hình endpoint khi thêm hoặc xóa node.

Parameter Groups

Parameter Groups cho phép quản lý cấu hình của các cluster Memcached. Một số tham số quan trọng cần chú ý:

  • max_item_size: Kích thước tối đa của một item
  • max_connections: Số kết nối đồng thời tối đa
  • chunk_size: Kích thước chunk tối thiểu để lưu trữ item

Security trong Memcached

Network Security

  • Security Groups: Kiểm soát truy cập mạng đến cluster
  • Subnet Groups: Xác định subnet nào có thể chứa các node
  • Không hỗ trợ VPC Peering và Transit Gateway: Đây là hạn chế cần nhớ

Encryption

Memcached trong ElastiCache không hỗ trợ encryption at-rest, chỉ hỗ trợ:

  • In-transit encryption: SSL/TLS cho phiên bản mới
  • Authentication: SASL cho xác thực (không bật mặc định)

Scaling Memcached

Horizontal Scaling

  • Thêm node: Tăng dung lượng bộ nhớ tổng thể
  • Consistent Hashing: Giảm thiểu số lượng cache miss khi thay đổi số lượng node
  • Không downtime: Cluster vẫn hoạt động trong quá trình scale

Vertical Scaling

  • Thay đổi node type: Phải tạo cluster mới và di chuyển dữ liệu

Maintenance và Monitoring

CloudWatch Metrics

Metrics quan trọng cần theo dõi:

  • CPUUtilization: Nên dưới 90%
  • SwapUsage: Nên gần 0
  • Evictions: Số lượng item bị đẩy ra do thiếu bộ nhớ
  • CurrConnections: Số lượng kết nối hiện tại

Maintenance Windows

ElastiCache thực hiện bảo trì định kỳ cho các node Memcached (patching, upgrades). Bạn có thể chọn maintenance window phù hợp để giảm thiểu tác động.

Best Practices

  1. Lazy Loading: Chỉ lưu cache khi cần thiết
  2. Thiết lập TTL (Time To Live): Tránh dữ liệu cũ
  3. Memcached Client Libraries: Sử dụng thư viện hỗ trợ Auto Discovery
  4. Monitoring Cache Hit Rate: Theo dõi hiệu quả của cache
  5. Eviction Policies: Hiểu rõ LRU (Least Recently Used) – thuật toán xóa bỏ mặc định

Code Ví Dụ: Sử Dụng Memcached với AWS SDK

import boto3
import pymemcache

# Lấy thông tin endpoint của Memcached cluster
elasticache = boto3.client('elasticache')
response = elasticache.describe_cache_clusters(
    CacheClusterId='my-memcached-cluster',
    ShowCacheNodeInfo=True
)

# Lấy endpoint của node đầu tiên
endpoint = response['CacheClusters'][0]['CacheNodes'][0]['Endpoint']['Address']
port = response['CacheClusters'][0]['CacheNodes'][0]['Endpoint']['Port']

# Kết nối đến Memcached
client = pymemcache.client.base.Client((endpoint, port))

# Set một giá trị với TTL 60 giây
client.set('my_key', 'my_value', expire=60)

# Lấy giá trị
value = client.get('my_key')
print(value)  # Kết quả: my_value

# Đóng kết nối
client.close()

Các Câu Hỏi Thường Gặp Trong Kỳ Thi

  1. Khi nào nên chọn Memcached thay vì Redis?
    • Khi cần scaling đơn giản và nhanh chóng
    • Khi không cần sự bền vững của dữ liệu
    • Khi chỉ cần lưu trữ dữ liệu key-value đơn giản
    • Khi cần hiệu suất cao nhất có thể
  2. Làm thế nào để xử lý sự cố Memcached cluster đầy bộ nhớ?
    • Tăng số lượng node (horizontal scaling)
    • Sử dụng node type lớn hơn (vertical scaling)
    • Tối ưu hóa kích thước key và value
    • Điều chỉnh TTL cho phù hợp
  3. Làm thế nào để bảo mật Memcached trong AWS?
    • Sử dụng Security Groups để hạn chế truy cập
    • Triển khai trong VPC private subnet
    • Bật in-transit encryption
    • Sử dụng SASL authentication

Kết Luận

Memcached trong AWS ElastiCache là một công cụ mạnh mẽ để tăng hiệu suất ứng dụng thông qua caching. Đối với kỳ thi AWS DVA-C02, việc nắm vững các khái niệm, use cases, và sự khác biệt giữa Memcached và Redis là rất quan trọng. Hãy nhớ rằng Memcached thích hợp cho các trường hợp cần hiệu suất cao, cấu trúc dữ liệu đơn giản và khả năng mở rộng theo chiều ngang dễ dàng.

Chúc bạn may mắn trong kỳ thi AWS DVA-C02!

12 Views

Leave a Reply

Your email address will not be published. Required fields are marked *