You are on page 1of 10

Windows Azure ile Cloud Computing Uygulamalar 7

Zaman ierisinde planl ya da plansz olarak, birok ilem yaplmaktadr. Gnmzde sosyal alar ile paylamlar ya da bankalar ile birok harcamalar yapmaktayz. Yaplan ilemler ile kullanclar iin nemli olmayan birok ilem alkanlklar, irketler iin CRM bilgisi olarak depolanmaktadr. Gnmzde mteri isteklerini, talep etmeden hazrlayan irketler kazanmaktadr. Yeni nesil CRM sreleri, her yeni gn zellik kazanarak ekillenmektedir. Sz konusu zellikler, CRM srecin gerekletirilmi olduu, lkenin belirtmi oluu yasal yaptrmlara gre gerekletirilmektedir.

irketler, i planlama ve uygulama senaryolarn, istek ve yasal yaptrmlara uyumluluk salama amac ile gncellemektedir. Gemi sre de gereksinim bulunmayan zellikler, gelecek dnem de istenebilmektedir. Gerekleen deiimler, kullanlan i uygulamalarnn ekillendirilmesi ya da yeniden gelitirilmesi gndeme gelebilmektedir. Trkiye Cumhuriyetinde, 1999 yln sonu itibari ile vatandalk numaras uygulamas balatlmtr. Uygulama ile isim benzerliklerinde kaynaklanan problemler ve tm ilemlerin tek numara zerinde gerekletirilmesi amalamtr. alma ile bata salk sektr olmak zere, insan ile ilikili tm sektrlerde kullanlan uygulamalarda, vatandalk numarasn temel alma zelliinin kazandrlmas gereksinimi ortaya kmtr. Yaplan ilemler ile tamamlanm mevcut ya da sren ilem verilerinin dzenlenmesi gereksinimi ortaya kmtr. sreleri, i kural ya da yasal yaptrmlarn uygulanmas sebebi ile ilem girdi ve ktlarnn deiiklik gstermesi gndeme gelebilmektedir. Yaplan ilemler, mevcutta verilerin dzenlenmesi, performans ve depolama srelerini de etkilemektedir.

uygulamalar, kullanclarndan yazl ya da Binary trnde eitli veriler almakta ya da retilmektedir. Meydana gelen veriler, zaman ierisinde veri ynlarn olumasna neden olmaktadr. Veri ynlar ise, zaman ile byk veri(Big Data) olgusunu gndeme getirmektedir. Her irketin alm olduu ana i dal zerinde almas, konu ile ilgili uzmanlamasn salayacaktr. Gereksinimleri duyduu dier yan ihtiyalar, konunun uzmanlarnda salamas, i srecini ve retimin kalitesini artracaktr. irketler sahip olduklar veri ynlarn, depolama, analiz ve ynetim iin eitli i uygulamalar kullanmaktadr. Veri ynlar ile ilgili ilem yaplabilmek iin edinilen aralar, zamanla her irketlerin birer veri merkezinin olumasna neden olmaktadr. Veri merkezlerin kurulmas, ynetilmesi, bakm ya da nitelikli i gcnn oluturulmas, irketlerin i kollar dnda ar ykler altna girmesine neden olmaktadr.

Gnmzde sektr ve i kollarn eitlenmesi, i ihtiyalarnn ve gereksinim duyulan verinin artmasna neden olmaktadr. gereksinimleri salanmas ve istenilen sonularn retilebilmesi iin uygulamalar, Cloud Computing saylayclara ve zellikle Microsoft Windows Azure Platform a tanmaktadr. uygulamalarnn, gerekletirilmesi istenen sreci en avantajl gerekletirilmesi amac ile eitli teknolojik bamlklara yklenmektedir. eitli nedenlerden dolay, deien i sreleri, kullanlan i uygulamalarnn da gncellemesi gereksinimini ortaya kartmaktadr. Uygulamalar, i sreleri ile ilgili eitli avantajlar sunarken, deiim srelerinde handikaplarn olumasna neden olabilmektedir. Uygulama mimarileri, i sre ve yasal bamlklar nedeni ile kullanc tarafndan alnan ve retilen verilerin gncellenmesi gndeme gelebilmektedir. Uygulama veri yaplarnn, zaman ve ihtiyalarn gereince deimesi, uygulama performans ya da veritaban optimizasyonu gibi problem oluturabilmektedir. Gemi dnemde gereksinim olduu dnlen veriler, farkl bir dnemde gereksinim duyulmayabilir. Benzer durum olarak, baz verilere de gereksinim duyulabilmektedir. Yaplan ilemler, verinin depolanmas ya da analiz srelerini etkileyebilmektedir.

