自定义博客皮肤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

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

原创 关系数据库的全景图

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

2023-10-16 09:06:56 407

原创 Redis 全景解析

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

2023-09-19 09:06:43 278

原创 架构设计:边车模式解释

上下文与问题现代应用通常需要为不同的服务提供以下通用功能组件:•监控与日志•配置管理•服务发现•网络通信•安全特性将这些功能直接集成到每个应用程序中可能导致以下问题:•代码重复:当每个服务都试图处理相同的功能时,会产生大量重复代码,增加不一致性和引发错误的风险。•复杂性增加:每个服务管理自己的功能会让整个架构更加复杂,难以维护。•可维护性降低:共享功能分散在不同服务中,更新变得困难且容易出错。•语...

2024-12-24 09:29:14 715

原创 代理服务器:代理如何工作

1*OhAU9dUADEhrHzYwXh-Uig.png代理服务器充当请求资源的客户端与提供资源的服务器之间的中介。它可以实现多种功能,例如缓存资源以加快访问速度、匿名化请求、执行安全策略以及在多个服务器之间进行负载均衡。简单来说,代理服务器接收来自客户端的请求,将其转发到相关服务器,然后将服务器的响应返回给客户端。代理服务器的类型代理服务器有多种类型,每种类型具有不同的用途。以下是主要类型的介绍...

2024-11-21 09:06:22 825

原创 如何设计一个可扩展的系统

设计能够支持大规模运行的系统是一项复杂但至关重要的技能,软件工程师在其职业生涯中都会面对这样的挑战。特别是在大型科技公司中,工程师们更频繁地需要解决扩展性问题。对于系统扩展,没有放之四海而皆准的解决方案,因为这往往需要权衡取舍。随着应用程序的增长和用户数量的增加,处理更大负载的能力变得越来越重要。以下介绍三种应对增长需求的技术。理解这些技术的优缺点将有助于您设计一个更健壮和灵活的解决方案。增加服务...

2024-11-20 09:06:55 488

原创 数据库复制与分片详解

1*ardSMbIbV443PcrM-m-0NQ.png在设计大规模系统时,最大的挑战之一是确保系统在处理海量数据和高并发用户请求时仍然保持响应迅速。在这种情况下,数据库通常成为主要瓶颈。1*Ro4UG0LI8tPKSRxX-FV_8Q.png为了确保我们的系统在高负载下仍然快速可靠,我们可以利用两个关键技术:数据库复制和数据库分片。1*IRdCRQR7zjIt4aTnoCQoGQ.png数据库复...

2024-11-19 09:08:53 655

原创 解释有状态与无状态架构设计

什么是有状态(Stateful)?想象一下,你去一家忙碌的餐厅吃饭,同一个服务员从头到尾为你服务。他会记住你的点单以及所有需求。image但是问题来了:如果这个服务员中途休息或换班了,接替他的服务员就不知道你之前点了什么。这意味着你必须重新开始,和新服务员说明一切。image这和有状态服务器的工作方式很相似。有状态服务器会记住你的会话信息,比如登录数据、偏好设置等。image但问题是,如果你的下一...

2024-11-18 09:06:51 830

原创 提高应用程序可用性:基础知识

在一个始终要在线的生产环境中,如何确保当问题发生时,应用程序仍然可用?解决这个问题远非简单,需要在做出选择时明确表达,同时兼顾公司的资源限制。这是系列文章的第一篇,涵盖了从定义您需要提供的保证,到可以利用的模式,再到设计解决方案时所做选择的后果。在本系列文章中,您可以期待以下内容:•可用性基础知识(本文)•冗余与持久性•优雅降级与异步处理•灾难恢复•Active-Active 模式让我们从建立对可...

2024-10-14 09:06:49 536

原创 分布式系统中的可扩展性

在当前快速变化的环境中,日益增加的工作负载和数据量已经成为一种现实。因此,可扩展性成为现代系统设计的基石原则,确保在指数增长的情况下继续保持性能和响应能力。可扩展系统是能够处理工作负载和用户需求快速变化的系统。可扩展性是衡量该系统通过添加或移除资源以满足需求的响应能力的标准。接下来的讨论将介绍可扩展性的不同类型,并说明一些重要的策略和挑战,以便扩展现代分布式系统。可扩展性类型垂直扩展:指通过向使...

2024-10-10 09:06:58 1081

原创 系统设计中的消息队列

1*QnEHTb57iUU8KPQ-gBzw6w.png在一个电商平台系统里,每当客户下订单时,你需要:1.处理支付。2.更新库存。3.发送确认邮件。在高峰期立即执行所有这些操作,可能会减慢客户的体验。在这种情况下,我们有大量的应用事件,而无法同时处理所有事件。1*5TbadXlJNU3ufSiTK0Wt7Q.png消息队列的基本架构消息队列是一个持久化组件,存储在内存中,支持异步通信。它充当缓冲...

2024-10-08 09:07:04 935

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

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

2024-07-04 09:06:17 884

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

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

2024-07-03 09:06:35 467

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

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

2024-07-02 09:06:46 976

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

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

2024-07-01 09:06:54 987

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

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

2024-06-28 09:06:14 1081

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

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

2024-06-27 09:06:56 950

原创 效率陷阱

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

2024-06-26 09:06:45 1127

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

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

2024-06-25 09:06:57 905

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

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

2024-06-24 09:06:54 666

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

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

2024-05-09 09:06:47 741

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

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

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

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

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

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

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

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

2024-04-22 09:06:44 828

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

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

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

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

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

2024-04-18 09:06:46 1496

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

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

2024-04-16 09:06:58 1398

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

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

2024-04-15 09:07:00 861

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

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

2024-04-09 09:06:35 1074

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

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

2024-04-07 09:06:20 838

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

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

2024-04-02 09:06:57 1110

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

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

2024-04-01 09:06:30 965

原创 SQL事务和ACID属性

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

2024-03-15 09:07:01 1095

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

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

2024-03-14 09:06:16 1337

原创 选择 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 910

原创 如何优化 Redis 扫描性能

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

2024-03-12 09:06:29 1317

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

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

2024-03-11 09:06:54 441

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

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

2024-03-07 09:06:23 917

原创 SQL初学者教程

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

2024-03-06 09:06:34 1162

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

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

2024-03-05 09:06:55 1304

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

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

2024-02-29 10:02:20 921

空空如也

空空如也

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

TA关注的人

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