自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小技术君

公众号:小技术君、独立博客:https://smalltechnologyjun.com

  • 博客(263)
  • 收藏
  • 关注

原创 关系数据库的全景图

这篇文章讨论了关系型数据库内部的索引和事务是如何工作的,而不深入研究特定数据库的怪癖。我将涵盖您应该了解的关于RDBMS索引的一切。我将简要涉及事务和隔离级别,以及它们如何影响对特定事务的推理。图1.0 关系型数据库解释信息图什么是RDBMS?关系型数据库管理系统(RDBMS)是一种用于管理结构化数据的软件。它使用表格来存储数据,并支持SQL(Structured Query Language)进...

2023-10-16 09:06:56 277

原创 Redis 全景解析

Redis 解析信息图什么是 Redis?Redis("REmoteDIctionaryService" 的缩写)是一个开源的键值数据库服务器。对 Redis 最准确的描述是它是一个数据结构服务器。Redis 的这种特定性质使其在开发人员中非常受欢迎和广泛采用。与其对行进行迭代、排序和排列,不如从头开始使用数据结构来存储数据?早期,Redis 像 Memcached 一样使用,但随着 Redi...

2023-09-19 09:06:43 219

原创 你应该知道的主要软件设计原则

软件设计原则指导开发人员创建高效、可扩展和可维护的软件。遵循这些原则,开发人员可以编写更容易阅读、测试和扩展的代码,降低总体拥有成本,并使团队协作更加高效。以下是一些最基本的软件设计原则:1.关注点分离(Separation of concerns):应用程序应分为具有较少功能重叠的离散功能模块。减少交互点对于实现强内聚和低耦合至关重要。尽管每个功能模块内的封闭功能有所不同,但在不适当的边界处分离...

2024-07-04 09:06:17 731

原创 幂等性:构建稳健分布式系统的关键

为什么幂等性是关键?在现代分布式系统中,可用性是关键因素,这意味着你需要构建重试机制和处理失败及恢复的方法。这也意味着你可能会在系统中重复处理相同的操作,但如果你的应用程序不了解这一点,并将其视为一个全新的请求,它将产生不可预期的结果。如果是处理支付或管理电子商务订单的应用程序,这会导致巨大的财务损失和不可挽回的损害。那么,我们该怎么做才能保证多次执行操作的结果与仅执行一次的结果相同呢?1*NXW...

2024-07-03 09:06:35 364

原创 微服务粒度难题:找到合适的微服务大小

序言在微服务架构风格中,微服务通常设计遵循SRP(单一职责原则),作为一个独立部署的软件单元,专注于做一件事,并且做到极致。作为开发人员,我们常常倾向于在没有考虑为什么的情况下尽可能地将服务做得小。这种关于什么是和不是什么是单一职责的主观性是我们开发人员在服务粒度方面容易犯错误的地方。为了克服开发团队在微服务尺寸上面临的这种困境,理解粒度驱动因素至关重要。粒度在微服务中,我们有两个概念——模块化,...

2024-07-02 09:06:46 796

原创 解码分布式系统:深入探讨CAP定理和ACID特性

介绍在分布式系统的世界中航行需要处理多个复杂的概念和原则。两个经常提到的基本原则是CAP定理和ACID特性。这些原则在塑造分布式系统的设计和行为中起着关键作用。本文旨在解构这些概念并深入探讨它们的影响。了解CAP定理CAP定理由计算机科学家Eric Brewer提出,是适用于分布式系统的一个原则。它指出分布式数据存储不可能同时提供以下三个保证中的超过两个:1. 一致性(Consistency)在C...

2024-07-01 09:06:54 895

原创 微服务架构中的通信风格

在微服务架构中,通信是关键要素,关于选择最有效的服务间交互方法的讨论也非常广泛。在这篇介绍性文章中,我们将探讨并总结微服务的最佳通信策略,提供关于何时以及如何有效使用每种通信风格的见解。交互风格要有效理解服务在微服务架构中如何通信,首先必须熟悉可用的交互风格。每种风格都有其独特的优点和缺点。深入了解这些细微差别对于在选择适当的通信机制之前做出明智决策至关重要。这一基础知识确保所选方法能够很好地与系...

