[Discussion] Tranh cãi về hiệu suất khi dùng cache |
13/09/2010 21:47:49 (+0700) | #1 | 220647 |
|
nguago
Member
|
0 |
|
|
Joined: 19/08/2006 12:04:16
Messages: 43
Location: 127.0.0.1
Offline
|
|
Mình với ông bạn tranh cãi về Cache lưu ở file và cache lưu ở Ram
Mình có suy nghĩ như sau:
- Đầu tiên là cache là gì? 1 trang web đc hiển thị dưới dạng layout phải qua 5 giai đoạn (Chỉ là ví dụ)
1. Get từ database để có 1 mảng
2. Xử lý lần 1 với mảng này
3. Xử lý lần 2 với mảng này
4. Xử lý lần 3 với mảng này
5. Sau khi có kết quả cuối cùng ở bước 4 thì lưu kết quả đó vào Cache (Bước này Lưu vào Ram nhanh hơn lưu vào File nhưng chỉ thực hiện 1 lần đầu tiên)
Từ lần truy cập thứ 2 thì 5 bước trên không còn nữa. Lúc này check xem đã tồn tại Cache đó chưa (theo key, nếu có rồi thì gọi ra và dùng mảng đó luôn.
Giờ chỉ cần so sánh tốc độ gọi cache ra. Bọn mình thống nhất là Cache Ram nhanh hơn Cache file tầm 5 lần. Vậy là lấy từ Ram nhanh hơn lấy từ File 5 lần
Cache file thì lấy bằng cách get string trong file đó và trả về 1 mảng, điều này dù chậm hơn Cache Ram là lấy luôn mảng trong Ram ra nhưng tốc độ quá nhanh, làm cho sự chênh lệch ko đáng kể
Thống nhất tốc độ get string từ file để có mảng mất 0.0005 giây và từ Ram mất 0.0001 giây, Mình nghĩ là không có sự chênh lệch về tốc độ ở đây.
Data của mình gồm khoảng 30k mảng cần phải lưu và tương đương tầm 1-2GB Cache
Server có 12 GB RAM
Mình nghĩ chênh lệch về tốc độ không đáng kể nhưng chả dại gì để Ram lúc nào cũng chứa 1-2GB dữ liệu mà ko phải dữ liệu nào cũng dùng đến nên mình chọn Cache File
Các cao thủ am hiểu xin hãy góp ý giùm với, đã tranh luật hết mấy tiếng mà chưa ra vấn đề, ko ai chịu ai cả, vấn đề này không quan trọng (đối với bọn mình vì dù ai đúng ai sai cũng chả để làm gì!) nhưng mình nghĩ sẽ giúp nhiều người có cách nhìn đúng hơn về cache và cũng là để mình và bạn mình có 1 quan điểm chung ! |
|
HVA No 1 !
http://let.vn |
|
|
|
[Discussion] Tranh cãi về hiệu suất khi dùng cache |
13/09/2010 23:03:23 (+0700) | #2 | 220653 |
|
xnohat
Moderator
|
Joined: 30/01/2005 13:59:19
Messages: 1210
Location: /dev/null
Offline
|
|
Hì hì một chủ đề thú vị
Theo ý kiến mình thì cache trên RAM sẽ hiệu quả hơn so với lên Disk trong điều kiện vận hành bình thường
Tuy nhiên cache lên RAM có một số lưu ý về mặt vật lý.
Dữ liệu lưu trên RAM có độ rủi ro "không toàn vẹn" cao hơn nhiều trên disk
điện áp đột biến -> toi
hệ thống vận hành quá tải ( quá nhiều yêu cầu xử lý ) -> cạn RAM -> toi
chưa kể các điều kiện môi trường khác có thể tác động khiến dữ liệu cache trên RAM có nguy cơ bị "biến dạng" .
Do RAM chứa dữ liệu dưới dạng trạng thái điện, còn Disk là khắc ghi lên bề mặt từ tính của đĩa lưu trữ ( ở đây là đĩa cứng ).
Cái nào rủi ro hơn thấy rõ nhiều |
|
iJust clear, "What I need to do and how to do it"/i
br
brBox tán gẫu dời về: http://www.facebook.com/hvaonline |
|
|
|
[Discussion] Tranh cãi về hiệu suất khi dùng cache |
13/09/2010 23:06:50 (+0700) | #3 | 220655 |
nbthanh
HVA Friend
|
Joined: 21/12/2001 14:51:51
Messages: 429
Offline
|
|
nguago wrote:
Mình với ông bạn tranh cãi về Cache lưu ở file và cache lưu ở Ram
Mình có suy nghĩ như sau:
- Đầu tiên là cache là gì? 1 trang web đc hiển thị dưới dạng layout phải qua 5 giai đoạn (Chỉ là ví dụ)
1. Get từ database để có 1 mảng
2. Xử lý lần 1 với mảng này
3. Xử lý lần 2 với mảng này
4. Xử lý lần 3 với mảng này
5. Sau khi có kết quả cuối cùng ở bước 4 thì lưu kết quả đó vào Cache (Bước này Lưu vào Ram nhanh hơn lưu vào File nhưng chỉ thực hiện 1 lần đầu tiên)
Từ lần truy cập thứ 2 thì 5 bước trên không còn nữa. Lúc này check xem đã tồn tại Cache đó chưa (theo key, nếu có rồi thì gọi ra và dùng mảng đó luôn.
Giờ chỉ cần so sánh tốc độ gọi cache ra. Bọn mình thống nhất là Cache Ram nhanh hơn Cache file tầm 5 lần. Vậy là lấy từ Ram nhanh hơn lấy từ File 5 lần
Cache file thì lấy bằng cách get string trong file đó và trả về 1 mảng, điều này dù chậm hơn Cache Ram là lấy luôn mảng trong Ram ra nhưng tốc độ quá nhanh, làm cho sự chênh lệch ko đáng kể
Thống nhất tốc độ get string từ file để có mảng mất 0.0005 giây và từ Ram mất 0.0001 giây, Mình nghĩ là không có sự chênh lệch về tốc độ ở đây.
Data của mình gồm khoảng 30k mảng cần phải lưu và tương đương tầm 1-2GB Cache
Server có 12 GB RAM
Mình nghĩ chênh lệch về tốc độ không đáng kể nhưng chả dại gì để Ram lúc nào cũng chứa 1-2GB dữ liệu mà ko phải dữ liệu nào cũng dùng đến nên mình chọn Cache File
Các cao thủ am hiểu xin hãy góp ý giùm với, đã tranh luật hết mấy tiếng mà chưa ra vấn đề, ko ai chịu ai cả, vấn đề này không quan trọng (đối với bọn mình vì dù ai đúng ai sai cũng chả để làm gì!) nhưng mình nghĩ sẽ giúp nhiều người có cách nhìn đúng hơn về cache và cũng là để mình và bạn mình có 1 quan điểm chung !
RAM nhiều, không xài thì để làm gì? |
|
|
|
|
[Discussion] Tranh cãi về hiệu suất khi dùng cache |
14/09/2010 07:16:18 (+0700) | #4 | 220666 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
nguago wrote:
Mình với ông bạn tranh cãi về Cache lưu ở file và cache lưu ở Ram
Mình có suy nghĩ như sau:
- Đầu tiên là cache là gì? 1 trang web đc hiển thị dưới dạng layout phải qua 5 giai đoạn (Chỉ là ví dụ)
1. Get từ database để có 1 mảng
2. Xử lý lần 1 với mảng này
3. Xử lý lần 2 với mảng này
4. Xử lý lần 3 với mảng này
5. Sau khi có kết quả cuối cùng ở bước 4 thì lưu kết quả đó vào Cache (Bước này Lưu vào Ram nhanh hơn lưu vào File nhưng chỉ thực hiện 1 lần đầu tiên)
Từ lần truy cập thứ 2 thì 5 bước trên không còn nữa. Lúc này check xem đã tồn tại Cache đó chưa (theo key, nếu có rồi thì gọi ra và dùng mảng đó luôn.
Giờ chỉ cần so sánh tốc độ gọi cache ra. Bọn mình thống nhất là Cache Ram nhanh hơn Cache file tầm 5 lần. Vậy là lấy từ Ram nhanh hơn lấy từ File 5 lần
Cache file thì lấy bằng cách get string trong file đó và trả về 1 mảng, điều này dù chậm hơn Cache Ram là lấy luôn mảng trong Ram ra nhưng tốc độ quá nhanh, làm cho sự chênh lệch ko đáng kể
Thống nhất tốc độ get string từ file để có mảng mất 0.0005 giây và từ Ram mất 0.0001 giây, Mình nghĩ là không có sự chênh lệch về tốc độ ở đây.
Data của mình gồm khoảng 30k mảng cần phải lưu và tương đương tầm 1-2GB Cache
Server có 12 GB RAM
Mình nghĩ chênh lệch về tốc độ không đáng kể nhưng chả dại gì để Ram lúc nào cũng chứa 1-2GB dữ liệu mà ko phải dữ liệu nào cũng dùng đến nên mình chọn Cache File
Các cao thủ am hiểu xin hãy góp ý giùm với, đã tranh luật hết mấy tiếng mà chưa ra vấn đề, ko ai chịu ai cả, vấn đề này không quan trọng (đối với bọn mình vì dù ai đúng ai sai cũng chả để làm gì!) nhưng mình nghĩ sẽ giúp nhiều người có cách nhìn đúng hơn về cache và cũng là để mình và bạn mình có 1 quan điểm chung !
Tất nhiên đọc từ physical memory thì nhanh hơn là đọc từ đĩa rồi. Cái này không có gì phải bàn cãi. Tuy nhiên, phân đoạn đọc từ memory hay từ đĩa chỉ là một phần trong quy trình gởi nhận.
Nếu xét đến giới hạn cache cho web thì cần xét đến I/O trên network và đây thường là "cổ chai" đáng chú ý nhất. Hơn nữa, một cache server đúng chức năng không chỉ thuần tuý lấy thông tin từ cache (trên memory hoặc trên đĩa) để cung cấp cho clients mà nó còn phải viếng nguồn thông tin (trang web nguyên thuỷ) xem có gì thay đổi không trước khi nó quyết định cung cấp bản trong cache.
Chậm hơn nữa là quy trình so sánh giữa bản nguyên thuỷ từ trang web và bản đã được lưu. Quy trình này có thể có những thao tác tốn thời gian (ví dụ như đọc từ trang nguyên thuỷ, tìm bản trên cache, so sánh với bản trên cache, xoá bản trên cache, lấy bản mới từ nguồn, cập nhận vào cache.....). Tất nhiên, đọc và viết vô memory thì nhanh và đây là điểm lợi nhưng đây không phải là điều kiện tiên quyết và duy nhất trong suốt quá trình chuyển / nhận / lưu / cung cấp thông tin.
Nên nhớ, dẫu có dùng memory thuần tuý đi chăng nữa, memory vẫn bị tình trạng "fragmented" và vẫn làm chậm. Hơn nữa, dữ liệu lưu trên mem sẽ bị huỷ hoàn toàn nếu khởi động lại máy và nếu không có cơ chế "push" thông tin từ mem để lưu tạm thời trên đĩa. |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Discussion] Tranh cãi về hiệu suất khi dùng cache |
14/09/2010 08:20:09 (+0700) | #5 | 220673 |
|
nguago
Member
|
0 |
|
|
Joined: 19/08/2006 12:04:16
Messages: 43
Location: 127.0.0.1
Offline
|
|
Mình hoàn toàn đồng ý với các bạn, sử dụng Cache từ Ram thì tốc độ Get nhanh hơn nhưng nó chỉ là 1 phần nhỏ trong tổng thể để out được ra trang web nên nhanh không đáng là bao nhiêu so với dùng File trong khi dùng file giảm được khá nhiểu rủi ro như không sợ mất khi down server, không sợ lỗi khi bị Flood (Rõ ràng không nên chứa cả GB dữ liệu dù có nhiều Ram đến đâu).
Bản thân mình cũng thích kết hợp nhiều loại cache để đạt hiệu suất cao, ví dụ như sau:
- Cache file: Lưu các mảng thông tin, các config của website
- Cache XML: Lưu các mảng thông tin hỗ trợ tìm kiếm, các mảng hỗ trợ flash
- Cache JS: Sử dụng với ajax là chủ yếu
- Cache RAM (Memcached, Xcache...): Dùng để lưu thông tin tạm và dung lượng nhỏ và có tính chất biến đổi dữ liệu liên tục. Áp dụng cho giảm hiệu suất không chỉ Get đến data mà còn áp dụng cho trường hợp insert hay update nữa. Ví dụ: lượt views của 1 bài viết nếu bình thường thì mỗi lần truy cập sẽ update vào data 1 lần để trường "count" tăng lên 1, nếu lưu vào Ram thì sau x lần truy cập (Giả sử là 50) hoặc sau 1 khoảng thời gian nào đó thì mới update vào data 1 lần (vậy là thay vì truy vấn 50 lần thì chỉ cần truy vấn update 1 lần) |
|
HVA No 1 !
http://let.vn |
|
|
|
[Discussion] Tranh cãi về hiệu suất khi dùng cache |
14/09/2010 08:37:42 (+0700) | #6 | 220676 |
|
zeno
Elite Member
|
0 |
|
|
Joined: 20/07/2004 03:57:09
Messages: 124
Location: HVA
Offline
|
|
Cá nhân mình nghĩ việc dùng Cache hiệu quả hay không còn tuỳ thuộc vào nhu cầu và cách thức triển khai.
Khi dùng Cache đúng sẽ cho hiệu quả vô cùng (không phải vô lý mà các hệ thống lớn có đến hàng ngàn máy chủ caching, memcache, hbase. Các hệ quản trị csdl đều có dùng / phải dùng Cache - Trong trường hợp nào dùng như thế nào và bao nhiêu lại la chuyện khác)
Hẳn nhiên đọc dữ liều từ RAM (Random acess) nhanh hơn nhiều so với DISK (Sequense Access).
Về mặt rủi ro dữ liều RAM cũng cao hơn DISK nhưng mình hoàn toàn có thể control mức độ rủi ro này.
Lưu những dữ liều có tần xuất access cao và ít biến thiên rất hiệu quả.
Tất nhiên là put mọi thứ lên RAM thì tệ quá.
Cache is king!
|
|
|
|
|
[Discussion] Tranh cãi về hiệu suất khi dùng cache |
14/09/2010 09:18:05 (+0700) | #7 | 220678 |
|
nguago
Member
|
0 |
|
|
Joined: 19/08/2006 12:04:16
Messages: 43
Location: 127.0.0.1
Offline
|
|
zeno wrote:
Cá nhân mình nghĩ việc dùng Cache hiệu quả hay không còn tuỳ thuộc vào nhu cầu và cách thức triển khai.
Khi dùng Cache đúng sẽ cho hiệu quả vô cùng (không phải vô lý mà các hệ thống lớn có đến hàng ngàn máy chủ caching, memcache, hbase. Các hệ quản trị csdl đều có dùng / phải dùng Cache - Trong trường hợp nào dùng như thế nào và bao nhiêu lại la chuyện khác)
Hẳn nhiên đọc dữ liều từ RAM (Random acess) nhanh hơn nhiều so với DISK (Sequense Access).
Về mặt rủi ro dữ liều RAM cũng cao hơn DISK nhưng mình hoàn toàn có thể control mức độ rủi ro này.
Lưu những dữ liều có tần xuất access cao và ít biến thiên rất hiệu quả.
Tất nhiên là put mọi thứ lên RAM thì tệ quá.
Cache is king!
Cám ơn bác, rất đúng ý em, 1 câu tâm đắc: "Cache is king!" |
|
HVA No 1 !
http://let.vn |
|
|
|
[Discussion] Tranh cãi về hiệu suất khi dùng cache |
14/09/2010 09:32:12 (+0700) | #8 | 220679 |
|
conmale
Administrator
|
Joined: 07/05/2004 23:43:15
Messages: 9353
Location: down under
Offline
|
|
nguago wrote:
zeno wrote:
Cá nhân mình nghĩ việc dùng Cache hiệu quả hay không còn tuỳ thuộc vào nhu cầu và cách thức triển khai.
Khi dùng Cache đúng sẽ cho hiệu quả vô cùng (không phải vô lý mà các hệ thống lớn có đến hàng ngàn máy chủ caching, memcache, hbase. Các hệ quản trị csdl đều có dùng / phải dùng Cache - Trong trường hợp nào dùng như thế nào và bao nhiêu lại la chuyện khác)
Hẳn nhiên đọc dữ liều từ RAM (Random acess) nhanh hơn nhiều so với DISK (Sequense Access).
Về mặt rủi ro dữ liều RAM cũng cao hơn DISK nhưng mình hoàn toàn có thể control mức độ rủi ro này.
Lưu những dữ liều có tần xuất access cao và ít biến thiên rất hiệu quả.
Tất nhiên là put mọi thứ lên RAM thì tệ quá.
Cache is king!
Cám ơn bác, rất đúng ý em, 1 câu tâm đắc: "Cache is king!"
Cache is king (khi dùng đúng nó) và cache is a slug (khi dùng sai) . |
|
What bringing us together is stronger than what pulling us apart. |
|
|
|
[Discussion] Tranh cãi về hiệu suất khi dùng cache |
14/09/2010 09:39:30 (+0700) | #9 | 220680 |
|
nguago
Member
|
0 |
|
|
Joined: 19/08/2006 12:04:16
Messages: 43
Location: 127.0.0.1
Offline
|
|
@conmale: Vậy mới cần xác định đúng mục đích và tính chất để lựa chọn Cache nào dùng vào cái gì. Dùng sai thì đôi khi mang lại hậu quả rất tệ ! |
|
HVA No 1 !
http://let.vn |
|
|
|
[Discussion] Tranh cãi về hiệu suất khi dùng cache |
22/09/2010 15:03:42 (+0700) | #10 | 221235 |
|
instcode
Member
|
0 |
|
|
Joined: 09/09/2004 21:42:44
Messages: 13
Offline
|
|
nguago wrote:
@conmale: Vậy mới cần xác định đúng mục đích và tính chất để lựa chọn Cache nào dùng vào cái gì. Dùng sai thì đôi khi mang lại hậu quả rất tệ !
Đã dùng cache thì mục đích bao giờ cũng là performance cho nên cái quan trọng đó là chứa dữ liệu có tính chất gì và bạn muốn truy cập nó như thế nào? Dù câu trả lời có là gì đi nữa mà nếu có RAM dư dả để đó kô ai xài thì ko ai chọn giải pháp chỉ dùng external memory để cache cả. Tiếp theo là ko thể tin vào kết quả benchmark của bạn được vì đơn giản, nếu RAM chỉ nhanh hơn disk 5 lần thì người ta chẳng bỏ tiền ra mua thêm RAM hoặc SSD thay cho ổ HDD thường đâu! Nếu bạn benchmark trên Linux server thì bạn vô tình so sánh RAM và RAM + API overhead rồi đó, vì Linux cache những dữ liệu được access thường xuyên của HDD lên RAM
Trong trường hợp của bạn, bạn nên tranh cãi những lý do tại sao phải dùng 1 persistent storage từ đó kiếm 1 cache manager (library) mà hỗ trợ cache trong RAM và persist lên đĩa là xong. Ví dụ bạn có thể tham khảo Redis một dạng no-sql key-value store, coi như là database trong RAM nhưng data synced với HDD... |
|
|
|
|
[Discussion] Tranh cãi về hiệu suất khi dùng cache |
26/09/2010 10:37:00 (+0700) | #11 | 221491 |
|
giobuon
Member
|
0 |
|
|
Joined: 10/09/2006 06:25:46
Messages: 72
Offline
|
|
Theo mình trong thử nghiệm của các bạn có nhiều vấn đề không rõ ràng:
- Cấu hình máy các bạn đang sử dụng là như thế nào (RAM thế nào, ổ cứng loại gì, có bao nhiêu diskcache, có chạy RAID không, RAID bạn có cache và battery không, bạn có warn cache hệ thống trước khi chạy không?)
- Bạn thử nghiệm với mẫu dữ liệu như thế nào, to hay nhỏ, nhiều hay ít truy cập cùng lúc? Liệu với dữ liệu lớn hơn hoặc nhiều hơn tốc độ đọc từ đĩa của bạn có đảm bảo như vậy không?
Theo mình lý do mà người ta dùng cache RAM là vì:
RAM ngày càng rẻ so với HDD (rẻ hơn SSD và chênh lệch không nhiều với RAID 10 SAS) và nó nhanh hơn. Thông thường cache là cache read, trong một số trường hợp đặc thù mới dùng write cache vì vậy không lo lắng đến vấn đề toàn vẹn dữ liệu, do đó nhược điểm của RAM coi như bỏ qua được.
Một vấn đề nữa quan trọng hơn cả là disk IO, theo mình đây mới chính là điều kiện dẫn đến việc người ta sử dụng cache trên RAM. Nếu bạn có tiếp xúc nhiều với các hệ thống lớn (đặc biệt chạy db) thì có lẽ bạn sẽ thường xuyên gặp vấn đề về disk IO bound. Ổ cứng thông thường rất rẻ nhưng ổ cứng có IO/s cao thì rất rất đắt. Nếu bạn load toàn bộ DB vào RAM bạn có thể giảm đi phần lớn số lượng read vào disk.
-giobuon |
|
|
|
|
|
|
|
Users currently in here |
1 Anonymous
|
|
Powered by JForum - Extended by HVAOnline
hvaonline.net | hvaforum.net | hvazone.net | hvanews.net | vnhacker.org
1999 - 2013 ©
v2012|0504|218|
|
|