Está en la página 1de 9

Windows Azure ile Cloud Computing Uygulamalar 6

irketler, yaamlarn srdrebilmek amac ile eitli i sreleri gerekletirmektedir. sreleri, srekli ve baarl sonular retilmesi, i kural ve standartlar ile salanmaktadr. Oluturulan i kurallar, kalitenin korunmasn amalamaktadr. Gnmzde mteri memnuniyetinin, devaml ve istenildii gibi salanmas, i uygulamalar ile gerekletirilmektedir. standart ve kurallarnn farklk gstermesi, kullanclar zelletirilmi uygulamalara yneltmektedir.

Mteri portfylerine, uygun retim ve hizmetlerin sunulmas, i srelerinin srekli ve baarl olmas ile salanmaktadr. stenilen sonular, sreleri gerekletiren ve izleyen uygulamalarn salkl almas ile salanmaktadr. uygulamalar kullanm, gerekletirecei i srecinin younluuna bal olarak deimektedir. rnein; ylba dnemini de ierisine alan yln son ay, e-ticaret ve irketlerin muhasebe blmleri, hesaplar kapatabilmek ve rn satmak amac ile youn olarak almaktadr. Gerekletirilen ilemler, yln dier zamanlarna gre daha youndur. uygulamalar, farkl zaman birimlerinde oluan i younluklarn baar ve performans ile alabilmesi iin elastik alma ortamlarna ihtiya duymaktadr. irketler, i srelerini devaml, en az maliyet ve baarl olarak gerekletirmek amac ile uygulamalarn Cloud Computing salayc irketler ve zellikle Microsoft Windows Azure Platforma tamaktadr.

uygulamalarnn Windows Azure Platforma tanmas ile uygulamalarn, kullanabilecei zengin alt yap salanmaktadr. Uygulamalarn alma ortamnda Windows Azure Platform gibi zengin bir ortama tanmas, kullanclar tarafnda meydana gelecek olan i yknn dzenlenmesine ve uygulama zerinde bulunan stresin azaltlmasn salayacaktr. Ama Windows Azure Platform un salam olduu alt yap gcn amaland gibi kullanlmasn salamayacaktr. uygulamalar, Windows Azure Platform ierisinde en iyi baar ve performans yakalayabilmesi iin, uygulamalarn Windows Azure Platform a uyumlu olarak gelitirilmesi gerekmektedir. Uygulama yaam ortamlar, uygulamalar zerinde bulunan i younluu dzenlemesini salamaktadr. Kullanlan uygulamalarn yazlm mimari yaps ise, uygulamann salk ve baarl almasn salamaktadr. Gelitirilen i uygulamalarnn, Windows Azure Platform alt yap zenginliklerini en iyi ekilde kullanlabilmesi iin Windows Azure Platform un desteklemi olduu, Windows Azure Cloud Service uygulama modelinin kullanlmas nerilmektedir. Uygulamalar, Windows Azure Cloud Service modeli ile kolay ynetilebilir, gvenli ve elastiki yaam ortam kazanmaktadr. Uygulama gelitiricilerinin, Windows Azure Platform zenginleri ve Windows Azure Cloud Service uygulama modelinin hzl ve kolay renebilmesi amac ile WindowsAzure.FunnyApp uygulama rnei hazrlanmtr. Uygulama rnei ile temsili olarak i younluklarn datlmas ve katmanl alma sreleri incelenmitir. Uygulama rneinde aada belirtilen, senaryolar gerekletirilmitir. Kullanc hesabnn ilemleri (kullanc ad, parola, eposta) Resim ykleme alannn oluturulmas (istenen resmin yklenmesi, aklama, ilgili etiketler) Yklenen resimlerin thumbnail boyutlarnda ekillendirilmesi (Windows Azure Worker Role) Yklenen resimlerin grntlenmesi (thumbnail boyutunda resimlerin listelenmesi) Resminde detay gsterilmesi (aklama, etiketler ve yklene boyutlarda resim) Yorum giri alann oluturulmas (kullanc ad, eposta ve yorum) Yorumlarn listelenmesi (Kullanc ad ve yorum gsterilmesi)