Gelien teknoloji, i srelerinin kolay, isteklere hzl cevap veren i zmleri sunmasna olanak salamaktadr. Gnmzde i uygulamalarndaki veri yaplarn hzl sorgulama ve dzenleme gereksinimi ortaya kmtr. Ortaya kan gereksinimler, veri yaplarnn esnek olma gereksinimini dourdu. 2009 yln da elenceyi se, ilikisel=yanl; olan gerek Dnyadan faydalan slogan ile yaplan, "no:sql(east)" konferans NoSQL konusunda eitli dncelerin olumasna byk etki oluturmutur.

NoSQL, 1998un sonlarna doru ortaya kan bir kavramdr. Klasik ilikisel veritaban yapanda bulunmayan ve sorgulama iin SQL dili kullanmayan veritaban trdr. Genel olarak xml ya da JSON formatnda veri depolama yapmaktadr. Teknolojik deiim, veri yaplarnn esnek olma gereksiniminden karak, hizmet olarak sunulma srecini beraberinde getirmitir. Microsoft ve dier Cloud Computing salayclar eitli depolama hizmetleri ile kullanclarna Cloud Storage hizmetleri sunmaktadr. Microsoft Windows Azure Platform ile kullanclarna klasik ilikisel(SQL Database) veritaban hizmeti sunduu gibi NoRelation(Windows Azure Storage) i zm de sunmaktadr. Windows Azure Platform No-Relation i zm olarak, Windows Azure Storage hizmeti salamaktadr. Hizmet ile Binary ve dier veri trleri farkl nesneler ierisinde gveli ve yksek optimizasyonu deerlerinde, depolanmas salanmaktadr. Aada Windows Azure Storage hizmeti katmanlar belirtilmitir.

Windows Azure Storage hizmeti, paral ve paralara zg zelliklerin olmas sebebi ile anlatmn devamnda Windows Azure Storage n paralarndan olan Windows Azure Table Storage ile ilgili bilgiler verilecektir. Windows Azure Table Storage, SQL Database yaklamnda bulunan Table nesnesine benzemektedir. Ama yapsal baz zg zelliklerden dolay, Windows Azure Table Storage yaps SQL Databasede baz farklklar gstermektedir. Aada Windows Azure Storage ve SQL Database ile ilgili bilgi ve karlatrmalar bulunmaktadr. zellik likisel veri Server-side alama Geo-replication Scale-out LINQ destei Veri eriimi Ynetim protokoll En az veri depolama En fazla veri depolama Firewall Gvenlii Windows Azure Table Storage Desteklemiyor Desteklemiyor Destekliyor Otomatik Destekliyor OData Protokol HTTP/HTTPS zerinde REST 1MB 100TB Tablo bana Desteklemiyor SQL Database Destekliyor Destekliyor Desteklemiyor Manuel Destekliyor ODBC ya da JDBC HTTP/HTTPS zerinde REST ile ODBC/JDBC 2GB 150GB Tablo bana Destekliyor

REST protokol ile eriim Transaction Transaction logs tutma

Destekliyor Destekliyor (Limitli) Desteklemiyor

Destekliyor Destekliyor Destekliyor

Windows Azure Table ile almak, veritaban ilemlerini Entity Framework ile yapmak kadar kolay, ilevsel ve hzldr. Windows Azure Table Storage, veri ilem srelerin de LINQ sorgularn kullanlabilmektedir. Entity Framework ile gelitirilen uygulamalarda DbContext nesnesi kullanld gibi Windows Azure Table Storage yapsnda ise, TableServiceContext nesnesi kullanlmaktadr.
public class FunnyAppContext : TableServiceContext { public FunnyAppContext(string baseAddress, StorageCredentials credentials) : base(baseAddress, credentials) { } public IQueryable<Tag> Tag { get { return this.CreateQuery<Tag>("Tag"); } } public IQueryable<Post> Post { get { return this.CreateQuery<Post>("Post"); } } public IQueryable<Comment> Comment { get { return this.CreateQuery<Comment>("Comment"); } } }

