{"id":28507,"date":"2018-04-20T12:22:18","date_gmt":"2018-04-20T10:22:18","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=28507"},"modified":"2018-04-20T12:23:17","modified_gmt":"2018-04-20T10:23:17","slug":"distributed-architecture-concepts-i-learned-while-building-a-large-payments-system","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/20\/distributed-architecture-concepts-i-learned-while-building-a-large-payments-system\/","title":{"rendered":"Distributed architecture concepts I learned while building a large payments system"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p><a href=\"http:\/\/blog.pragmaticengineer.com\/\">Gergely Orosz<\/a>, an engineer who worked at Uber on the large scale payments system used by the company, shares some of the distributed architecture concepts he had to learn in the blog post titled &#8220;<a href=\"http:\/\/blog.pragmaticengineer.com\/distributed-architecture-concepts-i-have-learned-while-building-payments-systems\/\">Distributed architecture concepts I learned while building a large payments system<\/a>&#8220;.<\/p>\n<p>The article is very well written and easy to follow. But it&#8217;s also a goldmine of links to other resources on the subject.\u00a0 Here&#8217;s a list links and concepts for a quick research and\/or click-through later:<\/p>\n<ul>\n<li>Service Level Agreements (SLAs).\n<ul>\n<li>Availability \/ service uptime (in percentage of time a year)<\/li>\n<li>Accuracy (in percentage)<\/li>\n<li>Capacity (in requests per second)<\/li>\n<li>Latency (95% and 99%)<\/li>\n<\/ul>\n<\/li>\n<li>Horizontal vs. vertical scaling\n<ul>\n<li>Horizontal scaling is adding more machines, much preferred for distributed systems.<\/li>\n<li>Vertical scaling is upgrading machines to the more powerful ones.<\/li>\n<\/ul>\n<\/li>\n<li>Consistency\n<ul>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Consistency_model\">Consistency models<\/a><\/li>\n<li><a href=\"https:\/\/www.cl.cam.ac.uk\/teaching\/0910\/ConcDistS\/11a-cons-tx.pdf\">Strong consistency<\/a><\/li>\n<li><a href=\"https:\/\/www.cl.cam.ac.uk\/teaching\/0910\/ConcDistS\/11a-cons-tx.pdf\">Weak consistency<\/a><\/li>\n<li><a href=\"http:\/\/sergeiturukin.com\/2017\/06\/29\/eventual-consistency.html\">Eventual consistency<\/a><\/li>\n<li><a href=\"https:\/\/hackernoon.com\/eventual-vs-strong-consistency-in-distributed-databases-282fdad37cf7\">Eventual vs. strong consistency<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Durability_(database_systems)\">Data Durability<\/a>\u00a0(<a href=\"https:\/\/drivescale.com\/2017\/03\/whatever-happened-durability\/\">here<\/a>&#8216;s some more on the subject)<\/li>\n<li><a href=\"https:\/\/developers.redhat.com\/blog\/2016\/08\/10\/persistence-vs-durability-in-messaging\/\">Message Persistence and Durability<\/a>\n<ul>\n<li><a href=\"https:\/\/www.rabbitmq.com\/\">RabbitMQ<\/a><\/li>\n<li><a href=\"https:\/\/kafka.apache.org\/\">Kafka Streams<\/a><\/li>\n<\/ul>\n<\/li>\n<li>Idempotency (<a href=\"https:\/\/www.bennadel.com\/blog\/3390-considering-strategies-for-idempotency-without-distributed-locking-with-ben-darfler.htm\">here<\/a>&#8216;s some more on the different strategies)<\/li>\n<li>Sharding and Quorum\n<ul>\n<li><a href=\"https:\/\/medium.com\/@jeeyoungk\/how-sharding-works-b4dec46b3f6\">Resharding<\/a><\/li>\n<li><a href=\"http:\/\/highscalability.com\/blog\/2010\/10\/15\/troubles-with-sharding-what-can-we-learn-from-the-foursquare.html\">Foursquare post-mortem<\/a> on the 2010 17 hour downtime<\/li>\n<li><a href=\"https:\/\/docs.datastax.com\/en\/archived\/cassandra\/3.x\/cassandra\/dml\/dmlConfigConsistency.html#dmlConfigConsistency__about-the-quorum-level\">Quorum in Cassandra<\/a><\/li>\n<\/ul>\n<\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Actor_model\">The Actor Model<\/a>\n<ul>\n<li><a href=\"https:\/\/www.brianstorti.com\/the-actor-model\/\">The Actor Model in 10 Minutes<\/a><\/li>\n<li><a href=\"https:\/\/en.wikipedia.org\/wiki\/Communicating_sequential_processes\">Communicating Sequential Processes<\/a> (CSP), as an alternative<\/li>\n<\/ul>\n<\/li>\n<li>Reactive Architecture\n<ul>\n<li><a href=\"https:\/\/www.reactivemanifesto.org\/\">Reactive Manifesto<\/a><\/li>\n<li><a href=\"https:\/\/www.lightbend.com\/blog\/understand-reactive-architecture-design-and-programming-in-less-than-12-minutes\">Understanding Reactive Architecture and Programming in Less Than 12 Minutes<\/a> (video)<\/li>\n<li><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>Gergely Orosz, an engineer who worked at Uber on the large scale payments system used by the company, shares some of the distributed architecture concepts he had to learn in the blog post titled &#8220;Distributed architecture concepts I learned while building a large payments system&#8220;. The article is very well written and easy to follow. &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2018\/04\/20\/distributed-architecture-concepts-i-learned-while-building-a-large-payments-system\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Distributed architecture concepts I learned while building a large payments system<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Distributed architecture concepts I learned while building a large payments system #WebDev #distributed #Uber #performance #scalability","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_links_to":"","_links_to_target":""},"categories":[1,18,133,62,1334],"tags":[2366,1559,3587,1057,1281,3586,1330],"keyring_services":[],"class_list":["post-28507","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","category-sysadmin","category-technology","category-web-work","tag-cloud-computing","tag-databases","tag-distributed-computing","tag-performance","tag-scalability","tag-uber","tag-web-development"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":27700,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/06\/19\/aws-x-ray-analyze-and-debug-production-distributed-applications\/","url_meta":{"origin":28507,"position":0},"title":"AWS X-Ray &#8211; Analyze and debug production, distributed applications","author":"Leonid Mamchenkov","date":"June 19, 2017","format":false,"excerpt":"\u00a0 I think I'm giving up on even knowing the list and purpose of all the Amazon AWS services, let alone how to use them. \u00a0Here's one I haven't heard about until this very morning: AWS X-Ray. AWS X-Ray helps developers analyze and debug production, distributed applications, such as those\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2017\/06\/x-ray_web-app_diagram_light-1-500x123.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":16736,"url":"https:\/\/mamchenkov.net\/wordpress\/2012\/09\/20\/is-personalweb-technologies-a-new-sco\/","url_meta":{"origin":28507,"position":1},"title":"Is PersonalWeb Technologies a new SCO?","author":"Leonid Mamchenkov","date":"September 20, 2012","format":false,"excerpt":"Linux Weekly News reports that: Personalweb Technologies and Level 3 Communications have filed\u00a0a lawsuit [PDF]\u00a0against Rackspace, alleging that Rackspace's hosting of GitHub infringes upon\u00a0a long list\u00a0of software patents. One of the comments lists a few possibly related law suits: PersonalWeb Technologies LLC et. al. v. Yahoo! Inc. filed yesterday in\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":42632,"url":"https:\/\/mamchenkov.net\/wordpress\/2019\/05\/20\/faast-js-serverless-batch-computing-made-simple\/","url_meta":{"origin":28507,"position":2},"title":"faast.js &#8211; serverless batch computing made simple","author":"Leonid Mamchenkov","date":"May 20, 2019","format":false,"excerpt":"faast.js is a new framework that makes writing serverless functions super easy. Read more about it in this introductory blog post: Faast.js started as a side project to solve the problem of large scale software testing. Serverless functions seemed like a good fit because they could scale up to perform\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2019\/05\/faast-architecture-aws.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2019\/05\/faast-architecture-aws.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2019\/05\/faast-architecture-aws.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2019\/05\/faast-architecture-aws.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":18914,"url":"https:\/\/mamchenkov.net\/wordpress\/2013\/12\/04\/elasticsearch-distributed-restful-search-and-analytics\/","url_meta":{"origin":28507,"position":3},"title":"Elasticsearch &#8211; distributed restful search and analytics","author":"Leonid Mamchenkov","date":"December 4, 2013","format":"link","excerpt":"Elasticsearch - distributed restful search and analytics","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":10016,"url":"https:\/\/mamchenkov.net\/wordpress\/2006\/03\/28\/daily-del-icio-us-bookmarks\/","url_meta":{"origin":28507,"position":4},"title":"Daily del.icio.us bookmarks","author":"Leonid Mamchenkov","date":"March 28, 2006","format":false,"excerpt":"Shared bookmarks for del.icio.us user tvset on 2006-03-27 How to have a 36 hour day Tagged as: guides lists management productivity time tips work MySQL Manual: The InnoDB Storage Engine Tagged as: concepts databases development mysql optimization references sql MySQL: Storage Engine (Table Types) Tagged as: concepts databases development mysql\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":26999,"url":"https:\/\/mamchenkov.net\/wordpress\/2016\/11\/28\/s3-static-site-with-ssl\/","url_meta":{"origin":28507,"position":5},"title":"S3 static site with SSL","author":"Leonid Mamchenkov","date":"November 28, 2016","format":false,"excerpt":"\"S3 static site with SSL and automatic deploys using Travis\" is a goldmine of all those simple technologies tied into a single knot for an impressive result. \u00a0It has a bit of everything: Jekyll - simple, blog-aware, static sites engine, for managing content. GitHub - for version control of the\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"s3-static-site","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2016\/11\/s3-static-site-479x500.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28507","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=28507"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/28507\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=28507"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=28507"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=28507"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=28507"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}