uygulamalar ierisinde kullanc ilemlerinin gerekletirildii alanlar olduu gibi youn i yknn olduu paralar da bulunmaktadr. uygulamalarnda rnein; resim ya da video ileme, youn muhasebe ve arama ilemleri gerekletirilebilmektedir. Sz konusu ilemler, Windows Service uygulamalar ya da kullanc ilemlerinin devam ettirebilecei ekilde planlanmaktadr.

Uygulama rnei olan, WindowsAzure.FunnyApp almas ierisinde kullanc tarafnda yklenen resim ieriin, ierik bilgisi alnarak ileme katmanna tanmaktadr. Yaplan ilem ile kullanc almalarna devam ederken, resim ileme sreleri farkl katmanda tamamlanmaktadr. lem srecinde Windows Azure nesneleri kullanarak, katmanlar arasnda mesajlama ilemleri ile gereklemektedir. Windows Azure Platform ierisinde birbirinden bamsz olan, uygulama katmanlar iletiiminin salanmas amac ile Queues nesnelerinin kullanlmas nerilmektedir. Queues nesneleri, Windows Azure Storage ierisinde bulunduu gibi Windows Azure ServiceBus Queues yaklam ile de kullanlmaktadr.

Windows Azure Platform ierisinde ayn uygulama domaininde alan, katmanlar aras iletiimin salanmas amac ile Windows Azure Storage ierisinde bulunan Queues nesnesi kullanlmas nerilmektedir. Uygulama paralarnn d ya da i sistemler ile iletiim salamas iin Windows Azure ServiceBus Queues yaklamn kullanlmas nerilmektedir. Windows Azure Platform un desteklemi olduu Queues nesneleri ile ilgili bilgi ve karlatrma aada bulunmaktadr. zellik Toplu mesaj gnderme Toplu mesaj alma Windows Azure Queues Desteklemiyor Destekliyor Windows Azure Service Bus Queues Destekliyor Destekliyor

WCF Entegrasyonu WF Entegrasyonu Server-Side Transaction Log Zamanlanm Gnderim En az mesaj boyuttu En fazla mesaj boyuttu Kuyruk Algoritmas Kullanlan iletiim protokoll Peek fonksiyon destei Authentication Yetki tabanl iletiim

Desteklemiyor Gelitirme Gerektiriyor Destekliyor Destekliyor 64KB 100TB HTTP/HTTPS zerinde Rest Destekliyor Symmetric key Desteklemiyor

Destekliyor Destekliyor Desteklemiyor Destekliyor 256KB 1,2,3,4 ya da 5GB First-In-First-Out (FIFO) HTTPS zerinde Rest Desteklemiyor ACS claims Destekliyor

Gerekletirilen uygulama rnei, d herhangi sistem ile iletiim kurmamas nedeni ile Windows Azure Queues kullanlmtr. Uygulama ierisinde mesaj ieriinin gnderilmesi ve dinleyici tarafndan alnmas ile ilgili sreler gerekletirilmitir. Uygulama senaryolar, aada kaynak kodlar ile incelenmektedir. Aada anlatlan sreler de kullanlmak zere baz sabitler tanmlanmtr. Tanmlanan deikenler, yazlan kod ierisinde anahtar ieriklerin tek noktada kontroln salamaktadr. Blob, Queue nesneleri iin tanmlanan deiken deerlerinin, kk harf ile yazlmasna dikkat edilmelidir.
public class Utils { public const string ConfigurationString = "DataConnectionString"; public const string CloudQueueKey = "imagequeue"; public const string CloudBlobKey = "imageblob"; }

Uygulama Senaryosu I Kullanc tarafnda resim ve ilgili bilgilerin girilmesi ilemleri gerekletirilmektedir. Gerekletirilen ilemler ile ilgili bilgiler mesaj kuyruuna girmesini salayacaktr. Konu ile ilgili kaynak kodlar, yorumlar ile aada anlatlmtr.
private static readonly object _look = new object(); private static bool _storageInitialized = false; // ilem gerekletirlecek olan nesnelerin tanmlanmas private static CloudBlobClient _blobClient; private static CloudQueueClient _queueClient; protected void Page_Load(object sender, EventArgs e) { this.Page.Title = "Image Uploads"; if (IsPostBack) return; InitializeStorage(); } protected void ButtonSave_Click(object sender, EventArgs e) {

