Thứ Năm, 6 tháng 12, 2012

A Comparison of Push vs Pull Ajax


The advent of AJAX has made it possible to develop browser based web applications with high user interactivity and low user-perceived latency. Real-time dynamic web data such as news headlines, stock tickers, and auction updates need to be propagated to the users as soon as possible. However, AJAX still suffers from the limitations of the web’s request/response architecture which prevents servers from pushing real-time dynamic web data.
Engin Bozdag, Ali Mesbah and Arie van Deursen of the Delft University of Technology have discussed the following approcahes to achieve web-based real time event notification:
1. HTTP Pull: In this traditional approach , the client checks with the server for latest data at regular user definable intervals The pulling frequecncy needs to be high to ensure high data accuracy, but high pulling frequency may induce redundant checks leading to high network traffic. Low pulling frequency, on the other hand, may lead to missed updates. Ideally, the pulling interval should be equal to the rate at which the server state changes.
2. HTTP Streaming: This method consists of streaming server data in the response of a long-lived HTTP connection (Page Streaming) or an XMLHttpRequest connection (Service Streaming).
3. Reverse AJAX: Service Streaming, as applied to AJAX, is known as Reverse AJAX or COMET . It enables the server to send a message to the client when an event occurs, without the client having to explicitly request. The goal is to achieve a real-time update of the state changes. COMET uses the persistent connectionfeature in HTTP/1.1. With HTTP/1.1, unless specified otherwise, the TCP connection between the server and the browser is kept alive, until an explicit ‘close connection’ message is sent by one of the parties, or a timeout/network error occurs.
4. Long Polling: Also known as Asynchronous Polling, this method is a hybrid of pure server push and client pull. It is based on BAYEUX protocol. This protocol follows the topic based publish - subscribe scheme. After a subscription to a channel, the connection between the client and the server is kept open, for a defined amount of time. If no event occurs on the server side, a timeout occurs, and the server asks the client to reconnect asynchronously. If an event occurs, the server sends the data to the client, and the client reconnects.
In their experimental study, the authors compared Data Coherence, Server Performance, Network Performance and Data Misses of an AJAX application using a COMET push implementation (Dojo’s Cometd library), as opposed to a pure pull approcah.
The authors concluded that:
"...If we want high data coherence and high network performance, we should choose the push approach. However, push brings some scalability issues; the server application CPU usage is 7 times higher as in pull. According to our results, the server starts to saturate at 350-500 users. For larger number of users, load balancing and server clustering techniques are unavoidable.
With the pull approach, achieving total data coherence with high network performance is very difficult. If the pull interval is higher than the publish interval, some data miss will occur. If it is lower, network performance will suffer. Pull performs well only if the pull interval equals to publish interval. However, in order to achieve that, we need to know the exact publish interval beforehand. However, the publish interval is rarely static and predictable. This makes pull useful only in situations where the data is published frequently according to some pattern..."

KHÁI NIÊM CƠ BẢN VỀ RAM

TÊN GỌI 
Hiện nay nhiều người thường nhầm lẫn về cách gọi tên của các loại RAM. Nếu như RDRAM không có gì để nói thì với dòng SDRAM, việc nhầm lẫn ngày càng lớn. Khái niệm RAM (Random Access Memory) thì chắc hẳn ai cũng biết. DRAM hay SDRAM là khái niệm mở rộng hơn (Synchronous Dynamic Random Access Memory - RAM đồng bộ). Ban đầu và thậm chí hiện nay khi nói đến SDRAM người ta thường nghĩ ngay đến RAM loại cũ với tốc độ 100MHz hay 133MHz; tuy nhiên từ sau khi DDR SDRAM (Double Data Rate SDRAM) ra đời thì quan niệm này hoàn toàn sai. Tham khảo một vài bảng báo giá linh kiện, bạn sẽ thấy các công ty đã góp phần không nhỏ vào việc khiến người dùng hiểu sai vấn đề. SDRAM là tên gọi chung của một dòng bộ nhớ máy tính, nó được phân ra SDR (Single Data Rate) và DDR (Double Data Rate). Do đó nếu gọi một cách chính xác, chúng ta sẽ có hai loại RAM chính là SDR SDRAM và DDR SDRAM. Cấu trúc của hai loại RAM này tương đối giống nhau, nhưng DDR có khả năng truyền dữ liệu ở cả hai điểm lên và xuống của tín hiệu nên tốc độ nhanh gấp đôi. Trong thời gian gần đây xuất hiện chuẩn RAM mới dựa trên nền tảng DDR là DDR-II, DDR-II có tốc độ cao hơn nhờ cải tiến thiết kế. 

