TCP Ne Kadar Güvenilir – 3

Bir önceki yazımızda (TCP Ne Kadar Güvenilir – 2) recv() metoduna kafayı takmıştık.

recv() metodu çağrılması esnasında karşı uçtaki cihazın bir sebeple tamamen erişilemez olması durumunda (örneğin elektrik kesilmesi, ağ kablosunun çekilmesi/kopması, cihazın reset alması vb.) recv()’in dönmediğini ifade etmiştik. Bu durumu bir örnekle göstermiştik. Aslında eğer sanallaştırma yapabilme imkanınız varsa (örneğin VirtualBox), kablo bağlantısını koparma gibi özellikleri VirtualBox sunmaktadır. recv()’in kablo bağlantısı koparılsa bile sonlanmadığını bu şekilde de test edebilirsiniz.

Bu yazıda, aynı durumda yani kablo çekilmesi veya reset alınması durumunda, send() durumunu irdeleyeceğiz. Bu seferki durum biraz daha karmaşık.

Continue reading

Sanallaştırma – Virtualbox

Sanallaştırma

Sanallaştırma Bulut Bilişim’in can damarı, yazılımıcının dostu ve öğrenmek için büyük olanaklar veren bir teknolojidir. Sanallaştırma ile fiziksel makinemiz üzerinde değişiklik yapmadan gerçek bir fiziksel makinenin sunduğu hizmetlerin tamamına (hemen hemen) erişilebilmesi mümkündür. Günümüzde Docker gibi teknolojilerle çok daha az yükle bunları başarmak mümkün olsa da sanallaştırma gerçek bir fiziksel makine yerine geçebilen oldukça önemli bir teknolojidir.

Virtualbox, masaüstü sanallaştırması düşünüldüğünde açık kaynak olması, güncellemelerinin sıklıkla yapılması, aralarında Windows’un bulunduğu pekçok işletim sistemi için problemsiz çalışması düşünüldüğünde ilk akla gelen ürünlerdendir. Virtualbox eğer linux dağıtımı kullanıyorsanız paket yöneticisinden, eğer windows işletim sistemi sahibi iseniz virtualbox.org sitesinden indirilip kurulabilir. Kurulum adımlarını yapabildiğinizi varsayarak, virtualbox’ın önemli olduğunu düşündüğümüz farklılıklarını ifade edelim.

Linux Dağıtımları için “dkms”

DKMS (dynamic kernel module support), virtualbox guest additons (virtualbox misafir eklentileri), paketinin işletim sistemi kernel güncellemelerinden sonra kendiliğinden derlenmesi ve kayıt ettirilmesi amacıyla kullanılmaktadır. Virtualbox kurulumunuzdan sonra “kernel” vari mesajlar alıyorsanız dkms paketini yüklemeyi deneyebilirsiniz. Bu probleminiz çözmez ise virtualb0x-dkms adlı bir paket te işinizi çözebilir. Bu paketlerin kurulumundan sonra bilgisayarınızı yeniden başlatmanız gerekebilir.

Misafir Eklentileri (Guest Additions)

Tam bir masaüstü deneyimi sunabilmek için virtualbox misafir eklentileri kurulmalıdır. Bu işlemden sonra entegre fare, kopyala-yapıştır (genellikle metin), ekran kartının çeşitli ek çözünürlükleri gibi gerçekten faydalı özellikler kullanılabilir hale gelecektir.

Birden fazla ekran

Evet virtualbox birden fazla ekranı desteklemektedir. Bu özellikten faydalanmak için misafir eklentilerinin yüklü olduğundan emin olunuz.

Birden fazla CPU

Bu özellik te virtualbox tarafından desteklenmektedir.

Nested Virtualization:

Bu kavram malesef Virtualbox tarafından desteklenmemektedir. Bu kavram ile sanal makinenin kendisi içerisinde sanal makineler oluşturulabilmesi (emulated değil) ifade edilmektedir.

Sanallaştırma – KVM

Kernel Virtual Machine (KVM)

