自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 GPT-4 背后的计算大脑是什么?

TPU 是谷歌设计的机器学习加速器,可以理解为专门为这类任务设计和优化的专有硬件。TPU 专为特定的深度学习任务而设计,因此灵活性较差,但性能比 CPU 和 GPU 好得多。GPU 最初是为图形计算而设计的。从游戏中的图形计算,到矿机,再到现在的 AI 训练,不变的是老黄家的生意一直很好。和 CPU 提供的复杂通用计算相比,GPU 可以堆叠很多个逻辑计算单元(ALU),更适合进行大量而重复性的运算,比如挖矿当中用到的哈希值计算。大模型的训练中要用到大量的向量和矩阵运算,GPU 提供了更高的投入产出比。

2023-10-11 15:53:15 90

原创 一图看完8种常用网络协议

封装是指在数据向目的地传输的过程中为数据添加报头。OSI 模型有七个抽象层,每个层都有不同的职责和协议。这一层有流量控制,以防止拥塞。它进一步将网段或数据报分解成更小的数据包,并使用 IP 地址找到通往最终目的地的最佳路由。设备 B 从网络接收到比特流后,会启动去封装过程,这与封装过程相反。TCP 设计用于在互联网上发送数据包,确保数据和信息在网络上成功传递。它是网络数据交换的基础,也是一种客户端-服务器协议。在数据链路层为 IP 数据报添加 MAC 报头,其中包含源 MAC 地址和目的 MAC 地址。

2023-10-10 10:24:32 301 2

原创 常见面试题 - 如何设计Google Docs?

文档操作服务器会从消息队列消耗客户端的操作事件,并使用协作算法生成转换后的操作。这个过程叫做操作转换(Operational Transformation),就是根据多人对文档的修改情况来得到最终的结果,并更新每个人的操作。我们先简化一下问题。如果是一个单机版的在线文档,没有多人协作的要求,那其实只要将本地的文档同步到远端就可以了。根据维基百科,Google Docs 使用的是 OT,而 CRDT 是实时并发编辑的一个活跃研究领域。服务器知道每个用户的修改是基于哪一个版本的,会尝试把各人的操作合并。

2023-09-27 10:44:16 99 1

原创 无处不在的缓存

比如,一个新闻网站的大部分网页内容都是静态的,可以缓存在CDN中。一般来说,内存中缓存的数据是二级缓存的子集。如果内存中找不到相应的数据,那么就可以在二级缓存中寻找。与用户无关的资源是静态的,而与用户访问时间、设备、位置、用户配置等相关的资源是动态资源。比如我们开启了Nginx的静态缓存后,就可以将一些静态文件(CSS,图片等)进行缓存。如果 CPU 缓存中没有命中,服务会尝试从内存中检索数据。在高速设备中的存储一部分的冗余数据,来加快数据的访问速度。在就近的存储设备中缓存一部分数据,用以加速数据访问。

2023-09-25 10:12:27 185 1

原创 典型的微服务架构是什么样的?

比如,支付服务会花费较长时间来完成付款,那么上游的交易系统就可以通过Kafka来发送请求,等到支付完成后再通过Kafka进行回调。微服务分为不同的域,并在各个域中独立设计和部署。每个域都有自己的数据库。API 网关通过 REST API 或其他协议调用微服务,同一域内的微服务通过 RPC 来交互。为了加快热点数据的响应速度,微服务可以在访问数据库前先查询缓存。架构中加入缓存后,我们需要注意缓存和数据库的数据一致性。微服务注册和发现在此组件中进行,API 网关在此组件中寻找相关服务地址并发送请求到相关服务。

2023-09-20 11:45:29 74 1

原创 HTTPS是怎么工作的?

验证 SSL 证书后,客户端生成会话密钥 (Session Key),并使用公钥对其进行加密。服务器收到加密的会话密钥后,用私钥解密。提高安全性: 非对称加密只能单向传输,服务器不能将加密数据回传给客户端,因为任何人都可以使用公钥在客户端解密数据。既然客户端和服务器都持有相同的会话密钥,加密数据就会在安全的双向通道中传输。HTTPS 使用传输层安全(TLS)传输加密数据。对称加密是指加密和解密使用相同密钥的加密算法。如果数据在网上被劫持,劫持者得到的只是二进制代码,并不能看到数据。我们来看看下图的流程。

2023-09-19 10:14:06 45

原创 如何防止系统双倍收费?

例如,如下图所示,客户端尝试支付 10 元,但由于网络连接不畅,支付一直失败。今天我们来聊一下任何跟钱相关的系统 (支付、银行、券商等) 都会面临的问题 - 双倍收费 (Double Charge)。我们在设计系统时,必须保证系统能满足“正好一次”的语义 (Exactly-Once Semantics)。当然,作为一个完整的生产环境系统,仅仅使用重试+幂等是不够的,我们还需要加上对账系统进行事后的及时纠错。从API的角度来看,幂等意味着客户端可以重复进行相同的调用并产生相同的结果。如何防止系统双倍收费?

2023-09-14 10:00:27 45 1

原创 一图搞懂6种 API 架构风格

架构风格 (Architecture Styles) 定义了不同组件之间的交互方式。它们提供了设计 API 的标准方法,确保了效率、可靠性以及与其他系统集成的便捷性。应用:减少多次请求的网络开销,响应速度更快。特点:事件驱动、HTTP 回调、异步处理。特点:流行、易于实施、基于HTTP。特点:成熟、全面、基于 XML。应用:当事件发生时用来通知系统。特点:现代、高性能、编解码。特点:实时、双向、持久连接。应用:网络服务的理想选择。应用:适合低延迟数据交换。应用:最适合企业应用。应用:适合微服务架构。

2023-09-13 10:02:21 210 1

原创 系统设计面试终极指南

