系统设计:Paste Copy 背后的设计

发布于:2024-10-24 编辑:匿名 来源:网络

要求:设计一个类似 Pastebin 的 Web 服务,用户可以在其中存储纯文本。该服务的用户将输入一段文本并获得一个随机生成的 URL 来访问它。

类似服务:pastebin.com、pastebin.co、hopapp.com 难度级别:简单 1. 什么是 Pastebin? Pastebin 等服务使用户能够通过网络(通常是互联网)存储纯文本或图像,并生成唯一的 URL 来访问上传的数据。此类服务还用于通过网络快速共享数据,因为用户只需传递 URL 即可供其他用户查看。

2. 系统要求和目标 我们的 Pastebin 服务应满足以下要求: 功能要求: 1. 用户应该能够上传或“粘贴”他们的数据并获得唯一的 URL 来访问它。 2. 用户只能上传文字。

3.数据和链接将在特定时间间隔后自动过期;用户还应该能够指定过期时间。 4. 用户可以选择粘贴的自定义别名。

非功能要求: 1、系统可靠性高,上传数据不丢失。 2.系统应该是高可用的。

这是必需的,因为如果我们的服务出现故障,用户将无法访问他们的粘贴。 3. 用户应该能够以最小的延迟实时访问他们的粘贴。

4. 粘贴??链接不应是可猜测的(不可预测的)。扩展需求: 1、分析,比如访问paste的次数? 2.其他服务也应该能够通过REST API访问我们的服务。

3. 一些设计注意事项 Pastebin 具有一些与 URL 缩短服务相同的要求,但我们应该牢记一些额外的设计注意事项。用户一次可以粘贴的文本量的限制是多少?我们可能会将用户的粘贴大小限制为不超过 10MB,以防止滥用服务。

我们应该对自定义 URL 施加大小限制吗?由于我们的服务支持自定义 URL,因此用户可以选择他们喜欢的任何 URL,但提供自定义 URL 不是强制性的。但是,对自定义 URL 施加大小限制是合理的(并且通常是可取的),以便我们拥有一致的 URL 数据库。

补充一点:目前博客网站往往有一个功能叫做自定义域名,而这个自定义域名可以支持我们访问博客内容,同时我们也可以通过博客自己的地址IP来访问。 4.容量估计和限制我们的服务将被大量阅读;读取请求将多于新粘贴。

我们可以假设读写比为5:1。流量估计:Pastebin 服务预计不会有类似于 Twitter 或 Facebook 的流量,假设每天有 100 万个新粘贴添加到我们的系统中。

这让我们每天有 10,000 次阅读。每秒新粘贴数:1M /(24 小时 * 秒)~= 12 粘贴/秒每秒新粘贴读取数:5M /(24 小时 * 秒)~= 58 读取/秒存储估算:用户可上传至 10MB 数据;通常像 Pastebin 这样的服务用于共享源代码、配置或日志。

这样的文本不是很大,所以我们假设每个粘贴平均包含 10KB。按照这个速度,我们每天将存储 10GB 的数据。

1M * 10KB => 10 GB/天 如果我们想将这些数据存储十年,则需要 36TB 的总存储容量。每天有数以万计的贴纸,10年后我们将拥有36亿张贴纸。

我们需要生成并存储密钥来唯一标识这些粘贴。如果我们使用base64编码([A-Z,A-Z,0-9,,,-]),我们将需要六个字母的字符串: 64^6 ~= 687亿个唯一字符串 如果存储一个字符需要一个字节,那么存储的总大小3.6B 密钥所需的空间为: 3.6B * 6 => 22 GB 与 36TB 相比,22GB 可以忽略不计。

为了保持一些可用空间,我们将采用 70% 容量模型(意味着我们任何时候都不想使用超过总存储容量的 70%),这将使我们的存储需求增加到 51.4TB。带宽估计:对于写入请求,我们预计每秒有 12 个新粘贴,从而每秒传入 KB。