Sanallaştırmayı bu yazımızda biraz daha açalım. Sanallaştırmayı full-virtualization, para-virtualization ve donanım destekli sanallaştırma olarak üç şeklinde değerlendirebiliriz.

1. Full-virtualization

VMWare bu sınıftadır. Temel olarak x86 mimarisi donanım kaynaklarına erişim için ring-0, ring-1, ring-2 ve ring-3 şekinde 4 seviye belirlemiştir. İşletim sistemleri ring-0’da çalışmayı beklemektedirler. ring-0 en yetkili ve bütün kaynaklara erişilebilen bir seviyedir. Kullanıcı programları ise ring-3’te çalışmaktadırlar. Sanallaştırmadaki zorluk ta tam olarak burada çıkmaktadır. İşletim sistemleri ring-0’da çalışacak şekilde tasarlanmışlardır. Halbuki sanallaştırma yazılımı (hipervizör) ring-0 da çalışmaktadır, yani işletim sistemi ring-0 da çalışmamaktadır. Bu durumun üstesinden gelmek için VMWare binary translation kavramını ortaya koymuştur. Bu kavram ile kullanıcı programları doğrudan ilgili olduğu seviye olan ring-3’te çalıştırılırken, işletim sistemi ring-1’de çalıştırılmakta ancak işletim sistemi ring-0’ı gerektiren bir komut icra edeceği zaman aynı etkiye sahip komu dizisi hipervizör tarafından çalıştırılmaktadır. Yani bu kısım emule olarak ifa edilmektedir. VMWare’in bulduğu ve standart olarak kullanılan bu metod full-virtualization olarak değerlendirilmektedir.

Full virtualization ile işletim sistemi hiçbir şekilde sanal bir sunucu olduğunu bilmez. Hipervizör sanal makine için sanal bios, sanal ses kartı ve diğer gerekli donanım kaynaklarını sanal olarak vermektedir. Bu tekniğin en önemli yanı da zaten işletim sisteminde bir değişiklik gerektirmemesidir.

2. Para-virtualization

Bu sanallaştırmada misafir işletim sistemi değiştirilmek durumundadır. Full virtualization’dan farklı olarak misafir işletim sistemi para-virtualized olduğunu bilir ve bu değişikliğe uğratılmıştır. Bütün işletim sistemleri bu şekilde sanallaştırılamaz.

3. Donanım destekli sanallaştırma (Hardware assisted virtualization)

İşletim sistemlerinin ring-0’da çalışması ihtiyacı nedeniyle CPU üreticileri ring-0’ın altında, hipervizörler için bir seviye daha oluşturdular ve bu seviyeye root mode dediler. Böylelikle para-virtualization veya binary translation’daki yavaşlatmanın önüne geçildi. Sanal işletim sistemi ring-0 da yapılması gereken bir komut çalıştırdığında basitçe hipervizör bu çağrıyı yakalayacak ve CPU’ya aktaracaktır.

KVM

KVM daha çok sunucu sanallaştırması için tercih edilmektedir. Her ne kadar masaüstü sanallaştırması için çeşitli çözümler bulunsa da Virtualbox kadar olgun bir masaüstü çözümü sunmamaktadır. Ancak KVM oldukça hızlı, kararlı, pekçok sanal disk formatını destekleyen (virtualbox ve vmware’inkiler dahil), ağ tarafı oldukça güçlü bir hipervizördür. Kurulumu oldukça kolaydır. Ancak sadece linux dağıtımları için kullanılabilmektedir. qemu sistem komutlarıyla diskler üzerinde snapshot’lar alma, klonlama gibi işlemleri yapmamıza olanak veren araçları barındırmaktadır. Basit bir gui’si vardır. Bu gui ile sanal makineler oluşturabilir, disk kalıpları için havuzlar tanımlayabilir, oluşturulan sanal makinelerin özelliklerini ayarlayabilirsiniz.

Sonuç

Windows masaüstü sanallaştırması genellikle MS Office bağımlılığı nedeniyle (malesef bazen şirketin şablonları vb. sebeplerle bu bağımlılık oluşabiliyor) tercih edilmektedir. Ancak, playonlinux gibi linux çözümleri bu bağımlılığı kaldırmıştır. Eğer masaüstü sanallaştırmasına windows için gerçekten ihtiyaç duymuyorsanız KVM’yi kesinlikle kullanmalısınız.

