最难不过二叉树

Recent Posts

根管治疗全纪录
今天终于完成了整套的根管治疗,从牙齿剧烈疼痛到根管治疗到最后带上牙冠,一共历经2个月,一共跑了7次医院。算是一场刻苦铭心的经历了,所以写下这篇文章记录下这段过程。 故事源于一颗疼痛的蛀牙 10月的某一天我的左边牙齿开始剧烈疼痛,疼痛的剧烈让我根本无法工作,原本我还以为只是普通的智齿发炎,所以自己美团...
2024-12-03
Read More
大型项目管理经验分享
最近在看《SRE Google运维解密》这本书,里面谈到了很多谷歌项目中的软件项目管理的经验和方法论,这些理论在我经历过的项目基本都有过具体实践,因此这本书阅读起来有种相见恨晚的感觉。本文会结合我在QQ音乐、全民K歌、梦幻端游这些大型成熟项目工作中积累的一些实际案例和经验,对比着《SRE Googl...
2024-11-27
Read More
HTTPS下的安全传输
在软件架构设计中,系统安全是一个很大且很重要的话题。我们聊到的架构安全,至少包含以下问题的解决方案: 认证:系统如何正确分辨操作用户的真实身份? 授权:系统如何控制用户能进行哪些操作? 凭证:系统如何保证它和用户之间的承诺是准确的、完整且不可抵赖的? 保密:系统如何保证内部敏感数据无法被窃取和滥用?...
2024-10-17
Read More
Rancher异常排查和解决(cattle-cluster-agent内存泄漏)
现象 近期部署新服务时,经常导致一些节点因为内存爆炸直接挂掉,导致很多部署在该节点的Pod重启,影响较大,而且近期频繁出现。当前rancher版本为v2.7.3。 排查 我们通过Prometheus排查相关node,pod的资源使用情况,首先排除了导致node挂掉的不是我们新部署的服务,因为新部署的...
2024-09-29
Read More
服务容错策略
容错性设计是架构设计中的一个核心原则,在微服务框架下,调用链路复杂导致,一旦某一个服务崩溃了,导致所有使用到这个服务的其他服务都会无法正常工作,一个点的错误经过层层传递,最终会波及调用链上的与此相关的所有服务。因此,服务容错性设计在架构设计中就显得十分重要了。 容错策略 常见的容错策略有以下几种: ...
2024-09-05
Read More
跨域问题
跨域问题在Web开发过程中很常见,如果浏览器没有同源策略来约束跨域请求,那么整个web安全将得不到保证。本文从跨域请求的安全性分析、浏览器同源策略、CORS处理跨域问题三个方面来谈谈web开发中的跨域问题。 跨域是什么 需要明确一点,跨域问题针对浏览器的,这是浏览器施加的安全限制。浏览器由于同源策略...
2024-08-14
Read More
身份认证技术之2FA、TOTP、WebAuthn
大家有时候会混淆认证和授权两者的在系统的里的作用,他们的职责是这样的:认证(Authencitation)解决了系统回答用户“你是谁”的问题,而授权(Authorization)回答了用户“你能干什么”的问题。“用户登录”这个最基本的操作就是一个身份认证的问题,通过系统认证之后,用户对系统发起的请求...
2024-08-09
Read More
基于全球加速GA的跨境业务加速方案
我们国内的产品需要分销到海外,因此有不少位于美国的用户会访问使用我们的接口。经过测试,美国用户请求我们的接口(我们的服务器部署在国内)会有高达3秒的延时,这对于产品的使用来说完全不能接受。为了解决这个问题,我们提出了两个方案来解决: 使用AWS在美国重新搭建一套服务器集群,美国的用户的请求都会请求到...
2024-08-01
Read More
接口幂等性和ABA问题
考虑以下这个真实场景:用户在浏览器页面点击“提交订单”按钮,浏览器向订单系统发送一条创建订单的请求,订单系统收到请求后向数据库插入一条新订单信息,此时订单创建成功。假设用户在点击“提交订单”时不小心点击了几次,结果是会创建多个订单吗?那必然不会。其实即使用户没有多次点击提交订单,接口重复调用的情况还...
2024-07-18
Read More
数据库使用经验之谈
数据库在业务系统中处于核心地位,如何使用好数据库是一位架构师必须掌握的技能。但是数据库在不同场景下有不同的用法,另外数据库在不断地升级版本,不同版本下的数据库也有不同的玩法,因此“如何在业务系统中用好数据库”本身就是一个极容易撕逼的话题,每个人都在自己的业务场景中有自己使用数据库的心得经验。本文总结...
2024-07-10
Read More
从安全角度下看用户密码管理
用户密码是一个烫手的山芋,如何处理这个东西确实很费脑筋。当用户在你的产品注册时,他的密码你就有责任保护好,但是,用户每次登录时都会用到密码,此时密码这个危险的东西就会在客户端、网络、服务器三方之间流动,我们怎么能保证密码在频繁的传递中不会被泄露呢? 我们在设计用户注册登录系统时,有几个基本共识是要有...
2024-06-15
Read More
fftw非线程安全的一些解决思路
实际工程中要用到快速傅里叶变换fft,我们一般会使用知名的fft库FFTW,因为FFTW在计算性能和稳定性上都有很大的优势,以下是fft库的benchmark: 从性能测试的结果来看,fftw3这个库性能非常好,遥遥领先其他fft库,所以也是最受欢迎的fft库。但是fftw有个很致命的缺点:非线程安...
2024-05-08
Read More
异构计算中的流水线调度
我们理解一下使用流水线调度比不用流水线调度能高多少效率。 在计算机结构体系上,如果我们的计算任务都是用CPU进行计算,那么怎么样的效率最高?让每个CPU都专门做好自己那块计算就好,减少CPU切换,直接做好一件事再做一件事。假如一个任务包含三个子任务(预处理、计算、后处理),要高效地完成一次任务,那么...
2024-02-03
Read More
查证主键设置UUID导致insert慢的问题
我们这边有个登录接口,在压测下表现不是很好,压测结果有时高有时低。听压测的同事反馈,有个奇怪的现象:偶尔慢一会,然后过一会又会上去,压测的结果就好像画门一样,高一段,然后低一段,最高可以去到300/s,最低去到100/s。 基于这个现象,开始排查具体的卡顿点,大概率猜测是数据库相关操作导致了这个登录...
2024-01-30
Read More
大文件分块上传和断点续传
方案介绍 分块上传流程讲解: 客户端根据文件大下判断是否需要切片,建议是大于1M的文件,都可以走切片上传。 假设文件大小是180MB,那么前端将文件切为180MB/1MB=180个切片,并对这些切片进行编号,0-179。 调用上传预准备接口,带上参数:完整文件的md5。 服务器根据md5查询文件数据...
2023-12-06
Read More
缓存一致性的探讨
缓存一致性是分布式系统中一个常见的问题,根据业务场景的不同,我们针对这个问题会有不同的技术方案。缓存一致性问题指的是数据库(MySQL或者Mongodb等)和分布式缓存(Redis)的数据一致问题,在互联网后台中,Redis作为缓存组件会存储DB的数据,我们的服务请求数据时首先从Redis上取,如果...
2023-07-26
Read More
API性能测试指标以及压测方式
当我们开发完server的api后,我们需要对这些api做性能测试,通过压测来了解我们的server所能承载的最大请求量,以及通过压测结果分析出性能瓶颈,来对我们的API做进一步的性能优化。 本文首先介绍API性能测试的指标,然后使用ab这个压测工具分析Python Flask server和Go ...
2023-02-01
Read More
游戏排行榜设计思路
游戏开发中的很多活动都需要用到排行榜,用来对玩家活动参与度进行分数排名,以激发玩家的游戏积极性。从技术角度而言,我们可以根据排行榜的类型来选择不同技术方案来进行排行榜设计。 数据库直接排序 可能有人惊讶用数据库直接做排行榜?说实话,工业场景中,用数据库直接做排行榜的还真不少。举个例子,我们有个活动是...
2022-10-13
Read More
邮件消息服务技术细节
组件选型 ● 主从版redis 4.0+,保存全服邮件,理论上不需要太大 ● mongodb 3.6+,保存所有邮件信息,需要大一些 redis redis保存两类数据: 某group的当前邮件index group邮件的详细信息。 group邮件index是一个自增int,每次发送一个group邮...
2022-07-27
Read More
MySQL的日志
redoLog 是属于InnoDB引擎所特有的日志,而MySQL Server也有自己的日志,我们一般称为binlog。而undolog用于事务回滚以及实现MVCC。这篇文章主要介绍这三者在Mysql中起到的作用以及其设计的意义。 redolog(重做日志) redolog是InnoDB引擎实现的日...
2022-03-02
Read More
OOM Killer机制分析
近日上班工作群有人说,隔壁游戏组突然一连挂了好几台服务器,很突然暂时没分析出宕机的原因。确实很诡异,因为服务器接连挂掉的情况并不常见。我们组一下子也紧张起来,因为我们两个组用的是同一个游戏服务器引擎,隔壁出事了,也预示着我们也有类似的风险。不过没多久,隔壁组宕机的原因定位到了,有位开发在执行扫档脚本...
2021-06-28
Read More
网络性能优化策略
Linux网络性能优化实际优化的是Linux内核或者系统调用的几个参数,我们可以从应用程序、套接字、传输层、网络层以及链路层等几个角度,分别来看网络性能优化的基本思路。 网络性能指标 带宽:带宽,表示链路的最大传输速率,单位通常为 b/s (比特/秒)。 吞吐量:表示单位时间内成功传输的数据量,单位...
2021-06-25
Read More
系统的惰性分配和overcommit
Linux下的内存管理其实都绕不开文章题目的4个词语:缺页、swap、惰性分配和overcommit,而操作系统的内存管理的难点在于: 物理内存不够该怎么做? 内存分配怎么才能做到高效? 本文想谈的是,内存不足时Linux操作系统是怎么高效分配内存资源的。 Linux 内核给每个进程都提供了一个独立...
2021-05-22
Read More