SlideShare ist ein Scribd-Unternehmen logo
1 von 50
Scaling Out Yii2
App
@petrabarus
YiiConf Indonesia
26 Ags 2017
Hi Everyone!
I am Petra Novandi
Now serves as
Chief Technology Officer at
UrbanIndo.com
-
Contact me at
Email:
petra.barus@gmail.com
Twitter:
@petrabarus
UrbanIndo & Yii
- Use Yii 1.1 at 2011
- Migrate to Yii 2.0 at 2015
- Contribute to Yii core
- #7435 #8933 #9249 #9277
- Contribute to Yii2 plugins
- yii2-queue, yii2-s3-cache, yii2-dynamodb
WHAT’S
THIS ABOUT?
Let me tell you a common story...
Dewi is a software engineer.
She had a great idea for app!
So Dewi build a new app from scratch.
MySQL
Yii App
PHP
Apache
Pictures
Assets
Libraries
Logs
Scripts
Files
Like a lot other
engineers, Dewi
put all the stuffs
in one server.
AND THE
TRAFFIC
GOES UP
UP UP!
AWESOME!!
BUT ALL HELL BREAK LOOSE!
SOUNDS FAMILIAR?
This is story
about Scaling
Scale Up
(Vertical)
Scale Out
(Horizontal)
Continuous
Availability/Redundancy
No single point of failure
Cost/Performance
Flexibility
Not being locked by the
hardware
WHY SCALE OUT?
Continuous Upgrade
Without downtime
Geographical
Distribution
Access to nearest node
Multi-servers environment concerns in Yii2
Database
Assets
Load Balancing
File System
Session
Deployment
And many more… Logging, Cache, Queue,
Batch Processings.
Let’s discuss that on another occasion..
I don’t have enough time.. :(
LOAD
BALANCING
DATABASE SESSION
FILE SYSTEM ASSETS DEPLOYMENT
Yii2
Apache
Yii2
Apache
Yii2
Apache
Yii2
Apache
Yii2
Apache
Yii2
Apache
Yii2
Apache
Yii2
Apache
Load
Balancer
Load balancer will forward
requests to instances
Sticky Sessions
Requests from same client
will be forwarded to same
instance
Load Balancer Session Types
Non-Sticky Sessions
Requests from same client
can be forwarded to
different instances.
Open Source Load Balancer
Technologies
Example Config in
NGINX
» No need a lot of configuration in the Yii side
» Although you might want to have concerns in
⋄ hostInfo in the yiiwebUrlManager
⋄ ipHeaders in yiiwebRequest (upcoming Yii
2.0.13), different proxies can have different headers
LOAD
BALANCING DATABASE SESSION
FILE SYSTEM ASSETS DEPLOYMENT
Yii2
Apache
Yii2
Apache
Yii2
Apache
Yii2
Apache
Yii2
Apache
Yii2
Apache
Yii2
Apache
Yii2
Apache
Database
All instances access the
same database instance(s).
Make them more stateless
Simple Change in Configuration
DATABASE CAN BE
SCALED TOO!
Master-Master
Master-Slave
or both
Yii2 Natively Support Db
Replication
Or use other tech like
ProxySQL
LOAD
BALANCING
DATABASE SESSION
FILE SYSTEM ASSETS DEPLOYMENT
❏ Since PHP stores session in file system
we need to store it outside the instance
❏ Similar like database
❏ Use classes like yiimongodbSession,
yiiredisSession,
yiiwebDbSession,
yiiwebCacheSession,
Sample Config
Some Considerations
» Better use key-value storage type that stores in
memory instead of files
⋄ E.g. Redis, memcached
⋄ Or SQL that support memory storage
⋄ MySQL’s MEMORY storage engine
» Execute Session::gcSession() using cron.
LOAD
BALANCING
DATABASE SESSION
FILE SYSTEM ASSETS DEPLOYMENT
Avoid writing and
storing data to local file
systems
Every app instance has
to identical
file_put_contents(‘/tmp/text1.txt’,
‘blablabla’)
Instance A
Instance B
file_get_contents(‘/tmp/text1.txt’)
Write file to centralized storage
» FTP
» Amazon S3
» Azure
» DropBox
Use filesystem abstraction!
» GridFs
» Rackspace
» Copy.com
Recommended library:
league/flysystem
⇨ creocoder/yii2-flysystem
Sample Config
Yii::$app->fs->write(‘text1.txt’,
blablabla’)
Instance A
Instance B
Yii::$app->fs->read(‘text1.txt’)
Central Storage
LOAD
BALANCING
DATABASE SESSION
FILE SYSTEM ASSETS DEPLOYMENT
Asset Management in Single Server
» Hash is not deterministic due to filemtime()
(yiiwebAssetManager::hash)
» Different server can have different filemtime()
Multiple Server
/var/www/web/assets/1234567890/script.js
/var/www/web/assets/ABCDEFGHIJ/script.js
Configuring
Asset Hash
Generation
Multiple Server With Consistent Hash
/var/www/web/assets/1234567890/script.js
/var/www/web/assets/1234567890/script.js
A Much Better Way
1. Build and compress the assets in build
server
2. Upload assets to central storage (e.g. S3)
3. Put a CDN in front of the storage
BUILD COMPR
ESS
UPLOA
D
DEPLO
Y
SOURCE REPO
BUILD SERVER
CENTRAL
STORAGE (S3)
APP SERVERS
HTML
Requests
JS/CSS Requests
CDN
Pros
1. No need additional
local process to
generate assets
(Reduced request
time)
2. Optimized assets
3. Served through CDN
Cons
1. Need build server
2. Need central storage
3. Need CDN
4. Build can be slow
LOAD
BALANCING
DATABASE SESSION
FILE SYSTEM ASSETS DEPLOYMENT
Deployment Can Be As Simple As
BUT a lot of things can go wrong with this
Deploy Command
Things can go wrong,
e.g. failure on deploy or
bug after deploying,
need rollback
Deployment & Automation
Technologies
Some Considerations
» Composer installation after code pull
» Asset installation, build, compress after code pull
» Load balancer request draining before code
symlink
» Local cache clean up
» JIT warming up (if using HHVM)
» Health check for load balancer
» Blue-green deployment
NOW FOR
CONCLUSION!
❏ Scaling Out has more better
merits in common use cases
❏ App has to be Stateless for
scaling out
❏ Data storages has to be
Centralized
THANKS!
You can find me at
» @petrabarus
» petra.barus@gmail.com

Weitere ähnliche Inhalte

Was ist angesagt?

Intro sur les tests unitaires
Intro sur les tests unitairesIntro sur les tests unitaires
Intro sur les tests unitaires
PHPPRO
 
05_Reliable UDP 구현
05_Reliable UDP 구현05_Reliable UDP 구현
05_Reliable UDP 구현
noerror
 

Was ist angesagt? (20)

Redux Toolkit - Quick Intro - 2022
Redux Toolkit - Quick Intro - 2022Redux Toolkit - Quick Intro - 2022
Redux Toolkit - Quick Intro - 2022
 
Fast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible JavaFast as C: How to Write Really Terrible Java
Fast as C: How to Write Really Terrible Java
 
실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우 실전 서버 부하테스트 노하우
실전 서버 부하테스트 노하우
 
React Hooks
React HooksReact Hooks
React Hooks
 
Intro sur les tests unitaires
Intro sur les tests unitairesIntro sur les tests unitaires
Intro sur les tests unitaires
 
05_Reliable UDP 구현
05_Reliable UDP 구현05_Reliable UDP 구현
05_Reliable UDP 구현
 
Recursive Query Throwdown
Recursive Query ThrowdownRecursive Query Throwdown
Recursive Query Throwdown
 
[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기[261] 실시간 추천엔진 머신한대에 구겨넣기
[261] 실시간 추천엔진 머신한대에 구겨넣기
 
Clean code
Clean codeClean code
Clean code
 
Mysql Optimization
Mysql OptimizationMysql Optimization
Mysql Optimization
 
jQuery
jQueryjQuery
jQuery
 
Scaling up task processing with Celery
Scaling up task processing with CeleryScaling up task processing with Celery
Scaling up task processing with Celery
 
[Meetup] a successful migration from elastic search to clickhouse
[Meetup] a successful migration from elastic search to clickhouse[Meetup] a successful migration from elastic search to clickhouse
[Meetup] a successful migration from elastic search to clickhouse
 
Intro to Asynchronous Javascript
Intro to Asynchronous JavascriptIntro to Asynchronous Javascript
Intro to Asynchronous Javascript
 
Introduction to jest
Introduction to jestIntroduction to jest
Introduction to jest
 
Postman
PostmanPostman
Postman
 
Cross-platform UI Engines Rendering Performance
Cross-platform UI Engines Rendering PerformanceCross-platform UI Engines Rendering Performance
Cross-platform UI Engines Rendering Performance
 
Socket.IO
Socket.IOSocket.IO
Socket.IO
 
Real-Time Analytics at Uber Scale
Real-Time Analytics at Uber ScaleReal-Time Analytics at Uber Scale
Real-Time Analytics at Uber Scale
 
Node mailer example how to send email using nodemailer with gmail & mailtrap
Node mailer example how to send email using nodemailer with gmail & mailtrapNode mailer example how to send email using nodemailer with gmail & mailtrap
Node mailer example how to send email using nodemailer with gmail & mailtrap
 

Ähnlich wie Scaling Yii2 Application

Ähnlich wie Scaling Yii2 Application (20)

WekaIO: Making Machine Learning Compute Bound Again
WekaIO: Making Machine Learning Compute Bound AgainWekaIO: Making Machine Learning Compute Bound Again
WekaIO: Making Machine Learning Compute Bound Again
 
Continuous Deployment @ AWS Re:Invent
Continuous Deployment @ AWS Re:InventContinuous Deployment @ AWS Re:Invent
Continuous Deployment @ AWS Re:Invent
 
Continuous Integration and Deployment Best Practices on AWS (ARC307) | AWS re...
Continuous Integration and Deployment Best Practices on AWS (ARC307) | AWS re...Continuous Integration and Deployment Best Practices on AWS (ARC307) | AWS re...
Continuous Integration and Deployment Best Practices on AWS (ARC307) | AWS re...
 
Scaling PHP apps
Scaling PHP appsScaling PHP apps
Scaling PHP apps
 
FIWARE Global Summit - A Multi-database Plugin for the Orion FIWARE Context B...
FIWARE Global Summit - A Multi-database Plugin for the Orion FIWARE Context B...FIWARE Global Summit - A Multi-database Plugin for the Orion FIWARE Context B...
FIWARE Global Summit - A Multi-database Plugin for the Orion FIWARE Context B...
 
Meetup at AI NextCon 2019: In-Stream data process, Data Orchestration & More
Meetup at AI NextCon 2019: In-Stream data process, Data Orchestration & MoreMeetup at AI NextCon 2019: In-Stream data process, Data Orchestration & More
Meetup at AI NextCon 2019: In-Stream data process, Data Orchestration & More
 
Why Wordnik went non-relational
Why Wordnik went non-relationalWhy Wordnik went non-relational
Why Wordnik went non-relational
 
Achieving Separation of Compute and Storage in a Cloud World
Achieving Separation of Compute and Storage in a Cloud WorldAchieving Separation of Compute and Storage in a Cloud World
Achieving Separation of Compute and Storage in a Cloud World
 
Optimizing Big Data to run in the Public Cloud
Optimizing Big Data to run in the Public CloudOptimizing Big Data to run in the Public Cloud
Optimizing Big Data to run in the Public Cloud
 
Achieving compute and storage independence for data-driven workloads
Achieving compute and storage independence for data-driven workloadsAchieving compute and storage independence for data-driven workloads
Achieving compute and storage independence for data-driven workloads
 
Experiences using CouchDB inside Microsoft's Azure team
Experiences using CouchDB inside Microsoft's Azure teamExperiences using CouchDB inside Microsoft's Azure team
Experiences using CouchDB inside Microsoft's Azure team
 
How the Development Bank of Singapore solves on-prem compute capacity challen...
How the Development Bank of Singapore solves on-prem compute capacity challen...How the Development Bank of Singapore solves on-prem compute capacity challen...
How the Development Bank of Singapore solves on-prem compute capacity challen...
 
Big Data Analytics from Azure Cloud to Power BI Mobile
Big Data Analytics from Azure Cloud to Power BI MobileBig Data Analytics from Azure Cloud to Power BI Mobile
Big Data Analytics from Azure Cloud to Power BI Mobile
 
Alluxio @ Uber Seattle Meetup
Alluxio @ Uber Seattle MeetupAlluxio @ Uber Seattle Meetup
Alluxio @ Uber Seattle Meetup
 
A Brave new object store world
A Brave new object store worldA Brave new object store world
A Brave new object store world
 
DCEU 18: Provisioning and Managing Storage for Docker Containers
DCEU 18: Provisioning and Managing Storage for Docker ContainersDCEU 18: Provisioning and Managing Storage for Docker Containers
DCEU 18: Provisioning and Managing Storage for Docker Containers
 
Aws architecture main ideas
Aws architecture main ideasAws architecture main ideas
Aws architecture main ideas
 
Building Super Fast Cloud-Native Data Platforms - Yaron Haviv, KubeCon 2017 EU
Building Super Fast Cloud-Native Data Platforms - Yaron Haviv, KubeCon 2017 EUBuilding Super Fast Cloud-Native Data Platforms - Yaron Haviv, KubeCon 2017 EU
Building Super Fast Cloud-Native Data Platforms - Yaron Haviv, KubeCon 2017 EU
 
Simplified Data Preparation for Machine Learning in Hybrid and Multi Clouds
Simplified Data Preparation for Machine Learning in Hybrid and Multi CloudsSimplified Data Preparation for Machine Learning in Hybrid and Multi Clouds
Simplified Data Preparation for Machine Learning in Hybrid and Multi Clouds
 
Cloud Native Development
Cloud Native DevelopmentCloud Native Development
Cloud Native Development
 

Mehr von Petra Barus

Java User Meetup Bandung "Android" by Agate Studio
Java User Meetup Bandung "Android" by Agate StudioJava User Meetup Bandung "Android" by Agate Studio
Java User Meetup Bandung "Android" by Agate Studio
Petra Barus
 
TOKI Learning Center
TOKI Learning CenterTOKI Learning Center
TOKI Learning Center
Petra Barus
 
Taekwondo Tournament Management System
Taekwondo Tournament Management SystemTaekwondo Tournament Management System
Taekwondo Tournament Management System
Petra Barus
 

Mehr von Petra Barus (13)

Javascript Clean Code
Javascript Clean CodeJavascript Clean Code
Javascript Clean Code
 
What's New In PHP7
What's New In PHP7What's New In PHP7
What's New In PHP7
 
Memenangkan Persaingan Marketing Real-estate Di Era Digital dan MEA
Memenangkan Persaingan Marketing Real-estate Di Era Digital dan MEAMemenangkan Persaingan Marketing Real-estate Di Era Digital dan MEA
Memenangkan Persaingan Marketing Real-estate Di Era Digital dan MEA
 
PHP Indonesia Meetup - What's New in Yii2 and PHP5.5
PHP Indonesia Meetup - What's New in Yii2 and PHP5.5PHP Indonesia Meetup - What's New in Yii2 and PHP5.5
PHP Indonesia Meetup - What's New in Yii2 and PHP5.5
 
Starting A Web Startup - Informatika Mengajar
Starting A Web Startup - Informatika MengajarStarting A Web Startup - Informatika Mengajar
Starting A Web Startup - Informatika Mengajar
 
Proposal Kongres Ikatan Alumni (versi 8 Oktober 2012)
Proposal Kongres Ikatan Alumni (versi 8 Oktober 2012)Proposal Kongres Ikatan Alumni (versi 8 Oktober 2012)
Proposal Kongres Ikatan Alumni (versi 8 Oktober 2012)
 
Proposal Kongres Ikatan Alumni IF ITB
Proposal Kongres Ikatan Alumni IF ITBProposal Kongres Ikatan Alumni IF ITB
Proposal Kongres Ikatan Alumni IF ITB
 
Setahun TOKI Learning Center
Setahun TOKI Learning CenterSetahun TOKI Learning Center
Setahun TOKI Learning Center
 
Java User Meetup Bandung "Android" by GITS Indonesia
Java User Meetup Bandung "Android" by GITS IndonesiaJava User Meetup Bandung "Android" by GITS Indonesia
Java User Meetup Bandung "Android" by GITS Indonesia
 
Java User Meetup Bandung "Android" by Agate Studio
Java User Meetup Bandung "Android" by Agate StudioJava User Meetup Bandung "Android" by Agate Studio
Java User Meetup Bandung "Android" by Agate Studio
 
TOKI Learning Center
TOKI Learning CenterTOKI Learning Center
TOKI Learning Center
 
Taekwondo Tournament Management System
Taekwondo Tournament Management SystemTaekwondo Tournament Management System
Taekwondo Tournament Management System
 
Slide sesi 6 - java concurrency
Slide   sesi 6 - java concurrencySlide   sesi 6 - java concurrency
Slide sesi 6 - java concurrency
 

Kürzlich hochgeladen

TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
VishalKumarJha10
 

Kürzlich hochgeladen (20)

Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
 
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
%in Lydenburg+277-882-255-28 abortion pills for sale in Lydenburg
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban%in Durban+277-882-255-28 abortion pills for sale in Durban
%in Durban+277-882-255-28 abortion pills for sale in Durban
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdfintroduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
introduction-to-automotive Andoid os-csimmonds-ndctechtown-2021.pdf
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 

Scaling Yii2 Application