Sunday, June 28, 2015

Summary: Distributed System Design - Miscs



Summary: Distributed System Design | N00tc0d3r

Principles

  • Scalability: Size!
    • Easy to scale up/down
    • Traffic/load that can be handled
  • Reliability: Data consistency
    • (Realtime?) data consistency
    • Persistence
  • Performance: Speed of a website
    • Fast response
    • Low latency
  • Availability: Uptime of a website
    • Redundancy for key components
    • Failure detection and recovery
  • Manageability: Operational load
    • Easy to update
    • Simple to operate
  • Cost
    • Hardware/Software
    • Develop time
    • Operational effort

Techniques

  • Caches can cache popular responses from server so as to reduce the number of calls (Local/Distributed Cache such as memcached)
  • Proxies can be used to aggregate client requests to server so as to avoid unnecessary reconnections
  • Hashing and Revert indexes provides constant time to retrieve data
  • Load Balancers can reduce the chances of servers are under load (some are hot while others are idle)
  • Queues and Asynchrony calls so that clients don't need to spin there waiting for response
http://dongxicheng.org/search-engine/system-designing-in-finging-jobs/
Dynamo:亚马逊的key-value模式的存储平台,可用性和扩展性都很好,采用DHT(Distributed Hash Table)对数据分片,解决单点故障问题,在Cassandra中,也借鉴了该技术,在BT和电驴的中,也采用了类似算法。
虚拟节点技术.
1) 关于高并发系统设计。主要有以下几个关键技术点:缓存,索引,数据分片,锁粒度尽可能小。
https://miafish.wordpress.com/2015/03/13/system-scalability-notes/
  • Can’t use just one database. Use many databases, partitioned horizontally and vertically.
  • Because of partitioning, forget about referential integrity or cross-domain JOINs.
  • Forget about 100% data integrity.
  • At large scale, cost is a problem: hardware, databases, licenses, storage, power.
  • Once you’re large, spammers and data-scrapers come a-knocking.
  • Cache!
  • Use asynchronous flows.
  • Reporting and analytics are challenging; consider them up-front when designing the system.
  • Expect the system to fail.
  • Don’t underestimate your growth trajectory
Read full article from Summary: Distributed System Design | N00tc0d3r

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts