Run-dream Blog

Try Catch Finally

如何基于 Redis 实现一个延迟队列

需求背景 Kafka RoundRobin 不保证消息全局顺序一致性 而业务依赖特定顺序。 同时业务上也要求延迟处理。(这个可以在返回数据时控制) 引入 延迟队列来解决这个问题, 就是说在收到结束消息的一段时间后, 再来处理聚合的任务。 kafka实现延迟队列 实现方式 采用 bull 来实现延迟队列。 代码如下: bull.ts import Bull = require("b...

如何同时使用 gitlab 和 github 的 ssh 认证

背景 公司内部使用 gitlab, 自己平时使用 github,有时候想用 github 做一些笔记。两个系统的账号不一致。 方案 在 ~/.ssh/ 目录下添加 config 文件: Host github.com HostName github.com User xxx IdentityFile ~/.ssh/github_id_rsa Host company HostNam...

每天一个 Node 包之 消息队列 `bull`

bull 是什么 定义 官方文档BullMQ 中的定义: BullMQ 是一个 Node.js 库,基于 Redis 实现了一套快速且鲁班的队列系统,有助于解决很多现代的微服务架构的问题。 这个库为实现以下目标而设计: 有且仅有一次(Exactly once)的队列语义, 也就是尝试有且一次的传递每条消息,但在最坏的场景下至少被传递一次。 易于水平伸...

OpenApi 和 swagger

什么是 OpenAPI? 定义 从官网上看,openapi 的定义是 The OpenAPI Specification (OAS) defines a standard, programming language-agnostic interface description for HTTP APIs, which allows both humans and computer...

从1到k推广股票交易问题

背景 LeetCode 上有一系列的 股票交易 的问题, 列举如下: 一次交易 (Easy) 无数次交易 (Easy) 两次交易 (Hard) K次交易 (Hard) 是用来学习动态规划的很好的案例。 分析和实现 一次交易 很容易想到一次买,一次卖。要求的结果,就是在第i天买入的最大收益,也就是要找到第i天以后的最高价位。 自然可以想到暴力求解,对于每天都去...

解决 git push 403 的问题

背景 早上 git push 代码的时候发现推送失败, 错误信息如下: remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. remote: Please see https://github.blog/20...

kubenetes 入门

kubenetes 是什么 官网定义: Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化。 抓去关键信息: 容器化,声明式配置,自动化 背景和解决的问题 为什么会有这个东西,就要从部署方式的变更说起: 物理机部署 缺点: 无法为物理服务器中的应用程序定义资源边...

熔断器hystrix

背景 过载 在分布式系统中,某个服务可能因为流量过多,导致请求处理不过来,最后服务崩溃,甚至引起依赖它的服务也一直等不到返回,导致连锁反应一起崩溃,这种情况被称为雪崩。 限流 很容易就想到需要对单个服务进行限流,常见的限流方式有 令牌桶算法 / 漏桶算法 优点是实现简单,缺点是难以设置合理的限流阈值。 自适应限流 根据服务器的...

数据库秒级平滑扩容架构

参考文档 数据库秒级平滑扩容架构方案

重新理解docker

定义 从目的上来说,容器其实是一种沙盒技术。容器的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。 从操作系统的角度来说,Docker实例,就是一个特殊的被限制和隔离的进程。而Docker引擎,则是用来创建和管理Docker实例的进程。 实现 glibc 提供了 clone 的方法来新建进程, 函数声明为: int clone(int (*fn)(vo...