12 * 10KB => KB/s 对于读取请求,我们预计每秒有 58 个请求。因此,(到用户的)总数据输出将为 0.6 MB/s。

58 * 10KB => 0.6 MB/s 虽然总的传入和传出量并不大,但我们在设计服务时应该记住这些数字。内存估算:我们可以缓存一些经常访问的hotpaste。

根据80-20法则,即20%的热贴产生80%的流量。我们希望缓存这 20% 的粘贴。

由于我们每天有 10,000 个读取请求,要缓存 20% 的请求,我们需要: 0.2 * 5M * 10KB ~= 10 GB 5. 系统 API 我们可以使用 SOAP 或 RESTAPI 来公开服务的功能。以下可能是创建/检索/删除粘贴的 API 的定义: addPaste(api_dev_key,aste_data,custom_url=None,user_name=None,paste_name=None,expire_date=None) 参数: api_dev_key (string): api 开发者机密注册的帐户密钥。

除此之外,这将用于根据分配的配额来限制用户。 Paste_data(字符串):粘贴的文本数据。

custom_url(字符串):可选的自定义 url。 user_name(字符串):用于生成 URL 的可选用户名。

粘贴名称(字符串):粘贴的可选名称。 过期日期(字符串):粘贴的可选到期日期。

返回:(字符串)成功插入将返回可访问粘贴的 URL,否则将返回错误代码。同样,我们可以检索和删除粘贴 API: getPaste(api_dev_key, api_paste_key) 其中“api_paste_key”是表示要检索的粘贴的粘贴密钥的字符串。

该API将返回粘贴的文本数据。如果删除成功,deletePaste(api_dev_key, api_paste_key) 返回“true”,否则返回“false”。

6. 数据库设计 关于我们存储的数据性质的一些观察: 1. 我们需要存储数十亿条记录。 2.我们存储的每个元数据对象都很小(小于字节)。

3. 我们存储的每个粘贴对象可以是中等大小(可以是几MB)。 4. 记录之间没有任何关系,除非我们想存储哪个用户创建了哪些粘贴。

5. 我们的服务质量非常高。数据库架构:我们需要两个表,一个用于存储有关粘贴的信息,另一个用于存储用户数据。

这里,“URlHash”是相当于TinyURL的URL,“ContentKey”是存储粘贴内容的对象键。 7. 高层设计 在高层,我们需要一个应用程序层来服务所有的读写请求。

应用层将与存储层通信以存储和检索数据。我们可以将存储层与存储与每个粘贴、用户等相关的元数据的数据库和将粘贴内容存储在某些对象存储(如 Amazon S3)中的另一个数据库分开。

这种数据划分还允许我们单独扩展它。 8. 组件设计 A. 应用程序层 我们的应用程序层将处理所有传入和传出的请求。

应用服务器将与后端数据存储组件通信来满足请求。如何处理写请求?收到写入请求后,我们的应用程序服务器将生成一个六字母的随机字符串,该字符串将用作粘贴的密钥(如果用户未提供自定义密钥)。

然后应用服务器会将粘贴的内容和生成的密钥存储在数据库中。插入成功后,服务器可以将密钥返回给用户。

这里可能出现的问题是由于重复的键导致插入失败。因为我们正在生成随机密钥,所以新生成的密钥可能与现有密钥匹配。

在这种情况下,我们应该重新生成一个新密钥并重试。我们应该不断重试,直到没有看到由于重复键而导致的失败。

如果用户提供的自定义密钥已存在于我们的数据库中,我们应该向用户返回错误。上述问题的另一个解决方案是运行独立的密钥生成服务 (KGS),该服务预先生成随机的六字母字符串并将其存储在数据库中(我们称之为密钥数据库)。

每当我们想要存储新的粘贴时,我们只需获取一个已经生成的密钥并使用它即可。这种方法将使事情变得非常简单和快速,因为我们不会担心重复或冲突。

KGS 将确保插入密钥数据库的所有密钥都是唯一的。 KGS可以使用两张表来存储密钥,一张用于未使用过的密钥,另一个用于所有已使用过的密钥。

