全部文章all(329)
    简洁模式
21

隔离设计

## 为什么要隔离?隔离是指将系统或资源分割开,是为了在系统发生故障时,能限定传播范围和影响范围,**即发生故障后不会出现滚雪球效应,从而保证只有出问题的服务不可用,其他服务还是可用的**。## 常见隔离手段1、进程/线程隔离:nodejs 没有多线程,所以考虑进程隔离。可以通过 pm2(进程管理器)来启动多.....

2020-10-22
22

超时重试

## 为什么需要超时重试?如果不设置超时,则会导致请求响应满,积累导致应用雪崩。对于重试来说,是否重试、重试次数以及超时时间,都很重要:- 是否重试:读请求适合重试,写请求不适合- 重试次数:一般是 1 次,多了就相当于是 DDos- 超时时间:内网一般是 2s## nodejs 相关开发经验在开发 node.....

2020-10-22
23

回滚机制

## 静态资源版本回滚前端经常面临这个问题。在前后端分离的趋势下,前端通常将项目打包,并且将文件放到 CDN 上。一般来说,静态资源的发布都是“存量发布”。比如腾讯云控制台,是通过 hash 值来控制版本,每次发版时,都是不会改动之前的版本的文件。当有问题出现,可以快速加载原版本文件,来进行回滚。同时,has.....

2020-10-22
24

Typescript-高级数据类型

## Dictionary 和 NumericDictionaryDictionary:一个对象,键是 string 类型。NumericDictionary:一个对象,键是 number 类型。注意:要手动实现下,通过「索引签名」+「范型」。定义:```typescriptinterface Diction.....

2020-10-20
25

Typescript-高级操作符

## const 断言特点:- 字面量(数组、接口)类型变为 readonly- 字面量类型不能被扩展举例:不使用 const 断言:```typescriptconst CONFIG_KEYS = ["name", "school", "country"];type KEY_TYPES = typeof C.....

2020-10-20
26

设计模式手册之Mixin模式

## 什么是 Mixin 模式?在 OOP 中,Mixin 是一个类。包含其他类的方法,并且不是通过继承的方式来实现的。我一般理解成“混合”,在 js 中,其实就是`Object.assign(obj1, obj2)`,将 obj2 原型上的方法引用复制到 obj1 的原型的同名方法中。## 策略模式优缺点避.....

2020-10-19
27

限流算法-令牌桶算法

## 漏桶算法的不足当突发流量来袭的时候,由于漏桶算法的流速是固定的,所以超过日常流量的那部分流量,是不会被放过的。相对来说,令牌桶算法就可以应对这种“突发流量”。## 变量描述C:桶的总容量r:令牌放入的速度上个请求:a上个请求的时间:atw:桶里剩余的令牌(token)数## 算法实现消耗令牌的逻辑:``.....

2020-10-18
28

二维码生成服务

## 前端动态生成利用`qrcode.js`就可以在前端动态生成二维码。好处:所有二维码动态生成,不用存储静态文件。不足:- 在不对链接做处理的情况下,如果链接很长,二维码信息多,会造成生成的二维码图片“密密麻麻”,在远距离/弱光环境下无法扫- 因为不是二维码图片,所以只能截图分享,操作成本高## 前端动态生.....

2020-10-18
29

CPU核心绑定

## 背景Linux 有一套 CPU 调度策略。多个进程同时处于内存,当一个进程 wait,os 会拿走 cpu 使用权先给其它进程使用。对于多核系统,不做特殊设置,程序进程是不会和某个 cpu 关联,而是服从 os 调配。这就造成了一个问题,来回切换 cpu,会产生大量上下文切换,影响性能。## tasks.....

2020-10-17
30

tmpfs内存文件系统

## 什么是 tmpfs?是 Linux 提供的虚拟内存文件系统,可以用于高性能 I/O。:::warning 注意它不是永久的,只是暂时存放。重启 os,tmpfs 中的文件会消失(和内存类似)。:::在 linux 下,它默认最大为内存的一半大小,使用`df -h`命令可以看到,且大小不是固定的,。**它.....

2020-10-17