-
Notifications
You must be signed in to change notification settings - Fork 0
Description
Memcached được sử dụng để năng cao hiệu năng cho ứng dụng, ở đây chúng ta sẽ tập trung và phương pháp tốt nhất để triển khai nó.
Tất cả ứng dụng, đặc biệt là nhiều ứng dụng web, cần phải được tối ưu quá trình kết nối và trả thông tin thật nhanh về cho client. Tuy nhiên những thông tin giống nhau buộc phải có trả về cho client thường xuyên phải lấy thông tin từ datasource (database hoặc filesystem), nhất là bạn cần lấy thông tin bất cứ khi nào bạn muốn vấn đề này không tốt một chút nào.
The basics
Memcached là một open source được thiết kế để sử dụng RAM của nhiều server như bộ nhớ cache để lưu trữ những thành phần thông tin được truy cập thường xuyên. The key element is the use of the word cache: memcached provides temporary storage, in memory, of information that can be loaded from elsewhere.
Ví dụ: Trong một ứng dụng blog, có những thông tin tồn tại suốt vòng đời của web, đặc biệt là những thông tin không thường xuyên được thay đổi. Ở đây thông tin categories được hiển thị hầu như trên tất cả các view của blog, nếu khi chuyển view thông tin được tải lại từ database với chị phí đọc thông tin ở database là rất lớn như trong hình

Mở rộng với các thành phần khác trên blog, để hiển thị đầy đủ thông tin ở một trang chủ của blog, chúng có thể thực hiện khoảng vài chục câu query vào database để ấy đủ thông tin. Lặp lại quá trình tải trang như vậy với hằng trăm hay thậm chứ hàng ngàn lượt truy cập. Ứng dụng của bạn phải thực hiện quá query không cần thiết để hiện thị đầy đủ nội dung trang.
Bằng cách dử dụng Memcached để lưu trữ thông tin trực tiếp có thể sử dụng để hiển thị trên ứng dụng web và thông tin được tải trên RAM thay vì tải trên DISK hay phải thực hiện nhiều kết nối khác, thông tin được trả về gần như là tức thời.
Memcached là một bộ nhớ cache để lưu trữ thông tin thường xuyên sử dụng để giúp bạn tiết kiệm quá trình tải và xử lý thông tin từ các nguồn chậm hơn, chẳng hạn như đĩa hoặc cơ sở dữ liệu.
Memcached được kết nối qua network connection, bạn có thể chia sẻ 1 hoặc nhiều server memcache với nhau. Với việc mục tiêu truy cập nhanh chóng nên thông tin dữ liệu trên memcached sẽ không được mã hóa hay xác thực. Vì vậy memcached nên được đặt cùng mạng. Chúng ta có thể nâng cấp RAM để nâng cấp khả năng lưu trữ.
Phương thức lưu trữ của memcached là sử dụng key/value, khi lưu trữ chúng phải được cung cấp cặp key-value, và khi lấy dữ liệu thì ta cung cấp key để lấu đữo giá trị tương ứng được lưu trữ.
Thông tin lưu trữ trên memcached là mãi mãi trừ khi xảy ra những trường hợp sau:
- The memory allocated for cache is exhausted (Bộ nhớ được cấp phát cho bộ nhớ cache đã hết): Khi đó memcached sẽ sử dụng phương pháp (LRU - least-recently used) những thông tin không được sử dụng gần đây nhất sẽ được xóa đi
- The item is specifically deleted (Mục này được cụ thể xóa): Bạn xóa nó khỏi memcached
- The item is expired (Mục đã hết hạn): Chúng ta được phép giới hạn thời gian lưu trữ trên memcached
When to use memcached
Sửa đổi quy trình sau khi dụng memcached vào ứng dụng
- Khi lấy thông tin
- Khi lấy thông tin hay thay đổi thông tin
Keys, namespaces, and values
Một chủ đề quan trọng trong qúa trình sử dụng memcached nữa là việc tổ chức dữ liệu và cách đặt tên dữ liệu bạn lưu trữ. Bạn phải có một cách đặt tên nhất quán cho toàn bộ dữ liệu được lưu trữ trên memcached
Một số ví dụ như sau: đặt tên blogpost-69 với blogpost chỉ dữ liệu post, 69 chỉ ID. blog-69 chỉ danh sách những comment của của post có ID là 69. blogcategories chỉ danh sách danh mục.
Nếu memcached được sử dụng cho nhiều ứng dụng khác nhau thì chúng ta có thể thêm thông tin tên ứng dụng để định danh blogapp:blogpost-69
Thông tin value lưu trữ trong memcached nên lưu ý một số vấn đề sau: Không nên lưu trữ thông tin HTML thô ở trong memcached. Hầu như tất cả ngôn ngữ đều cho phép bạn sử dụng serialize để lưu trữ toàn bộ object nhưng bạn không nên lưu trữ chúng vào memcached ở dạng này, khi chia sẽ thông tin ở với các ứng dụng khác sẽ gặp phải rắc rối, nên ta nên chuyển về định dạng json hoặc xml để lưu trữ.
Resilience and availability
- Nếu dịch vụ memcached bị down thì ứng dụng sẽ truy cập dữ liệu như ứng dụng bình thường khi không sử dụng memcached.
- Khi server memcached được phục hồi thì ứng dụng sẽ tự đông lưu trữ dữ liệu trên memcached để tiếp tục sử dụng.
Nhắc lại là memcached là bộ nhớ caches để lưu trữ trông tin chứ không phải là nơi lưu trữ thông tin duy nhất. Khi memcached bị down thì hiệu suất của ứng dụng của bạn sẽ bị giảm đi cho tới khi nó được phục hồi trở lại.
Distributing your cache
Nếu bạn có nhiều máy, bạn có thể cài đặt nhiều instance memcached trên tất cả các máy được thông mạng với nhau cung cấp 1 khối lượng lớn bộ nhớ RAM để sử dụng cache.
- Khi tiếp cận với ý tưởng này giả sử rằng bạn cần một cơ chế để copy dữ liệu qua lại giữa các máy chủ cache nhưng hướng tiếp cận này không làm tăng bộ nhớ RAM được sử dụng
How not to use memcached
Việc làm dụng phổ biến nhất khi sử dụng memcached là sử dụng nó như một database, chứ không phải là một kho nhớ caches. Mục đích của memcached là cải thiện thời gian có thể đáp ứng cho dữ liệu nó có thể xây dựng hoặc thu hồi dữ liệu từ một số nguồn khác.
Bạn không nên sử dụng memcached làm nguồn duy nhất cho thông tin bạn cần để chạy ứng dụng. Dữ liệu phải luôn luôn có nguồn gốc từ một số nguồn khác.
- Do not cache database rows or files
Bạn sẽ có được nhiều lợi ích và cải tiến hiệu suất từ memcached nếu bạn sử dụng nó để lưu trữ toàn bộ khối thông tin sau khi load và format. - Memcached isn't secure
Để đảm bảo hiệu suất tối đa, memcached không cung cấp bất kỳ hình thức bảo mật, hoặc trong việc xác thực hoặc mã hóa. Điều này có nghĩa là truy cập vào các máy chủ memcached nên được xử lý bằng cách đặt chúng trong cùng một khu vực riêng của môi trường triển khai ứng dụng.
[1] https://www.ibm.com/developerworks/library/os-memcached/





