Linkle mimari

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