SlideShare uma empresa Scribd logo
1 de 35
Symfony2 + Doctrine 
PostgreSQL 
Symfony2 ve Doctrine ile PostgreSQL'i 
kullanarak Performanslı Mimari oluşturma 
1
çok sevdiğimiz diller 
2
çok sevdiğimiz veribanları 
3
çok sevdiğimiz ortamlar 
4
yapan kraldır 
5 @okulbilisim
Ajanda 
● Performans nedir? 
● Performans analizi nasıl yapılır? 
● Nginx ve FPM performans 
● Symfony2 performans 
● Doctrine performans 
● Web Sayfasındaki performans 
● Organik DDoS (Normal insan saldırısı) 
6
Performans? 
facebook gibi hızlı geliyor 
7
her şeyi cachelemek, arkada yapıp getirmek iyidir 
8
keşler 
LB cache 
Nginx FastCGI 
app/cache and APC 
Response caching & HTTP-CACHE 
Doctrine2 Query & Result Caching 
CDN 
9
http://analytics.blogspot.com.tr/2012/04/global-site-speed-overview-how-fast-are.html 
10
Performans analizi nasıl 
yapılır? 
load test 
11
https://twitter.com/yuxel/status/279319192757493760 
12 
@GoyGoyTR
Load Test 
http://jmeter.apache.org/ 
13
Araçlar 
● htop 
● siege 
● hping3 
● dstat 
● wacth -n .5 ‘netstat -ant|grep ESTAB|wc -l’ 
● iostat 
● çok bilgi 
14
nginx + fpm 
apache? 
15
nginx + fpm 
16 
1. SSD 
2. TCP -> UNIX domain sockets. 
3. worker_processes 
4. worker_connections. 
5. upstream 
6. access_log off; 
7. GZip. 
8. fast_cgi_cache 
9. client timeouts. 
10. output buffers. 
11. /etc/sysctl.conf 
http://highscalability.com/blog/2014/4/30/10-tips-for-optimizing-nginx-and-php-fpm-for-high-traffic-si.html 
http://lukasz.cepowski.com/devlog/43,high-performance-web-server-with-nginx-and-php-fpm 
http://blog.martinfjordvald.com/2010/09/12000-requests-per-second-with-nginx-php-and-memcached/
gc_disable 
17 
https://github.com/composer/composer/commit/ac676f47f7bbc619678a29deae097b6b0710b799 
http://blog.ircmaxell.com/2014/12/what-about-garbage.html
Symfony2 Performans 
18
19 
Symfony zaten hızlı 
Daha hızlı olması için yapabileceğiniz çok 
az şey var.
Byte Code Cache 
Apc 
Xcache 
ionCube 
Zend Opcache 
20
Composer Class Map 
composer dump-autoload --optimize 
21
Dump Router 
php app/console --env=prod router:dump 
... 
RewriteCond %{REQUEST_URI} ^/city$ 
RewriteRule .* $0/ [QSA,L,R=301] 
RewriteCond %{REQUEST_URI} ^/city/$ 
RewriteRule .* app.php 
[QSA,L,E=_ROUTING_route:city,E=_ROUTING_default__controller:TestBundleControllerCityController::ind 
exAction] 
... 
22
Doctrine 
23
Doctrine 
The Doctrine Project is the home to several 
PHP libraries primarily focused on database 
storage and object mapping. The core projects 
are a Object Relational Mapper (ORM) and 
the Database Abstraction Layer (DBAL) it is 
built upon. 
http://www.doctrine-project.org/ 
24
doctrine: 
orm: 
metadata_cache_driver: memcache 
query_cache_driver: memcache 
result_cache_driver: memcache 
25
Memcache 
APC 
Redis 
Xcache 
File 
Custom Cache Service 
26
Metadata Cache 
Her istek sırasında Annotation, YAML, XML gibi 
farklı bir çok yerden class metadata 
oluşturulmasının önüne geçer 
27
Query Cache 
DQL sorgusunun SQL karşılığının bir değişim 
olmadığı sürece tekrar tekrar 
oluşturulmasından kaynaklı performans kaybını 
gidermek için 
28
Result Cache 
Sadece ihtiyaç halinde 
$query = $em->createQuery('...'); 
$query->useResultCache(true); 
// setResultCacheLifetime(3600); 
// setResultCacheId('my_custom_id'); 
// useResultCache(true, 3600, 'my_custom_id'); 
29
30 
Cache Slam!
Fetch Modes 
31
Lazy vs Extra Lazy 
Doctrine 2.0 Doctrine 2.1 
32
getSinlgeScalarResult 
$ref = $em->createQuery( "SELECT PARTIAL s.title " . 
"FROM BlogBundle:Post s " . 
"WHERE s.id = ?1" )->setParameter(1, $id) 
->getSingleScalerResult() 
33
getPartialReference 
$ref = $em->createQuery( "SELECT PARTIAL s.{keywords,title} " . 
"FROM BlogBundle:Post s " . 
"WHERE s.id = ?1" )->setParameter(1, $id)->getResult(); 
$ref = $em->getPartialReference("BlogBundle:Post", $id) 
34
Teşekkür Ederiz 
@hmert @htayyar 
@OkulBilisim 
info@okulbilisim.com 
35

