Bulut Bilişim (Cloud Computing) Nedir
Burada anlatılan hikayedeki kişi ve kurumlar tamamen hayal ürünüdür.
Sene 1995'de ilk...
Microsoft’un bulut mimarisi Windows Azure platformu üzerinde veri altyapısı alışıla gelmiş yöntemlerden ziyade bize hazır sunulan veri saklama servisleri (Cloud Storage Services) üzerinden yapılmaktadır. Bu servisler bize limitsiz veri alanı, devamlı ve hızlı ulaşılabilirlik, güvenlik, internet üzerinden OS bağımsız erişim gibi önemli faydalar sağlamaktadır. Yazımızda ise bu servislerden BLOB alt yapısını beraber inceleyeceğiz.
BLOB (Binary Large OBject) servisi fotoğraf, video, doküman, rar dosyaları gibi herhangi bir binary verinin tutulmasını ve internet üzerinden erişilebilmesini sağlayan veri saklama alt yapısıdır. Başka bir şekilde ifade etmek gerekirse bulut üzerindeki dosya sistemi (file system) olarak da tanımlanabilir. Dolayısıyla da Türkçe’deki karşılığı damla olan blob terimi de bulut üzerindeki herhangi bir tipteki ve boyuttaki bir dosyayı temsil etmektedir. Blob servisi;
Blob servisinin ne olduğuna kısaca değindiğimize göre bir dosyanın nasıl saklanabileceğine gelin beraber bakalım.
Blob servisini kullanmaya başlamadan önce öncelikle bazı kavramlara değinmekte fayda görüyorum.
Storage Account: Tüm veri saklama servisleri için bir account bilgisine ihtiyaç duyulmaktadır. Blob dosyalarına erişim için de uygun account ile erişim sağlanmalıdır.
Container: Blob dosyalarının saklandığı ve kategorilendiği katmandır. Her bir Blob dosyasının bir Container’ı olmak zorundadır. Bir Storage Account altında sınırsız sayıda Container, bir Container altında da sınırsız sayıda Blob yer alabilir.
Blob: Yukarıda da bahsettiğimiz üzere bulut üzerinde saklanan her bir dosya blob objesidir.

Gelin basit bir dosyanın blob servisi üzerinde nasıl yönetildiğini Windows Azure Emulator ile beraber inceleyelim.
Öncelikle projenize Microsoft.WindowsAzure.StorageClient dll’inin eklendiğinden emin olun.

Bir dosyanın blob servisine kaydedilmesi için öncelikle storage account ile bağlanılarak, eğer yoksa ilgili container yaratılmalı ve bu container’ın altına dosya yüklenmelidir.
protected void Page_Load(object sender, EventArgs e)
{
CloudStorageAccount account = CloudStorageAccount.DevelopmentStorageAccount;
CloudBlobClient client = account.CreateCloudBlobClient();
CloudBlobContainer container = client.GetContainerReference("images");
container.CreateIfNotExist();
}
Yukarıdaki kod örneğinde görüldüğü üzere emülator için gerekli olan DevelopmentStorageAccount ile bağlanılarak images adı altında bir container yaratılmıştır. Kodu çalıştırırsanız eğer bilgisayarımızda kurulu olan SQL sunucusu üzerindeki DevelopmentStorage veritabanında yer alan BlobContainer tablosunda değişikliği görebilirsiniz.


Sıra geldi blob dosyasını kaydetme kısmına. Bunun için CloudBlobContainer üzerinden bir CloudBlob nesnesi oluşturmamız gerekmektedir. Örnek kodumuzu bu duruma göre biraz daha geliştirmek gerekirse;
protected void Page_Load(object sender, EventArgs e)
{
CloudStorageAccount account = CloudStorageAccount.DevelopmentStorageAccount;
CloudBlobClient client = account.CreateCloudBlobClient();
CloudBlobContainer container = client.GetContainerReference("images");
container.CreateIfNotExist();
CloudBlob blob = container.GetBlobReference("teamwork.jpg");
blob.UploadFile(Server.MapPath("~/teamwork.jpg"));
}
CloudBlobContainer sınıfındaki CreateIfNotExist metodunu çağırmamızdan ötürü kodu tekrar çalıştırsanız dahi aynı isimdeki container yeniden yaratılmayacaktır. Daha sonrasında ise CloudBlob sınıfı kullanılarak sunucudaki bir görsel blob servisine yüklenmiştir. Gene Azure için yaratılmış olan veritabanına baktığımızda Blob tablosunda ilgili dosyanın kaydının atandığını görebilirsiniz. Dosyanın kendisi ise binary halinde BlockData tablosunda yer almaktadır.


