Friday, August 7, 2015

[Akamai] Global Distributed Content Delivery « Ashes of Time



[Akamai] Global Distributed Content Delivery « Ashes of Time
http://repository.cmu.edu/cgi/viewcontent.cgi?article=2112&context=compsci

一、需求:要又快又好地给user delivery content,就要
1.离得近。这里距离不是地理上的,而是网络上的,round-trip time、丢包率都是需要考虑的因素
2.Available。如果server的负载太大,或者说数据中心的带宽几乎已满,则对user来说,这个server是不available的。
3.似然性。这个概念比较好玩。因为我们不可能在每一台server上分布所有的content(我们必然要达成某种partition),那么我们如何尽快找到合适的server,避免forward就是一个很合理的requirement。
二、解决方案:用一个牛逼哄哄的DNS
Akamai使用了一个极为牛逼的DNS服务,它不断地检测server的各种状况,包括load,流量,并且检测用户的位置,所要求服务/内容的种类,网络状况等等,来将user引导到合适的数据中心。
三、杂七杂八的解决方案
在content provider上传内容时,尤其是媒体内容时,因为数据量较大,容易造成数据丢失,所以实际上上传过程要涉及多个entry point server——文章提到的数量是两个——一旦一个失效,其他的必须马上接过上传。然后entry point server将内容分布到edge server。
说到Availability,基本上首先就是replica,然后再去想别的。所以无论是monitor也好,内容的储存也好,DNS都要有若干的replica。然后就是当故障发生时,我们如何继续试图提供服务。在文章中提到了两个办法来解决用户连接到一个server后,看视频看到一半结果server挂了。这时候,首先服务端肯定要动,DNS要把那个坏掉的entry去掉或者指向其他的server;其次在客户端,因为DNS result可能有一个cache,所以我们需要在最初取DNS结果时,就发给客户端若干冗余信息,于是客户端可以去尝试不同的server;其次在服务端,其他的server应该很快pickup这个坏掉server的ip地址。
然后有一个问题是如何deliver动态内容。有一些根据user信息生成的内容,如广告,可能会嵌入在一个静态网页里。这个时候,需要拆分网页,cdn负责deliver静态内容,而动态内容还是需要服务来提供。
其他的内容不是特别有意思,不提了。
最后说一个文章中提到的数据,web proxy的cache hit rate只有25-40%
Read full article from [Akamai] Global Distributed Content Delivery « Ashes of Time

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