小技术君


  • Home

  • About

  • Tags

  • Categories

  • Archives

  • Sitemap

  • Book

  • Markdown

  • Search

系统设计蓝图 / 备忘单

Posted on 2023-08-12 | In system design |

开发一个强大、可扩展和高效的系统可能会令人望而却步。然而,了解关键概念和组件可以使这个过程更可管理。在本博客文章中,我们将探讨系统设计的关键概念和组件,如DNS、负载均衡、API网关等,以及一个简明的备忘单,可以帮助开发人员设计不同复杂性的系统。

系统设计蓝图 / 备忘单

这是一份全面的视觉指南,为开发人员提供了一个快速、简单的参考,涵盖了系统设计中的关键概念和最佳实践。这个便捷的备忘单或蓝图涵盖了诸如DNS、负载均衡、API网关、视频和图像处理、缓存、数据库、唯一ID生成、支付和推荐服务等标准组件,以及聊天和流媒体协议。有了这个宝贵的资源,你将能够应对设计和实施可扩展、高效和可靠系统的挑战。

1*QSFihi7zXbR5X915MDmKyQ.png

Read more »

Discord如何存储数万亿条消息

Posted on 2023-04-01 | In 设计 |

Discord是一款专为社群设计的免费网络实时通话软件与数字发行平台,主要针对游戏玩家、教育人士、朋友及商业人士,用户之间可以在软体的聊天频道通过消息、图片、视频和音频进行交流。这款软件可以在Microsoft Windows、macOS、Android、iOS、Linux和网页上运行。

下面的图展示了Discord消息存储的演变历程:

67b3962d-becb-4fba-a9ae-115692dfa6e1_3576x3033.jpeg

Read more »

什么是gRPC?有什么优点?

Posted on 2023-04-01 | In 设计 |

RPC(远程过程调用)被称为“远程”,是因为它可以在微服务架构下将服务部署在不同的服务器上时,在远程服务之间进行通信。从用户的角度来看,它就像是一个本地函数调用。

下面的图表说明了gRPC的整体数据流程。

b98afdcd-b567-4c90-9f47-5358df0adda6_1280x1619.jpeg

Read more »

使用OpenAI的ChatGPT进行智能问答交互的实现

Posted on 2023-03-11 | In ChatGPT |

Image.png

当使用 ChatGPT 进行问答交互时,用户输入的问题需要经过多个组件进行处理,其中包括内容审核、ChatGPT 模型生成回答以及回答的内容审核等。在本文中,我们将详细介绍 ChatGPT 的工作原理,并提供相应的代码示例。

Read more »

API网关的工作原理与实战案例

Posted on 2023-03-09 | In gateway |

Image.png

API网关的工作原理与实战案例

API网关是一个在微服务架构中起到重要作用的组件。它可以处理所有客户端请求并对它们进行统一的管理和路由。本文将介绍API网关的工作原理,并给出一个基于Spring Cloud Gateway的实战案例。

Read more »

hexo 博客加载优化

Posted on 2022-12-24 | In hexo |

hexo 博客加载优化

背景

最近趁着周末折腾自己博客的时候,发现刷页面的时候会有点卡顿,感觉页面性能很低,所以开始了下面的优化,分析下来结果还不错比之前快了很多,那让我们开始吧!

Image.png

简单的来说主要以下几个部分的优化:

  • 压缩静态资源,提高访问速度
  • 图片懒加载
Read more »

Nagle和延迟确认带来的性能问题

Posted on 2022-12-23 | In network |

Nagle和延迟确认带来的性能问题

前言

从网上看到的一个问题的跟踪@林沛满 ,觉得很有意思记录下来

问题背景

从AIX备份数据到Windows极其缓慢,只有1MB/s,备份所用的协议是SFTP,看到这个问题第一反应抓个包,试试Wireshark的三板斧

抓包三板斧

  1. 从Statistics →Summary菜单可见,平均速度是11 Mbit/s,的确只比1 MB/s高一些
Read more »

TCP 的那些事儿(下)

