求阙厅

春有百花秋有月,夏有凉风冬有雪。若无闲事挂心头,便是人间好时节。

对象储存 系列 图片系统

...

图片存储包括图片生产和图片消费;图片生产是把图片以一种格式进行存储,主要包括图片元信息的存储和图片文件的存储;图片分发是指获取符合不同应用场景的图片(尺寸、分辨率、格式等等) CDN 内容分发网络。图片仅用到了小文件的静态资源缓存。如图4所示,为CDN静态资源缓存架构的简图,这里只是为了描述CDN访问流程,对于CDN监控、调度管理等等均已略去。

RPC框架Kitex 架构

KiteX 一般分为两部分,一部分称之为 KiteX core,一部分是 suite; KiteX core 提供了最底层的 rpc 功能以及扩展的接口,suite 基于 KiteX core 提供的接口进行扩展,提供公司基础架构的能力。

RPC框架Kitex 概述

KiteX 框架 是一个基于 thrift 的 RPC 框架,基于微服务的架构设计,具备以下功能: 服务注册和发现 统一 RPC 调用 服务调用跟踪 服务调用容灾 服务访问控制 服务负载均衡 服务动态配置 性能监控分析 …… 重点问题 Kitex 有哪些扩展能力? 如何实现的? 负载均衡机制是怎样的? 性能优异的原因?

技术及基础 系列 编码

引子 客户端设置的字符区间参数 [start,end) 是什么维度?应该怎么来用? 评论文本: 👨‍👩‍👧‍👧@🌈新密海燕👨‍👩‍👧‍👧 一家 这是一条测试评论[捂脸]; mention区间(@🌈新密海燕👨‍👩‍👧‍👧一家):{“Start”:11,”End”:32}; 为什么 👨‍👩‍👧‍👧 这种 Emoji 占用 7 个 unicode?utf-16 中占用 11 ...

Mongo 问题汇总

最基础功能的引擎 如何在内存通过B+Tree保存KV数据并快速检索 如何在磁盘通过B+Tree保存KV数据并快速检索 数据集很大,如何统一内存和磁盘B+Tree 如何在B+Tree上查找一个Key Key数量增加,如何在内存和磁盘分裂B+Tree Key数量减少,如何在内存和磁盘合并B+Tree 如何管理B+Tree的内存Page,以及如何管理空闲内存 如...

Go 系列 泛型

一句话总结就是:定义一类通用的模板变量,可以传入不同类型的变量,使得逻辑更加通用,代码更加精简。 在 Golang 1.18 版本中利用泛型来实现 Sum 函数的: 1 2 3 4 5 6 func Sum[T int|float64](a,b T) T { return a + b } fmt.Println(Sum[int](1, 2)) //3 fmt.Printl...

Go 系列 panic

示例 示例中直接用 Go 关键字起了一个 Goroutine,然后发生了空指针的问题,由于没有 recover 导致了整个程序宕掉的问题。代码类似这样: 1 2 3 4 5 6 7 8 9 10 11 12 13 func main() { defer func() { if err := recover(); err !=nil{ fmt.Println(err) }...

Go 系列 语法糖

规则 规则一: 多变量赋值可能会重新声明: 我们知道使用 := 一次可以声明多个变量,像下面这样: 1 field1, offset := nextField(str, 0) 上面代码定义了两个变量,并用函数返回值进行赋值。 如果这两个变量中的一个再次出现在 := 左侧就会重新声明。像下面这样: 1 2 field1, offset := nextField(str, 0) ...

Go 系列 定时器

Ticker ticker的英文原意是钟表的”滴哒”声,钟表周期性的产生”滴哒”声,也即周期性的产生事件。 Ticker 是周期性定时器,即周期性的触发一个事件,通过Ticker本身提供的管道将事件传递出去。 Ticker的数据结构与Timer完全一致: 1 2 3 4 type Ticker struct { C <-chan Time r runtime...

Go 系列 包管理工具

包管理工具有 govendor、dep,本指南旨在统一项目间的 go 版本(统一采用性能更优的 1.13) 以及官方推荐的 go mod 进行包管理,历史项目可参考以下步骤进行升级。因考虑到各项目不同的升级周期,推荐用 gvm 进行go不同版本的切换(避免影响项目正常迭代速度)。 为什么要引入依赖? 引入依赖的主要目的是为了复用已有的工作成果。但是直接将其作为依赖加入项目中存在着...