DongYuanxin's Blog

TypeScript 实现 @required 参数装饰器

参数装饰器作用 可以借助参数装饰器,提前记录参数的某些信息。 实现思路 首先,参数装饰器单独声明是没用的。需要在其定义中,设定某个参数的要求(元信息metadata),例如此参数不能为空、必须为某个类型。 然后借助函数装饰器改写函数运行逻辑,这里可以根据参数装饰器保存的对参数的要求,在函数运行前一个个校验。 总结来说,参数装饰器记录参数元信息,函数装饰器读取元信息并且进行校验。 ...

消息队列应用场景、类型以及实战案例

应用场景 异步处理:将同步变成异步,提高主流程相应速度 系统解耦:各个系统通过 MQ 进行通信 数据同步:MQ 可以保证数据修改的有序性 流量削峰:系统瓶颈通常在 DB 上,可以考虑将数据写入 MQ 和 Cache,等流量过去,Worker 将数据刷到 DB 中 常见队列类型 缓冲队列:实现批量处理、异步处理和平滑处理。例如写日志,不用每次都写入磁盘,可以 10 次...

一句话聊聊「降级」设计

集中管理降级开关 通过推送/拉取机制,将开关同步到各个应用(比如 1 次/s)。 这种需要借助「配置中心」。 读降级 不调用 api,只读本地/分布式缓存,没有数据返回默认数据。 这种需要借助LRU Cache、Redis Cache。 写降级 写场景大多数不能降级。一般解决方法是将同步改成异步,并且将数据写入到 redis,redis 可以给读请求提供数据;由异步任务定时将数...

Web开发的回滚机制总结

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

面向资源和服务的「隔离」设计

隔离的作用 隔离是指将系统或资源分割开,是为了在系统发生故障时,能限定传播范围和影响范围,即发生故障后不会出现滚雪球效应,从而保证只有出问题的服务不可用,其他服务还是可用的。 常见隔离手段 1、进程/线程隔离:nodejs 没有多线程,所以考虑进程隔离。可以通过 pm2(进程管理器)来启动多个进程,从而提高可用性。 2、服务分组+集群隔离:某个服务单独部署集群,防止故障相互影响。某个...

认识元编程、控制反转(IoC)以及依赖注入(DI)

元编程 定义 狭义来说,应该是指「编写能改变语言语法特性或者运行时特性的程序」。换言之,一种语言本来做不到的事情,通过你编程来修改它,使得它可以做到了,这就是元编程。 在 ES6 中的体现 从这个角度来看,Proxy、Reflect是js的元编程。并且装饰器中,为类方法的参数设置要求(类型、是否必须)等都是元编程,因为js本身或者ts本身(只能声明类型、不能校验或者转化)都做不到,通...