跳到主要内容

31 篇文档带有标签「system design」

查看所有标签

ACID vs BASE

ACID 和 BASE 代表了不同的设计理念。ACID 更注重一致性而非可用性。在 ACID 中,C 表示事务保留所有数据库规则。而 BASE 更侧重于可用性,表示系统确保可用。

Cloud Design Patterns

There are three types of cloud design patterns. Availability patterns have health endpoint monitoring and throttling. Data management patterns have cache-aside and static content hosting. Security patterns have federated identity.

Facebook 如何扩展其社交图谱存储?TAO

在 TAO 之前,Facebook 使用缓存旁路模式来扩展其社交图谱存储。存在三个问题:列表更新操作效率低;客户端必须管理缓存,且很难提供读后写一致性。通过 TAO,这些问题得以解决。

Facebook如何存储大规模社交图谱(graph)?TAO

在Memcached中更新社交图谱的边列表操作效率太低, 客户端管理缓存的逻辑很复杂,很难维持数据库读在写之后这种一致性。如何解决这三个问题:加快读操作,高效处理大规模的读;及时完成写操作;提高读操作的可用性。

iOS 架构模式再探

架构可以直接影响每个功能的成本。让我们在三个维度上比较紧耦合 MVC、Cocoa MVC、MVP、MVVM 和 VIPER:功能参与者之间责任的平衡分配、可测试性以及易用性和可维护性。

Lambda 架构

使用Lambda可以解决大数据所带来的三个问题:准确性(好);延迟(快);吞吐量(多)。lambda 架构可以指导我们如何为一个数据系统实现扩展。

Lyft 的营销自动化平台 -- Symphony

为了在广告中实现更高的投资回报率,Lyft推出了一款营销自动化平台,该平台由三个主要组件组成:生命周期价值预测器、预算分配器和竞标者。

Lyft 的营销自动化平台 Symphony

广告投放如何花更少的钱用更少的人得到更高回报?Lyft 的答案是自动化,包括LTV 预测模块 、预算分配模块、投放模块。当人从繁琐的投放任务解放出来,专注于理解用户、理解渠道、理解自身要传达给受众的信息之后,就能够获得更好的投放效果

什么是 Apache Kafka?

Apache Kafka是一个分布式流平台。它的特点包括分布式发布-订阅(pub-sub)消息传递系统,可将N ^ 2的关系简化成N,发布者和订阅者可以按自己的速率运行;超快速的零复制(zero-copy)技术;支持可容错的数据持久化。

企业授权服务 2022

授权决定个人或系统是否有权访问特定资源。这个过程是一个典型的场景,可以通过软件进行自动化。我们将回顾谷歌的 Zanzibar、受 Zanzibar 启发的解决方案以及市场上的其他 AuthZ 服务。

使用半监督学习进行欺诈检测

欺诈检测在登录过程中对抗账户接管和僵尸网络攻击。半监督学习比无监督学习具有更好的学习准确性,比监督学习花费更少的时间和成本。

如何使用幂等性设计出高可靠的API?

为什么API会不可靠?网络会出错,服务器会出错。解决这个问题的三个原则:客户端用“重试”来保证状态的一致性;重试的请求里要有幂等的唯一性ID;重试要负责任,比如遵循指数退避算法,因为不希望一大波客户端同时重试。

如何构建大规模的网站服务?

如何构建大规模的网站服务?一个字:拆。AKF扩展立方告诉了我们”拆”的三个维度:水平扩展;业务拆分;数据分割。

如何设计区块链服务端的架构?

分布式的区块链记账和智能合约系统。要求节点之间不大信任,但是却激励他们互相合作:交易不可逆,不依赖可信的第三方,保护隐私,透露最少信息,一笔钱不能花两次。假设性能不是问题,暂不考虑如何优化性能。

布隆过滤器

布隆过滤器是一种数据结构,用于以远高于其他一般算法的空间和时间效率来检索一个元素是否在一个集合中。使用布隆过滤器获得的结果,可能为假阳性匹配,但不可能为假阴性匹配。元素可以添到集合中,但不能删除;添到集合中的元素越多,误报的可能性越大。

构架入门

架构服务于软件系统的整个生命周期,使软件系统易于理解,开发,测试,部署和操作,其目标是最小化每个业务用例的人力资源成本。O’Reilly出版的《软件架构》介绍了五种基本架构:分层架构;事件驱动架构;微核架构;微服务架构;基于空间的架构。

设计Facebook图片存储系统

Facebook做图片存储的原因有两个:PB级别的Blob数据量;传统的基于NFS的设计都存在元数据瓶颈,庞大的元数据严重限制了它的命中率。解决方案是把数以十万计的图像聚集到单个Haystack存储文件中,从而消除了元数据负荷。

设计一个短网址系统

设计一个系统,可以将用户给的网址变成短网址,用户使用这些短网址可以访问他们原来给的长网址。系统是怎么运作的,需包括但不限于下面的问题:如何分配短网址;如何存储短网址和长网址的映射关系;如何实现跳转服务;如何存储访问数据。

设计以人为本的国际化(i18n) 工程方案

硅谷公司的产品大多面向全球市场,而国际化正是跨国公司征战全球市场的战略要地。我们这次设计的 i18n 工程方案主要是解决网站和移动 App 开发过程中的三大问题:1. 语言、2. 时间与时区、3. 数字与货币。如同一切软件系统的开发一样,国际化这件事情没有银弹,好的作品都是靠基本功一点一滴磨出来的。

设计优步打车服务

优步打车设计的要求:为全球的交通运输市场提供服务;大规模的实时调度;后端设计;优步打车设计流程:架构;微服务;调度服务;支付服务;用户档案服务和行程记录服务、通知推送服务。

设计负载均衡器

互联网服务往往要处理来自全世界的流量,但是,一个服务器只能够同时服务有限数量的请求。因此,通常我们会有一个服务器集群来共同处理这些流量。那么问题来了,怎样才能够让这些流量均匀地分布到不同的服务器上呢?

跳跃表

跳跃表本质上是一个允许对其进行二分搜索的链表。它实现这一点的方法是添加额外的节点,使你能够“跳过”链接列表的部分。对于给定一个正反随机数来创建额外的节点,跳跃表具有O(logn)复杂度的查询、插入和删除。

软技能面试可以谈点什么?

同等级技能下,不会表达自己,工作机会也会被抢走。面试的本质是三个问题:想干不能干;想干不想干;合拍不合拍。面试的五个谈话点:逆境;影响力;技术水平;合拍;成就。如何准备这五个谈话点:多与人交往,多尝试累积经验,多学技术,善于调研。

通过失效转移提高系统可用性

失效转移:失效转移(failover)是一种备份操作模式,用于提高系统稳定性和可用性。当主要组件由于失效或预定关机时间的原因而无法工作时,这种模式中的系统组件(如处理机、服务器、网络或数据库)的功能被转嫁到二级系统组件。

键值缓存有哪些用法?

Key Value Cache的本质是为了减少访问数据的延迟。Cache设计的常见策略有read-through/write-through和cache aside.具体的策略要根据你的业务需求具体选择。