PDA

View Full Version : مدیریت سایت های پر بازدید و پرترافیک (فیسبوک ، دی جی کالا ، آپارات)



olampiad
چهارشنبه 27 آبان 1394, 08:35 صبح
سلام و خسته نباشید به دوستان عزیز
خواهشا اگر کسی در این مورد اطلاعاتی داره مطرح کنه »
میخواستم ی بحثی در مورد سایت های عظیم و جسته بکنیم:
البته شاید قبلا در این مورد بحث شده ولی نتونستم در این مورد اطلاعاتی رو ب دست آورم.
سایت های
facebook.com
www.aparat.com
www.youtube.com
www.digikala.com
و ....
رو که از لحاظ معروفیت میشناسید.
و میدونید که روزانه شاید میلیونی بازدید داشته باشن.
خواستم ببینم تو پشت پرده این سایت ها چ خبره ؟ (از لحاظ مدیریت پروژه)
الآن اگه بخوان ی بخش از فیس بوک رو تغییر بدن (مثلا پروفایل کاربران) باید سایت رو ده دقه ببندند و تغییرات رو اعمال کنن ولی تا به حال چنین اتفاقی نیفتتاده و فیسبوک 24 ساعته قابل نمایش هستش.
به غیر از فیسبوک سایت های دیگه هم اینطوری هستند یعنی برای تغییرات سایت رو نمیبندند.(دی جی کالا و آپارات هم همینطوره)
همون طور که میدونیم مدلmvc مدیریت پروژه رو خیلی راحت کرده و کارار به راحتی انجام میشه و سایت به راحتی قابل ارتقاع هستش.
ولی به نظر من تو چنین پروژه هایی ی چیزی فراتر از mvc پیاده شده !!!
ب نظرتون تو این پروژه ها از چ روش ها و معماری ها و ترفندهایی استفاده شده؟
سوالی که دارم اینه :
برای مدیریت چنین پروژه هایی باید چ چیزایی رو ملاک قرار بدیم؟
در هنگام طراحی و پیاده سازی ، پروژه رو چطوری تقسیم بندی بکنیم یعنی چند بخشش کنیم؟
در چنین پروژه هایی باید چند تا تیم توسعه داشته باشیم و هر کدوم تو چ بخش هایی مشغول باشن.
در کل سوال من اینه که چطوری این سایت های بزرگ چ طوری مدیریت میشن؟
آیا منابعی دارید که بتونه کمکم بکنه ؟؟؟
ممنون

olampiad
چهارشنبه 27 آبان 1394, 15:01 عصر
منتظر نظرات افزاد با تجربه و اساتید هستم.
کسی در این مورد بحثی و یا راهنمایی و کمکی نداره؟
ممنون

olampiad
چهارشنبه 27 آبان 1394, 15:05 عصر
برای پروژه های بزرگ باید از قبل چ اقداماتی رو در نظر بگیریم؟
میخوام بدونم پروژه رو چطوری برنامه نویسی کنم که در آینده اگه خواستم تغییر ایجاد کنم به راحتی این کار رو انجام بدم.
ممنون

olampiad
چهارشنبه 27 آبان 1394, 15:10 عصر
میخوام از تجربیات کسی که چنین سایتی قبلا داشته استفاده کنم.
ممنون

djtrex
چهارشنبه 27 آبان 1394, 16:05 عصر
متاسفانه این پترن MVC که به معماری ۳ لایه هم معروفه بیشتر به ظاهرش (فولدر های کنترلر - ویو - مدل!!!) توجه شده تا اینکه درک بشه اصلا هدفش چی هست. + اینکه هرجایی هم نمیشه استفاده کرد ازش + نقص هم زیاد داره (مثلا cms مثل اوپن کارت ۲ هم یک mvc هست که به طرز فوق العاده مزخرفی پیاده شده! یعنی فاجعه است!)