2024-06-28 09:06:14 991

原创 系统设计:设计URL短链接工具

1*xOHz3T_iSShM2rRIT2bljA.png这是一个系统设计问题,要求从头开始设计一个类似于TinyURL或Bitly的URL短链接工具。我们将涵盖从设计需求、架构和组件设计到高性能扩展和安全最佳实践的各个方面。定义范围:功能性和非功能性需求首先,我们需要定义该系统的功能性和非功能性需求。我们有两个功能性需求:1.给定一个长URL时,我们必须创建一个短URL2.给定一个短URL时,我们...

2024-06-27 09:06:56 808

原创 效率陷阱

效率可以定义为正确地完成任务,同时在合理的时间内完成。我们试图改善我们的工作态度,并且准备好扰乱我们的工作生活平衡以产生更多的输出。为了提高效率,我们倾向于消除那些不能增加所需完成量的活动。不能休息、需要加班、必须完成X任务、可以在桌前吃午饭等。持续的效率增长成为了主要目标。原本应该是工具性的东西变得至关重要。在这篇文章中,我想探讨效率的一些黑暗面以及为什么我们应该对它保持警惕。效率定义在简化的层...

2024-06-26 09:06:45 690

原创 2024 年的 5 种云原生架构模式

0*pVcxe7uqMt14UQGv.png云原生领域正在迅速发展,要求架构既具可扩展性又灵活。这些架构需要为分布式环境设计,拥抱微服务和容器化。为了满足这些需求,云原生架构模式提供了构建高效、弹性应用程序的可靠方法。在本文中,我们将探讨你需要了解的2024年最重要的五种云原生架构模式:Sidecar/Sidekick 模式想象一下一个小伙伴骑在你的摩托车旁边,这就是 Sidecar/Sideki...

2024-06-25 09:06:57 802

原创 系统设计:设计类似WhatsApp的应用

1*mMcr7ZQNI7H3fWPBFAE-fg.png在这个系统设计场景中,我们被要求设计一个类似WhatsApp的消息应用程序。虽然在实际的讨论中可能会重点讨论该应用程序的一个或多个功能,但在本文中,我们将对系统的架构进行一个高层次的概述,然后可以根据需要深入探讨具体的领域。明确功能需求通过向业务方提问来缩小范围,因为在一个小时内设计整个WhatsApp平台是不现实的:1*JhQJNfkan7...

2024-06-24 09:06:54 591

原创 系统设计 —— 随用户扩展

单服务器设置:在单服务器设置中,所有内容都运行在一台服务器上。这包括网页应用程序、数据库、缓存等。1*HQXZgCc5Vh8KooJHwKfzjw.png图1.1 请求流程1.最终用户通过域名(myurl.com)访问网站。请求发送到 DNS,将域名映射到 IP 地址。2.IP 地址返回给网页浏览器或移动应用程序。3.HTTP 请求直接发送到 web 服务器。4.Web 服务器然后将请求的资源返回...

2024-05-09 09:06:47 677

原创 微服务架构中的挑战及应对方式:Outbox 模式

使用 Outbox 模式保持微服务数据一致性在一个由许多小型服务组成的系统中保持数据一致性是困难的,因为它们分散在各处。以下是一些常见问题以及如何处理它们的方法:当服务发送消息时,同时更新数据库和发送消息是棘手的问题。在微服务中发出事件时,我们必须解决如何以事务方式更新数据库并发出事件的问题。Outbox 模式处理这个问题的简单方法是使用事务性 Outbox 模式。1*4ApYkrLX-KMWMq...

2024-05-06 09:06:37 841 1

原创 通过示例理解 MapReduce | 系统设计

