2. Özet
• Gereksinimler
• Teknolojiler
• Yazılım
• Mimari
• Öç
• Session ve Ortak Datalar
• Önbellekleme (Redis)
• Search Engine (Elasticsearch)
• Veri Tabanı (Mysql)
• File Storage
• Yapılacaklar (Teknik)
• Yapılacaklar (Proje)
• Uyarı
• Katkı ve Destek
3. 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
5. 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.
6. 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ı.
7. 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.
8. Mimari
• Sistem yatay ölçeklenebilirlik göz önünde
bulundurularak tasarlanmaya çalışıldı.
9. 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)
10. İlk Bakış
• Klasik sistem.
• Tek sunucu ile tüm gereksinimleri karşılamak ? :S
• Dikey ölçekleme(vertically scale, scale up)
11. Tek Sunucu Dikey Öç
• 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üğü.
13. Yatay Öç
• 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ı.
14. Öç
• Hem kullanılan bileşenlerden hem de artan kullanıcı
yükünü karşılayabilme adına yatay ölçekleme.
15. 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.
16. 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.
17. 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.
18. Hangi Veriler Ortak ?
• Session verileri
• File Store
• Statik dosyalar
• Veri tabanı
• Loglar
• Gibi tüm sunuculardan ortak şekilde ulaşılabilir,
kullanılabilir olması gerekenler.
19. Session Çözüm
• Bunun için 2 çözüm var.
• 1) persistent load balance
• Kalıcı Yönlendirme
• 2) share store
Paylaşılan depolama
20. 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
21. Share Store Türleri
• Paylaşımlı depolama türleri:
• File System
• Database
• Memcached
• Redis
• Diğer çözümler.
22. Ö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
23. Ö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 …
24. 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
25. 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.
26. Veri Tabanı (Mysql)
• Verilerin depolanması
• Yönetilmesi
• Tek sunucu,
• Daima sorgular kontrol edilecek
• Optimize edilecek
• Yedekleme
27. 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
29. 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
30. 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
31. 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.
32. 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/
33. Hakkımda
• Tahsin Yüksel
• Software Developer
info@tahsinyuksel.com
tahsinyuksel.com
linkle.net
https://tr.linkedin.com/in/tahsin-y%C3%BCksel-4bb1379a
• Linkle Yazılım ve
Mimari
2015