View
237
Download
0
Category
Preview:
Citation preview
LinkleYazılım ve 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
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
Teknolojiler• PHP• Symfony Framework• Doctrine ORM, Twig, Service, Bundles <3 Love • Mysql• Elasticsearch• Redis• Nginx• Git• Apache Benchmark• Cloud Computing
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.
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ı.
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.
Mimari• Sistem yatay ölçeklenebilirlik göz önünde
bulundurularak tasarlanmaya çalışıldı.
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)
İlk Bakış• Klasik sistem.• Tek sunucu ile tüm gereksinimleri
karşılamak ? :S• Dikey ölçekleme(vertically scale, scale up)
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üğü.
Dikey ve Yatay Ölçekleme
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ı.
Ölçekleme• Hem kullanılan bileşenlerden hem de artan
kullanıcı yükünü karşılayabilme adına yatay ölçekleme.
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.
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.
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.
Hangi Veriler Ortak ?• Session verileri• File Store• Statik dosyalar• Veri tabanı• Loglar
• Gibi tüm sunuculardan ortak şekilde ulaşılabilir, kullanılabilir olması gerekenler.
Session Çözüm• Bunun için 2 çözüm var.
• 1) persistent load balance • Kalıcı Yönlendirme
• 2) share store Paylaşılan depolama
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
Share Store Türleri• Paylaşımlı depolama türleri:
• File System• Database• Memcached• Redis
• Diğer çözümler.
Ö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
Ö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 …
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
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.
Veri Tabanı (Mysql)• Verilerin depolanması• Yönetilmesi
• Tek sunucu,• Daima sorgular kontrol edilecek• Optimize edilecek • Yedekleme
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
Ne Yani ?
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
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
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.
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.
• info@tahsinyuksel.com• info@linkle.net• http://linkle.net/
Hakkımda•Tahsin Yüksel•Software
Developer
info@tahsinyuksel.comtahsinyuksel.comlinkle.nethttps://tr.linkedin.com/in/tahsin-y%C3%BCksel-4bb1379a
•Linkle Yazılım veMimari
2015
Recommended