spring-cloud的灰度发布设计(2)

SpringCloud的调用链 SpringCloud微服务中之间的调用通常使用Feign方式和RestTemplate方式(较少使用)。 如果需要指定服务之间的调用, 首先要给各个服务添加唯一标识, 使用一些特殊的标记, 如版本号flag或者version等; 其次,要干预微服务中Ribbon的默认轮询调用机制, 我们需要根据微服务的版本等不同, 来进行调用。 最后, 在服务之间, 需要传递调用 … 继续阅读

spring-cloud的灰度发布设计(1)

灰度发布 也叫金丝雀发布。 灰度发布和全量发布,也是是一种局部与整体的关系,灰度发布的目的是先小范围试验,然后经过一定的时间窗口之后再全量发布的发布方式。在一些敏感的服务,不适合全量发布,灰度发布是一种风险控制的策略。 灰度期:灰度发布开始到结束期间的这一段时间,称为灰度期。 粒度 接口粒度 以服务实例为级别的粒度 以多个服务实例组成的组为级别的粒度 原理 目前主要关注以服务实例为级别的粒度的实现 … 继续阅读

API接口设计(3):全局规范汇总

最佳实践 汇总API接口设计的一些常见的最佳实践 安全与升级 1.版本管理 无论是小程序,还是app,还是Web网站,都需要版本升级,而提前设计好版本,可以避免因为升级导致旧的服务无法正常工作。 需要要保证在升级的时候,新旧版本的服务都能正常提供服务。 2.授权认证 大部分接口都是需要授权认证的,因此要对接口的授权认证进行判断,这样可以过滤掉大部分的非法访问。 可以通过token校验实现 3.签名 … 继续阅读

API接口设计(2):全局异常处理

背景 接口异常返回信息,属于API接口规范的一部分。如何更高效的处理好异常信息,对于定位和排查问题问题,很有帮助。 全局异常处理原理 SpringBoot中有一个@ControllerAdvice的注解,使用该注解表示开启了全局异常的捕获,只需在自定义一个方法使用ExceptionHandler注解,然后定义捕获异常的类型即可对这些捕获的异常进行统一的处理。 这一部分可以做成一个公共组件,其他项目 … 继续阅读

API接口设计(1):统一返回数据格式

1.背景 现在的项目绝大部分都采用微服务框架,并采用前后端分离的开发模式,这对前后端的数据通信,提出了要求。 后端返回给前端的数据类型可能会是:基本数据类型、String字符串、对象、数组、或者异常提示等。前端拿到后端返回的数据去展示或者给出错误提示,但前端不可能对每个接口都把这些异常提示处理一遍,比如说返回没有登录、或者一些业务异常、或者其他服务内部异常等。 这属于前后端分离的接口约定和规范问题 … 继续阅读

一个系统设计:给所有当天生日的用户发一封生日邮件

问题描述 以前曾经思考过类似的问题,比如腾讯公司,每逢生日,都会给用户发一封邮件。按QQ的用户规模,假设全国每人一个QQ,那么用户表有14亿条。如何给当天生日的人发送祝福邮件?这问题其实挺有意思的,很多可以思考和优化的点,于是我也想了一个初步方案。 一个系统设 系统总人数为Total。 假设,用户用户生日是分布均匀的,也就是说,每天的生日人数=1/365 * Total = 1/365 * 14亿 … 继续阅读