TỐC ĐỘ (SPEED) 
Đây có lẽ là khái niệm được người dùng quan tâm nhất, tuy nhiên có người thắc mắc về cách gọi tên, đối với DDR thì có hai cách gọi theo tốc độ MHz hoặc theo băng thông. Ví dụ, khi nói DDR333 tức là thanh RAM đó mặc định hoạt động ở tốc độ 333MHz nhưng cách gọi PC2700 thì lại nói về băng thông RAM, tức là khi chạy ở tốc độ 333MHz thì nó sẽ đạt băng thông là 2700MB/s (trên lý thuyết). Tương ứng như thế chúng ta sẽ có bảng sau: 
Thường ở Việt Nam thông dụng các loại RAM có bus 333 và 400, những loại có bus cao hơn thường xuất hiện ở những loại cao cấp như Kingston HyperX, Corsair , Mushkin LV nhưng nói chung khá hiếm. 

ĐỘ TRỄ (LATENCY) 
CAS Latency là khái niệm mà người dùng thắc mắc nhiều nhất. Trước đây, khi đi mua RAM, người mua thường chỉ quan tâm tới tốc độ hoạt động như 100MHz hay 133MHz nhưng gần đây, khái niệm CAS đang dần được người dùng để ý bởi nó đóng vai trò khá quan trọng vào tốc độ xử lý tổng thể của hệ thống; đặc biệt trong ép xung. Vậy CAS là gì? 

CAS là viết tắt của 'Column Address Strobe' (địa chỉ cột). Một thanh DRAM được coi như một ma trận của các ô nhớ (bạn có thể hình dung như một bảng tính excel với nhiều ô trống) và dĩ nhiên mỗi ô nhớ sẽ có toạ độ (ngang, dọc). Như vậy bạn có thể đoán ngay ra khái niệm RAS (Row Adress Strobe)là địa chỉ hàng nhưng do nguyên lý hoạt động của DRAM là truyền dữ liệu xuống chân nên RAS thường không quan trọng bằng CAS. 

Khái niệm độ trễ biểu thị quãng thời gian bạn phải chờ trước khi nhận được thứ mình cần. Theo từ điển Merriam-Webster thì latency có nghĩa là 'khoảng thời gian từ khi ra lệnh đến khi nhận được sự phản hồi'. Vậy CAS sẽ làm việc như thế nào? CAS Latency có ý nghĩa gì? 
Để hiểu khái niệm này, chúng ta sẽ cùng điểm nhanh qua cách thức bộ nhớ làm việc, đầu tiên chipset sẽ truy cập vào hàng ngang (ROW) của ma trận bộ nhớ thông qua việc đưa địa chỉ vào chân nhớ (chân RAM) rồi kích hoạt tín hiệu RAS. Chúng ta sẽ phải chờ khoảng vài xung nhịp hệ thống (RAS to CAS Delay) trước khi địa chỉ cột được đặt vào chân nhớ và tín hiệu CAS phát ra. Sau khi tín hiệu CAS phát đi, chúng ta tiếp tục phải chờ một khoảng thời gian nữa (đây chính là CAS Latency) thì dữ liệu sẽ được tìm thấy. Điều đó cũng có nghĩa là với CAS 2, chipset phải chờ 2 xung nhịp trước khi lấy được dữ liệu và với CAS3, thời gian chờ sẽ là 3 xung nhịp hệ thống. 