Uygulama rnei olan, WindowsAzure.FunnyApp almas nesneye ynelimli olarak gelitirilerek, gerek yaamda karlaabilecek durumlar ele alnmaya allmtr. Aada WindowsAzure.FunnyApp almas ile ilgili snf ilikisel emas bulunmaktadr.

Yukardaki ema da grld gibi EntityBase snf TableServiceEntity snfnda tretilmitir. Yaplan tretme ile Windows Azure Table Storage Entity fonksiyonellii kazandrlm olacaktr. Temel snf olan EntityBase snfndan treyen snflar, PartitionKey , RowKey ve Timestamp zellikleri kazanmaktadr. Sz konusu zellikler, Windows Azure Table Storage ierisinde verilerin, benzersiniz(PartitionKey , RowKey) ve ilem zaman(Timestamp) ile ilgili bilgiler tamaktadr.
public class EntityBase : TableServiceEntity { public EntityBase() { this.PartitionKey = DateTime.UtcNow.ToString("MMddyyyy"); this.RowKey = string.Format("{0:10}_{1}", DateTime.MaxValue.Ticks DateTime.Now.Ticks, Guid.NewGuid()); } }

Klasik uygulama veritaban uygulama gelitirme srecinde gerekletirildii gibi Windows Azure Table Storage ile de GRUD ilemleri yaplabilmektedir. Yaplan ilemlerin bir kalp zerinde gidebilmesi amac ile Repository tasarm deseni kullanlmtr.
public interface IRepository<TEntity> { TEntity Find(string partitionKey, string rowKey); TEntity Find(string rowKey); void Create(TEntity entity); void Delete(TEntity entity); void Update(TEntity entityToUpdate); void SubmitChange(); IQueryable<TEntity> Get(); }