if (FileUploadImage.HasFiles & Page.IsValid) { string uniqueBobName = string.Format("{0}/funnyimage_{1}{2}", Utils.CloudBlob Key, Guid.NewGuid().ToString(), Path.GetExtension(FileUploadImage.FileNa me)); CloudBlockBlob blob = _blobClient.GetBlockBlobReference(uniqueBobName); blob.Properties.ContentType = FileUploadImage.PostedFile.ContentType; blob.UploadFromStream(FileUploadImage.FileContent); FunnyAppRepository<Post> postRepository = new FunnyAppRepository<Post>(); FunnyAppRepository<Tag> tagRepository = new FunnyAppRepository<Tag>(); MembershipUser user = Membership.GetUser(Page.User.Identity.Name); if (user != null) { Post post = new Post { PostContent = TextBoxDescription.Text, PostTitle = TextBoxTitle.Text, State = false, UserId = user.ProviderUserKey.ToString() }; string[] tags = TextBoxTag.Text.Split(';'); foreach (string tag in tags) { if (!string.IsNullOrEmpty(tag)) { tagRepository.Create(new Tag() { PostRowKey = post.RowKey, PostPartitionKey = post.PartitionKey, TagName = tag, }); tagRepository.SubmitChange(); } } postRepository.Create(post); postRepository.SubmitChange(); // Kuyruk nesneleri CloudQueue queue = _queueClient.GetQueueReference(Utils.CloudQueueKey); // mesaj ieriinin oluturulmas // mesaj ierisinden birden fazla bilgi olmas sebebi ile "," karakteri i le bilgiler birbirinden ayrlmtr. CloudQueueMessage message = new CloudQueueMessage(string.Format("{0},{1},{2}", blob.Uri, post.Par titionKey, post.RowKey)); // Mesaj kuyrua eklenmitir. queue.AddMessage(message);

LabelResult.Text = "Uploaded"; } else { LabelResult.Text = "Failed"; } } } private void InitializeStorage() { if (_storageInitialized) { return; } lock (_look) { if (_storageInitialized) { return; } try { // hesap bilgilerinin alnmas CloudStorageAccount storageAccount = CloudStorageAccount.FromConfiguratio nSetting(Utils.ConfigurationString); // image blob taycsnn oluturulmas _blobClient = storageAccount.CreateCloudBlobClient(); CloudBlobContainer container = _blobClient.GetContainerReference(Utils.Cl oudBlobKey); container.CreateIfNotExist(); // Blob taycsna ile ilgili eriim ayarlarnn tanmlanmas var permissions = container.GetPermissions(); permissions.PublicAccess = BlobContainerPublicAccessType.Container; container.SetPermissions(permissions); // create queue to communicate with worker role _queueClient = storageAccount.CreateCloudQueueClient(); CloudQueue queue = _queueClient.GetQueueReference(Utils.CloudQueueKey); queue.CreateIfNotExist(); } catch (WebException exception) { Trace.Write(exception.Message); } _storageInitialized = true; } }

Uygulama Senaryosu II Mesaj kuyruunun dinlenmesi ve ilgili bilgilerin alnmas gerekmektedir. Sz konusu bilgilerin alnmas ile Worker Role ierisinde resim ileme sreci istenilen boyutlara ekillendirilecektir. Dinleme ilemi, uygulama yaam sresi boyunca, kullanc taleplerinin gerekletirilmesi amac ile sonsuz bir dng ierisinde gerekletirilmektedir.
// ilem gerekletirlecek olan nesnelerin tanmlanmas private CloudQueue _queue; private CloudBlobContainer _container; public override void Run() { // Worker nesnesi ierisinde srecin srekli olarak gerekletirilmesi amac ile // sonsuz dngye alnmas gerekmektedir. while (true) { try { // lem srecinde kuyruk ierisinde bulunan mesajn dinleme ilemi CloudQueueMessage message = _queue.GetMessage(); if (message != null) { string[] messageArray = message.AsString.Split(new char[] { ',' }); string outputBlobUri = messageArray[0]; string partitionKey = messageArray[1]; string rowkey = messageArray[2]; // Kuyruk ierisinde okunan mesaj, dng ierisinde tekrar okumas nemek amac ile // mesaj Peek edilmektedir. _queue.PeekMessage(); string inputBlobUri = Regex.Replace(outputBlobUri, "([^\\.]+)(\\.[^\\ .]+)?$", "$1-myimage$2"); _container.CreateIfNotExist(); CloudBlob inputBlob = _container.GetBlobReference(outputBlobUri); CloudBlob outputBlob = _container.GetBlobReference(inputBlobUri); var u = inputBlob.Uri.AbsolutePath; // Blob nesnesi ierisinde bulunan resim ierii okunmas using (BlobStream input = inputBlob.OpenRead()) using (BlobStream output = outputBlob.OpenWrite()) { ProcessImage(input, output); output.Commit(); outputBlob.Properties.ContentType = "image/jpeg"; outputBlob.SetProperties();

FunnyAppRepository<Post> postRepository = new FunnyAppRepository< Post>(); Post post = postRepository.Find(partitionKey, rowkey); post.PostImage = inputBlobUri; post.State = true; postRepository.Update(post); postRepository.SubmitChange(); _queue.DeleteMessage(message); } } } catch (StorageClientException e) { Trace.Write(e); } } } public override bool OnStart() { // Worker zerinde balatlmas amalanan varsaylan balant says ServicePointManager.DefaultConnectionLimit = 12; // Uygulama ierisinde balant bilgilerinin alnma ilemi CloudStorageAccount.SetConfigurationSettingPublisher((configName, configSetter) = > configSetter(RoleEnvironment.GetConfigurationSettingValue(configName))); // Uygulama ierisinde balant bilgilerinin alnma ilemi var storageAccount = CloudStorageAccount.FromConfigurationSetting(Utils.Configura tionString); // kuyruk nesnesi ile ilgili refeasnlarn oluturulmas CloudQueueClient queueStorage = storageAccount.CreateCloudQueueClient(); _queue = queueStorage.GetQueueReference(Utils.CloudQueueKey); // kuyruk nesnesinin bulunup-bulunmad kontrollnn yaplmas _queue.CreateIfNotExist(); CloudBlobClient blobStorage = storageAccount.CreateCloudBlobClient(); _container = blobStorage.GetContainerReference(Utils.CloudBlobKey); _container.CreateIfNotExist(); return base.OnStart(); } // Resim boyutlandrma ilemleri ile fonksiyon public void ProcessImage(Stream input, Stream output){ ... }

uygulamalarnn, her yeni gn daha fazla kullanlmas ile i ykleri artrlmaktadr. Gerekletirilen her srecin, devaml ve baarl sonular retmesi beklenmektedir. Srelerin planland gibi gereklemesi, sre ierisinde kullanlan uygulamann salkl almas byk nem tamaktadr. Not: Yaplan anlatmn rneklenmesi amac ile WindowsAzure.FunnyApp uygulamas hazrlanmtr. Aadaki balant kullanarak, uygulama kaynak kodlarna eriebilirsiniz. Github / https://github.com/ibrahimatay/WindowsAzure.FunnyApp uygulamalarn baarl ve performansl almas, uygulama yazlm mimarisi ve konumlandrld platform ile ilikili olarak gereklemektedir. Windows Azure Cloud Service uygulama gelitirme modeli ile gelitirilen uygulamalar, i srecine bal olarak paralarna ayrlarak, beklenen baar ve performans elde edilebilmektedir. Konu ile ilgili sorularnz info@ibrahimatay.org eposta adresine yneltebilirsiniz. brahim ATAY

Windows Azure Queues and Windows Azure Service Bus Queues - Compared and Contrasted http://msdn.microsoft.com/en-us/library/hh767287(VS.103).aspx What is a cloud service? http://www.windowsazure.com/en-us/manage/services/cloud-services/what-is-a-cloud-service/ The NIST Definition of Cloud Computing http://csrc.nist.gov/publications/nistpubs/800-145/SP800-145.pdf

También podría gustarte