Posted on 2022-12-23 | In network |

TCP 的那些事儿(下)

这篇文章是下篇,所以如果你对TCP不熟悉的话,还请你先看看上篇《TCP的那些事儿(上)》 上篇中,我们介绍了TCP的协议头、状态机、数据重传中的东西。但是TCP要解决一个很大的事,那就是要在一个网络根据不同的情况来动态调整自己的发包的速度,小则让自己的连接更稳定,大则让整个网络更稳定。在你阅读下篇之前,你需要做好准备,本篇文章有好些算法和策略,可能会引发你的各种思考,让你的大脑分配很多内存和计算资源,所以,不适合在厕所中阅读。

TCP的RTT算法

从前面的TCP重传机制我们知道Timeout的设置对于重传非常重要。

  • 设长了,重发就慢,丢了老半天才重发,没有效率,性能差;
  • 设短了,会导致可能并没有丢就重发。于是重发的就快,会增加网络拥塞,导致更多的超时,更多的超时导致更多的重发。

而且,这个超时时间在不同的网络的情况下,根本没有办法设置一个死的值。只能动态地设置。 为了动态地设置,TCP引入了RTT——Round Trip Time,也就是一个数据包从发出去到回来的时间。这样发送端就大约知道需要多少的时间,从而可以方便地设置Timeout——RTO(Retransmission TimeOut),以让我们的重传机制更高效。 听起来似乎很简单,好像就是在发送端发包时记下t0,然后接收端再把这个ack回来时再记一个t1,于是RTT = t1 – t0。没那么简单,这只是一个采样,不能代表普遍情况。

Read more »

TCP 的那些事儿(上)

Posted on 2022-12-23 | In network |

TCP 的那些事儿(上)

TCP是一个巨复杂的协议,因为他要解决很多问题,而这些问题又带出了很多子问题和阴暗面。所以学习TCP本身是个比较痛苦的过程,但对于学习的过程却能让人有很多收获。关于TCP这个协议的细节,我还是推荐你去看W.Richard Stevens的《TCP/IP 详解 卷1:协议》(当然,你也可以去读一下RFC793以及后面N多的RFC)。另外,本文我会使用英文术语,这样方便你通过这些英文关键词来查找相关的技术文档。

之所以想写这篇文章,目的有三个,

  • 一个是想锻炼一下自己是否可以用简单的篇幅把这么复杂的TCP协议描清楚的能力。
  • 另一个是觉得现在的好多程序员基本上不会认认真真地读本书,喜欢快餐文化,所以,希望这篇快餐文章可以让你对TCP这个古典技术有所了解,并能体会到软件设计中的种种难处。并且你可以从中有一些软件设计上的收获。
  • 最重要的希望这些基础知识可以让你搞清很多以前一些似是而非的东西,并且你能意识到基础的重要。

所以,本文不会面面俱到,只是对TCP协议、算法和原理的科普。

我本来只想写一个篇幅的文章的,但是TCP真TMD的复杂,比C++复杂多了,这30多年来,各种优化变种争论和修改。所以,写着写着就发现只有砍成两篇。

  • 上篇中,主要向你介绍TCP协议的定义和丢包时的重传机制。
  • 下篇中,重点介绍TCP的流迭、拥塞处理。
    Read more »

操作系统-下

Posted on 2022-11-29 | In OS |

Linux操作系统概览

物理内存

  • 物理内存分 NUMA 节点,分别进行管理;
  • 每个 NUMA 节点分成多个内存区域;
  • 每个内存区域分成多个物理页面;
  • 伙伴系统将多个连续的页面作为一个大的内存块分配给上层;
  • kswapd 负责物理页面的换入换出;
  • Slub Allocator 将从伙伴系统申请的大内存块切成小块,分配给其他系统
Read more »
1234…6
小技术君

小技术君

桃李不言 下自成蹊

56 posts
22 categories
32 tags
RSS
GitHub Email
友情链接
  • Chris Blog
  • VPN
  • v2rayVPN
© 2015 — 2024 Chris
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4