Linux üzerinde IP çakışmasını bulma

IP çakışması olup olmadığını Linux üzerinde kontrol etme

DHCP ile IP numaranızı alıyorsanız bu problem ile karşılaşmayacaksınız, ancak IP numaranızı elle ayarlıyorsanız ve ağ trafiğinizde ilginçlikler gözlemliyorsanız bu kontrolü aşağıdaki komut ile yapabilirsiniz.

arping -I eth0 -c 3

bu komutu çalıştırırken root haklarına sahip olmalısınız. Yani eğer ubuntu temelli bir işletim sistemi kullanıyorsanız ve IP adresiniz 10.1.1.10 ise:

sudo arping -I eth0 -c 3 10.1.1.10

şeklinde kontrol edebilirsiniz.

-I ile network interface -c ile count belirtilmektedir.

Büyük Veri 101

Büyük Veri Nedir?

Veri’yi tanımlayacak olursak;

Veritabanındaki bir kayıt
Fotoğraf
MP3 dosyası
Tweet
Sayı
Radyo sinyali
Sıcaklık
Mobil uygulama
Bir web sayfasında kalma süresi
Sizin için anlamlı (veya şimdilik anlamsız) herşey…

Önemli olan bu veriyi yorumlayabilmektir. Amerika’da elle gönderilen her posta (e-posta değil bildiğiniz mektup) dijital olarak da gönderen, gönderilen gibi bilgileriyle dijital ortamda saklanmaktadır ki ABD’de posta oldukça yaygın bir haberleşme türüdür.

Ek olarak Google aramalarımızdan grip salgınını tahmin edebilmektedir.

Peki büyük veri nedir, benim büyük verim, senin büyük verin midir? Herkesin bir popisi var mıdır? Bu kavram belki de en çok açıklama gerektiren kısımdır.

Şimdi büyük kavramını tanımlayalım. Böylelikle birileri çıkıp benim 1milyon tane xyz.xyz türünde dosyam var toplamda 100GB yapıyor, büyük veri çalışıyorum demesin.

Hergün 2.5 quintillion byte oluşturuyoruz (evet hergün)
1 quintillion = 1 000 000 000 000 000 000 byte = 1000 petabyte = 1 milyon terabyte = 1 milyar GB
Dünya üzerindeki verinin %90’ı son iki yılda oluşturuldu
Bu durumdan ne anlamalıyız, GB küçük veridir hatta artık 10TB’dan az veri büyük veri pek sayılmaz.

Büyük veriyi tanımlayanlar 3V, 4V gibi kavramlardan bahsediyorlar bu 3V/4V kısaca:

Volume (yani gerçekten verinin hacmi = kaç GB, TB vb.)
Velocity (verinin hızlı olması, çabuk oluşuyor, çabuk tükeniyor)
Variety (çeşitli çeşitli veri var, resim, video vb.)
Veracity (verimiz o kadar çok ki bu verinin içinden şunlar tutarlı, şunlar yanlış diye bile ayıklayamacak durumdayız)
şeklinde tanımlanmış. Bu durumdaki veriye büyük veri demiş büyüklerimiz.

Kısacası neymiş mesele:

Geleneksel yöntemler kullandığımız taktirde:

Veriyi okumamız için geçecek süre ölçüsüz fazlaysa
Veriyi yorumlamamış için çok zorluklar çekeceksek
Veriyi başka yöntemlerle işlediğimiz taktirde zaman ve efor kaybımız kabul edilebilir durum değilse
Verimiz büyük veridir diyebiliriz. Yoksa 1milyar küçük dosyamız var ancak 10GB yer tutuyor, ve siz makine öğrenmesi kullanarak bu dosyalarda metin analizi yapacaksınız. Malesef büyük veri ile uğraşmıyorsunuz. Büyük veri dosya sayısıyla ilişkili değildi hatırlayacak olursak, 4V (5V diyenlerde var) ile alakalıydı.