33
Linkle Yazılım ve Mimari

Linkle mimari

Embed Size (px)

Citation preview

Page 1: Linkle mimari

LinkleYazılım ve Mimari

Page 2: Linkle mimari

Özet• Gereksinimler• Teknolojiler• Yazılım• Mimari• Ölçekleme• Session ve Ortak Datalar

• Önbellekleme (Redis)• Search Engine

(Elasticsearch)• Veri Tabanı (Mysql)• File Storage• Yapılacaklar (Teknik)• Yapılacaklar (Proje)• Uyarı• Katkı ve Destek

Page 3: Linkle mimari

Gereksinimler:• # Linkme Requirements

• This project use the:

• ## Redis: • Cache operations• Distributed architecture in

central storage• Session and other application

data

• ### Config• Session handler,• Cache servers

• ## Elasticsearch:• Record index and search

operations•• ### Config• Server configuration and app

config

• ## File Storage:• For Record saved file.

• ## DB Server(Mysql)• Database

• ## Other Requirements:• Composer packages install

Page 4: Linkle mimari

Teknolojiler• PHP• Symfony Framework• Doctrine ORM, Twig, Service, Bundles <3 Love • Mysql• Elasticsearch• Redis• Nginx• Git• Apache Benchmark• Cloud Computing

Page 5: Linkle mimari

Yazılım• Php Symfony sunduğu nimetlerden yararlanıldı.

• Katmanlı mimari ve Service yaklaşımı ile uygulama içerisinde iş akışları kontrollü ve sistemli şekilde sağlanmaktadır.

• Değişim ve geliştirmelere hızlı yanıt verebilecek esnek yapılar oluşturulmaya çalışıldı.

• Tasarım desenlerinden (Design pattern) faydalanmayı seviyoruz.

Page 6: Linkle mimari

Yazılım• Log & profiler analizi ile performans ve

iyileştirmeler.

• Açık Kaynak dünyasından faydalanıldı. Teşekkürü borç biliriz.

• Cache katmanı geliştirildi. Böylece ilgili sınıfları bozmadan ara katman olarak cache işlemleri sağlandı.

• Redis aktif olarak kullanıldı.

Page 7: Linkle mimari

Yazılım• Web API servisler henüz yok.

• Ancak yazılım mimarisinde BLL(Business Logic Layer) ve diğer katmanlar alt yapı olarak hemen hemen uygun geliştirildi.

• Sürüm kontrol ve kaynak kod yönetim aracı olarak GIT kullanıldı.

• Apache Benchmark ile testler yapılıyor.

Page 8: Linkle mimari

Mimari• Sistem yatay ölçeklenebilirlik göz önünde

bulundurularak tasarlanmaya çalışıldı.

Page 9: Linkle mimari

Mimari•Gereksinimler:

•Web uygulaması•Veri tabanı•Gelişmiş aramalar için search engines•Cache işlemleri (Yoğun istek ve sosyal

taraf)•File Storage (Store dosyaları tutmak için)

Page 10: Linkle mimari

İlk Bakış• Klasik sistem.• Tek sunucu ile tüm gereksinimleri

karşılamak ? :S• Dikey ölçekleme(vertically scale, scale up)

Page 11: Linkle mimari

Tek Sunucu Dikey Ölçekleme• Gereken bileşenler göz önüne alındığında tek sistemin

sorunsuz çalışabilmesi zor. Hepsi aynı bellek,cpu,hdd vs kullanacak. Arama, Cache, App, DB … ?

• Makinenin donanımsal kaynaklarını arttırarak ve/veya optimize ederek işlem kapasitesini arttırmak.

• Maliyet.• Makinenin down olması durumunda tüm sistem gider.• Riskli• Uygulama bazında bakım, onarım, optimizasyon vb

çalışma güçlüğü.

Page 12: Linkle mimari

Dikey ve Yatay Ölçekleme

Page 13: Linkle mimari

Yatay Ölçekleme• Bir çok ucuz makinelerin bir araya gelerek

güçlerini birleştirmesi şeklinde açıklanabilir.• İşlemler bu makineler arasında paylaştırılır.

• Bu sayede hem hızlı sonuçlar alınır hem de yedeklilik sağlanır

• Yüksek erişebilirlik sağlar.• Dağıtık yapı. Dağıt. Ölçekle.• Ucuza ve hızlı şekilde kaynak arttırmaya

gidilebilir.• Kompleks yapı, yönetim ve uygulama zorlukları.

Page 14: Linkle mimari

Ölçekleme• Hem kullanılan bileşenlerden hem de artan

kullanıcı yükünü karşılayabilme adına yatay ölçekleme.

Page 15: Linkle mimari

Dağıtma 1• İlk iş web apps leri clone halinde ayrı sunucuda

hizmet verecek şekilde ayarlama. Şuan 2 Web Applications.

• Web apps ler üzerine gelen trafiği dağıtmak adına önlerine load balancer kurduk.

Page 16: Linkle mimari

Dağıtma 1• Bu sayede artık web apps ler sayısı artabilecektir.

• Kullanıcılardan gelen istekler yük dağıtıcı tarafından, hizmet veren makinelerimiz arasında paylaştırılır.

Page 17: Linkle mimari

Dağıtma Session Problem• Web uygulamalarını çoğalttık ve arttıra da biliyoruz gelen

yükü karşılayabilmek için genişletebiliyoruz.

• Ama burada unutulmaması gereken session yönetimi.

