摘要:相关内容 通知模板、用户信息、通知设置、设备信息。 推送的类型 推送的类型,比如:通知、邮件、短信等 推送通知的服务商 极光推送(JPush) 推送流程 后端服务 --> 第三方推送服务(极光) > app 通知模板 需要制定一个通知模板,发送给用户的通知,是什么格式的,包括 唯一key、标题、
阅读全文
摘要:存储 一般用 mysql。数据量达到两千万以上的考虑分库分表。 高并发场景,考虑加入缓存。 缓存 使用缓存时,要注意: https://blog.csdn.net/sinat_32502451/article/details/139545057 逻辑执行失败,如何处理? 补偿 当业务逻辑执行失败时,
阅读全文
摘要:近期,收到线上告警,某个接口在中午12点时,突然超时了。 Skywalking/ Arthas 查看接口的耗时 Skywalking/ Arthas 都可以查看接口内各个方法的耗时。 一般情况下,查看到耗时的方法, 看下sql 语句,查看执行计划EXPLAIN ,有没有加索引,有没有慢sql。 看下
阅读全文
摘要:接口异步回调 有些接口,内部逻辑非常复杂,非常耗时。 可以通过接口异步回调来实现,避免超时。 比如 , 系统A 的 A1接口调用 系统B 的 B1接口, 系统B在完成功能后,系统B 回调系统A 的 另一个接口 A2。 小心第三方系统不回调 一定要做主动查询 。如果第三方系统不回调,也能通过主动查询,
阅读全文
摘要:系统稳定性 系统稳定性,包括:监控、 告警、性能优化、慢sql、耗时接口等。 系统的稳定性的治理,可以围绕这几方面展开。 监控 Prometheus 监控并收集数据。监控 qps,tps, rt , cpu使用率,cpu load,gc次数 。。 Grafana从数据源(如Prometheus )
阅读全文
摘要:使用场景 限流是高并发的处理方法之一。 高并发处理方案: 缓存:缓存的目的是提升系统访问速度和增大系统处理容量。 降级:降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高峰或者问题解决后再打开。 限流:限流的目的是通过对并发访问/请求进行限速,或者对一个时间窗口内的请求进行限速来保护系统
阅读全文
摘要:系统之间的一致性问题 -- 支付成功显示未支付: 接入第三方系统的支付接口,支付成功后,却显示未支付。 支付成功显示未支付,有些用户会重复支付,有些用户会取消订单,后果非常严重。 问题分析: 先查看第三方系统的支付状态。 如果第三方系统的支付状态也是未支付,那么说明第三方系统的状态有问题。 如果第三
阅读全文
摘要:app跳转小程序二次登录: app跳转小程序,第一种做法是 点击 app 页面 --> 跳转到对应小程序的路径 --> 登录小程序 --> 使用功能。 这种做法,在 app跳转小程序后,需要二次登录,用户体验不是很好。 app跳转小程序免登录: (1) 点击 app 页面 (2) 跳转到中间页(可以
阅读全文
摘要:关于增删改查的 接口设计,比较简单,有一些固定的做法可以使用。 查询列表 查询列表的接口,带上分页的入参: pageNo,pageSize,非必选,并设置默认值。 入参为 dto,根据 dto 从数据库查出实体对象 entity 后,转换为展示层 vo。 entity 对象转换为 vo,可以用 Be
阅读全文
摘要:提高系统可用性常用的一些方法,有缓存、异步、重试、幂等、补偿、熔断、降级、限流。 缓存 缓存的速度,比数据库快很多,添加缓存是简单有效的做法。 注意缓存与数据库的一致性,数据表记录变更时记得处理缓存。 Redis缓存的示例,详情见:https://blog.csdn.net/sinat_325024
阅读全文
摘要:接口设计 接口要注意拓展性,设计得灵活一些,应对业务的变化。 字段尽量不要耦合在一起。 接口尽量通用。能调用一次完成的,不用调用两次。网络IO是很慢的。 接口的字段,尽量少一些,字段越多,越混乱,越难联调。 能批量处理,尽量批量处理。 如果不存在依赖关系,能异步处理,尽量异步处理。 状态变量,尽量不
阅读全文
摘要:应用场景 在项目开发中,有时会遇到一些审批流程的需求,流程大同小异,可以根据需求进行设计开发。 表结构示例 CREATE TABLE `tt_audit` ( `id` int(10) NOT NULL COMMENT '流水号', `submit_date` date NOT NULL COMME
阅读全文
摘要:导入 导入在系统中属于比较常见的功能。 新增数据时,每次只新增一条数据,会比较慢。 可以通过导入excel文件,进行批量导入。 导入的主要流程 (1)用户点击下载excel导入模板 (2)用户填写模板数据后,点击上传文件,选中文件进行上传 (3)解析导入文件 (4)校验字段,并给出提示 数据全部校验
阅读全文
摘要:系统设计 面试题 高可用、高并发、高性能。 可用性、一致性。 分布式、高并发场景 遇到高并发场景,可以使用Redis缓存、Redis限流、MQ异步、MQ削峰等。 Q:在实践中,遇到过哪些并发的业务场景? 秒杀。比如抢商品,抢红包。 秒杀 Q:如何设计一个秒杀/抢券系统? 可以通过队列配合异步处理实现
阅读全文
摘要:java快速熟悉新项目 首先要会用整个系统。亲自用几遍,才能了解业务。 理解项目的架构,多看架构图。 哪些是底层服务?哪些是中间层?哪些是服务提供者,哪些服务消费者? 可以看一下哪些项目调用了哪些服务?比如Rpc包的服务有哪些。 多观察上层服务调用了哪些底层的服务。 可以画流程图,搞清楚业务流程,以
阅读全文
摘要:支付功能设计 主要包括:订单表,订单日志表,订单队列,定时任务。 主要考虑:事务性、幂等性、安全性。 表结构设计 订单表: 订单表,最主要的就是订单号、支付状态。 CREATE TABLE `t_order` ( `fid` int(11) NOT NULL AUTO_INCREMENT COMME
阅读全文