理解MapReduce在实际网站日志示例中的大数据处理1*FXrlbwmBcWu38gFE9vTdlQ.png问题:如何分析海量数据集想象一下,您有数千亿字节的网站日志,跟踪每位访问者的互动,现在您希望从中筛选出一些信息,比如哪些页面最受欢迎,访问者在购买流程中的流失情况等。1*q9avzjY6JzrCh4YlWU33zA.png传统工具和数据库简直无法处理这种规模的数据集。这就是MapReduc...

2024-04-23 09:06:43 977 3

原创 Meta如何将其缓存一致性提高至99.99999999

简介缓存是计算机系统中的一种强大技术,从硬件缓存到操作系统、Web浏览器,尤其是后端开发中都有广泛应用。对于像Meta这样的公司,缓存非常重要,它有助于降低延迟、处理大量工作负载,并节省成本。由于Meta的应用场景非常缓存密集,这给他们带来了另一组问题,即缓存失效。多年来,Meta已将其缓存一致性水平从99.9999(六个九)提高到99.99999999(十个九),这意味着他们的缓存集群中不到十亿...

2024-04-22 09:06:44 729

原创 如何使用Apache Kafka处理1亿用户的大型应用程序

1*gthEU_vmnBpXDoBue_ImsQ.png在大数据和高流量应用程序的世界中,同时处理大量用户是一个巨大的挑战。许多全球最受欢迎的应用程序,服务超过1亿用户,依赖于强大、可扩展的架构来管理数据和请求的洪流。这些架构中的关键参与者是 Apache Kafka,一个分布式事件流平台,以其高吞吐量、可靠性和可扩展性而闻名。在这篇文章中,我们将探讨大型应用程序如何使用 Apache Kafka...

2024-04-19 09:06:28 772 1

原创 短视频流媒体平台的系统设计

1. 功能需求:我们的系统有两类参与者内容创作者•上传任何类型的视频(格式+编解码器)•视频可以被删除•视频元数据•必填项:标题,作者,描述•选填项:分类/标签列表•可以随时更新•当视频对观众可用时,向内容创作者发送电子邮件不在讨论范围内:•直播•视频修改•支付和订阅用户/观众•需要注册+订阅•使用自由文本搜索视频属性/元数据•在以下设备上观看视频•任何设备(移动设备,平板电脑,桌面电脑)•使...

2024-04-18 09:06:46 1258

原创 何时使用 GraphQL、gRPC 和 REST?

构建 API 是现代工程中开发人员的最重要任务之一。这些 API 允许不同的系统进行通信和数据交换。虽然REST多年来一直是实现 API 的事实标准,但今天也有新兴的标准,如gRPC和GraphQL。什么是 API?“应用程序编程接口”(API)是各种软件服务之间的通信渠道。传输请求和响应的应用程序分别称为客户端和服务器。API是一个外部软件组件,使程序功能可供其他程序使用。在下面的蜜...

2024-04-16 09:06:58 1309

原创 Twitter如何优化处理4000亿事件的流程

引言Twitter实时处理大约4000亿事件,并每天生成一个PB(petabyte)的数据。Twitter从多种事件源消费数据,例如分布式数据库、Kafka、Twitter事件总线等。1*i4nnQ2vVXcXDljxsk8l6xQ.pngTwitter订阅源中的事件调用示例在这篇文章中,我们将尝试理解:1.Twitter过去是如何处理事件的,以及那种方法存在哪些问题?2.是什么业务和客户影响促使...

2024-04-15 09:07:00 789

原创 ​复杂性、耦合度和内聚性

我们遇到的任何软件系统很可能都过于复杂,一次无法完全理解 — 人类的思维无法理解大量实体及其关系。我们倾向于通过建立抽象来简化现实:一旦我们将许多闪亮的金属、玻璃和橡胶定义为“汽车”,我们就可以谈论“高速公路”、“停车场”和“乘客” — 我们生活在我们创造的抽象世界中。同样,我们编写的软件由服务、进程、文件、类、过程等组成 — 这些模块隐藏了我们无法抗拒的一堆位和片段。让我们思考一下。概念与复杂性...

