Đỉnh NGUYỄN

life's a journey not a destination

Microsoft Project Code Named “Velocity”: a practical overview

Leave a comment


Reference: http://andreacol.net/blog/microsoft-project-code-named-velocity-a-practical-overview/

Velocity là gì?

Velocity là 1 dự án của Microsoft, hiện tại đã có bản CTP2, mục đích là cung cấp sự phân tán, hiệu suất, và cache dành sẵn ở mức cao cho ứng dụng. Velocity có khả năng tích hợp vào ứng dụng web lẫn desktop. Các API cho phép quản lý các đối tượng từ cache, thậm chí lock và search theo điều kiện.

Một trong những đặc điểm của Velocity được đánh giá cao là tính High Availability. Đạt được điều này nhờ tạo và dùng cache cluster, kết hợp nhiều server để chạy các dịch vụ cache phân tán, quản lý bộ nhớ của các đối tượng được quản lý. Trong trường hợp server bị lỗi, bản copy sẽ phục hồi từ server thứ 2.

Setting up cache cluster.

Bước đầu để dùng Velocity là tạo Cache Cluster: một nhóm gồm 1 hoặc nhiều servers mà các dịch vụ chịu trách nhiệm cung cấp các cache phân tán. Minh họa dùng 3 servers: 1 dùng lưu trữ các thiết lập cấu hình cache, và 2 cache servers. Velocity service sẽ chạy sau khi được cài đặt.

Fig1. Cache Cluster

Khi cài Velocity trên cache server, vị trí dùng lưu trữ cấu hình cluster phải được chỉ định cụ thể, cấu hình gồm: danh sách các server trong cluster, TCP ports dùng giao tiếp giữa các cache services chạy trên mỗi server và các thiết lập khác liên quan đến tên cache được tạo ra sau này. 3 loại lưu trữ (storage) được cấu hình trong Velocity là: XML-based file, SQL Compact edition (.sdf), và SQL Server.

Trong minh họa, gần với thế giới thực

Cấu hình và quản trị cluster được cung cấp bởi powershell console commands, được mô tả đầu đủ trong MSDN.

Để start cluster, chạy Powershell (với quyền Administrator) từ cache server và gõ vào:

start-cachecluster

Fig 3. Starting cache cluster from Powershell console

Hiện tại là default cache, để tạo ra named cache, gõ:

new-cache –CacheName CatalogCache –Secondaries 1 – TTL 15

Sau khi thi hành, 1 cache với tên “CatalogCache” được tạo ra. 2 server (primary và secondary), sau khi đối tượng được lưu trữ trong cache, 1 bản copy sẽ được lưu trên secondary server, và giữ tính nhất quán với bản thứ nhất, thời gian cache được cấu hình là 15 phút. , muốn biết trạng thái cache, chỉ cần gõ:

get-cachestatistics

Fig 4: get-cache and get-cachestatistics console output.

Demo Overview

Ứng dụng được dùng để minh họa là 1 ứng dụng mua sắp điện tử trực tuyến, nơi mà khách tìm sản phẩm dựa vào loại và đưa vào giỏ hàng. Nào, giả sử rằng loading catalog là hành động kéo dài rất lâu, truy vấn các nguồn dữ liệu không đồng nhất và nhiều lý do làm cho cache phù hợp giữa DAL và Data Source.

Chú ý: mọi kỹ thuật trong minh họa tương tự thế giới thực, nhưng chúng không phải lúc nào cũng được khuyến cáo để làm như vậy với mọi ứng dụng online.

Setting up development environment and start using Velocity

Để start và bắt đầu dùng Velocity trong ứng dụng, chỉ cần reference các assembly sau đây, các assembly này nằm trong thư mục cài đặt Velocity.

Thêm namespace

using System.Data.Caching;

Đây là 1 phần đoạn mã dùng truy cập named cache được tạo ra lúc nãy, có thể thấy 1 mảng ServerEndPoint được tạo ra, đại diện cho cluster, và sau đó là CacheFactory được dùng tạo ra CacheClient dùng put và get đối tượng từ cache.

   1: //Declaring cluster's servers 

   2:  

   3: ServerEndPoint[] servers = new ServerEndPoint[2]; 

   4:  

   5: servers[0] = new ServerEndPoint("SERVER1", 22233, "distributedCacheService"); 

   6:  

   7: servers[1] = new ServerEndPoint("SERVER2", 22233, "distributedCacheService"); 

   8:  

   9: //Creating cacheFactory 

  10:  

  11: CacheFactory factory = new CacheFactory(servers, true, false); 

  12:  

  13: //Accessing named cache 

  14:  

  15: Cache catalogCache = factory.GetCache("CatalogCache"); 

  16:  

  17: //Putting catalog into Velocity cache 

  18:  

  19: catalogCache.Put("Catalog1", CatalogManager.GetCatalog("Catalog1")); 

  20:  

Sau khi đặt đối tượng vào cache, có thể truy xuất chúng sau này:

//Getting catalog from Velocity cache 

Catalog myCatalog = (Catalog)catalogCache.Get("Catalog1"); 

Trong ứng dụng minh họa, Catalog được load lần đầu tiên từ csdl, sau đó được lưu trữ trong cache, và tại thời điểm này catalog có thể được dùng bởi bất kỳ ứng dụng nào trên web trong farm. Điều này khác với ASP.NET Cache, mỗi web server chỉ có thể truy cập cache của nó mà thôi. Nhìn address bar trong hình 5 và nhìn catalog được browsed dùng 2 server khác nhau, nhưng lại được load và hiển thị cùng thời điểm (xem statistics box). Điều này chỉ có thể xảy ra khi 1 đối tượng không được lưu trữ trong cùng AppDomain của web apps. (chỉ xảy ra trong ASP.NET cache). Chúng đã được lưu trong Velocity cache. Cung cấp cái nhìn thống nhất cho tất cả các server trong cluster.

Fig.5 same page requested from 2 different web servers, accessing same Velocity cache (click to enlarge)

ASP.NET Integration

Xem cách tích hợp Velocity vào ASP.NET App, quản lý Section, thêm vào StateServer và SQLServer mode có sẵn. Với StateServer, service chạy trên state server, quản lý section tập trung và có thể phân tán và cân bằng web request trên 1 vài web server trong farm, duy trì hiệu suất chấp nhận được. Trong hoàn cảnh này,…

Giải pháp thứ 2 là lưu trữ section trong SQL Server database, đánh mất hiệu suất nhưng có thể chấp nhận được khi truy cập sesstion data, mất ít nhất 25%.

Advertisements

Author: dinhnn

Senior software developer, a technical leader. You can be reached at via email to dinhnguyenngoc@gmail.com, via my blog at dinhnguyenngoc.wordpress.com, and on Twitter @dinhnguyenngoc.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s