Blob servisindeki bir dosyaya tarayıcı üzerinden URL ile erişlebildiği gibi kod tarafından da Blob nesnesini bularak ihtiyacımız olan URL bilgisini alabiliriz. Kod tarafında erişebilmek için dosyanın container adı ve blob adı bilinmelidir. Blob nesnelerinin URL bilgisi ise belirli bi standarda göre oluşturulur. Bu URL emülatör kullandığımız için aşağıdaki formatta olmaktadır.
http://127.0.0.1:10000 / storage account / container / blob
Dolayısıyla da az önce yüklediğimiz görselin blob servisindeki adresi aşağıdaki gibidir;
http://127.0.0.1:10000/devstoreaccount1/images/teamwork.jpg
Buradaki localhost üzerindeki 10000 portu üzerinden dinleyen uygulama Storage Emulator tarafından başlatılmış olan Blob servisidir. Storage Emulator arayüzünü tray üzerindeki Windows Azure ikonuna tıklayarak açabilirsiniz. Storage Emulator açıldığında servislerin portları görülebilir ve arzu edildediği taktirde servisler buradan açılıp kapatılabilir.
![]()

Şimdi tekrar kod tarafına geri dönelim ve aşağıdaki örnek kod üzerinde daha önceden yüklediğimiz blob dosyasına tarayıcı tarafından erişmeyi deneyelim. Burada ihtiyacımız olan bilgiler container ve blob isimleridir;
protected void Page_Load(object sender, EventArgs e)
{
CloudStorageAccount account = CloudStorageAccount.DevelopmentStorageAccount;
CloudBlobClient client = account.CreateCloudBlobClient();
CloudBlobContainer container = client.GetContainerReference("images");
container.CreateIfNotExist();
CloudBlob blob = container.GetBlobReference("teamwork.jpg");
Response.Redirect(blob.Uri.ToString());
}
Fakat bu kod çalıştırıldığında “ResourceNotFound” şeklinde bir hata alınmaktadır. Bu hatanın sebebi ise container üzerinde gerekli yetkilendirilmenin yapılmamasından kaynaklanmıştır.

Bu işlem için Container üzerindeki izinler gözden geçirilmelidir. Bu aşamada yetkilerden Blob yetkisini vermemiz şimdilik yeterli olacaktır.
protected void Page_Load(object sender, EventArgs e)
{
CloudStorageAccount account = CloudStorageAccount.DevelopmentStorageAccount;
CloudBlobClient client = account.CreateCloudBlobClient();
CloudBlobContainer container = client.GetContainerReference("images");
container.CreateIfNotExist();
BlobContainerPermissions permissions = container.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Blob;
container.SetPermissions(permissions);
CloudBlob blob = container.GetBlobReference("teamwork.jpg");
Response.Redirect(blob.Uri.ToString());
}
Uygulamaızı bu şekilde çalıştırdığımız taktirde görselin tarayıcı üzerinden erişilebilir olduğunu görebiliriz. Bir Container altındaki tüm blob dosyalarına erişmek istersek ise CloudBlobContainer sınıfının ListBlobs metodu imdadımıza yetişmektedir.
protected void Page_Load(object sender, EventArgs e)
{
CloudStorageAccount account = CloudStorageAccount.DevelopmentStorageAccount;
CloudBlobClient client = account.CreateCloudBlobClient();
CloudBlobContainer container = client.GetContainerReference("images");
container.CreateIfNotExist();
CloudBlob blob = container.GetBlobReference("teamwork.jpg");
blob.UploadFile(Server.MapPath("~/teamwork.jpg"));
BlobContainerPermissions permissions = container.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Blob;
container.SetPermissions(permissions);
ImagesRepeater.DataSource = container.ListBlobs();
ImagesRepeater.DataBind();
}
<asp:Repeater ID="ImagesRepeater" runat="server">
<ItemTemplate>
<asp:Image runat="server" ImageUrl='<%# Eval("Uri") %>' />
</ItemTemplate>
</asp:Repeater>
Eğer bir blob dosyasını silmek istersek CloudBlob sınıfındaki Delete veya DeleteIfExists metotlarını kullanabiliriz.
CloudStorageAccount account = CloudStorageAccount.DevelopmentStorageAccount;
CloudBlobClient client = account.CreateCloudBlobClient();
CloudBlobContainer container = client.GetContainerReference("images");
CloudBlob blob = container.GetBlobReference("teamwork.jpg");
blob.Delete();
//veya
blob.DeleteIfExists();
Şimdilik bu yazımızın sonuna geldik. İlerleyen yazılarda Blob servisini daha detaylı inceleyip diğer storage servislerini de bir göz atacağız. Herkese bol bulutlu günler…
Burada anlatılan hikayedeki kişi ve kurumlar tamamen hayal ürünüdür.
Sene 1995'de ilk...
Microsoft tarafından Türkiye'deki ilk ücretsiz online yazılım okulu Açık Akademi açıldı....
Bir önceki yazımızda Blob servisine kısa bir giriş yapmıştık. Yazıyı okumak isterseniz
Serkan Yazıcıoğlu | Windows Azure Blob Arayüzü
[...] Bir önceki yazımızda Blob servisine kısa bir giriş yapmıştık. Bu yazıyı okumak isterseniz tıklayınız. [...]
Oca 06, 2012 @ 09:20