Mais conteúdo relacionado

Mais procurados

React Bootcamp Day 2 - Yunus Demirpolat
React Bootcamp Day 2 - Yunus DemirpolatReact Bootcamp Day 2 - Yunus Demirpolat
React Bootcamp Day 2 - Yunus Demirpolatkloia
 
React Bootcamp Day 1 - Yunus Demirpolat
React Bootcamp Day 1 - Yunus DemirpolatReact Bootcamp Day 1 - Yunus Demirpolat
React Bootcamp Day 1 - Yunus Demirpolatkloia
 
Gradle ile Proje Insası
Gradle ile Proje InsasıGradle ile Proje Insası
Gradle ile Proje InsasıÖmer ÖZKAN
 
Kurumsal Java & Web Teknolojileri
Kurumsal Java & Web Teknolojileri Kurumsal Java & Web Teknolojileri
Kurumsal Java & Web Teknolojileri Ömer ÖZKAN
 
JavaScript ile Taş Kırmak
JavaScript ile Taş KırmakJavaScript ile Taş Kırmak
JavaScript ile Taş Kırmakİbrahim ATAY
 
jQuery ile ASP.NET Uygulamaları Geliştirme
jQuery ile ASP.NET Uygulamaları GeliştirmejQuery ile ASP.NET Uygulamaları Geliştirme
jQuery ile ASP.NET Uygulamaları Geliştirmeİbrahim ATAY
 

Mais procurados (10)

React Bootcamp Day 2 - Yunus Demirpolat
React Bootcamp Day 2 - Yunus DemirpolatReact Bootcamp Day 2 - Yunus Demirpolat
React Bootcamp Day 2 - Yunus Demirpolat
 
React Bootcamp Day 1 - Yunus Demirpolat
React Bootcamp Day 1 - Yunus DemirpolatReact Bootcamp Day 1 - Yunus Demirpolat
React Bootcamp Day 1 - Yunus Demirpolat
 
Gradle ile Proje Insası
Gradle ile Proje InsasıGradle ile Proje Insası
Gradle ile Proje Insası
 
Jasminebdd
JasminebddJasminebdd
Jasminebdd
 
Modern Frontend
Modern FrontendModern Frontend
Modern Frontend
 
Jenkins
JenkinsJenkins
Jenkins
 
Php video
Php videoPhp video
Php video
 
Kurumsal Java & Web Teknolojileri
Kurumsal Java & Web Teknolojileri Kurumsal Java & Web Teknolojileri
Kurumsal Java & Web Teknolojileri
 
JavaScript ile Taş Kırmak
JavaScript ile Taş KırmakJavaScript ile Taş Kırmak
JavaScript ile Taş Kırmak
 
jQuery ile ASP.NET Uygulamaları Geliştirme
jQuery ile ASP.NET Uygulamaları GeliştirmejQuery ile ASP.NET Uygulamaları Geliştirme
jQuery ile ASP.NET Uygulamaları Geliştirme
 

Destaque

Symfony2: the world slowest framework
Symfony2: the world slowest frameworkSymfony2: the world slowest framework
Symfony2: the world slowest frameworkFilippo De Santis
 
Yük altındaki sistemlerde asenkron hayat
Yük altındaki sistemlerde asenkron hayatYük altındaki sistemlerde asenkron hayat
Yük altındaki sistemlerde asenkron hayatibrahimgunduz34
 
BÜYÜK Portalleri nasıl ReFactor ettik
BÜYÜK Portalleri nasıl ReFactor ettikBÜYÜK Portalleri nasıl ReFactor ettik
BÜYÜK Portalleri nasıl ReFactor ettikHüseyin Mert
 
İlişkisel Veritabanları, ORM ve Doctrine
İlişkisel Veritabanları, ORM ve Doctrineİlişkisel Veritabanları, ORM ve Doctrine
İlişkisel Veritabanları, ORM ve DoctrineMuhittin Özer
 
