1. 2.3 如何设计一个RPC框架historical

    1. 什么是RPC - 远程过程调用 - 是一个计算机通信协议 - 这种协议使得client可以像调用本地函数一样去调用server上的函数,即屏蔽了网络通讯的细节 - 采用C/S模式,经典实现是request-response 1.1. 本地函数调用 vs RPC - 本地函数调用:不需要经过网络

  2. 2.4 如何设计一个限流系统historical

    1. 什么是限流 - 高并发系统的三大利器之一,限制访问速率(区别于Semaphore限制的是访问数量) - 技术层面的限流:服务A调用服务B,服务B为了防止请求量过大,限制访问速率 - 业务层面的限流:限制某人每天只能使用n次 2. 为什么需要限流 - 后端服务的处理能力是有限的,如果突发流量暴增

  3. 2.5 如何设计开放API接口historical

    1. 什么是开放接口 一般的API只对内部系统开放 而开放API则是对外部系统开放,其他系统或者软件可以调用这个API获取本系统的数据 2. 如何设计开放接口 2.1. 安全问题 对于开放接口,主要面临3个安全问题: - 请求身份是否可信任--认证 - 请求的参数是否被篡改--签名 - 请求是否唯一

  4. 2.6 如何设计超时与重试系统historical

    1. 超时重试是什么 - 超时:服务A调用服务B,为了防止服务A请求服务B但是一直没有响应,导致服务A的线程等资源一直hold着无法释放,因此需要设置超时 - 重试:服务A调用服务B,如果服务A请求服务B发生了网络错误,那么会触发超时,但是这个网络是暂时的,因此重试几次可能就好了 2. 怎么设计超时

  5. 2.7 如何设计错误系统historical

    1. 什么是错误 程序运行过程中发生的异常问题 2. 错误分类 按照严重程度可以分为两类:严重与普通 严重的应该终止程序。比如程序启动时初始化资源失败等情况 普通的是情况而定 3. 错误构建 创建一个错误需要带上详细信息,如下 3.1. 错误码 - 0:成功 - 1:未知异常 - 4xxxxx:客户

  6. 2.8 如何设计池化技术historical

    1. 什么是池化技术 预先创建对象并存放到池子里,使用的时候从池子中获取对象而不是创建,使用结束把对象归还给池子而不是销毁 2. 为什么需要池化技术 - 频繁创建、销毁对象开销大 - 对象占用资源多,需要限制对象的数量否则会把资源耗尽 3. 池化技术的缺点 池化技术属于利用空间换时间,所以会消耗内存

  7. 2.9 如何设计缓存系统historical

    1. 什么是缓存 CPU和磁盘的速度差异巨大,一般会根据局部性原理把常用的数据加载到内存中,以提高访问速度 2. 为什么需要缓存 - 提高性能 - 降低下游负载 3. 缓存的缺点 3.1. 缓存一致性 - CAP原则下延迟导致的一致性是没办法解决的,只能保证最终一致性 - 如果是read-throu