2024-04-09 09:06:35 920

原创 系统设计-点餐系统服务生态的完整剖析

在线点餐系统的必要性在线点餐系统不仅仅是为了满足饥饿感;它已经成为我们现代生活方式中不可或缺的一部分。在一个快节奏的世界中,它作为连接餐厅美食与消费者多样化偏好的桥梁。除了显而易见的便利性外,该系统将普通的餐食转化为难忘的体验,提供了丰富的选择、个性化的互动和无缝的交易。在线点餐系统的蓝图为了理解在线点餐系统内各种服务的错综复杂关系,让我们勾勒一个草图,概述各个组件及其相应角色之间的共生关系:1*...

2024-04-07 09:06:20 687

原创 构建企业级微服务平台:实现可扩展性、弹性和高效性

在软件开发的快速发展领域中,企业不断努力构建健壮、可扩展和高效的系统。随着微服务架构的出现,再加上云原生技术的应用,创建敏捷且具有弹性的平台的可能性是无限的。在本指南中,我们将深入探讨使用强大的工具和技术组合,架构企业级软件开发平台的细节。1*WyYwNfc6f_1B7Ky3daeiNA.jpeg技术栈在我们深入架构细节之前,让我们先了解一下我们技术栈的关键组件:1.Spring Cloud:Sp...

2024-04-02 09:06:57 994

原创 3种发布策略 | 基于 API 的基础架构

0*U9VWW5UCtxTlPtrc.png部署与发布在决定发布策略之前,我们必须区分两个重要概念:部署和发布。部署涉及将功能完全推进生产环境,因为您现在在系统中运行了一个进程。尽管已经部署,但新功能并未通过与生产系统的交互活跃或执行。有各种方法可以实现此分离。发布涉及以受控的方式激活新功能,从而允许您控制引入新功能的风险。Thoughtworks Technology Radar 对部署和发布之...

2024-04-01 09:06:30 893

原创 SQL事务和ACID属性

1*Q8Ai8VeBUQ7arpIBZUzAkA.png引言:SQL中的事务想象一下一个使用SQL作为数据库的银行系统。用户A想将一些钱存入用户B的账户。如果他们发送了钱,我们从他们的账户余额中扣除了这笔钱,并且我们想要将这笔钱存入用户B的账户,但突然间我们的数据库崩溃了。1*O-kwcm8IDmw1bn5uuou9xA.png这是否意味着我们从用户A的余额中扣除的钱消失了?嗯,并不是在SQL数据...

2024-03-15 09:07:01 986

原创 ​2024年保护微服务的前10种技术

1*5rY-jEv7qlpa_swi4WMIBw.png引言与当前正在使用的任何其他技术或方法一样,微服务也有其自己的一套缺陷和问题。尽管如此,微服务架构的采用率不断增加,预计到2028年将达到1718.2亿美元。然而,尽管团队使用微服务,但确保这些微服务的安全性仍然被视为事后事项。 这可能导致应用程序中的许多安全问题,甚至可能使用户数据面临风险,甚至导致应用程序停机。因此,让我们看看在2024年...

2024-03-14 09:06:16 1267

原创 选择 SQL 与 NoSQL

1*h9TeUWaXG4kYTfz1oUaGqg.png问题 #1.)能展示一下之前处理的数据量与现在的数据量之间的差异吗?1*DHEFd9QMZlQ4nzKvbQXkfQ.png问题 #2.)在 1970 年代,被认为足够的数据量有多大?1*xCQ5I5P13rfnzhf8_FzNVQ.png问题 #3.)在早期,数据库的设计原则是什么?1*r99-lBF9Rs7r9poVQ8GlNA.p...

2024-03-13 09:06:40 865

原创 如何优化 Redis 扫描性能