Symfony2 & doctrine
Symfony2 & doctrineSymfony2 & doctrine
Symfony2 & doctrineEmre YILMAZ
 
Bulutlar Üzerinde..
Bulutlar Üzerinde..Bulutlar Üzerinde..
Bulutlar Üzerinde..Hüseyin Mert
 
PHPUnit ve Laravel
PHPUnit ve LaravelPHPUnit ve Laravel
PHPUnit ve LaravelOsman Yuksel
 
REST yoluyla Web Servis Geliştirme
REST yoluyla Web Servis GeliştirmeREST yoluyla Web Servis Geliştirme
REST yoluyla Web Servis Geliştirmeemirkarsiyakali
 
İlişkisel Veritabanı Sistemleri ve NoSQL
İlişkisel Veritabanı Sistemleri ve NoSQLİlişkisel Veritabanı Sistemleri ve NoSQL
İlişkisel Veritabanı Sistemleri ve NoSQLMurat Azimli
 
Bulut Teknolojileri
Bulut TeknolojileriBulut Teknolojileri
Bulut Teknolojileritezgel
 

Destaque (10)

Symfony2: the world slowest framework
Symfony2: the world slowest frameworkSymfony2: the world slowest framework
Symfony2: the world slowest framework
 
Yük altındaki sistemlerde asenkron hayat
Yük altındaki sistemlerde asenkron hayatYük altındaki sistemlerde asenkron hayat
Yük altındaki sistemlerde asenkron hayat
 
BÜYÜK Portalleri nasıl ReFactor ettik
BÜYÜK Portalleri nasıl ReFactor ettikBÜYÜK Portalleri nasıl ReFactor ettik
BÜYÜK Portalleri nasıl ReFactor ettik
 
İlişkisel Veritabanları, ORM ve Doctrine
İlişkisel Veritabanları, ORM ve Doctrineİlişkisel Veritabanları, ORM ve Doctrine
İlişkisel Veritabanları, ORM ve Doctrine
 
Symfony2 & doctrine
Symfony2 & doctrineSymfony2 & doctrine
Symfony2 & doctrine
 
Bulutlar Üzerinde..
Bulutlar Üzerinde..Bulutlar Üzerinde..
Bulutlar Üzerinde..
 
PHPUnit ve Laravel
PHPUnit ve LaravelPHPUnit ve Laravel
PHPUnit ve Laravel
 
REST yoluyla Web Servis Geliştirme
REST yoluyla Web Servis GeliştirmeREST yoluyla Web Servis Geliştirme
REST yoluyla Web Servis Geliştirme
 
İlişkisel Veritabanı Sistemleri ve NoSQL
İlişkisel Veritabanı Sistemleri ve NoSQLİlişkisel Veritabanı Sistemleri ve NoSQL
İlişkisel Veritabanı Sistemleri ve NoSQL
 
Bulut Teknolojileri
Bulut TeknolojileriBulut Teknolojileri
Bulut Teknolojileri
 

Semelhante a Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma

Zend Framework'e Hizli Giris
Zend Framework'e Hizli GirisZend Framework'e Hizli Giris
Zend Framework'e Hizli Girissascoms
 
Php egitim-cd-si
Php egitim-cd-siPhp egitim-cd-si
Php egitim-cd-sisersld89
 
Sunucularımızı Gözleyelim
Sunucularımızı GözleyelimSunucularımızı Gözleyelim
Sunucularımızı GözleyelimOguz Yarimtepe
 
Sanallastirmada yeni akim: Docker
Sanallastirmada yeni akim: DockerSanallastirmada yeni akim: Docker
Sanallastirmada yeni akim: DockerOguz Yarimtepe
 
Büyük veri teknolojilerine giriş v1l
Büyük veri teknolojilerine giriş v1lBüyük veri teknolojilerine giriş v1l
Büyük veri teknolojilerine giriş v1lHakan Ilter
 
Php odev-sitesi
Php odev-sitesiPhp odev-sitesi
Php odev-sitesisersld89
 
Php kursu-kartal
Php kursu-kartalPhp kursu-kartal
Php kursu-kartalsersld88
 
Php kursu-adana
Php kursu-adanaPhp kursu-adana
Php kursu-adanasersld88
 
DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...
DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...
DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...atifceylan
 
Sanallaştırmada Yeni Akım - Docker
Sanallaştırmada Yeni Akım - DockerSanallaştırmada Yeni Akım - Docker
Sanallaştırmada Yeni Akım - DockerOguz Yarimtepe
 
Php en-iyi-kursu
Php en-iyi-kursuPhp en-iyi-kursu
Php en-iyi-kursusersld89
 
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}Chroot içinde {DNS, NTP, Nginx, PHP-FPM}
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}Ali Erdinc Koroglu
 