只要KGS向应用服务器提供一些密钥,它就可以将这些密钥移动到已使用的密钥表中。 KG总是可以在内存中保留一些密钥,以便服务器在需要时可以快速提供它们。

一旦 KGS 在内存中加载了一些密钥,它就可以将它们移动到已使用的密钥表中,这样我们就可以确保每个服务器都获得唯一的密钥。如果 KGS 在使用内存中加载的所有密钥之前就死掉了,我们将浪费这些密钥。

我们可以忽略这些键,因为我们有很多键。 KGS 不是单点故障吗?是的。

为了解决这个问题,我们可以拥有 KGS 的备份副本,以便在主服务器宕机时接管生成和提供密钥的工作。每个应用服务器是否可以在密钥数据库中缓存一些密钥?是的,这肯定会加快速度。

尽管在这种情况下,如果应用程序服务器在使用所有密钥之前死亡,我们最终将丢失这些密钥。这是可以接受的,因为我们有 68B 唯一的六字母密钥,这比我们需要的多得多。

它如何处理粘贴读取请求?收到读取粘贴请求后,应用服务层将联系数据存储。数据存储将搜索密钥,如果找到,则返回粘贴的内容。

否则,将返回错误代码。B 数据存储层 我们可以将数据存储层分为两层: 1. 元数据数据库:我们可以使用关系数据库(例如 MySQL)或分布式键值存储(例如 Dynamo 或 Cassandra)。

2.对象存储:我们可以将内容存储在对象存储中,例如亚马逊的S3。每当我们想要达到内容存储的最大容量时,我们都可以通过添加更多服务器来轻松增加容量。

9 清除或数据库清除请参考URL短链接设计。 10、数据分区和复制请参考URL短链接设计。

11缓存和负载均衡器请参考URL短链接设计。 12安全和权限请参考URL短链接设计。

系统设计:Paste Copy 背后的设计

站长声明

版权声明:本文内容由互联网用户自发贡献,本站不拥有所有权,不承担相关法律责任。如果发现本站有涉嫌抄袭的内容,欢迎发送邮件 举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。

标签:

