• java面试题整理《微服务篇》四


    如何设计一套API接口


    考虑到API接口的分类可以将API接口分为开发API接口和内网API接口,内网API接口用于局域网,为内部服务器提供服务。开放API接口用于对外部合作单位提供接口调用,需要遵循Oauth2.0权限认证协议。同时还需要考虑安全性、幂等性等问题。

    如何实现接口的幂等性:

    唯—id:每次操作,都根据操作和内容生成唯一的id,在执行之前先判断id是否存在,如果不存在则执行后续操作,并且保存到数据库或者 redis等。


    服务端提供发送 token的接口,业务调用接口前先获取token,然后调用业务接口请求时,把 token携带过去,务器判断token是否存在 redis中,存在表示第一次请求,可以继续执行业务,执行业务完成后,最后需要把redis中的 token删除。


    建去重表:将业务中有唯一标识的字段保存到去重表,如果表中存在,则表示已经处理过了


    版本控制:增加版本号,当版本号符合时,才能更新数据


    状态控制:例如订单有状态已支付,未支付,支付中支付失败,当处于未支付的时候才分许修改为为支付中等


    秒杀系统如何设计?


    基于SpringCloud构建秒杀抢购活动,如何才能支持百万级级别以上访问 ?

    设计原则:前台请求尽量少,后台数据尽量少,调用链路尽量短,尽量不要有单点

    秒杀系统解决方案:

    nginx:校验恶意请求,转发请求,负载均衡;


    网关:安全过滤(拦截恶意请求)、幂等、高并发、限流、用户频率设计


    业务层:分布式集群,多台机器处理,提高并发能力


    Hystrix:对秒杀接口实现服务隔离防止雪崩效应


    Ribbon:负载均衡,优化资源使用,防止资源的过载


    前端:页面资源静态化,按钮控制,使用答题校验码可以防止秒杀器的干扰,让更多用户有机会抢到


    redis:实现分布式锁对用户频率限制,集群搭建保证高可用,持久化数据;缓存热点数据(库存);


    MQ:异步形式,实现对商品的库存修改,削峰限流,MQ堆积订单,保护订单处理层的负载,
    数据库:读写分离,拆分事务提高并发度,使用乐观锁机制(版本号)+库存>0判断防止库存超卖问题
     

  • 相关阅读:
    ShareMouse for Mac(多台电脑鼠标键盘共享软件)
    【0基础入门Python】你不得不看的Python学习方法
    数据结构与算法 —— DFS的定义与原理
    Kubernetes:kube-apiserver 之启动流程(二)
    峰会实录 | StarRocks PMC Chair 赵纯:数据分析的极速统一3.0 时代
    技术开发人员常用的安全浏览器
    Linux--vim
    5个基于.Net Core值得推荐的CMS开源项目
    商家入驻商城 多商户商城 宝塔安装搭建教程 说明 小程序、h5、pc端
    [Linux]记录plasma-wayland下无法找到HDMI接口显示器的问题解决方案
  • 原文地址:https://blog.csdn.net/hutubiancheng/article/details/125562946