Summary: Distributed System Design | N00tc0d3r
http://dongxicheng.org/search-engine/system-designing-in-finging-jobs/
1) 关于高并发系统设计。主要有以下几个关键技术点:缓存,索引,数据分片,锁粒度尽可能小。
https://miafish.wordpress.com/2015/03/13/system-scalability-notes/
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
Dynamo:亚马逊的key-value模式的存储平台,可用性和扩展性都很好,采用DHT(Distributed Hash Table)对数据分片,解决单点故障问题,在Cassandra中,也借鉴了该技术,在BT和电驴的中,也采用了类似算法。
虚拟节点技术.
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