入门分布式系统设计相关知识,你就能理解那些Google,Facebook,Youtube这些大型网站是怎么支撑起全球亿级用户使用的

Load Balancing 负载均衡

用来保护Web server,把请求打到应该打到的服务上(现在大厂,网关+RPC)

当用户登录某一网页时,浏览器通过DNS服务器域名解析后拿到的IP可能是某个Load Balancer的IP地址, 而不是web server的IP地址。用户发送的请求通过Load Balancer均匀地分发给web server进行处理。

常见算法:比如round robin(轮询调度), least connection(最小连接数法), hashing(哈希散列)等。。。。

High Scalability(高扩展) :扩容,Load Balancer下添加更多的web server,来服务更多的用户。

High Availability(高可用):Load Balancer持续监听每台web server的状态是否OK,确保将用户请求发给状态OK的web server,挂机的web server就拜拜了,保证服务不中断。

可能有小伙伴还会问那Load Balancer也挂掉了呢?

那Load Balancer肯定也有备份的啦,一个 Load balancer 挂掉,或者是 BGP 发布取消,备份的 Load balancer可以马上接管流量,继续进行响应。

Database Design 数据库设计

一个是设计data model数据模型,另一个是数据库的选型,两者互相关联。数据库有关系型和非关系型两种。

  • 当数据模型高度结构化,数据字段类型很固定,例如,哔哩哔哩视频的标题、up主、视频简述、播放量等等,数据类型很明显,则采用Mysql或PostgreSQL。
  • 当数据模型凌乱时,数据字段类型不固定,像电商网站的产品目录,描述商品信息啥类型都有,又或者像本站评论模块一样,我们可以发图片、文本文字、表情包、还能引用评论,类型多样,则采用NoSQL数据库(Cassandra. HBase. MongoDB等)

关系型数据库误区,说关系型数据库就不能Scalability和进行大规模化存储数据,其实这种说法是错的,可以通过分布式的Mysql集群帮助系统更高效地处理数据。

比如,YouTube的分布式MySQL方案(Vitess),可以学习一下。

所以学习数据库都有接触到分库分表、docker && K8s承载数据库集群的方案,现在大厂的还有云数据库等等,感觉还挺复杂的🤪。

Caching 存储中间件(Memcache、Redis)

memcache是一套分布式的高速缓存系统,还在学习中……

CDN(Content Delivery Network内容分发网络)

image-20230118184031266

Asynchronous processing 异步处理

异步处理这个词很熟悉,它既出现在后端也出现在前端,可谓是用处极大。

先来说说同步处理 (synchronous processing),如果一个任务是同步处理,那调用者必须等到任务结束,才能继续后面的工作。
异步处理:那如果一个任务是异步执行的,那么任务的调用者,不用等到任务结束,当前任务做完可做后续操作。

生活中异步处理的方案也有很多,它可以帮助我们提高工作效率,降低用户的等待时间。