1*Gevr3Luj3OTpNFks0AsB_Q.pngRedis 是一款强大而多才多艺的内存数据存储,被广泛用于缓存、会话管理、实时分析等场景。Redis 的一个关键特性是其对逻辑数据库的支持,使用户能够在单个 Redis 实例中对数据进行分区。这些逻辑数据库提供了隔离和在键方面的不同命名空间,从而实现更有效的数据管理和组织。在本文中,我将展示如何利用逻辑数据库来提升 Redis 查询性能。逻辑...

2024-03-12 09:06:29 1135

原创 布隆过滤器算法用于搜索

1*kI0fAwTu4Q8dvhQWF8putg.png问题:什么是布隆过滤器?答案 →布隆过滤器是一种空间效率高的概率型数据结构。它已经存在了50年。它用于回答这样的问题:这个元素是否在集合中?问题:布隆过滤器的实际应用有哪些?答案 →布隆过滤器是一种具有许多实际应用的数据结构。它可以在浏览器、网络路由器和数据库中找到,仅举几例。1*mZZRVItrucPMKonpK468dQ.png问...

2024-03-11 09:06:54 408

原创 解析大数据:从流数据摄取到交互式可视化的完整生态系统

大数据处理涉及处理和分析大型复杂数据集的技术和技术。“大数据”通常指的是传统数据库和处理工具无法处理的数据集。例如:应用程序日志、用户交互日志:这些大数据用于分析用户互动、偏好和行为,以改进内容推荐算法并提升用户参与度。各种组件共同工作以处理、存储和分析这些大型数据集。这些组件共同形成一个大数据处理生态系统。大数据处理的关键组件:1. 数据摄取和传输(Kafka、Logstash(ELK))...

2024-03-07 09:06:23 848

原创 SQL初学者教程

1*MZYgEqPQgfPTJFoJZddQ2g.png什么是SQL数据库?SQL数据库是一种关系数据库管理系统(RDBMS),它使用结构化查询语言(SQL)作为与数据交互和操作的接口。1*cqvb7FRDq_akd_p4SEYoGQ.png在SQL数据库中,数据存储在类似电子表格的表中,具有行和列。每行代表一个单一记录,每列表示记录内的字段。SQL数据库存储在哪里?SQL数据库存储在数据存储系统...

2024-03-06 09:06:34 1123

原创 现代分布式系统架构的权衡分析

介绍现代软件系统,特别是遵循分布式架构的系统,以其复杂性和可变性而闻名。这些系统由许多元素组成,每个元素都引入潜在的权衡,可能影响成本、性能、可伸缩性和可靠性等因素。对于导航软件现代化和转型领域的IT架构师、业务分析师、数据架构师、软件工程师和数据工程师来说,理解这些权衡至关重要。本文旨在阐明在分布式架构中进行权衡分析的过程和重要性,提供有关与这一复杂但不可或缺的实践相关的方法、技术、工具和竞争方...

2024-03-05 09:06:55 1074

原创 负载均衡策略和技术的基本指南

1*iacpVuhpJ3Q14lh12thauA.png什么是负载均衡器?负载均衡器将传入的网络流量分配到多台服务器上,以确保没有单个服务器承受过多的负载。通过有效地分发请求,它们提高了应用程序的容量和可靠性。以下是负载均衡中常用的一些策略和算法:1*gqeONVRz3V9B3G87hLnKng.gif1. 轮询法轮询法是负载均衡的最简单形式,其中池中的每台服务器按顺序接收请求,循环轮转。当到达最...

2024-02-29 10:02:20 814

原创 实时流媒体系统设计

1*V2U5_ZQ-AmA0OzQr9os2_A.png问题:为什么视频内容的实时流媒体具有挑战性?回答 →这是因为以下原因:•因为视频内容是以几乎实时的方式通过互联网发送的。1*pTRZ8t-Jp0l-tp8EIjutWA.png•视频处理的整个过程是计算密集型的。通过互联网发送大量视频需要时间。1*3oWBDvi2ktR4rD8FAXKXUg.png问题:任何视频是如何从流媒体端传输的?...

2024-02-28 09:06:56 820

原创 Redis集群的高可用性

