系统设计面试问题中最常见的一种类型是设计现有的流行系统。例如,在过去,我们讨论了如何设计Twitter,设计Facebook聊天功能等等。
部分原因是该问题通常足够笼统,因此有很多领域需要讨论。此外,如果候选人通常好奇,他们更有可能探索现有产品的设计方式。
因此,本周,我们将讨论如何设计Youtube。这是一个广泛的问题,因为建造Youtube就像从头开始建造摩天大楼,并且有太多事情要考虑。因此,我们将从采访者的角度介绍大多数“主要”组件,包括数据库模型,视频/图像存储,可伸缩性,推荐,安全性等。
总览面对这个问题,大多数人的想法变得茫然,因为这个问题太广泛了,他们不知道从哪里开始。只是存储本身并不简单,因为向数十亿用户无缝提供视频/图像非常复杂。
正如在进行系统设计面试之前需要了解的8件事中所建议的那样,最好先深入了解设计,然后再深入研究所有细节。尤其是对于此类问题要考虑的事情太多,而您将永远无法澄清所有问题时,尤其如此。
基本上,我们可以将系统简化为几个主要组件,如下所示:
存储。您如何设计数据库架构?使用什么数据库?视频和图像可以作为一个子主题,因为它们非常 ...
2020.05.24早上的天空,被大雨刚刚洗过,蓝蓝天空白云朵朵,行驶在去北京西山国家森林公园的路上,心情也明朗的,感觉如此好的天气,不去爬山就浪费了。到了目的地,从门口换票成功,入园。由于最近疫情缓解,门口也没有检查健康宝,只是测完体温,即可直接通过。由于带了孩子,目标直奔森林大舞台去了。梅花桩、滑梯、秋千等都是孩子们的最爱。顺着山路往上爬,孩子们也是积极向前。西山属于比较缓的山,沿途也有很多小岔路,感觉得多来几次才能熟悉整个西山的架构路线。有孩子和老人的关系,一路也是走走停停,看看风景。山上的天气一点也不热,登上半山腰,去遥看整个北京城,视野特别辽阔。看着头顶的蓝天白云,另一边是黑云压城。心里还是有担心被大雨倾盆,好在一直到回去,艳阳高照。从狮子窝出来,就开始走消防通道的公路。因为不知道哪是上山的路,顺着上坡的公路一路上去,发现走的路线不太对头,原路返回。看到了一路的风景,呼吸了新鲜的氧气也很是满足。下来的时候又途径森林大舞台,看到了漫坡的月季开的很热闹。4岁的小满很圆满的走完全程,接下来的目标是上方山。
系统架构
未读这是“设计电子商务网站”系列文章的第二篇。如果您还没有阅读第一篇文章,那么最好先检查一下,因为我们将在这里继续我们的讨论。
为了简短地提醒您我们在上一篇文章中讨论的内容,我们从电子商务网站的数据模型设计开始。尽管关系数据库是最常用的方法,但是我们注意到,像MongoDB这样的NoSQL数据库在构建电子商务网站时具有许多优势和灵活性。为了扩展系统,并发是要考虑的关键因素之一。
在这篇文章中,我将主要关注电子商务网站的可扩展性。构建单个机器系统可能很简单,但是当我们决定扩展网站以通过多个服务器支持数百万甚至数十亿个请求时,就需要考虑大量的可扩展性问题。
并发(续)一种常见的情况是,商店中只剩下一本书,而两个人同时购买。如果没有任何并发机制,那么两个人都有可能成功购买它。
在我们以前的文章中,我们知道一种方法是每当有人访问资源(书)时在行上放置一个锁,以便最多一个人一次可以读/写数据。该解决方案称为悲观并发控制。尽管这种方法可以防止两个人同时访问相同的数据,但是放置锁的成本很高。您将如何更有效地解决这个问题?
乐观并发控制是支持并发的另一种方法。这个想法非常简单–每个进程& ...
今天我们讨论电子商务网站。不仅在很多系统设计面试中都询问了这个话题,而且电子商务网站今天如此流行,以至于为此开发了许多技术和研究。
在深入探讨此主题之前,最好先了解为什么设计电子商务网站在系统设计面试中很受欢迎。首先,建立一个电子商务网站需要诸如数据库设计,系统可用性,并发考虑之类的东西。所有这些在当今的分布式系统中都极为重要。此外,每个人都使用过一些电子商务网站,例如亚马逊。如果您通常对周围环境感到好奇,则应该已经考虑过该主题。
电子商务模式在我们的指南8系统设计面试之前您需要知道的事情中,我们说过系统设计面试的常见策略是从简单的基础知识开始,而不是直接跳入细节。那么,您将如何设计电子商务网站的基本数据结构?那数据库模式呢?
我将跳过用户模型的数据结构,因为它应该与其他应用程序非常相似。让我们专注于产品。在最简单的情况下,我们需要三个主要对象:Product,User_和_Order。
_产品_定义购物车中_产品_的基本模型。一些重要的字段包括价格,剩余数量,名称,描述和类别。类别在这里可能很棘手。当然,您可以在SQL数据库中将其设置为字符串字段,但是更好的方法是使用包含类别I ...
与我们以前的帖子类似,我们希望选择流行且实用的系统设计面试问题,这样您不仅可以获得关于如何分析面试问题的想法,而且还可以同时学习一些有趣的东西。
如果您对系统设计面试一无所知,建议您先阅读本教程。在本文中,我们正在解决问题-如何设计缓存系统。这篇文章涵盖的主题包括:
LRU缓存
驱逐政策,
缓存并发
分布式缓存系统
问题如何设计缓存系统?
缓存系统是当今几乎所有应用程序中广泛采用的技术。此外,它适用于技术堆栈的每个层。例如,在网络区域中,高速缓存用于DNS查找,而在Web服务器中,高速缓存用于频繁的请求。
简而言之,缓存系统存储常用资源(也许在内存中),当下次有人请求相同资源时,系统可以立即返回。它通过占用更多的存储空间来提高系统效率。
LRULRU(最近最少使用)是最常见的缓存系统之一。实际上,另一个常见的面试问题是讨论LRU缓存的数据结构和设计。让我们从这种方法开始。
LRU缓存的工作方式非常简单。客户端请求资源A时,情况如下:
如果缓存中存在A,我们将立即返回。
如果没有,并且缓存具有额外的存储插槽,我们将获取资源A并返回到客户端。另外,将A插入缓存。
如果缓存已满,我们将 ...
注解 您可以将这些Kubernetes批注添加到特定的Ingress对象,以自定义其行为。
小费
注释键和值只能是字符串。其他类型,如布尔或数值必须被引用,即"true","false","100"。
注意
可以使用--annotations-prefix命令行参数更改注释前缀 ,但默认值为nginx.ingress.kubernetes.io,如下表所述。
Name
type
nginx.ingress.kubernetes.io/app-root
string
nginx.ingress.kubernetes.io/affinity
cookie
nginx.ingress.kubernetes.io/affinity-mode
“balanced” or “persistent”
nginx.ingress.kubernetes.io/auth-realm
string
nginx.ingress.kubernetes.io/auth-sec ...
系统架构
未读这是“设计键值存储”系列文章的第二篇。如果您还没有阅读第一篇文章,请检查一下。
在之前的文章中,我们主要关注键值存储的基本概念,尤其是单机方案。当涉及到扩展问题时,我们需要按照一些规则将所有数据分发到多台计算机中,并且协调器计算机可以将客户端定向到具有请求资源的计算机。
设计分布式系统时,您需要考虑很多事情。将数据拆分到多台计算机时,平衡流量非常重要。这就是为什么最好确保密钥是随机分布的。
在本文中,我们将继续关于分布式键值存储系统的讨论。我们将涵盖诸如系统可用性,一致性等主题。
系统可用性为了评估分布式系统,一个关键指标是系统可用性。例如,假设我们的一台计算机由于某种原因(可能是硬件问题或程序错误)而崩溃,这如何影响我们的键值存储系统?
显然,如果有人从此机器请求资源,我们将无法返回正确的响应。构建辅助项目时,您可能不会考虑此问题。但是,如果您要为数百万的用户提供大量的服务器,则这种情况经常发生,您无须每次都手动重新启动服务器。这就是为什么在当今的每个分布式系统中必不可少的原因。那么您将如何解决这个问题?
当然,您可以使用测试用例编写更强大的代码。但是,您的程序将始终存在错误。此外, ...
系统架构
未读由于许多人给我们发送了电子邮件,说他们想阅读有关系统设计面试的更多信息,因此我们将在此主题上做更多介绍。我很高兴听到很多反馈,如果您有任何建议或问题,请通过发表评论告诉我们。
本周,我将讨论键值存储。键值存储是一种非常强大的技术,几乎在世界上的每个系统中都使用。它可以像哈希表一样简单,同时也可以是分布式存储系统。例如,Cassandra的下划线系统是键值存储系统,而Cassandra被广泛用于许多公司,如Apple,Facebook等。
在本文中,我将介绍诸如基本键值存储系统,分布式键值存储以及包括分片在内的扩展问题等主题,所有这些都可能在系统设计访谈中涉及。
基本键值存储您将如何在单台机器上设计一个简单的键值存储系统?
最简单的方法是使用哈希表存储键值对,这是当今大多数此类系统的工作方式。哈希表使您可以在恒定时间内读取/写入键值对,并且非常易于使用。大多数语言对此都有内置支持。
但是,缺点也很明显。使用哈希表通常意味着您需要将所有内容存储在内存中,这在数据集很大时可能无法实现。有两种常见的解决方案:
压缩数据。这应该是首先要考虑的事情,通常会有很多东西可以压缩。例如, ...
它从一个简单的问题开始:如何设计推荐系统?
在最近的系统设计访谈中,似乎已经多次询问过这个问题。此外,推荐系统在当今如此重要,几乎每个公司都有自己的推荐系统,可用于提供各种建议。因此,讨论这个话题可能会很有趣。
在这篇文章中,我将主要讨论可以在系统设计访谈中讨论的推荐系统的各个方面。将涵盖的主题包括一般的推荐系统,协作过滤(CF),推荐系统基础结构等。
推荐系统推荐系统一直是一个热门话题。似乎几乎每个公司都在构建这样的系统。例如,亚马逊正在使用推荐系统来提供顾客也可能喜欢的商品。Hulu正在使用推荐系统来推荐其他受欢迎的节目或剧集。
为了限制讨论的范围,我们主要关注YouTube的推荐系统。更具体地说,系统负责推荐用户可能喜欢观看的视频。
启发式解决方案尽管机器学习(ML)通常用于构建推荐系统,但这并不意味着它是唯一的解决方案。在许多情况下,我们需要更简单的方法,例如,我们可能只有很少的数据,或者我们可能想快速构建最小的解决方案等。
在这种情况下,我们可以从一些启发式解决方案开始。实际上,我们可以做很多技巧来构建一个简单的推荐系统。例如,根据用户观看的视频,我们可以简单地推荐来自相 ...
Java内存管理面试指南一
Java基础面试指南一
Java基础面试指南二
Java基础面试指南三
Java基础面试指南四
Java线程面试指南一
Java线程面试指南二
Redis面试指南一
Kafka面试指南一
Spring面试指南一
SpringBoot面试指南一
微服务面试指南一
1. 什么是微服务,为什么有人要考虑实现它. 微服务是一种架构样式,其结构和应用程序是围绕业务功能组织的松散耦合,可独立维护,可测试和可部署的服务的集合.
如果您以业务为中心,并且想要在没有技术限制的情况下有效地解决用例或问题,想要无限扩展独立的服务,易于维护和管理以及可独立测试的高可用性无状态服务,那么我们将继续实施微服务架构.
2. 什么时候应该考虑微服务类型的架构?**有两种情况. **
如果您已经拥有一个整体应用程序,并且该应用程序的增长到一定程度,在扩展方面存在问题,或者我们无法跨不同项目/平台重新利用组件/模块/服务,则需要这样做. 同时实现新功能是痛苦的,而且更容易出错,并且很难进一步扩展.
对于尚未开始实施的新应用程序,我们可以考虑一个有效实 ...