• Default olarak sessionlar oturum açılan makinede dosya şeklinde saklanırdı.

• Bu sebeple sunuculara yük dağıtma işleminde diğer makineler sessionlardan haberdar olamayacaklar.

• Ve bunun gibi ortak kullanılması gereken veriler için bir çözüm gerekir.

Page 18: Linkle mimari

Hangi Veriler Ortak ?• Session verileri• File Store• Statik dosyalar• Veri tabanı• Loglar

• Gibi tüm sunuculardan ortak şekilde ulaşılabilir, kullanılabilir olması gerekenler.

Page 19: Linkle mimari

Session Çözüm• Bunun için 2 çözüm var.

• 1) persistent load balance • Kalıcı Yönlendirme

• 2) share store Paylaşılan depolama

Page 20: Linkle mimari

Session Ayarlama• Php de session store değiştirmek için php.ini de

bulunan session ayarları düzenlenmeli.

• Session handler ile session verilerinin nerede saklanacağı session name gibi bilgilerle özelleştirebileceğimiz ayarlar.

http://php.net/manual/en/session.customhandler.php

Page 21: Linkle mimari

Share Store Türleri• Paylaşımlı depolama türleri:

• File System• Database• Memcached• Redis

• Diğer çözümler.

Page 22: Linkle mimari

Önbellekleme (Redis)• Redis açık kaynak, memory tabanlı key-value

depodur.• Verileri bellekte tutar. Bu sebeple çok hızlıdır.• Ayrıca kalıcı olarak da belli aralıklarla veriyi

diske yazabilir.• Çeşitli veri tipleri destekler.

(string, hash, liste, küme ve sıralı liste)• Bu veriler üzerinde bir çok işlem yapabilme

olanağı.• Master – Slave desteği

Page 23: Linkle mimari

Önbellekleme (Redis)• Session verileri ve diğer cache işlemleri için

işimize yaracak olan Redis’ i ortak session havuzu tutmak için de kullandık.

• Böylece makineler arası ortaklık sağlandı session bazında.

• Veri tabanı sorgularını azaltmada çok iş üstlendi.

• Timeline, duvar, kullanıcı linkleri, kuyruk, doctrine meta bilgileri …

Page 24: Linkle mimari

Search Engines (Elasticsearch)• Java ile geliştirilmiş açık kaynak, lucene tabanlı,

ölçeklenebilir bir tam metin(full text) arama motoru ve veri analiz aracıdır.

• Gerçek zamanlı(real-time) ve dağıtık(distributed)• BigData(Büyük veriler ile çalışan sistemler)

yapılarda içerik aramaları, veri analizi ve sorgulamalar için kullanılmakta.

• RESTfull Api• Kolay kurulum, konfigure, kullanım

Page 25: Linkle mimari

Search Engines (Elasticsearch)• Kullanıcı paylaşımlarının analizi ve inexlemesinde• Full text ve detaylı aramalarda• Öneriler• Akıllı arama ve tamamlamalar

• Kullanıyoruz ve kullanacağız.

Page 26: Linkle mimari

Veri Tabanı (Mysql)• Verilerin depolanması• Yönetilmesi

• Tek sunucu,• Daima sorgular kontrol edilecek• Optimize edilecek • Yedekleme

Page 27: Linkle mimari

File Storage (KnpGaufretteBundle)• Kullanıcıların fiziki olarak depolamak istedikleri

link sayfalarının merkezi olarak depolanması.

• Tüm web apps lerden ortak olarak erişebilme.• İhtiyaç arttıkça kolay ölçekleyebilme, arttırma• Cloud desteği

• Farklı methodlar barındırması:• Amazon S3, Dropbox , Azure Blob Storage, • GridFS , GoogleCloudStorage, Ftp, FileSystem

Page 28: Linkle mimari

Ne Yani ?

Page 29: Linkle mimari

Yapılacaklar (Teknik)• Link Kaydetmede geçen süreyi minimuma indirme

iyileştirme. MQ(Message Queue) ile planlanıyor.• Storage Limitler: Depolama için limit getirilebilir.• Arama alt yapısı: Şuan geçici.• Akıllı öneri ve arama sistemleri• Beğeni ve Yorumlar• Link Bilgileri: Linke ait gerçek değerlendirme

sonuçları• Güvenlik (A-Z)• Cache: Daima geliştirilerek • Log

Page 30: Linkle mimari

Yapılacaklar (Proje)• Blog tarzı kendi içerik sayfanızı oluşturup

kaydedebilme.

• Link kısaltma servisi

• Tarayıcı eklentileri

• Mobil Uygulama

• Kategori ve Sıralamalar

• UI Tasarımlar

Page 31: Linkle mimari

Uyarı•Henüz geliştirilmeye devam etmekte olan

projemizde olası karşılaşabileceğiniz hata, eksik ve anti kolay kullanılabilirlik için özür dileriz.

•Bunlara önem verdiğimizi belirtir, en kısa zamanda sizlerle olacağını bildirmek isteriz.

Page 32: Linkle mimari

Katkı ve Destek• Tüm görüş ve önerilerinizi bizimle paylaşmanızdan

memnuniyet duyarız.

• Yazılım henüz geliştirilme aşamasında olduğundan bazı özelliklerin devre dışı olduğunu belirtmek isteriz.

• Katkıda bulunmak isteyen tasarım ve geliştirici arkadaşlarda bağlantıya geçebilirler.

[email protected][email protected]• http://linkle.net/