1*hM8LWoUsoZ6aleTwO91zag.png在本文中,我们将研究以下主题:•Redis集群的高可用性。•Redis集群的自动故障转移。•Redis集群中的脑裂问题及其解决方案。问题:Redis-Cluster如何提供高可用性?答案:高可用性是指集群在面临某些故障时仍能保持操作能力。例如,集群可以检测到主分片失败并在无需外部手动干预的情况下将副本提升为主分片。问题:Redis-Cl...

2024-02-27 09:06:19 876

原创 系统设计:设计Spotify

初始阶段:基础版本需求:初始要求是处理50万用户和3000万首歌曲。我们将有播放歌曲的用户和上传歌曲的艺术家。1*6V8fzH4kUg780E7AJExMsA.png估算:数据计算让我们从估算我们需要的存储开始。首先,我们需要将歌曲存储在某种存储中。•歌曲存储:Spotify等服务通常使用Ogg Vorbis或AAC等格式进行流媒体传输,假设平均歌曲大小为3MB,我们需要3MB * 3000万...

2024-02-26 09:44:22 904

原创 深入了解负载均衡器

每个负载均衡器都是反向代理,但并非每个反向代理都必须是负载均衡器。0*GFvXmdPz97bwF8vU.jpeg问题:OSI模型是什么样的?1*JzMQUxqHiATuQlIgyIv-xQ.png问题:负载均衡器的需求是什么?答案 →为了创建一个容错系统,使得当客户端向负载均衡器发出请求时,它可以与一个或多个后端进行通信。1*vOM1JBF5eew1kBUQqVn1Ag.png问题:解释一...

2024-02-22 09:06:46 1006

原创 如何承担责任?

优秀的领导与其他人的区别在于,他们对自己的言行和结果负责。而且,这在好的时候或坏的时候都是如此。责任推动信任,促使更好的决策,并改善团队合作和协作。一个负责任的领导对其言行和决策负责,并愿意承担这些决策的后果。他们设定清晰的目标和期望,承担责任,并与团队清晰沟通。然而,使人们负责任并不容易。为了实现这一点,我们可以使用责任阶梯,这是由Bob Gordon于2007年创建的工具。它是一种帮助领导者确...

2024-02-21 09:06:27 359

原创 代理服务器:代理的工作原理

1*OhAU9dUADEhrHzYwXh-Uig.png代理服务器充当客户端请求资源和提供该资源的服务器之间的中介。它可以实现多种目的,如为更快的访问缓存资源、匿名请求、强制安全策略以及在多个服务器之间进行负载平衡。基本上,它接收来自客户端的请求,将其转发到相关的服务器,然后将服务器的响应返回给客户端。代理服务器的类型有几种类型的代理服务器,每种都有不同的用途。以下是一些主要类型:1.正向代理:这...

2024-02-20 09:06:38 909

原创 Postgres并发处理

本文,我们将深入探讨并发的概念以及Postgres中是如何处理它的。让我们开始吧!并发及其角色计算机科学史上最受追捧的词汇之一是并发[1]和并行[2]。如果没有这两者的需求,我们可以简单地一次运行一个程序,不需要操作系统资源(RAM、CPU)在应用程序之间进行调度,从而使内核变得更简单。内核的核心目的是调度和协调计算机资源和应用程序,使并发和并行成为可能。尽管没有这些概念,整体复杂性可以减少95%...

2024-02-19 09:06:40 829

原创 掌握 NoSQL 数据库

1*p5fl0Z5tHQuyyI4SktjfOw.png对于大多数开发者来说,关系数据库是最佳选择,因为它们已经存在超过40年,而且在历史上一直表现良好。然而,如果关系数据库不适用于您的特定用例,那么超越关系数据库是至关重要的。非关系数据库可能是正确的选择,如果:•您的应用程序需要超低延迟。•您的数据是非结构化的,或者您没有任何关系数据。•您只需要序列化和反序列化数据(JSON、XML、YAML ...

2024-02-02 09:06:49 918

空空如也

空空如也

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

TA关注的人

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