首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
有疑说
有疑说
创建于2021-05-16
订阅专栏
技术专栏
等 6 人订阅
共47篇文章
创建于2021-05-16
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
高并发系统设计(4) —— 结构化缓存
在众多应用中,缓存都是标配,使用缓存都能获得非常巨大的性能提升。然而却少有人能把缓存用好,使用缓存的服务,随着需求的迭代都会不可避免的陷入一种怪圈: 在反复的折腾之下,系统难以维护,最终不得不走向整体“重构”。 以微博为例,当打开微博时,页面主要数据构成有:分类列表(左侧);微…
永远不要在不知道如何停止的情况下启动一个 goroutine
在 Go 中,goroutine 的创建成本低,调度效率高,同时存在数十万个 goroutine 并不奇怪。虽然单个 goroutine 使用的内存有限,但是不意味着可以毫无限制的创建 goroutine。 每次启动 goroutine 时,必须知道 goroutine 何时、…
译|Go Concurrency Patterns: Context
在 Go 服务中,每个传入的请求在单独的 goroutine 中处理。请求回调函数通常启动额外的 goroutine 以访问后端,如数据库和RPC服务。处理同一请求的一系列 goroutine 通常需要访问请求相关的值,例如端用户的标识、授权令牌和请求截止时间。当请求被取消或超…
sync.singleflight 到底怎么用才对?
所有的请求被同时打到下游存储上,将会影响下游存储的服务质量,因此需要严格限制访问下游存储的并发量。使用 Golang 编程的人,倾向于不假思索的使用 singleflight 应对 Cache Miss(缓存未命中),即: 在绝大多数场景下,singleflight 都很好用,…
译|Optimal Logging
找到系统故障的根本原因,需要多长时间?5分钟?还是5天?如果你的答案接近5分钟,那么你的生产系统和测试很大可能有非常好的日志记录。更常见的情况是,诸如日志、异常处理、甚至测试这类非核心的工作,被当作一种出现问题后的补救方式。同异常处理和测试一样,在系统和测试中都需要日志记录的策…
内存管理基础概念总述
在1940 ~ 1950年代,所有较大的程序都必须包含管理内存和二级存储的逻辑,例如overlaying。为了允许多程序和多任务,许多早期系统在多个程序之间划分内存,例如:早期模型 PDP-10 。 有一种经不起推敲的说法,虚拟内存的概念的来源是德国物理学家弗里茨·鲁道夫·居特…
Golang 进阶文章一览
最近在组内 Code Review 发现很多同学学习时间虽然不短,但Golang的一些基本Pattern仍然有所疏漏。 如果时间不是问题,那么就是知识体系存在漏洞。那么一个体系化、结构化的指南,对他们应该会帮助,因此整理之前主体阅读过的经典文章,形成了本篇文章。
从 lsof 开始,深入理解虚拟文件系统
有时会出现这样的情况,磁盘空间显示已经被占满,但是在查看磁盘的具体文件占用情况时,发现磁盘仍然有很大的空余空间。 1. 执行df命令查看磁盘使用情况,发现磁盘已经满了。 2. 执行du命令查看各个目录的磁盘占用情况,把各个目录文件的大小相加,发现并没有占满磁盘,有10多G空间莫…
B+树 —— 数据库的灵魂
虽然 Nosql 风生水起,关系型数据库在当前的开发中仍然扮演着不可或缺的角色。因此在面试中也会被时常问到,很多问题即使是工作多年的同学仍然会磨棱两可,例如: 很多人把原因归结于没有认真准备。靠记忆死记硬背终归落了下乘,归根结底还是没有把握住本质。Mysql的本质是什么?当然是…
数据库常识课
1TB:如果数据库会膨胀到 TB 级别,需要考虑 MySQL 分库分库。 每秒 1000 次写入:单节点写入速率超过每秒 1000 次。可以考虑根据业务场景引入 Redis 或消息队列作为写缓冲,实现数据库写操作异步化 数据库的单机QPS不过几千,显然满足不了互联网业务场景下对…
如何设计资源标识符?
一般的应用中,通常使用资源唯一 ID 标识资源。ID 生成一般依赖数据库递增,或者 分布式ID生成服务。但在大型系统中,一般有很多资源,在使用资源ID标识资源时,通常需要使用特定于资源的元组来标识资源,例如:<群ID、消息ID> 或<公众号ID,消息ID,文…
如何持续、正确、安全的发布?
在一个水平不一、每周例行发布的项目团队,从频繁故障,到故障基本清零——我们如何做到?秘密武器就是:发布清单。 发布清单为什么可以,先通过一个例子了解一下背后的依据,它就是电影《中国机长》。《中国机长》改编自川航3U8633事件,在执飞重庆到拉萨的过程中,突然出现了副驾驶前挡风玻…
如何设计 RPC 接口
如果说之前清晰知道如何 设计HTTP API 就可以了,那么随着微服务走热,服务越来越多,每个服务都要对外暴漏接口,对如何设计RPC接口有个清晰的认识,变得比以前任何时候都重要。 三者就像追命绳索,一环套一环,环环相扣,最终将服务带入墓地。 字段的维度,允许接口操作表的部分字段…
你不了解的软件开发过程
中国 IT 从业人员中对软件研发过程有系统认识的少之又少,甚至在工作中遇到的科班出身的研发同学同样不例外。相反,大家对于追求热点概念(例如:DDD,领域驱动设计)倒是不遗余力,满怀热情。 软件开发刚开始的时候,并没有很好的经验或思想来指导项目研发。从研发的各种名词中可以看出来,…
如何代码命名
There are only two hard things in Computer Science: cache invalidation and naming things. —— Phil Karlton 开发人员习惯性的对设计、架构、微服务夸夸其谈,却很少关注设计、架构…
高并发系统设计(3)——缓存一致性
毋庸置疑,数据只要有多个副本(replica/copy),就一定会存在一致性的问题。数据多副本一般有以下作用: 容错手段:当某一个副本出现故障时,可以从其他副本读取数据,确保容错并避免单点问题。 分担负荷:由于数据存在多个副本,每个副本都可以承担一部分查询请求。 通常,对副本的…
高并发系统设计(2)——缓存命中率
前者因为不涉及技术问题,不再详谈。后者,却是至关重要。 缓存命中(Cache Hit),符合我们预期,喜闻乐见;缓存未命中(Cache Miss),就很有可能要了老命。各种称谓也很繁杂 模哈希路由的主要缺点是缓存节点的数量需要保持稳定,增加节点或者节点下线将导致大多数缓存散列到…
深入浅出 Prometheus
对很多人来说,未知、不确定、不在掌控的东西,会有潜意识的逃避。当我第一次接触 Prometheus 的时候也有类似的感觉。对初学者来说, Prometheus 包含的概念太多了,门槛也太高了。 马云说:“虽然阿里巴巴是全球最大的零售平台,但阿里不是零售公司,是一家数据公司”。P…
高并发系统设计(1)——分级存储
原本想聊下缓存的相关技术,但是纯聊缓存未免眼界太窄,视野太小,既然打算写一个系列,不如就先从底层聊起,然后慢慢铺开。本篇先聊分级存储引入的问题,以及对服务和架构的影响:服务分类、分层架构(服务分层)。 用户期望提供尽可能高的存取速度和尽量大的存储容量,但价格尽可能低。矛盾的现实…
深度探索 Go 对象模型
了解一门语言的高级特性,仅仅从浮于表面,是无法把握住语言的精髓的。学习过 C++ 的高阶开发者,一定读过神书《Inside The C++ Object Model》,本文的目标是一样的:通过对象模型,掌握 Go 语言的底层机制,从更深层次解释语言特性。 众所周知,Go 源码并…
下一页