Bạn sẽ thắc mắc như vậy phải chăng CAS2 nhanh hơn CAS3 tới 33%, không đến mức như vậy bởi có rất nhiều yếu tố ảnh hưởng đến hiệu năng tổng thể của bộ nhớ điển hình như: 
+ Chuỗi xử lý thông tin: kích hoạt RAS, chờ khoảng thời gian trễ RAS-to-CAS Delay và CAS Latency. 
+ Truy cập bộ nhớ theo chuỗi: đôi khi chipset sẽ đọc dữ liệu trong bộ nhớ RAM theo chuỗi (burst) như vậy rất nhiều dữ liệu sẽ được chuyển đi một lần và tín hiệu CAS chỉ được kích hoạt một lần ở đầu chuỗi. 
+ Bộ vi xử lý có bộ đệm khá lớn nên chứa nhiều lệnh truy cập và dữ liệu; do đó thông tin được tìm kiếm trên bộ đệm trước khi truy cập vào RAM và tần số dữ liệu cần được tìm thấy trên bộ đệm (hit-rate) khá cao (vào khoảng 95%). 
Nói tóm lại việc chuyển từ CAS 3 sang CAS 2 sẽ tăng hiệu năng xử lý cho tất cả các ứng dụng. Những chương trình phụ thuộc vào bộ nhớ như game hay ứng dụng đồ họa sẽ chạy nhanh hơn. Điều này đồng nghĩa với việc những thanh RAM được đóng dấu CAS2 chắc chắn chạy nhanh hơn những thanh RAM CAS3. Nếu bạn dự định mua đồ chơi cho một cuộc đua ép xung hay đơn giản chỉ cần hệ thống đạt tốc độ tối ưu, hãy chọn RAM CAS2 nhưng nếu chỉ là công việc văn phòng, CAS 3 hoàn toàn vẫn đáp ứng yêu cầu. 

TẦN SỐ LÀM TƯƠI 
Thường thì khi nhắc tới khái niệm tần số làm tươi (RAM Refresh Rate), người ta thường nghĩ ngay đến màn hình máy tính, tuy nhiên bộ nhớ DRAM (Dynamic Random Access Memory) cũng có khái niệm này. Như bạn đã biết module DRAM được tạo nên bởi nhiều tế bào điện tử, mỗi tế bào này phải được nạp lại điện hàng nghìn lần mỗi giây vì nếu không dữ liệu chứa trong chúng sẽ bị mất. Một số loại DRAM có khả năng tự làm tươi dữ liệu độc lập với bộ xử lý thường được sử dụng trong những thiết bị di động để tiết kiệm điện năng. 

SDRAM ACCESS TIME 
Việc cho ra đời cách đọc dữ liệu theo từng chuỗi (Burst Mode) đã giúp khắc phục nhiều nhược điểm và tăng hiệu năng cho RAM, chu kì của chuỗi ngắn hơn rất nhiều chu kì trang của RAM loại cũ. Chu kì của chuỗi cũng được coi như là chu kì xung nhịp của SDRAM và chính vì thế nó được coi như thang xác định cho tốc độ của RAM bởi đó là khoảng thời gian cần thiết giữa các lần truy xuất dữ liệu theo chuỗi của RAM. Những con số -12, -10, -8... ghi trên các chip RAM cho biết khoảng thời gian tối thiểu giữa mỗi lần truy xuất dữ liệu: nhãn -12 xác định chu kì truy cập dữ liệu của RAM là 12ns (nano-giây) đồng nghĩa với việc tốc độ hoạt động tối đa của RAM sẽ là 83MHz. Thường RAM có tốc độ cao sẽ sử dụng chip RAM có chu kì truy xuất thấp nhưng với chu kì truy xuất thấp chưa chắc RAM đã có thể hoạt động ở tốc độ cao do còn phụ thuộc vào nhiều yếu tố khác. Do đó đôi khi bạn sẽ gặp trường hợp thanh RAM có tốc độ thấp nhưng khi đem vào 'thử lửa' ép xung thì lên được tốc độ cao hơn nhiều so với những loại RAM mặc định dán nhãn tốc độ cao.