Windows Azure Table Storage nesnesi ile veri ilemlerinin ynetebilmesi amac iin Repository nesnesinin ynetilebildii FunnyAppRepository snf hazrlanmtr. Snf EntityBase trne ait, nesnelere hizmet vermek amac ile snrlandrlmtr.
public class FunnyAppRepository<TEntity> : IRepository<TEntity>, IDisposable where TEntity : EntityBase { // veri ilemleri ile ilgili hesap // bilgilerinin alnmas private static CloudStorageAccount _storageAccount; // i nesnesi ile ilgili tanmlamann yaplmas private readonly FunnyAppContext _context; // nesne trne ayit isim alnmas private readonly string _entitySetName; public FunnyAppRepository() { // veri ilemleri ile ilgili gerekli bilgilerin alnmas _storageAccount = CloudStorageAccount.FromConfigurationSetting(Utils.ConfigurationString ); // veri hesab bilgilerine bal olarak, // veri nesnelerinin Windows Azure Storage zerinde oluturulmas CloudTableClient.CreateTablesFromModel( typeof (FunnyAppContext), _storageAccount.TableEndpoint.AbsoluteUri, _storageAccount.Credentials); // seili olan nesne trnn isminin alnmas _entitySetName = typeof (TEntity).Name; // seili olan nesne ile ilgili gerekli tanmlamalarn // Windows Azure Storage ierisinde olup/olmadn kontrollnn yaplmas . // Sz konsu nesnenin Windows Azure Storage ierisinde olmamas durumunda // nesne isimine bal olarak, gerekli tanmlamalar yaplmas _storageAccount.CreateCloudTableClient().CreateTableIfNotExist(_entitySetN ame); // GRUD ilemlerinde sorumlu olan, i nesnesine eriim ile ilgili // gerekli bilgilerin atanmas this._context = new FunnyAppContext(_storageAccount.TableEndpoint.Absolute Uri, _storageAccount.Credentials); this._context.RetryPolicy = RetryPolicies.Retry(3, TimeSpan.FromSeconds(1) ); } // nesne trne bal olarak // rowkey ve partitionkey ile kayt getirme public TEntity Find(string partitionKey, string rowKey) { return (from g in _context.CreateQuery<TEntity>(_entitySetName) where g.PartitionKey == partitionKey && g.RowKey == rowKey select g).FirstOrDefault(); }

// nesne trne bal olarak // rowkey ile kayt getirme public TEntity Find(string rowKey) { return (from g in _context.CreateQuery<TEntity>(_entitySetName) where g.RowKey == rowKey select g).FirstOrDefault(); } // nesne trne ayit yeni ye oluturma public void Create(TEntity entity) { this._context.AddObject(_entitySetName, entity); } // nesne silmek iin public void Delete(TEntity entity) { this._context.DeleteObject(entity); } // nesne gncellemek iin public void Update(TEntity entityToUpdate) { this._context.UpdateObject(entityToUpdate); } // yaplan deiikleri depolama alanna yanstmak iin public void SubmitChange() { this._context.SaveChanges(); } // nesne trne ayit tm ierikleri ekebilmek iin public IQueryable<TEntity> Get() { return this._context.CreateQuery<TEntity>(_entitySetName); } public void Dispose() { GC.SuppressFinalize(this); } }

Tanmlamas yaplan i nesnelerinin, kullanm ile uygulama senaryosu olan, Kullancn tarafnda yklenen fotoraf ieriklerin grntlenme sreci gerekletirilmektedir. Yaplan ilem ile LINQ sorgusu kullanarak, gerekli bilgiler edinilmektedir.
Protected void Page_Load(object sender, EventArgs e) { if (IsPostBack) return; // Post nesne trne ayt, repository i nesnesinin tanmlanmas FunnyAppRepository<Post> _postRepository = new FunnyAppRepository<Post>();

List<PostViewData> viewDatas = new List<PostViewData>(); // istenilen ncllerin oluturulduu Linq sorgusu _postRepository.Get().Where(post => post.UserId == Membership.GetUser(Page.Use r.Identity.Name) .ProviderUserKey.ToString()).ToList() .Where(post=> post.State) .OrderByDescending(post => post.Timestamp) .Take(20).ToList().ForEach(post => viewDatas.Add(new PostViewDa ta() { PostContent = post.PostContent, PostImage = post.PostImage, RowKey = post.RowKey, UserId = post.UserId })); this.RepeaterImages.DataSource = viewDatas; this.RepeaterImages.DataBind(); }

Her yeni gn, yeni almalar ve ilemler yapmaktayz. Gerekletirilen sreler, veri ynlar olumasna neden olmaktadr. Meydana gelen veri ynlar, gncelleme, analiz ve depolama gibi gereksinimleri ortaya karmaktadr. Yaanan problemler, ortaya kan NoSQL yaklamlar ile amalanmaktadr. Veri yaplarnn hatal analiz ve planlanmas nedeni ile veri ile ilgili tm alanlarda problemlerin ortaya kmas mmkn olacaktr. Not: Yaplan anlatmn rneklenmesi amac ile WindowsAzure.FunnyApp uygulamas hazrlanmtr. Aadaki balant kullanlarak, uygulama kaynak kodlarna eriebilirsiniz. Github / https://github.com/ibrahimatay/WindowsAzure.FunnyApp Windows Azure Storage yaklam, gelitiricilerine ynetmekte olduklar verileri snflandrma ve planlamasna yneltmektedir. Ynetilmesi amalanan verilerin Windows Azure Storage yaklama uyumluunun salanmas ile esnek ve kolay ynetilebilir veri yaplarna sahip olunmaktadr. Konu ile ilgili sorularnz info@ibrahimatay.org eposta adresine yneltebilirsiniz. brahim ATAY

TC Kimlik Numaras http://www.nvi.gov.tr/Hakkimizda/Projeler,Mernis_Hedef.html http://tr.wikipedia.org/wiki/T%C3%BCrkiye_Cumhuriyeti_Kimlik_Numaras%C4%B1 no:sql(east) https://nosqleast.com/2009/ Repository Pattern http://martinfowler.com/eaaCatalog/repository.html

Windows Azure Table Storage and SQL Database - Compared and Contrasted http://msdn.microsoft.com/en-us/library/windowsazure/jj553018.aspx Windows Azure Table Storage http://www.windowsazure.com/en-us/develop/net/how-to-guides/table-services/

You might also like