相关文章

  • 生物科技公司珠海贝斯昂科获近亿元天使轮融资

    生物科技公司珠海贝斯昂科获近亿元天使轮融资

    投资圈(ID:pedaily)据7月26日消息,生物科技公司珠海贝斯昂科(以下简称:贝斯生物)近日完成天使轮融资近亿元。 本轮融资,本轮主要投资方为弘晖资本、弘励 Ventures 和 Panacea Ventures。 横琴金投也参与了本轮投资。 本轮融资将主要用于贝斯生物独有的基因编辑NK平台和

    06-18

  • ONES半年融资近亿美元,打破国内研发管理领域历史记录

    ONES半年融资近亿美元,打破国内研发管理领域历史记录

    投资社区(ID:pedaily)9月22日,ONES宣布完成1万美元C轮融资。 这距离今年6月底ONES宣布连续完成3亿元B1、B2轮融资仅2个多月。 据悉,本轮融资领投方为新加坡政府投资公司GIC,老股东源码资本、XVC已连续三轮融资。 从投资者的角度来看,企业级研发管理工具ONES在半年内已连

    06-17

  • 力金科技获工机基金、中金资本、基石资本7.3亿战略投资

    力金科技获工机基金、中金资本、基石资本7.3亿战略投资

    投资界消息(ID:pedaily),力金科技(8)12月5日宣布引入战略投资者,工机基金、中金资本、基石资本、东方汇嘉等多家机构认购旗下深圳利金科技合计7.3亿元股权。 此次增资,距国投上次增资11.5亿仅两个多月。 先后获得多家战略投资者注资,带来一定估值溢价。 可见,一体化

    06-17

  • 马鞍山注册百亿新基金

    马鞍山注册百亿新基金

    据投资界(ID:pedaily)获悉,马鞍山高质量发展产业基金有限公司于2020年3月29日完成中国基金会计协会注册基金总规模1亿元,首期20亿元,由市财政出资。 该基金面向马鞍山市“1+N”产业,聚焦企业全生命周期,重点支持设立天使投资、科技创新、产业投资基金群,形成高质量发

    06-17

  • 美国:2022年光伏装机将超越风能

    美国:2022年光伏装机将超越风能

    据美国能源信息署(EIA)预测,到2022年,美国大规模太阳能装机将首次超过风电。 随着各国政府减少对陆上风电的支持,电网规模的光伏装机预计将超过风电16GW,而风电则为6GW。 美国能源信息署预计,2019年风电新增装机总量将达到18GW,略高于光伏的16GW。 随着光伏装机加速,

    06-08

  • 共享健身仓“公园盒子”获数千万元A+轮融资,华住酒店领投

    共享健身仓“公园盒子”获数千万元A+轮融资,华住酒店领投

    据投资界4月17日消息,共享健身仓“公园盒子”宣布,获得华住酒店集团领投的数千万投资。 人民币A+融资。   这是Park Box成立一年以来获得的第四笔投资。 此前于2018年3月获得个人天使轮融资; 2018年7月获得熊猫资本数百万元Pre-A轮融资;并于2020年11月获得海鲸资本数千

    06-18

  • 5G研究院、5G产业基金落地北京亦庄

    5G研究院、5G产业基金落地北京亦庄

    继北京50%的5G基站部署在北京经济技术开发区后,记者今日从开发区获悉,北京50亿5G产业基金和5G研究院正式落户北京亦庄。 据介绍,北京5G产业基金是北京市政府参与设立的首支5G产业专项基金,规模50亿元。 拟由开发区国有投融资平台亦庄国投、北京科技创新投资管理有限公司和

    06-06

  • 百康生物完成近亿元A轮融资,方盛基金领投

    百康生物完成近亿元A轮融资,方盛基金领投

    投资界(ID:pedaily)1月12日消息,体外诊断(IVD)及上游核心原材料开发商南京百康生物科技必康生物医药材料股份有限公司(以下简称“必康生物”)宣布完成近亿元A轮融资。 本轮融资是百康生物科技首笔市场化融资。 由方盛基金领投,新产业投资、国谦创投、邦盛资本跟投,青

    06-17

  • 商务部:与部分CPTPP成员国进行了非正式接触

    商务部:与部分CPTPP成员国进行了非正式接触

    商务部:与部分CPTPP成员国进行了非正式接触。

    06-18

  • 酷家乐全面收购Modelo,正式进军房地产和建筑领域

    酷家乐全面收购Modelo,正式进军房地产和建筑领域

    据投资界消息,酷家乐近日宣布完成全资收购“建筑地产设计资产管理及三维数据可视化平台”王牌” 。 收购后,Modelo品牌保持独立,在酷家乐技术、资本和业务的全力支持下,为建筑和房地产领域的企业客户提供一体化设计和营销解决方案。 随着精装修房的流行,家居企业的渠道发

    06-17

  • 手游新媒体小品:直投版与“三屏合一”

    手游新媒体小品:直投版与“三屏合一”

    在今年年初举办的中国手游产业峰会上,GMGC全球手游联盟秘书长宋炜发表了题为的主题演讲,据他预计,今年手游市场整体规模将突破1亿元。 而到年底我们看这个数字,已经突破了1亿,明年甚至会达到1亿。 如此繁荣的手游市场,自然会催生出大量参差不齐的手游媒体。 除了彼此之间

    06-18

  • 减少浪费的制造方法和技术

    减少浪费的制造方法和技术

    随着环境问题日益严峻,消费者对环保产品的需求不断上升,各行业再也不能忽视可持续发展的重要性。 当我们回顾历史时,我们会发现制造业的发展往往伴随着大量的资源浪费。 自工业革命以来,企业更加关注生产效率和产品数量,而不是资源的有效利用。 那个时候,资源似乎取之不

    06-17