如果你对细节感兴趣,欢迎留言告诉我。【关注公众号:ByteByteGo】内容分发网络(CDN)系统设计面试终极指南。

2023-09-12 11:13:41 99

原创 如何在大众点评上找到附近的餐馆?

上周我们说了使用GeoHash的算法分割地图来存储餐馆的位置,但是这种算法有分配不均衡的问题,在餐馆稀疏的地方浪费存储资源。第三步:因此,我们需要逐步分批来发布定位服务的新版本,这样可以避免服务器集群的大部分服务器离线,造成服务中断。它在定位服务的实例中运行,整个数据结构在定位服务启动时建立。否则,从其邻近节点添加餐馆,直到返回足够多的餐馆。第一步:服务器启动时,在内存中建立一个包含 2 亿个餐馆的四叉树可能需要几分钟时间。第二步:建立四叉树后,从树根开始搜索并遍历整个树,直到找到搜索原点所在的叶节点。

2023-09-11 19:07:25 322

原创 为什么 Kafka 很快?

2011 年初,LinkedIn 开源了 Kafka,这是一个分布式事件流平台。它为处理实时数据馈送提供了一个高吞吐量、低延迟的平台,在互联网公司中得到广泛应用。Kafka 通过顺序 I/O (Sequential I/O)和零拷贝 (Zero Copy)实现了低延迟的消息传递。2.3 Kafka进程将数据复制到套接字缓冲区 (Socket Buffer)3.2 操作系统缓存通过 sendfile() 命令直接将数据复制到网卡。零拷贝节省了应用程序和内核上下文之间多次数据拷贝。2.5 网卡向用户发送数据。

2023-09-08 18:51:58 51 1

原创 如何在大众点评或高德地图上找到附近的餐馆?

一个区域可能有很多餐厅 (比如大城市中心城区),而另一个区域却一家也没有 (比如海洋或农田)。首先,沿本初子午线和赤道将地球划分为四个象限: 纬度范围[-90,0];纬度范围[-90,0]。其次,将每个网格划分为四个较小的网格。因此,当你想在红色高亮区块中搜索附近的餐馆时,可以编写如下 SQL 语句。这样我们需要计算与每家餐厅之间的距离,查询效率非常低。我们如何在大众点评或高德地图上找到附近的餐馆?经度范围 [-180, 0] 用 0 表示。纬度范围 [-90, 0] 用 0 表示。

2023-09-07 08:11:28 513 1

原创 谷歌身份验证器如何工作的?

每隔 30 秒,谷歌身份验证器会使用 TOTP (Time-based One Time Password)算法生成一个 6 位数的密码。谷歌身份验证器 (Google Authenticator)是一种基于软件的身份验证器,可实现两步验证服务 (2FA, Two-Factor Authentication)。步骤 5:身份验证服务比较客户端和服务器生成的两个密码,并将比较结果返回前端。比如,为了提高账户安全性,网站在用密码登录后会提示输入谷歌身份验证器生成的一次性密码。谷歌身份验证器的使用分两个阶段。

2023-09-05 09:41:18 202 1

原创 买卖股票的数据结构 - 订单簿

证券交易所使用的数据结构称为订单簿 (Order Book)。订单簿是按价格排列的订单队列。它有一个买入簿和一个卖出簿,匹配时按照先进先出 (First In First Out)的原则。该买入订单与价格为 100.10 的所有卖出订单以及价格为 100.11 的第一笔订单(以浅红色显示)相匹配。现在,由于大买单 “吃掉 ”了卖出簿上的第一个价位,最佳卖出价从 100.10 升至 100.11。因此,当市场看涨时,人们倾向于买入股票,价格就会一涨再涨。下图是一个简单的订单簿数据结构示意图。

2023-09-04 14:25:43 265 1

原创 设计一个极简交易所

交易报告模块 (Reporter) 整合必要的报告字段 (如用户ID、价格、数量、订单类型、已成交数量、剩余数量),并将数据写入数据库进行持久化保存。交易报告模块虽然不在交易的关键路径 (Critical Path) 上,但是所存储的数据对于生成各种客户报表和监管报表尤其重要。交易所的客户网关 (Client Gateway) 执行验证、费率限制、身份验证、数据规范化等操作,并将订单发送给订单管理 (Order Manager)。三路数据流 (交易数据、市场数据、交易落库) 的不同时延要求。

2023-09-01 13:20:13 39 1

原创 如何设计一个极简支付系统

这一步经常采用事件溯源 (Event Sourcing) 的设计范式,将分类账的更新作为一个个事件存储到事件日志中,再用事件去更新账目余额。这时,支付服务会拆分支付事件,每个支付订单都会调用一次支付执行服务 (Payment Executor)。支付执行服务调用外部的支付服务提供商 (PSP, Payment Service Provider) 完成信用卡支付。在钱包服务成功更新卖家的余额信息后,支付服务将调用分类帐进行更新。在支付执行服务成功执行付款之后,支付服务将更新卖家钱包余额。

2023-08-31 09:42:51 33 1

原创 2023-08-30

从一周发表两篇到日更,从仅在LinkedIn发文到全平台覆盖,从2000粉丝到150万粉丝,这一切见证了时间的力量,更是对我们的工作和热情的认可。随着粉丝数的增加,越来越多的国内的朋友注意到了我们,纷纷邀请我们来一起探讨问题,分享经验。今天,我们的旅程将扩展到中国,希望大家喜欢我们大繁至简的图解风格,在讨论中共同进步。国内多家自媒体引用。这两张记录了高光时候的图,与你分享~2年之前,作为两本亚马逊畅销书的作者,我们决定在英文社交媒体上进一步分享系统设计知识,让更多的程序员走近我们,走进我们。

2023-08-30 16:15:59 37 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除