From c1a135b50cfaa9cc4c39a8a6095700794f02d564 Mon Sep 17 00:00:00 2001
From: Hadi Sinaee
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Source: Do you really know why you prefer REST over RPC
+
+
+
+
+
+
+
+
+
+
طراحی سرچ توییتر یا سرچ فیسبوک |
+| [پاسخ](solutions/system_design/web_crawler/README.md) | طراحی یک خزنده وب |
+| [پاسخ](solutions/system_design/mint/README.md) | Mint طراحی |
+| [پاسخ](solutions/system_design/social_graph/README.md) | طراحی ساختمان داده برای شبکههای اجتماعی |
+| [پاسخ](solutions/system_design/query_cache/README.md) | طراحی یک محل ذخیره به مدل کلید-مقدار برای یک موتور جست و جو |
+| [پاسخ](solutions/system_design/sales_rank/README.md) | طراحی رنکینگ سایت آمازون در قسمت فروش بر اساس ویژگی |
+| [پاسخ](solutions/system_design/scaling_aws/README.md) | طراحی سیستمی که بتونه به تعداد میلیون کاربر روی زیرساخت آمازون اِی-دبلیو-اس اسکیل کنه |
+| [کمک کنید](#کمک) | سوال طراحی سیستم اضافه کنید |
+
+### Pastebin.com (or Bit.ly) طراحی
+
+[مشاهده تمرین و پاسخ](solutions/system_design/pastebin/README.md)
+
+
+
+### طراحی تایملاین و سرچ توییتر یا فید و سرچ فیسبوک
+
+[مشاهده تمرین و پاسخ](solutions/system_design/twitter/README.md)
+
+
+
+### طراحی خزنده وب
+
+[مشاهده تمرین و پاسخ](solutions/system_design/web_crawler/README.md)
+
+
+
+### طراحی Mint.com
+
+[مشاهده تمرین و پاسخ](solutions/system_design/mint/README.md)
+
+
+
+### طراحی ساختمان داده برای شبکههای اجتماعی
+
+[مشاهده تمرین و پاسخ](solutions/system_design/social_graph/README.md)
+
+
+
+### طراحی یک محل ذخیره به مدل کلید-مقدار برای یک موتور جست و جو
+
+[مشاهده تمرین و پاسخ](solutions/system_design/query_cache/README.md)
+
+
+
+### طراحی رنکینگ سایت آمازون در قسمت فروش بر اساس ویژگی
+
+[مشاهده تمرین و پاسخ](solutions/system_design/sales_rank/README.md)
+
+
+
+### طراحی سیستمی که بتونه به تعداد میلیون کاربر روی زیرساخت آمازون اِی-دبلیو-اس اسکیل کنه
+
+[مشاهده تمرین و پاسخ](solutions/system_design/scaling_aws/README.md)
+
+
+
+## سوالات مصاحبه طراحی شئ گرا به همراه پاسخ
+
+> سوالات عمومی که در مصاحبه طراحی شئ گرا پرسیده میشه به همراه پاسخهای نمونه و نمودار و کدهای اون آورده شده. این پاسخهای در پوشه زیر قرار داره.
+>
+> `solutions/`
+
+> Hash-Map: هش-مپ, Least Recently Used Cache: کش به صورت آخرین کمترین استفاده شده, Circular Array: آرایه چرخشی
+
+>**توجه: این بخش درحال توسعه هست**
+
+| | سوال |
+| :--------------------------------------: | ---------------------------------------: |
+| [پاسخ](solutions/object_oriented_design/hash_table/hash_map.ipynb) | طراحی هش-مپ |
+| [پاسخ](solutions/object_oriented_design/lru_cache/lru_cache.ipynb) | طراحی یک کش به صورت آخرین کمترین استفاده شده |
+| [پاسخ](solutions/object_oriented_design/call_center/call_center.ipynb) | طراحی یک مرکز تماس |
+| [پاسخ](solutions/object_oriented_design/deck_of_cards/deck_of_cards.ipynb) | طراحی یه دسته کارت بازی |
+| [پاسخ](solutions/object_oriented_design/parking_lot/parking_lot.ipynb) | طراحی یک پارکینگ |
+| [پاسخ](solutions/object_oriented_design/online_chat/online_chat.ipynb) | طراحی یک سرور چت |
+| [کمک کنید](#کمک) | طراحی یک آرایه چرخشی |
+| [کمک کنید](#کمک) | سوالات بیشتر طراحی شئگرا رو اضافه کنید |
+
+## مباحث طراحی سیستم از اینجا شروع کنید
+
+> تازه با طراحی سیستم آشنا شدید؟
+
+در ابتدا لازمه که یک سری اصول اولیه را یادبگیرید که شامل اینن که این اصول چی هستند، چه شکلی استفاده میشن و مزایا و معایبشون چیه
+
+### قدم۱: ویدیوهایی درمورد مقیاس پذیری رو ببینید
+
+[Scalability Lecture at Harvard](https://www.youtube.com/watch?v=-W9F__D3oY4)
+
+* مباحثی که پوشش داده میشه:
+ * Vertical scaling | مقایس پذیری عمودی
+ * Horizontal scaling | مقایس پذیری افقی
+ * Caching | کش کردن
+ * Load balancing | توزیع بار
+ * Database replication | تکرار پایگاه داده
+ * Database partitioning | قطعهسازی پایگاه داده
+
+### قدم۲: مقالههای مربوط به مقایس پذیری رو ببینید
+
+[Scalability](http://www.lecloud.net/tagged/scalability)
+
+* مباحثی که پوشش داده شده:
+ * [Clones | کلونها](http://www.lecloud.net/post/7295452622/scalability-for-dummies-part-1-clones)
+ * [Databases | پایگاهداده ها](http://www.lecloud.net/post/7994751381/scalability-for-dummies-part-2-database)
+ * [Caches | کشها](http://www.lecloud.net/post/9246290032/scalability-for-dummies-part-3-cache)
+ * [Asynchronism | ناهمگام سازی](http://www.lecloud.net/post/9699762917/scalability-for-dummies-part-4-asynchronism)
+
+### قدمهای بعدی
+
+در قدم بعدی، ما به ترید-آف های سطح بالاتری میپردازیم مانند:
+
+* **کارایی** دربرابر **مقایس پذیری**
+* **تاخیر** دربرابر **بازدهی**
+* **دسترسی پذیری** دربرابر **یکپارچگی**
+
+یادتون باشه که **همه چیز یک ترید-آف هست**
+
+در ادامه ما به مباحث زیر میپردازیم:
+
+DNS, CDNs, load balancers.
+
+## کارایی در برابر مقایس پذیری
+
+یک سرویس رو **مقایس پذیر** میگیم وقتی که متناسب با منابعی که به سیستم اضافه میکنیم **کارایی** اون هم افزایش پیدا بکنه. به طورکلی منظور از افزایش کارایی اینه که تعداد کاربیشتری رو انجام بدیم اما ممکنه که بتونه کارهای باحجم بزرگتر هم بتونه هندل کنه مثل زمانی که مجموعه داده هامون زیاد میشه و رشد میکنه1
+
+یه روش دیگه برای نگاه به قضیه کارایی و مقایس پذیری به صورت زیر هست:
+
+* اگر شما مشکل کارایی دارید، سیستم شما برای یک کاربر کند کار میکنه
+* اگر شما مشکل مقیاس پذیری دارید، سیستم شما برای یک کاربر سریعه ولی برای بار زیاد کند عمل میکنه
+
+### منابع برای مطالعه بیشتر
+
+* [A word on scalability](http://www.allthingsdistributed.com/2006/03/a_word_on_scalability.html)
+* [Scalability, availability, stability, patterns](http://www.slideshare.net/jboner/scalability-availability-stability-patterns/)
+
+## تاخیر در برابر بازدهی
+
+**تاخیر** زمانی هست که باید *کاری* انجام بشه یا نتیجهای ایجاد بشه. **بازدهی** میزان تعداد همین کارها هست که باید توی یک واحد زمانی انجام بشه.
+
+به طور کلی شما باید برای **بیشترین بازدهی** به همراه **تاخیر قابل قبول** برنامه ریزی کنید.
+
+### منابع برای مطالعه بیشتر
+
+* [Understanding latency vs throughput](https://community.cadence.com/cadence_blogs_8/b/sd/archive/2010/09/13/understanding-latency-vs-throughput)
+
+## دسترس پذیری دربرابر یکپارچگی
+
+### CAP تئوری
+
+
+
+ Source: CAP theorem revisited
+
+
+ Source: DNS security presentation
+
+
+ Source: Why use a CDN
+
+
+ Source: Scalable system design patterns
+
+
+ Source: Wikipedia
+
+
+
+ Source: Intro to architecting systems for scale
+
+
+ Source: Scaling up to your first 10 million users
+
+
+ Source: Scalability, availability, stability, patterns
+
+
+ Source: Scalability, availability, stability, patterns
+
+
+ Source: Scaling up to your first 10 million users
+
+
+ Source: Scalability, availability, stability, patterns
+
+
+ Source: SQL & NoSQL, a brief history
+
+
+ Source: Graph database
+
+
+ Source: Transitioning from RDBMS to NoSQL
+
+
+ Source: Scalable system design patterns
+
+
+ Source: From cache to in-memory data grid
+
+
+ Source: Scalability, availability, stability, patterns
+
+
+ Source: Scalability, availability, stability, patterns
+
+
+ Source: From cache to in-memory data grid
+
+
+ Source: Intro to architecting systems for scale
+
+
+ Source: OSI 7 layer model
+
+
+ Source: How to make a multiplayer game
+
+
+ Source: How to make a multiplayer game
+
+
+ Source: Crack the system design interview
+
{
"personid": "1234"
} | **DELETE** /persons/1234 |
+| Read a person | **GET** /readPerson?personid=1234 | **GET** /persons/1234 |
+| Read a person’s items list | **GET** /readUsersItemsList?personid=1234 | **GET** /persons/1234/items |
+| Add an item to a person’s items | **POST** /addItemToUsersItemsList
{
"personid": "1234";
"itemid": "456"
} | **POST** /persons/1234/items
{
"itemid": "456"
} |
+| Update an item | **POST** /modifyItem
{
"itemid": "456";
"key": "value"
} | **PUT** /items/456
{
"key": "value"
} |
+| Delete an item | **POST** /removeItem
{
"itemid": "456"
} | **DELETE** /items/456 |
+
+
[stackexchange.com](http://programmers.stackexchange.com/questions/38324/interview-question-how-would-you-implement-google-search)
[ardendertat.com](http://www.ardendertat.com/2012/01/11/implementing-search-engines/)
[stanford.edu](http://infolab.stanford.edu/~backrub/google.html) |
+| Design a scalable web crawler like Google | [quora.com](https://www.quora.com/How-can-I-build-a-web-crawler-from-scratch) |
+| Design Google docs | [code.google.com](https://code.google.com/p/google-mobwrite/)
[neil.fraser.name](https://neil.fraser.name/writing/sync/) |
+| Design a key-value store like Redis | [slideshare.net](http://www.slideshare.net/dvirsky/introduction-to-redis) |
+| Design a cache system like Memcached | [slideshare.net](http://www.slideshare.net/oemebamo/introduction-to-memcached) |
+| Design a recommendation system like Amazon's | [hulu.com](http://tech.hulu.com/blog/2011/09/19/recommendation-system.html)
[ijcai13.org](http://ijcai13.org/files/tutorial_slides/td3.pdf) |
+| Design a tinyurl system like Bitly | [n00tc0d3r.blogspot.com](http://n00tc0d3r.blogspot.com/) |
+| Design a chat app like WhatsApp | [highscalability.com](http://highscalability.com/blog/2014/2/26/the-whatsapp-architecture-facebook-bought-for-19-billion.html)
+| Design a picture sharing system like Instagram | [highscalability.com](http://highscalability.com/flickr-architecture)
[highscalability.com](http://highscalability.com/blog/2011/12/6/instagram-architecture-14-million-users-terabytes-of-photos.html) |
+| Design the Facebook news feed function | [quora.com](http://www.quora.com/What-are-best-practices-for-building-something-like-a-News-Feed)
[quora.com](http://www.quora.com/Activity-Streams/What-are-the-scaling-issues-to-keep-in-mind-while-developing-a-social-network-feed)
[slideshare.net](http://www.slideshare.net/danmckinley/etsy-activity-feeds-architecture) |
+| Design the Facebook timeline function | [facebook.com](https://www.facebook.com/note.php?note_id=10150468255628920)
[highscalability.com](http://highscalability.com/blog/2012/1/23/facebook-timeline-brought-to-you-by-the-power-of-denormaliza.html) |
+| Design the Facebook chat function | [erlang-factory.com](http://www.erlang-factory.com/upload/presentations/31/EugeneLetuchy-ErlangatFacebook.pdf)
[facebook.com](https://www.facebook.com/note.php?note_id=14218138919&id=9445547199&index=0) |
+| Design a graph search function like Facebook's | [facebook.com](https://www.facebook.com/notes/facebook-engineering/under-the-hood-building-out-the-infrastructure-for-graph-search/10151347573598920)
[facebook.com](https://www.facebook.com/notes/facebook-engineering/under-the-hood-indexing-and-ranking-in-graph-search/10151361720763920)
[facebook.com](https://www.facebook.com/notes/facebook-engineering/under-the-hood-the-natural-language-interface-of-graph-search/10151432733048920) |
+| Design a content delivery network like CloudFlare | [cmu.edu](http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci) |
+| Design a trending topic system like Twitter's | [michael-noll.com](http://www.michael-noll.com/blog/2013/01/18/implementing-real-time-trending-topics-in-storm/)
[snikolov .wordpress.com](http://snikolov.wordpress.com/2012/11/14/early-detection-of-twitter-trends/) |
+| Design a random ID generation system | [blog.twitter.com](https://blog.twitter.com/2010/announcing-snowflake)
[github.com](https://github.com/twitter/snowflake/) |
+| Return the top k requests during a time interval | [ucsb.edu](https://icmi.cs.ucsb.edu/research/tech_reports/reports/2005-23.pdf)
[wpi.edu](http://davis.wpi.edu/xmdv/docs/EDBT11-diyang.pdf) |
+| Design a system that serves data from multiple data centers | [highscalability.com](http://highscalability.com/blog/2009/8/24/how-google-serves-data-from-multiple-datacenters.html) |
+| Design an online multiplayer card game | [indieflashblog.com](http://www.indieflashblog.com/how-to-create-an-asynchronous-multiplayer-game.html)
[buildnewgames.com](http://buildnewgames.com/real-time-multiplayer/) |
+| Design a garbage collection system | [stuffwithstuff.com](http://journal.stuffwithstuff.com/2013/12/08/babys-first-garbage-collector/)
[washington.edu](http://courses.cs.washington.edu/courses/csep521/07wi/prj/rick.pdf) |
+| Design an API rate limiter | [https://stripe.com/blog/](https://stripe.com/blog/rate-limiters) |
+
+| Add a system design question | [Contribute](#contributing) |
+
+### معماری های دنیای واقعی
+
+> مقالههایی در مورد اینکه سیستمهای دنیای واقعی به صورتی طراحی شدهاند
+
+
+
+ Source: Twitter timelines at scale
+
[What powers Instagram](http://instagram-engineering.tumblr.com/post/13649370142/what-powers-instagram-hundreds-of-instances) |
+| Justin.tv | [Justin.Tv's live video broadcasting architecture](http://highscalability.com/blog/2010/3/16/justintvs-live-video-broadcasting-architecture.html) |
+| Facebook | [Scaling memcached at Facebook](https://cs.uwaterloo.ca/~brecht/courses/854-Emerging-2014/readings/key-value/fb-memcached-nsdi-2013.pdf)
[TAO: Facebook’s distributed data store for the social graph](https://cs.uwaterloo.ca/~brecht/courses/854-Emerging-2014/readings/data-store/tao-facebook-distributed-datastore-atc-2013.pdf)
[Facebook’s photo storage](https://www.usenix.org/legacy/event/osdi10/tech/full_papers/Beaver.pdf) |
+| Flickr | [Flickr architecture](http://highscalability.com/flickr-architecture) |
+| Mailbox | [From 0 to one million users in 6 weeks](http://highscalability.com/blog/2013/6/18/scaling-mailbox-from-0-to-one-million-users-in-6-weeks-and-1.html) |
+| Pinterest | [From 0 To 10s of billions of page views a month](http://highscalability.com/blog/2013/4/15/scaling-pinterest-from-0-to-10s-of-billions-of-page-views-a.html)
[18 million visitors, 10x growth, 12 employees](http://highscalability.com/blog/2012/5/21/pinterest-architecture-update-18-million-visitors-10x-growth.html) |
+| Playfish | [50 million monthly users and growing](http://highscalability.com/blog/2010/9/21/playfishs-social-gaming-architecture-50-million-monthly-user.html) |
+| PlentyOfFish | [PlentyOfFish architecture](http://highscalability.com/plentyoffish-architecture) |
+| Salesforce | [How they handle 1.3 billion transactions a day](http://highscalability.com/blog/2013/9/23/salesforce-architecture-how-they-handle-13-billion-transacti.html) |
+| Stack Overflow | [Stack Overflow architecture](http://highscalability.com/blog/2009/8/5/stack-overflow-architecture.html) |
+| TripAdvisor | [40M visitors, 200M dynamic page views, 30TB data](http://highscalability.com/blog/2011/6/27/tripadvisor-architecture-40m-visitors-200m-dynamic-page-view.html) |
+| Tumblr | [15 billion page views a month](http://highscalability.com/blog/2012/2/13/tumblr-architecture-15-billion-page-views-a-month-and-harder.html) |
+| Twitter | [Making Twitter 10000 percent faster](http://highscalability.com/scaling-twitter-making-twitter-10000-percent-faster)
[Storing 250 million tweets a day using MySQL](http://highscalability.com/blog/2011/12/19/how-twitter-stores-250-million-tweets-a-day-using-mysql.html)
[150M active users, 300K QPS, a 22 MB/S firehose](http://highscalability.com/blog/2013/7/8/the-architecture-twitter-uses-to-deal-with-150m-active-users.html)
[Timelines at scale](https://www.infoq.com/presentations/Twitter-Timeline-Scalability)
[Big and small data at Twitter](https://www.youtube.com/watch?v=5cKTP36HVgI)
[Operations at Twitter: scaling beyond 100 million users](https://www.youtube.com/watch?v=z8LU0Cj6BOU) |
+| Uber | [How Uber scales their real-time market platform](http://highscalability.com/blog/2015/9/14/how-uber-scales-their-real-time-market-platform.html) |
+| WhatsApp | [The WhatsApp architecture Facebook bought for $19 billion](http://highscalability.com/blog/2014/2/26/the-whatsapp-architecture-facebook-bought-for-19-billion.html) |
+| YouTube | [YouTube scalability](https://www.youtube.com/watch?v=w5WVu624fY8)
[YouTube architecture](http://highscalability.com/youtube-architecture) |
+
+### وبلاگهای مهندسی کمپانیها
+
+> معماریها برای کمپانیهایی که باهاشون قراره مصاحبه کنید
+>
+> سوالاتی که ممکنه باهاشون مواجه بشید، شاید در زمینههای مشابه باشه
+
+* [Airbnb Engineering](http://nerds.airbnb.com/)
+* [Atlassian Developers](https://developer.atlassian.com/blog/)
+* [Autodesk Engineering](http://cloudengineering.autodesk.com/blog/)
+* [AWS Blog](https://aws.amazon.com/blogs/aws/)
+* [Bitly Engineering Blog](http://word.bitly.com/)
+* [Box Blogs](https://www.box.com/blog/engineering/)
+* [Cloudera Developer Blog](http://blog.cloudera.com/blog/)
+* [Dropbox Tech Blog](https://tech.dropbox.com/)
+* [Engineering at Quora](http://engineering.quora.com/)
+* [Ebay Tech Blog](http://www.ebaytechblog.com/)
+* [Evernote Tech Blog](https://blog.evernote.com/tech/)
+* [Etsy Code as Craft](http://codeascraft.com/)
+* [Facebook Engineering](https://www.facebook.com/Engineering)
+* [Flickr Code](http://code.flickr.net/)
+* [Foursquare Engineering Blog](http://engineering.foursquare.com/)
+* [GitHub Engineering Blog](http://githubengineering.com/)
+* [Google Research Blog](http://googleresearch.blogspot.com/)
+* [Groupon Engineering Blog](https://engineering.groupon.com/)
+* [Heroku Engineering Blog](https://engineering.heroku.com/)
+* [Hubspot Engineering Blog](http://product.hubspot.com/blog/topic/engineering)
+* [High Scalability](http://highscalability.com/)
+* [Instagram Engineering](http://instagram-engineering.tumblr.com/)
+* [Intel Software Blog](https://software.intel.com/en-us/blogs/)
+* [Jane Street Tech Blog](https://blogs.janestreet.com/category/ocaml/)
+* [LinkedIn Engineering](http://engineering.linkedin.com/blog)
+* [Microsoft Engineering](https://engineering.microsoft.com/)
+* [Microsoft Python Engineering](https://blogs.msdn.microsoft.com/pythonengineering/)
+* [Netflix Tech Blog](http://techblog.netflix.com/)
+* [Paypal Developer Blog](https://devblog.paypal.com/category/engineering/)
+* [Pinterest Engineering Blog](http://engineering.pinterest.com/)
+* [Quora Engineering](https://engineering.quora.com/)
+* [Reddit Blog](http://www.redditblog.com/)
+* [Salesforce Engineering Blog](https://developer.salesforce.com/blogs/engineering/)
+* [Slack Engineering Blog](https://slack.engineering/)
+* [Spotify Labs](https://labs.spotify.com/)
+* [Twilio Engineering Blog](http://www.twilio.com/engineering)
+* [Twitter Engineering](https://engineering.twitter.com/)
+* [Uber Engineering Blog](http://eng.uber.com/)
+* [Yahoo Engineering Blog](http://yahooeng.tumblr.com/)
+* [Yelp Engineering Blog](http://engineeringblog.yelp.com/)
+* [Zynga Engineering Blog](https://www.zynga.com/blogs/engineering)
+
+#### منابع برای مطالعه بیشتر
+
+* [kilimchoi/engineering-blogs](https://github.com/kilimchoi/engineering-blogs)
+
+لیست وبلاگها در اینجا نسبتا کوتاهتر نگه داشته میشه و ریپازیتوری زیر شامل لیست بلندی از این وبلاگهاست که برای جلوگیری از دوباره نویسی در اینجا، فقط همین بخش کم آورده شده. وبلاگ مهندسی کمپانیتون روبه ریپازیتوری زیر اضافه کنید
+
+> Engineering Blogs: [kilimchoi/engineering-blogs](https://github.com/kilimchoi/engineering-blogs)
+
+## تحت توسعه
+
+اگر تمایل به اضافه کردن بخش یا کامل کردن قسمتی که در حال توسعه هست به [همکاری](#همکاری) مراجعه کنید.
+
+* Distributed computing with MapReduce
+* Consistent hashing
+* Scatter gather
+* [همکاری](#همکاری)
+
+## Credits
+
+Credits and sources are provided throughout this repo.
+
+تشکر ویژه از :
+
+* [Hired in tech](http://www.hiredintech.com/system-design/the-system-design-process/)
+* [Cracking the coding interview](https://www.amazon.com/dp/0984782850/)
+* [High scalability](http://highscalability.com/)
+* [checkcheckzz/system-design-interview](https://github.com/checkcheckzz/system-design-interview)
+* [shashank88/system_design](https://github.com/shashank88/system_design)
+* [mmcgrana/services-engineering](https://github.com/mmcgrana/services-engineering)
+* [System design cheat sheet](https://gist.github.com/vasanthk/485d1c25737e8e72759f)
+* [A distributed systems reading list](http://dancres.github.io/Pages/)
+* [Cracking the system design interview](http://www.puncsky.com/blog/2016/02/14/crack-the-system-design-interview/)
+
+## اطلاعات تماس
+
+در صورتی که نیازه تا با من در مورد ایشوها، سوالها یا کامنتها صحبت کنید، راحت باشید و ارتباط بگیرید.
+
+اطلاعات تماس من روی [صفحه گیت-هاب](https://github.com/donnemartin) من قابل دسترسی هست.
+
+## License
+
+*I am providing code and resources in this repository to you under an open source license. Because this is my personal repository, the license you receive to my code and resources is from me and not my employer (Facebook).*
+
+ Copyright 2017 Donne Martin
+
+ Creative Commons Attribution 4.0 International License (CC BY 4.0)
+
+ http://creativecommons.org/licenses/by/4.0/
From 70008d37dc9c4335af37b6c8d0815351c7df6c89 Mon Sep 17 00:00:00 2001
From: Hadi Sinaee
@@ -469,23 +477,23 @@ DNS, CDNs, load balancers. در سیستمهای توزیع شده کامپیوتری شما تنها میتونید که ۲ تا از گارانتیهای زیر رو تضمین کنید: -* **یکپارچگی** - هر عملیات خواندن نزدیکترین دادهای که تازه نوشته شده رو میگیره یا با خطا مواجه میشه +* **یکپارچگی** - هر عملیات خواندن، نزدیکترین دادهای که تازه نوشته شده رو میگیره یا با خطا مواجه میشه * **دسترس پذیری** - هر درخواست یک پاسخ میگیره، بدون هیچ تضمینی که جدیدترین نسخه از اطلاعات رو بگیره. * **تحمل پارتیشن** - سیستم میتونه به عملیات خودش ادامه علی رغم اینکه به خاطر خطاهای شبکه مجبور به پارتیشن بنده شده باشه -*شبکه ها قابل اتکا نیستن، بنابریان لازمه که شما تحمل پارتیشن رو پشتیبانی کنید. بنابراین باید بین یکپارچگی و دسترس پذیری یک ترید-آف انجام بدیدی و یکی رو انتخاب کنید* +*شبکه ها قابل اتکا و اطمینان نیستن، بنابریان لازمه که شما تحمل پارتیشن رو پشتیبانی کنید و داشته باشید. بنابراین باید بین یکپارچگی و دسترس پذیری یک ترید-آف انجام بدید و یکی رو انتخاب کنید* #### CP یکپارچگی و تحمل پارتیشن > Atomic: اتمیک, Timeout: تایم-اوت -انتظار برای گرفتن جواب از یک نود پارتیشن شده ممکنه باعث بشه تا تایم-اوت بگیریم. این مدل یک انتخاب مناسبه اگر سیستم شما نیاز داره که به صورت اتمیک بخونه و بنویسیه. +صبر و انتظار برای گرفتن جواب از یک نود پارتیشن شده ممکنه باعث بشه تا تایم-اوت بگیریم.اگر سیستم شما نیاز داره که به صورت اتمیک بخونه و بنویسیه ، این مدل یک انتخاب مناسبه #### AP دسترس پذیری و تحمل پارتیشن -پاسخهایی که دریافت میشه جدیدترین نسخه از داده روی اون نود رو برمیگردونه. نوشتن ممکنه نیاز به زمان داشته باشه تا در کل سیستم اعمال بشه +پاسخهایی که دریافت میشه حاوی جدیدترین نسخه از داده است که روی اون نود وجود داره. نوشتن ممکنه نیاز به زمان داشته باشه تا در کل سیستم اعمال بشه -این مدل انتخاب خوبیه اگر شما نیاز به [یکپارچگی موکول](#یکپارچگی-موکول) نیاز دارید یا زمانی که سیستم نیاز داره که مستقل از خطاهای خارج از خودش به علمکردش ادامه بده +این مدل انتخاب خوبیه اگر شما نیاز به [یکپارچگی موکول](#یکپارچگی-موکول) دارید یا سیستم نیاز داره که مستقل از خطاهای خارج از خودش(خطاهای خارجی) به علمکردش ادامه بده ### منابع برای مطالعه بیشتر @@ -495,23 +503,23 @@ DNS, CDNs, load balancers. ## الگوهای یکپارچگی -زمانی که تعدادی کپی از دادههای یکسان داریم، یک سری انتخاب داریم که چطوری کلاینتها رو سینکرون نگه داریم تا همه یک نمای یکسان از داده داشته باشند. با توجه به تعریف یکپارچگی از [تئوری کپ](#CAP-تئوری) - هر عملیات خوندن داده نزدیک ترین نسخه از داده نوشته شده رو میگیره یا خطا میگیره. +زمانی که تعدادی کپی از دادههای یکسان داریم، با مجموعهای از انتخابها درباره این که چطوری کلاینتها رو سینکرون نگه داریم موجه میشیم تا همه یک نمای یکسان از داده داشته باشند. با توجه به تعریف یکپارچگی از [تئوری کپ](#CAP-تئوری) - هر عملیات خوندن، نزدیک ترین نسخه از داده نوشته شده رو میگردونه یا خطا میده. ### یکپارچگی ضعیف -بعد از این که یک عملیات نوشتن انجام شد، عملیات خوندن ممکنه دیده بشه یا نشه. بهترین روش برای خوندن انتخاب میشه. +بعد از این که یک عملیات نوشتن انجام شد، عملیات خوندن ممکنه اونو ببینه یا نبینه. بهترین روش برای خوندن انتخاب میشه. -این روش در سیستمهای نظیر مِم-کش دیده میشه. یکپارچگی ضعیف در سیستمهای با نیاز بلادرنگ نظیر وویپ، ویدیو چت و بازیهای بلادرنگ چندنفره کاربرد داره. برای مثال، اگر شما پشت تلفن باشید و چند ثانیه ارتباط قطع بشه و بعد دوباره وصل بشید، اون چیزی که گفته شده رو دیگه از دست دادید. +این روش در سیستمهای نظیر مِم-کش-دی دیده میشه. یکپارچگی ضعیف در سیستمهای با نیاز بلادرنگ مثل وویپ، ویدیو چت و بازیهای بلادرنگ چندنفره کاربرد داره. برای مثال، اگر شما پشت تلفن باشید و چند ثانیه ارتباط قطع بشه و بعد دوباره وصل بشید، اون چیزی که گفته شده رو دیگه از دست دادید. ### یکپارچگی موکول -بعد از یک عملیات نوشتن، عملیاتهای خوندن معمولا در میزان چند میلی ثانیه میتونن اونو ببینن. داده به صورت ناهمگام در جاهای دیگه کپی میشه +بعد از اینکه یک عملیات نوشتن انجام شد، عملیاتهای خوندن نهایتا(در حد چند میلی ثانیه) اونو میبینن. داده به صورت ناهمگام در جاهای دیگه کپی و تکرار میشه -این روش در سیستمهایی نظیر دی-اِن-اِس و ایمیل دیده میشه. این مدل در سیستمهای با دسترس پذیری بالا به خوبی کار میکنه. +این روش در سیستمهایی نظیر دی-اِن-اِس و ایمیل دیده میشه. در سیستمهای با دسترس پذیری بالا به خوبی کار میکنه. ### یکپارچگی قوی -بعد از عملیات نوشتن، عملیاتهای خوندن اونو میبینن. داده به صورت همگام کپی میشود. +بعد از اینکه عملیات نوشتن انجام شد، عملیاتهای خوندن اونو میبینن. داده به صورت همگام کپی و تکرار میشه. این روش معمولا در فایل سیستمها و مدیریت پایگاه دادهرابطهای دیده میشه. در سیستمهایی که نیاز به تراکنش دارند این مدل به خوبی عمل میکنه. @@ -531,33 +539,33 @@ DNS, CDNs, load balancers. #### Active-passive -در این مدل، هارت-بیت بین سرور فعال و غیر فعال که درحالت آماده باشه رد و بدل میشه. اگر هارت-بیت قطع بشه سرور غیرفعال آی-پی سرور فعال رو دراختیار میگیره و درخواستها رو هندل میکنه. +در این مدل، هارت-بیت بین سرور فعال و سرور غیر فعال که درحالت آماده باشه، رد و بدل میشه. اگر هارت-بیت قطع بشه سرور غیرفعال آی-پی سرور فعال رو دراختیار میگیره و درخواستها رو هندل میکنه. -طول زمان پایین بودن به ۲ صورت مشخص میشه. سرور غیر فعال از به صورت هات لود میشه یا زا شرایط لود سرد اصطلاحا فعال میشه. فقط سرور فعال ترافیک رو هندل میکنه. +طول زمان پایین بودن به دو نوع معین میشه، یا اینکه سرور غیر فعال در حالت به اصطلاح هات در انتظاره یا نیاز داره از حالت به اصطلاح سرد شروع به کار کنه. فقط سرور فعال ترافیک رو هندل میکنه. این مدل رو مستر-اِسلِیو هم میگن #### Active-active -در این حالت هر دو سرور ترافیک رو هندل میکنه و بار بین این دو تقسیم میشه. +در این حالت هر دو سرور ترافیک رو هندل میکنن و بار بین این دو تقسیم میشه. -اگر سرورها به صورت عمومی روی اینترنت باشن، دی-اِن-اِس باید آی-پی هر دو سرور رو بدونه. اگر سرورها در شبکه داخلی باشن، لایه برنامه باید از حضور این دو سرور آگاهی داشه باشه. +اگر سرورها به صورت عمومی روی اینترنت قابل دسترسی باشن، دی-اِن-اِس باید آی-پی هر دو سرور رو بدونه. اگر سرورها در شبکه داخلی باشن، لایه برنامه باید از حضور این دو سرور آگاهی داشه باشه. این مدل به عنوان مستر-مستر هم شناخته میشه. -### معایب این الگو +### معایب Fail-over -* این الگو نیاز به سخت افزار بیشتر هست و پیچیدگی رو هم افزایش میده -* اگر یک سیستم فعال فِیل بشه قبل از این که داده جدید نوشته بتونه کپی بشه توی سرور غیرفعال، امکان از دست رفتن داده هست. +* این الگو نیاز به سخت افزار بیشتری داره و پیچیدگی رو هم افزایش میده +* اگر یک سیستم فعال فِیل بشه و فرصت نشه تا داده جدیدی که تازه نوشته شده، بتونه کپی بشه توی سرور غیرفعال، امکان از دست رفتن داده هست. -### تکرارکردن +### Replication -#### مستر-اسلیو و مستر-مستر +#### Master-Slave و Master-Master -این موضوع در بخش [پایگاه داده](#پایگاهداده) بررسی شده +این موضوع در بخش [پایگاه داده](#پایگاه-داده) بررسی شده -* [تکرارکردن مستر-اسلیو](#تکرار-مستر-اسلیو) -* [تکرارکردن-مستر-مستر](#تکرارکردن-مستر-مستر) +* [تکرارکردن مستر-اسلیو](#master-slave-replication) +* [تکرارکردن-مستر-مستر](#master-master-replication) ## سیستم نام دامنه DNS @@ -569,11 +577,11 @@ DNS, CDNs, load balancers. Source: DNS security presentation
-سیستم نام دامنه یا همان دی-اِن-اِس نام یک یک دامنه را به آی-پی آن ترجمه میکند. +سیستم نام دامنه یا همان دی-اِن-اِس، نام یک دامنه را به آی-پی آن ترجمه میکند. www.example.com -> IP address. -دی-اِن-اِس به صورت سلسله مراتبی هست و تعداد کمی سرور اصلی در لایههای بالا وجود داره. روتر یا آی-اِس-پی شما اطلاعات مربوط به دی-ان-اس هایی که برای جستجو استفاده میشن رو در اختیار شما میزارن. دی-ان-اس های لایه پایینتر معمولا این نگاشت بین نام دامنه و آی-پی رو کش میکنن که ممکنه بعد از مدتی اعتبار این نگاشتها از بین بره به خاطر این که انتشار تغییرات در دی-ان-اس کنده. نتایجی که از دی-ان-اس برای شما میاد ممکنه که در مرورگر یا سیستم عامل کش برای مدت مشخصی کش بشه، به این مدت مشخص تایم-تو-لیو گفته میشه +دی-اِن-اِس به صورت سلسله مراتبی هست و تعداد کمی سرور اصلی در لایههای بالا وجود داره. روتر یا آی-اِس-پی شما اطلاعات مربوط به دی-ان-اس هایی که برای جستجو استفاده میشن رو در اختیار شما میزارن. دی-ان-اس های لایه پایینتر معمولا این نگاشت بین نام دامنه و آی-پی رو کش میکنن به خاطر این که انتشار تغییرات در دی-ان-اس کنده، که ممکنه بعد از مدتی اعتبار این نگاشتها از بین بره . نتایجی که از دی-ان-اس برای شما میاد ممکنه که در مرورگر یا سیستم عامل برای مدت مشخصی کش بشه، به این مدت مشخص تایم-تو-لیو گفته میشه > [time to live (TTL)](https://en.wikipedia.org/wiki/Time_to_live) : تایم-تو-لیو @@ -587,11 +595,11 @@ www.example.com -> IP address. * > example.com -> www.example.com -سرویسهای نظیر سرویس های زیر سرویسهای دی-ان-اس مدیریت شده رو ارائه میکنن +سرویسهای نظیر سرویس های زیر سرویس دی-ان-اس مدیریت شده رو ارائه میکنن [CloudFlare](https://www.cloudflare.com/dns/) و [Route 53](https://aws.amazon.com/route53/) -بعضی از سرویسهای دی-ان-اس میتونن ترافیک رو از راههای مختلفی ارسال کنند: +بعضی از سرویسهای دی-ان-اس میتونن ترافیک رو با روشهای مختلفی، مثل روشهای زیر، ارسال کنند: * [Weighted round robin](http://g33kinfo.com/info/archives/2657) * از ارسال ترافیک به سرورهایی که در حال نگهداری هستند خودداری میکنه @@ -600,15 +608,15 @@ www.example.com -> IP address. * Latency-based |براساس تاخیر * Geolocation-based | براساس موقعیت جغرافیایی -### معایب دی-ان-اس +### معایب: دی-ان-اس * دسترسی به سرور دی-ان-اس یک تاخیری رو موجب میشه که با استفاده از کشینگ گفته شده برطرف میشه. -* مدیریت سرورهای دی-ای-اس ممکنه پیچیده باشه بااین حال توسط دولت ها،آی-اس-پی ها و کمپانیهای بزرگ مدیریت میشه +* مدیریت سرورهای دی-ای-اس ممکنه پیچیده باشه با این حال توسط دولت ها،آی-اس-پی ها و کمپانیهای بزرگ مدیریت میشه * > [governments, ISPs, and large companies](http://superuser.com/questions/472695/who-controls-the-dns-servers/472729). -* سرویس دی-ان-اس اخیرا مورد حمله دی-داس قرارگرفته و باعث شده تا کاربران نتونن به وب سایتها دسترسی پیدا کنن، وب سایتهایی نظیر توییتر - از طریق اینکه آی-پی توییتر رو نمیتونستن پیدا کنن +* سرویس دی-ان-اس اخیرا مورد حمله دی-داس قرارگرفته و باعث شده تا دسترسی کاربران به وب سایتها قطع بشه، وب سایتهایی نظیر توییتر - به اینصورت که کاربرا آی-پی توییتر رو نمیتونستن پیدا کنن * > [DDoS attack](http://dyn.com/blog/dyn-analysis-summary-of-friday-october-21-attack/) @@ -628,34 +636,36 @@ www.example.com -> IP address. Source: Why use a CDN -یک شبکه توزیع محتوا یا سی-دی-ان یک شبکه توزیع شده از پروکسی سرورهاست که محتوا را از مکانهایی که به کاربر نزدیکتره به دستش میرسونه. به طور کلی فایلهای ایستا مثل اچ-تی-ام-ال، جاوااسکریپت و سی-اس-اس، عکس، ویدیو از طریق سی-دی-ان به کاربر داده میشه. با این حال سی-دی-ان هایی نظیر کلود-فرانت که برای شرکت آمازون است محتوای غیر ایستا یا داینامیک رو هم پشتیبانی میکنه. عملیات گرفتن دی-ای-اس سایت میگه به کاربر که باید به کدوم سرور متصل بشه. +> HTML: اِچ-تی-اِم-اِل, CSS: سی-اِس-اِس , Javascript: جاوااسکریپت -انتشار محتوا از طریق سی-دی-ان ها میتونه باعث افزایش کارایی چشمگیری بشه. این افزایش به خاطر ۲ علت زیر هست: +یک شبکه توزیع محتوا یا سی-دی-ان یک شبکه توزیع شده از پروکسی سرورهاست که محتوا را از مکانهایی که به کاربر نزدیکتره به دستشون میرسونه. به طور کلی فایلهای ایستا مثل اِچ-تی-اِم-اِل، جاوااسکریپت و سی-اِس-اِس، عکس، ویدیو از طریق سی-دی-ان به کاربر داده میشه. با این حال سی-دی-ان هایی نظیر کلود-فرانت که برای شرکت آمازون است محتوای غیر ایستا یا داینامیک رو هم پشتیبانی میکنه. عملیات سوال از دی-ان-اس برای یه سایت به کاربر میگه که باید به کدوم سرور متصل بشه. -* کاربران محتوا را از مرکزدادهای که بهشون نزدیکه میگیرن. -* سرورهای شما احتیاجی نیست که به درخواستی پاسخ بدن که سی-دی-ان میتونه پاسخ بده +انتشار محتوا از طریق سی-دی-ان ها میتونه باعث افزایش کارایی چشمگیری بشه. این افزایش به خاطر ۲ علت زیره: + +* کاربران محتوا را از دیتاسنتری که بهشون نزدیکه میگیرن. +* سرورهای شما احتیاجی نیست که به درخواستی پاسخ بدن که سی-دی-اِن میتونه پاسخ بده ### Push CDNs -پوش سی-دی-ان زمانی که سرورشما تغییر روی محتوا داشته باشه، تغییرات رو میگیره. در این حالت شما مسوول تهیه محتوا برای سی-دی-ان هستید، باید محتوا رو آپلود مستقیم اپلود کنید روی سی-دی-ان و یو-آر-ال ها رو دوباره نویسی کنید که به سی-دی-ان اشاره کنه. شما میتونید تظیم کنید که چه زمانی محتوایی که گذاشتید مدت استفادش از بین بره و چه زمانی آپدیت بشه. محتوا زمانی آپلود میشه که یا جدید باشه یا تغییر پیدا کرده باشه که باعث کاهش ترافیک میشه ولی افزایش میزان حافظه هم هست. +پوش سی-دی-ان زمانی که سرورشما تغییری روی محتوا داشته باشه، تغییرات رو میگیره. در این حالت، شما مسوول آماده کردن محتوا برای سی-دی-ان هستید، باید محتوا رو مستقیم آپلود کنید روی سی-دی-اِن و یو-آر-اِل ها رو دوباره نویسی کنید که به سی-دی-ان اشاره کنه. میتونید تنظیم کنید که چه زمانی محتوایی که گذاشتید مدت استفادش از بین بره و چه زمانی آپدیت بشه. محتوا زمانی آپلود میشه که یا جدید باشه یا تغییر پیدا کرده باشه. اینکار باعث کاهش ترافیک میشه ولی افزایش میزان حافظه هم داره. -سایتهایی که ترافیک کمی دارند یا محتوایی دارند که آپدیت نمیشن اغلب اوقات با این مدل پوش سی-دی-ان به خوبی کار میکنن. محتواها یکبار در سی-دی-ان گذاشته میشن به جای اینکه طی یه بازهی مشخصی همینطوری از سرور آورده بشن توی سی-دی-ان +سایتهایی که ترافیک کمی دارند یا محتوایی دارند که آپدیت نمیشه اغلب اوقات با این مدل پوش سی-دی-ان به خوبی کار میکنن. به جای اینکه طی یه بازهی مشخصی همینطور از سرور محتوا آورده بشه توی سی-دی-اِن، محتوا یکبار در سی-دی-ان گذاشته میشه ### Pull CDNs -پول سی-دی-ان محتوای جدید رو از سرور شما میگیره وقتیکه کاربر اول درخواست برای اون محتوا رو میده. شما محتوا رو میزارید روی سرورتون و یو-آر-ال ها روی سی-دی-ان میزارید. این کار باعث میشه که درخواستها کندتر بشن البته تا وقتی که محتوا روی سی-دی-ان کش بشه. +وقتیکه کاربر اولین درخواست برای یک محتوای جدید رو میده، پول سی-دی-ان اون محتوا جدید رو از سرور شما میگیره . شما محتوا رو روی سرورتون میزارید و یو-آر-ال هاش روی سی-دی-ان تنظیم میکنید. تا وقتی که محتوا روی سی-دی-ان کش بشه، این کار باعث میشه درخواستها کندتر بشن . -یک تایم-تو-لیو برای اینکه چه مدت زمانی محتوا باید کش بشه رو مشخص میکنه. پول سی-دی-ان میزان استورج رو کم میکنه روی سی-دی-ان اما میتونه ترافیک اضافی هم ایجاد کنه اگر فایلها قبل از این که به سی-دی-ان بیان کش اونها منتقضی بشه. +یک تایم-تو-لیو مدت زمانی که محتوا باید کش بشه رو مشخص میکنه. پول سی-دی-اِن میزان استورج روی سی-دی-اِن رو کم میکنه اما میتونه ترافیک اضافی هم ایجاد کنه اگر فایلها قبل از این که به سی-دی-اِن بیان مدت کش اونها منتقضی بشه. > [time-to-live (TTL)](https://en.wikipedia.org/wiki/Time_to_live): تایم-تو-لیو -سایتهای با ترافیک سنگین خیلی خوب بای این مدل پول سی-دی-ان کار میکنن چون که با آخرین درخواست برای محتوای تازه خواسته شده روی سی-دی-ان مواجه میشه، ترافیک به صورت یکسان پخش میشه. +سایتهای با ترافیک سنگین خیلی خوب با این مدل پول سی-دی-ان کار میکنن چون که با آخرین درخواست برای محتوای تازه درخواست شده روی سی-دی-اِن مواجه میشه، ترافیک به صورت یکسان پخش میشه. -### معایب سی-دی-ان +### معایب: CDN -* هزینه ها خیلی وابسته به ترافیکه که وجود داره با این حال این رو هم مد نظر بگیرید که این هزینه ها رو درکنار هزینههای استفاده نکردن از سی-دی-ان ببینید. -* محتوا ممکنه قبل از این که تایم-تو-لیو اون تموم بشه منقضی بشه -* سی-دی-ان ها باید برای اینکه محتوای ایستا به سی-دی-ان اشاره کنن یو-آر-ال هاش رو تغییر بده. +* هزینهها خیلی وابسته به ترافیکیه که وجود داره با این حال این این هزینه ها رو درکنار هزینههای استفاده نکردن از سی-دی-ان درکنار هم ببینید. +* محتوا ممکنه قبل از این که تایم-تو-لیو اون تموم بشه، منقضی بشه +* برای محتوای ایستا یو-آر-ال ها باید تغییر کنه و به سی-دی-اِن اشاره کنه. ### منابع برای مطالعه بیشتر @@ -671,13 +681,13 @@ www.example.com -> IP address. Source: Scalable system design patterns -لودبالانسرها درخواست هایی که از سمت کاربران میاد رو بین منابع محاسبانی که هست مثل اپلیکیشن سرورها یا پایکاه دهدهها توزیع میکنه. در هر کدوم از این حالات لودبالانسر پاسخ درخواست رو از اون منبع محاسباتی به کاربر برمیگردونه. لودبالانسر ها در مورد زیر موثر هستند: +لودبالانسرها درخواست هایی که از سمت کاربران میاد رو بین منابع محاسباتی که هست مثل اپلیکیشن سرورها یا پایگاه دادهها توزیع میکنه. در هر کدوم از این حالات، لودبالانسر پاسخ درخواست رو از اون منبع محاسباتی به کاربر برمیگردونه. لودبالانسر ها در مورد زیر موثر هستند: * از رفتن درخواست ها به سرورهایی که سالم نیستن جلوگیری میکنه * از زیربار رفتن بیش از اندازه منابع جلوگیری میکنه -* کمک میکنه که سیستم از شکست نقطهای رنجنبرهHelping eliminate single points of failure +* کمک میکنه که سیستم از شکست نقطهای آسیب پذیره نباشه * > Single Point of Failure: شکست نقطهای @@ -685,15 +695,15 @@ www.example.com -> IP address. > HAProxy -مزایای دیگه هم داره به طور مثال: +مزایای دیگه هم داره، به طور مثال: -* **SSL termination** - درخواست هایی که از سمت کاربر میاد را رمزگشایی میکنه و جوابهایی که باید سرور بده رو هم رمزنگاری میکنه بنابراین سرورهای لازم نیست تا این عملیاتهای سنگین محاسباتی رو انجام بدن +* **SSL termination** - درخواست هایی که از سمت کاربر میاد را رمزگشایی میکنه و جوابهایی که باید سرور بده رو هم رمزنگاری میکنه بنابراین سرورها لازم نیست تا این عملیاتهای سنگین محاسباتی رو انجام بدن * از نصب گواهیهای ایکس.۵۰۶ روی هر سرور جلوگیری میکنه * > [X.509 certificates](https://en.wikipedia.org/wiki/X.509) -* **Session persistence** - کوکی ست میکنه و ترافیک مربوط به درخواست یک کاربر رو به یک سرور یکسان میده هر بار اگر وب اپ سِشِ نگه نداره +* **Session persistence** - اگر برنامه وب سِشِن نگه نداره، کوکی سِت میکنه و هربار ترافیک مربوط به درخواست یک کاربر رو به یک سرور یکسان میده -برای جلوگیری از شکست سیستم، یک کاری که مرسومه اینه که چندتا لودبالانسر تنظیم میشه که بد دو مود زیر میتونه باشه +برای جلوگیری از فِیل سیستم، یک کاری که مرسومه اینه که چندتا لودبالانسر تنظیم میشه که با دو مود زیر میتونه باشه > [active-passive](#active-passive) , [active-active](#active-active) . @@ -702,24 +712,28 @@ www.example.com -> IP address. * Random * Least loaded * Session/cookies -* [Round robin or weighted round robin](http://g33kinfo.com/info/archives/2657) -* [Layer 4](#layer-4-load-balancing) -* [Layer 7](#layer-7-load-balancing) +* [Round robin یا weighted round robin](http://g33kinfo.com/info/archives/2657) +* [لایه ۴](#توزیع-بار-لایه-۴) +* [لایه ۷](#توزیع-بار-لایه-۷) ### توزیع بار لایه ۴ > Packet: پکت -لودبالانسرهای لایه ۴ به اطلاعاتی که در لایهی ترسنپورت است نگاه میکنند و تصمیم میگیردن که چهطوری درخواستها رو توزیع کنند. به طورکلی یعنی نگاه به اطلاعتی نظیر مبدا درخواست، آی-پی مقصد و پورت هایی که در هدر وجود دارد اما به محتوای پکتی که ارسال میشود نگاهی نمیشود این نوع لودبالانسرها پکتهای شبکه را به سرورهای بالادستی ارسال و یا از پکتهای شبکه را دریافت میکنن که به صورت عملیات ترجمه آدرس شبکه انجام میشه. +لودبالانسرهای لایه ۴ به اطلاعاتی که در لایهی ترسنپورت است نگاه میکنند و تصمیم میگیرن که چهطوری درخواستها رو پخش کنند. به طورکلی یعنی نگاه به اطلاعاتی نظیر مبدا درخواست، آی-پی مقصد و پورت هایی که در هدر وجود دارد، اما به محتوای پکتی که ارسال میشود نگاهی نمیشود. این نوع لودبالانسرها پکتهای شبکه را به سرورهای بالادستی ارسال و یا از آنها دریافت میکنن که به این صورت عملیات ترجمه آدرس شبکه انجام میشه. -> [transport layer](#communication): لایه ترنسپورت +> [transport layer](#ارتباط): لایه ترنسپورت > [Network Address Translation (NAT)](https://www.nginx.com/resources/glossary/layer-4-load-balancing/): ترجمه آدرس شبکه ### توزیع بار لایه ۷ -لودبالانسرهای لایه ۷ به لایهی برنامه نگاه میکنند و تصمیم میگیرند که چهطوری درخواست ها رو توزیع کنند. این کار میتونی با استفاده از داده هایی که در هدر، محتوای پیام و کوکیهاست صورت بپذیره. این لودبالانسرها ترافیک شبکه رو تموم میکنه، پیام رو میخونه و یک تصمیم برای توزیع بار میگیره و بعدش یک کانکشن به سروری که حاصل تصمیمش هست ایجاد میکنه. برای مثال، یه لود بالانسر لایه ۷ میتونه ترافیکهای مربوط به ویدیو رو به یک سرور بفرسته درحالیکه ترافیکهای مربوط به قبضهای پرداختی میشه رو به یک سرور دیگه ای که از نظر امنیتی قوی تر هست بفرسته. +> Upstream: بالادستی -با احتساب هزینهای که بابت انعطاف پذیری در نظر بگیریم، لودبالانسینگ لایه ۴ نیاز به منابع و زمان کمتری داره نسبت به لایه ۷ با این حال کاراییش روی سیستمهای مدرن معمولی میتونه کم اثر باشه. +لودبالانسرها میتونن کمکی باشن برای اسکیل کردن افقی و باعث افزایش کارایی و دسترس پذیری بشن. اسکیل کردن + +لودبالانسرهای لایه ،۷ به لایهی برنامه نگاه میکنند و تصمیم میگیرند که چهطوری درخواست ها رو پخش کنند. این کار میتونه با استفاده از داده هایی که در هدر، محتوای پیام و کوکیهاست صورت بپذیره. این لودبالانسرها ترافیک شبکه رو تموم میکنه یعنی تا تهش میگیره، پیام رو میخونه و یک تصمیم برای توزیع بار میگیره و بعدش یک کانکشن به سروری که حاصل تصمیمش هست ایجاد میکنه. برای مثال، یه لود بالانسر لایه ۷ میتونه ترافیکهای مربوط به ویدیو رو به یک سرور بفرسته درحالیکه ترافیکهایی که مربوط به قبضهای پرداختی میشه رو به یک سرور دیگه ای که از نظر امنیتی قوی تر هست بفرسته. + +با احتساب هزینهای که بابت انعطاف پذیری، لودبالانسینگ لایه ۴ نیاز به منابع و زمان کمتری داره نسبت به لایه ۷ ، با این حال کاراییش روی سیستمهای مدرن معمولی میتونه کم اثر باشه. ### مقایس پذیری افقی @@ -727,7 +741,7 @@ www.example.com -> IP address. لودبالانسرها میتونن کمکی باشن برای اسکیل کردن افقی و باعث افزایش کارایی و دسترس پذیری بشن. اسکیل کردن با استفاده از سیستمهای عادی تر(تعداد ماشینها رو زیاد کنیم) خیلی از نظر هزینه به صرفه تره و باعث میشه تا دسترس پذیری بیشتری داشته باشیم تا این که بیایم یک سرور رو از نظر سخت افزاری ارتقا بدیم که معمولا گرون میشه، که بهش میگن **مقیاس کردن عمودی**. همینطور کار با یک سیستم عادی خیلی آسونتره واسه آدما تا اینکه بخوان با سیستمهای تخصصی شده برای کارای سطح کلان کار کنن. -#### معایب مقایس پذیری افقی +#### معایب: مقایس پذیری افقی * مقیاس پذیری افقی باعث پیچیدگی میشه و باید سرورهای کلون شده ایجاد کنید. @@ -735,12 +749,12 @@ www.example.com -> IP address. * سشنها میتونن توی یک مرکز ذخیره سازی داده مرکزی ذخیره بشن مثلا پایگاه داده یا یک کش با قابلیت نگهدارندگی دائمی - * > [پایگاهداده](#پایگاهداده) (SQL, NoSQL) - > [کش](#کش) (Redis, Memcached) + * > [پایگاهداده](#پایگاه-داده) (SQL, NoSQL) + > [کش](#cache) (Redis, Memcached) * سرورهایی که معمولا ترافیک دانلودشوندگی دارند مثلا کشها یا پایگاهدادهها نیازدارند که تعداد کانکشنهای همزمان بیشتری رو نسب به سرورهای بالادستی هندل کنن -### معایب لود بالانسر +### معایب: لود بالانسر * لودبالانسر میتونه گلوگاه مشکل کارایی باشه اگر منابع لازم به اندازه کافی نداشته باشه یا اگر اینکه به درستی تنظیم نشده باشه * با استفاده از لودبالانسر مشکل شکست نقطهای از بین میره ولی میزان پیچیدگی رو زیاد میکنه @@ -765,7 +779,7 @@ www.example.com -> IP address.
@@ -911,13 +925,13 @@ www.example.com -> IP address.
##### معایب: master-master replication
-* شما به یک لودبالانسر نیاز دارید یا اینکه باید در لایه برنامهتون تغییراتی ایجاد کنید که مشخص کنه که کجا بنویسه.
+* شما نیاز به یک لودبالانسر دارید یا اینکه باید در لایه برنامهتون تغییراتی ایجاد کنید که مشخص کنه کجا بنویسه.
-* بیشتر سیستمهای مستر-مستر به صورت ناهمگون-ضعیف هستند(که مخالف اصل اَسید هس) یا اینکه باعث میشه که تاخیر عملیات نوشتن به خاطر نیاز به همگامسازی افزایش پیدا کنه.
+* بیشتر سیستمهای مستر-مستر به صورت یکپارچه-ضعیف هستند(که مخالف اصل اَسید هست) یا باعث میشه که تاخیر عملیات نوشتن به خاطر نیاز به همگامسازی افزایش پیدا کنه.
* > ACID: اَسید, Synchronization: همگامسازی, Loosely-Consistent: ناهمگون-ضعیف
-* رفع تداخل بیشتر اتفاق میوفته اگر تعداد نودهای نوشتن بیشتر بیشتر بشه و همینطور میزان تاخیرهم زیاد میشه.
+* اگر تعداد نودهای نوشتن بیشتر و بیشتر بشه، رفع تداخل بیشتر اتفاق میوفته و همینطور میزان تاخیرهم زیاد میشه.
* قسمت زیر رو ببنید چرا که نکات مشترک هستند برای مستر-مستر و مستر-اسلیو
@@ -925,13 +939,13 @@ www.example.com -> IP address.
##### معایب replication
-* اگر نود مستر قبل از اینکه عملیات نوشتنی که به تازگی اتفاق افتاده رو نتونه رو نودهای دیگه تکرارکنه و در این حین پایین بیاد یا فِیل بشه، امکان این هست که دادهها از بین برن.
-* عملیات نوشتن روی نودهای خواندن دوباره اعمال میشه. اگر تعداد نوشتنها خیلی زیاد بشه نودهای خواندن به خاطر تکرار عملیات نوشتن هنگ میکنن و نمیتونن تعداد عملیاتهای خواندن زیادی انجام بدن
+* اگر نود مستر، قبل از اینکه عملیات نوشتنی که به تازگی اتفاق افتاده، نتونه رو نودهای دیگه تکرارکنه و در این حین پایین بیاد یا فِیل بشه، امکان این هست که دادهها از بین برن.
+* عملیاتهای نوشتن روی نودهای خواندن تکرار میشه. اگر تعداد نوشتنها خیلی زیاد بشه نودهای خواندن به خاطر تکرار عملیات نوشتن هنگ میکنن و نمیتونن تعداد عملیاتهای خواندن زیادی انجام بدن
* هرچه تعداد نودهای اسلیو برای خواندن بیشتر باشه،باید تعداد بیشتری عملیات رو روی این نودها تکرار کنید که این خودش باعث میشه که شما یک لگ برای عملیات تکرار کردن داشته باشید
* روی بعضی سیستم ها نوشتن روی مستر میتونه به صورت ایجاد چند تِرِد برای نوشتن موازی انجام بگیره اما روی نودهای خواندنی فقط یک تِرِد میتونه عملیات نوشتن رو انجام بده که اونم به صورت پشت سرهم انجام میشه.
* ریپلیکیشن باعث میشه تا سخت افزار بیشتری اضافه بشه و پیچیدگی رو افزایش میده.
-##### منابع برای مطالعه بیشتر
+##### منابع برای مطالعه بیشتر: replication
* [Scalability, availability, stability, patterns](http://www.slideshare.net/jboner/scalability-availability-stability-patterns/)
* [Multi-master replication](https://en.wikipedia.org/wiki/Multi-master_replication)
@@ -944,7 +958,7 @@ www.example.com -> IP address.
Source: Scaling up to your first 10 million users
Source: Do you really know why you prefer REST over RPC
From d70f150f93a25f6b3c8a43a75824fe4680bb2c6e Mon Sep 17 00:00:00 2001
From: Hadi Sinaee
@@ -77,12 +80,16 @@
Source: SQL & NoSQL, a brief history
+
{
"personid": "1234";
"itemid": "456"
} | **POST** /persons/1234/items
{
"itemid": "456"
} |
| Update an item | **POST** /modifyItem
{
"itemid": "456";
"key": "value"
} | **PUT** /items/456
{
"key": "value"
} |
| Delete an item | **POST** /removeItem
{
"itemid": "456"
} | **DELETE** /items/456 |
-
[YouTube architecture](http://highscalability.com/youtube-architecture) |
+