(دلایلیش اینجا هست: http://blog.ircmaxell.com/2014/11/alternatives-to-mvc.html و وحی منزل هم نیست کلی پترن دیگه هست تو بعضی از موارد خیلی بهتر هم کار میکنه مثلا: http://fideloper.com/hexagonal-architecture
یا
http://blog.fedecarg.com/2009/03/11/domain-driven-design-and-mvc-architectures/ )

البته سوال شما خیلی خیلی کلی هست و نیازمند کلی پیشنیاز هست. در مورد آپارات یا دیجیکالا یا کافه بازار فشار بازدید و ... رو بیشتر cdn ها به دوش میکشند و قابل قیاس با سایت هایی مثل یوتیوب و فیسبوک و ... نیستند!

در مورد فیسبوک میتونید این اسلایدهارو ببینید و متوجه میشید چیزی که فکر میکنید خیلی با چیزی که اونا انجام میدن فرق میکنه:
http://www.slideshare.net/Mugar1988/facebook-architecture-presentation-scalability-challenge?related=1

مطالب این سایتم خوبه که در مورد High Scalability هست:
http://highscalability.com/

در مورد مفهوم هایی مثل zero down-time deploy یا dynamic config server باید بیشتر مطالعه کنید و روش های اون. مثلا فرض کنید من یه سری دیتا به عنوان کانفیگ اولیه دارم و اینو میخام برای ۱۰ تا سرور تغییر بدم. اگه بخوام دونه دونه فایل کانفیگ رو تغییر بدم بعد بیارم بالا دوباره استارت بزنم سرور رو که فاجعه است. میشه از ابزاری مثل redis استفاده کرد به عنوان config server/servers داده های config رو بین نودها publish کنی.
یا مفهوم هایی مثل horizontal scaling و load balancing کردن ترافیک بین پروسه ها یا سرورها یا دیتاسنترها.

اینکه قبل از deploy و منتشر کردن روی سرورها چه جوری مطمئن میشن کدها کار میکنه که باز مفهوم تست رو در بر میگیره. TDD,BDD,Integration Test,Acceptance Test و ...
-----
توی slideshare کلی اسلاید میتونید پیدا کنید در مورد اینجور چیزها که از تیم سایت ها و شرکتهای بزرگی اومدن توضیح دادن.
کتاب های زیادی هم در مورد این چیزا هست که میتونید توی it-ebooks.info پیدا کنید :)

----
در آخر باید بگم راه حل ساده ای برای هیچ کدوم نیست باید کلی مطالعه کرد (خصوصا انگلیسی نه فارسی!!!) کلی ابزار جدید باید شناخت. ابزارها و روشهای سنتی رو باید گذاشت کنار (مثلا این هاستینگ های اشتراکی!!) و ...

olampiad
شنبه 30 آبان 1394, 00:30 صبح
تشکر بابت راهنمایی ها
عالی بوووود.
از بین HMVC و MVVM کدوم رو برای پروژه های بزرگ و حرفه ای مناسب میدونید تا من دنبال اون برم.
ممنون

djtrex
شنبه 30 آبان 1394, 12:20 عصر
تشکر بابت راهنمایی ها
عالی بوووود.
از بین HMVC و MVVM کدوم رو برای پروژه های بزرگ و حرفه ای مناسب میدونید تا من دنبال اون برم.
ممنون


خواهش میکنم :)

نکته ای که باید در نظر بگیریم اینا همه دیزاین پترن هستند (در این مورد دیزاین پترن های معماری یا architectural design pattern). قبلا هم اینجا (http://barnamenevis.org/showthread.php?500349-Design-pattern-structure) گفتم این پترن ها ابزارن برای کمک نه اینکه ما ابزاری باشیم برای اونا! اگه یه راه ساده تری وجود داره و داره کار میکنه خوب دیگه نیازی نیست خودمونو درگیر اونا کنیم یا به قول کتاب Head First Design Patterns در مورد نوشتن hello world هم بپرسیم از چه پترنی باید استفاده کرد!

در نتیجه همه اینا به context یا اینکه قراره چه کاری انجام بدید بستگی داره بهترین راه حل وجود نداره. ممکنه یه راه حل برای یه جا بهترین باشه برای یه جا نه بدترین پیچیدگی الکی اضافه کنه. یا اون کارایی رو نداشته باشه!

+ هدف اصلی اکثر اینها SoC یا Separation of Concerns هست یعنی برای جدا کردن لایه های مختلف برنامه از هم پیشنهاد شده:
https://en.wikipedia.org/wiki/Separation_of_concerns
----------

اما سوالتون. معماری هایی که معرفی کردید همه الهام گرفته از MVC هستند و هر کدوم سعی کردن بخشی از مشکلات اونو درست کنند مثلا MVVM اومده تمرکز رو گذاشته روی view و اونو به دو قسمت تقسیم کرده View و View-Model (از جهاتی شبیه MVP هست و View-Model هم Presentation) این View-Model نحوه نمایش و اینتراکشن های اونو مدیریت میکنه. توی برنامه های وب در سمت سرور چون تمرکز روی view کمتر هست من فریم ورکی ندیدم که اینو پیاده کرده باشه (البته میشه از ایده هاش الهام گرفت) ولی سمت کلاینت برای حاوا اسکریپت کلی فریم ورک هست مثل Angular.js یا Vue.js و Knockout.js و ...

HMVC برای ساختارهای ماژولار و استفاده دوباره پیشنهاد شده توی بعضی موارد خیلی پترن مناسبی هست ولی در موارد دیگه پیچیدگی رو زیاد میکنه + مشکلات MVC رو هنوز با خودش داره و مثل MVC اگر دقت نکنید با کنترلر های چاق (Fat Controller) طرف هستید که هر اکشن کنترلر کلی لاجیک سیستم رو در بر داره و نگه داری و تست اونو سخت میکنه. ( مثلا اوپن کارت ۲ یه نمونه از همین fat controller هاست و تا جایی پیشرفته که عبارت های زبان رو توی کنترلر دونه دونه لود میکنه میریزه توی یه آرایه پاس میده به view :| نصف کنترلر فقط مربوط به عبارت های زبانه! :)) )