Veri işleme üzerine, Hakan Sarıbıyık
Veri işleme üzerine, Hakan SarıbıyıkVeri işleme üzerine, Hakan Sarıbıyık
Veri işleme üzerine, Hakan SarıbıyıkHakan Sarıbıyık
 
Php kursu-ankara
Php kursu-ankaraPhp kursu-ankara
Php kursu-ankarasersld88
 
Php kursu-pendik
Php kursu-pendikPhp kursu-pendik
Php kursu-pendiksersld88
 
Php en-iyi-egitimi
Php en-iyi-egitimiPhp en-iyi-egitimi
Php en-iyi-egitimisersld89
 

Semelhante a Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma (20)

Zend Framework'e Hizli Giris
Zend Framework'e Hizli GirisZend Framework'e Hizli Giris
Zend Framework'e Hizli Giris
 
Php egitim-cd-si
Php egitim-cd-siPhp egitim-cd-si
Php egitim-cd-si
 
Sunucularımızı Gözleyelim
Sunucularımızı GözleyelimSunucularımızı Gözleyelim
Sunucularımızı Gözleyelim
 
Sanallastirmada yeni akim: Docker
Sanallastirmada yeni akim: DockerSanallastirmada yeni akim: Docker
Sanallastirmada yeni akim: Docker
 
Büyük veri teknolojilerine giriş v1l
Büyük veri teknolojilerine giriş v1lBüyük veri teknolojilerine giriş v1l
Büyük veri teknolojilerine giriş v1l
 
Php odev-sitesi
Php odev-sitesiPhp odev-sitesi
Php odev-sitesi
 
Php indir
Php indirPhp indir
Php indir
 
Php kursu-kartal
Php kursu-kartalPhp kursu-kartal
Php kursu-kartal
 
Php kursu-adana
Php kursu-adanaPhp kursu-adana
Php kursu-adana
 
DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...
DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...
DBA ve Geliştiriciler İçin Başarımı Artırıcı Öneriler - PostgreSQL Konferansı...
 
Php odevi
Php odeviPhp odevi
Php odevi
 
Sanallaştırmada Yeni Akım - Docker
Sanallaştırmada Yeni Akım - DockerSanallaştırmada Yeni Akım - Docker
Sanallaştırmada Yeni Akım - Docker
 
Php en-iyi-kursu
Php en-iyi-kursuPhp en-iyi-kursu
Php en-iyi-kursu
 
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}Chroot içinde {DNS, NTP, Nginx, PHP-FPM}
Chroot içinde {DNS, NTP, Nginx, PHP-FPM}
 
12factor apps
12factor apps12factor apps
12factor apps
 
Veri işleme üzerine, Hakan Sarıbıyık
Veri işleme üzerine, Hakan SarıbıyıkVeri işleme üzerine, Hakan Sarıbıyık
Veri işleme üzerine, Hakan Sarıbıyık
 
Php kursu-ankara
Php kursu-ankaraPhp kursu-ankara
Php kursu-ankara
 
Php kursu-pendik
Php kursu-pendikPhp kursu-pendik
Php kursu-pendik
 
Web development
Web developmentWeb development
Web development
 
Php en-iyi-egitimi
Php en-iyi-egitimiPhp en-iyi-egitimi
Php en-iyi-egitimi
 

Mais de Hüseyin Mert

PHP Nedir? Ne yapabiliriz?
PHP Nedir? Ne yapabiliriz?PHP Nedir? Ne yapabiliriz?
PHP Nedir? Ne yapabiliriz?Hüseyin Mert
 
Vendor Lock-in Cloud - Open Stack bulutyazilim
Vendor Lock-in Cloud - Open Stack bulutyazilimVendor Lock-in Cloud - Open Stack bulutyazilim
Vendor Lock-in Cloud - Open Stack bulutyazilimHüseyin Mert
 
Nginx ile Yüksek Trafik Qeyfi
Nginx ile Yüksek Trafik QeyfiNginx ile Yüksek Trafik Qeyfi
Nginx ile Yüksek Trafik QeyfiHüseyin Mert
 
PostgreSQL Destekliyorum o halde varım!
PostgreSQL Destekliyorum o halde varım!PostgreSQL Destekliyorum o halde varım!
PostgreSQL Destekliyorum o halde varım!Hüseyin Mert
 
Sürdürülebilir, Ölçeklenebilir ve Zevkli PHP ( KOUBK 2014)
Sürdürülebilir, Ölçeklenebilir ve Zevkli PHP ( KOUBK 2014)Sürdürülebilir, Ölçeklenebilir ve Zevkli PHP ( KOUBK 2014)
Sürdürülebilir, Ölçeklenebilir ve Zevkli PHP ( KOUBK 2014)Hüseyin Mert
 