این چند مطلب رو پیشنهاد میکنم بخونید:
A Beginner's Guide To MVC For The Web
http://blog.ircmaxell.com/2014/11/a-beginners-guide-to-mvc-for-web.html

Alternatives To MVC
http://blog.ircmaxell.com/2014/11/alternatives-to-mvc.html

و جواب های این سوال در stackoverflow:
I'm confused, what is the TRUE way to build an MVC or MVVM design pattern?
http://stackoverflow.com/questions/18409659/im-confused-what-is-the-true-way-to-build-an-mvc-or-mvvm-design-pattern

--------------
+ پیشنهاد میکنم حداقل یکی از این کتاب هارو مطالعه کنید: (اگه قبلا مطالعه نکرده اید!)

Head First Design Patterns
http://it-ebooks.info/book/3213/

Patterns of Enterprise Application Architecture
http://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin/dp/0321127420

PHP Objects, Patterns, and Practice, 4th Edition
http://it-ebooks.info/book/3150/

Patterns, Principles, and Practices of Domain-Driven Design
http://it-ebooks.info/book/5789/

Learning PHP Design Patterns
http://it-ebooks.info/book/1856/

olampiad
شنبه 30 آبان 1394, 13:43 عصر
سلام
بازهم تشکر بابت راهنمایی ها
استاد من تو اینترنت خیلی دنبال آموزش hmvc گشتم و چیزی دستمو نگرفت.(یعنی مطالب زیادی بودن ولی زیاد چنگی به دل نمیزدن)
برای mvc مطالب خیلی زیاده ولی برای hmvc مطاالب محدوده.
شما مقاله ای ، اسلایدی ، آموزشی و ... در مورد hmvc سراغ دارین که مثل آموزش های خودتون خلاصه و مفید باشه.
زیانش فرقی نمیکنه
ممنون

olampiad
شنبه 30 آبان 1394, 14:50 عصر
به این لینک سر بزنید
من سرچ کردم وبه این فریم ورک های hmvc رسیدم.
ممنون
http://fuelphp.com/features

djtrex
شنبه 30 آبان 1394, 15:40 عصر
به این لینک سر بزنید
من سرچ کردم وبه این فریم ورک های hmvc رسیدم.
ممنون
http://fuelphp.com/features

fuelphp من کار نکردم ولی تعریفشو شنیدم به نظرم فریم ورک خوبیه چندتا فریم ورک دیگه هم هستن که built-in معماری hmvc رو ساپورت می کنند:
https://kohanaframework.org/
http://phpmvcframework.com/
و ...

البته فریم ورک های دیگه هم مثل سیمفونی یا لاراول یا ... هم با اینکه خودشون برای این معماری ساخته نشدن (خصوصا لاراول که سازنده اش taylor otwell زیاد طرفدار hmvc نیست :دی (+ من!:دی)) ولی میشه برای اونا هم این معماری (یا مشابه اون با هدف مشترک) رو پیاده کرد. مثلا برای لاراول:

https://github.com/caffeinated/modules/wiki
http://sky.pingpong-labs.com/docs/2.1/modules
https://github.com/teepluss/laravel-hmvc

---------

این مطالب در مورد hmvc:
http://techportal.inviqa.com/2010/02/22/scaling-web-applications-with-hmvc/
http://code.tutsplus.com/tutorials/hmvc-an-introduction-and-application--net-11850
https://www.digitalocean.com/community/tutorials/how-to-build-web-applications-with-hmvc-php5-framework-kohana

----------

اسلاید ها ( اکثرا همونایی هستند که فریم ورک های بالا رو نوشتند!!)
http://www.slideshare.net/samsoir/design-for-scalability-with-hmvc?qid=d1fba98a-29c7-43fc-b8fb-08d9c8bc58aa&v=qf1&b=&from_search=3
http://www.slideshare.net/chriscubos/fuelphp-a-php-hmvc-framework-by-silicongulfcom?qid=d1fba98a-29c7-43fc-b8fb-08d9c8bc58aa&v=qf1&b=&from_search=1
http://www.slideshare.net/arobd/web-application-development-using-mvc-framework-kohana?qid=d1fba98a-29c7-43fc-b8fb-08d9c8bc58aa&v=qf1&b=&from_search=7
http://www.slideshare.net/vlucas/alloy-hmvc-php-framework?qid=d1fba98a-29c7-43fc-b8fb-08d9c8bc58aa&v=qf1&b=&from_search=4


کتاب در مورد فریم ورک های گفته شده:
https://www.packtpub.com/web-development/fuelphp-application-development-blueprints
https://www.packtpub.com/web-development/learning-fuelphp-effective-php-development
https://www.packtpub.com/web-development/kohana-30-beginner%E2%80%99s-guide