Bilişim Günleri Eskişehir 2014
Bilişim Günleri Eskişehir 2014Bilişim Günleri Eskişehir 2014
Bilişim Günleri Eskişehir 2014Hüseyin Mert
 
Fatih Projesi ve Açık Kaynak Kod Geliştirme
Fatih Projesi ve Açık Kaynak Kod GeliştirmeFatih Projesi ve Açık Kaynak Kod Geliştirme
Fatih Projesi ve Açık Kaynak Kod GeliştirmeHüseyin Mert
 

Mais de Hüseyin Mert (8)

PHP Nedir? Ne yapabiliriz?
PHP Nedir? Ne yapabiliriz?PHP Nedir? Ne yapabiliriz?
PHP Nedir? Ne yapabiliriz?
 
Vendor Lock-in Cloud - Open Stack bulutyazilim
Vendor Lock-in Cloud - Open Stack bulutyazilimVendor Lock-in Cloud - Open Stack bulutyazilim
Vendor Lock-in Cloud - Open Stack bulutyazilim
 
Nginx ile Yüksek Trafik Qeyfi
Nginx ile Yüksek Trafik QeyfiNginx ile Yüksek Trafik Qeyfi
Nginx ile Yüksek Trafik Qeyfi
 
PostgreSQL Destekliyorum o halde varım!
PostgreSQL Destekliyorum o halde varım!PostgreSQL Destekliyorum o halde varım!
PostgreSQL Destekliyorum o halde varım!
 
Sürdürülebilir, Ölçeklenebilir ve Zevkli PHP ( KOUBK 2014)
Sürdürülebilir, Ölçeklenebilir ve Zevkli PHP ( KOUBK 2014)Sürdürülebilir, Ölçeklenebilir ve Zevkli PHP ( KOUBK 2014)
Sürdürülebilir, Ölçeklenebilir ve Zevkli PHP ( KOUBK 2014)
 
Bilişim Günleri Eskişehir 2014
Bilişim Günleri Eskişehir 2014Bilişim Günleri Eskişehir 2014
Bilişim Günleri Eskişehir 2014
 
Fatih Projesi ve Açık Kaynak Kod Geliştirme
Fatih Projesi ve Açık Kaynak Kod GeliştirmeFatih Projesi ve Açık Kaynak Kod Geliştirme
Fatih Projesi ve Açık Kaynak Kod Geliştirme
 
Getek13
Getek13Getek13
Getek13
 

Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma

Notas do Editor

  1. test
  2. http://symfony.com/doc/current/book/performance.html#use-a-byte-code-cache-e-g-apc
  3. autoload class dosyalarının filecheck ile path kontrollerinin önün geçer
  4. Object relational mapper (ORM) for PHP that sits on top of a powerful database abstraction layer (DBAL). One of its key features is the option to write database queries in a proprietary object oriented SQL dialect called Doctrine Query Language (DQL), inspired by Hibernates HQL. This provides developers with a powerful alternative to SQL that maintains flexibility without requiring unnecessary code duplication.
  5. Something to be careful of when using the cache drivers is “cache slams”. Imagine you have a heavily trafficked website with some code that checks for the existence of a cache record and if it does not exist it generates the information and saves it to the cache. Now, if 100 requests were issued all at the same time and each one sees the cache does not exist and they all try to insert the same cache entry it could lock up APC, Xcache, etc. and cause problems. Ways exist to work around this, like pre-populating your cache and not letting your users’ requests populate the cache.
  6. In many cases associations between entities can get pretty large. Even in a simple scenario like a blog. where posts can be commented, you always have to assume that a post draws hundreds of comments. In Doctrine 2.0 if you accessed an association it would always get loaded completely into memory. This can lead to pretty serious performance problems, if your associations contain several hundreds or thousands of entities. With Doctrine 2.1 a feature called Extra Lazy is introduced for associations. Associations are marked as Lazy by default, which means the whole collection object for an association is populated the first time its accessed. If you mark an association as extra lazy the following methods on collections can be called without triggering a full load of the collection: Collection#contains($entity) Collection#containsKey($key) (available with Doctrine 2.5) Collection#count() Collection#get($key) (available with Doctrine 2.4) Collection#slice($offset, $length = null)
  7. Another interesting use-case: updating an object without loading it (as an alternative to a DQL bulk UPDATE): $user = $em->getPartialReference('User', $userId); $user->setName('newname'); $em->flush();