根据nginx的access_log分析接口请求

access_log:指的是访问日志,我们通过访问日志可以获取用户的 IP、请求处理的时间、接口响应状态、浏览器信息等

查看nginx日志存放地址:find / -name nginx.conf

报错-503 service temporarily unavailable

  1. 接口请求数量过多,服务器造成阻塞

    • 查看方法:查看 nginx access_log 『要注是否取了别名』
    • 解决方案:重新启动 Web 服务器是恢复和更新网站的最有效方法。如果托管在多台服务器上,请重新启动所有服务器。
  2. 检查Web服务器是否正在维护中

    大多数Web服务器都已停止以进行维护。如果您有权访问服务器的管理设置,请检查您的配置选项并安排自动维护会话。如果要完全手动管理服务器维护,也可以在配置选项中禁用此自动维护。

  3. 检查您的网站代码是否存在错误

    网站上的错误代码可能会阻止服务器正确响应来自内容交付网络的请求。仔细检查代码并查找错误。或将代码复制到您的开发机器上,并进行彻底的调试过程。如果您可以准确地重现503错误发生的情况,则可以确切地知道问题何时发生。

并发环境下,执行 sql 导致死锁

执行insert into … on duplicate key update…导致死锁

Mysql死锁如何排查:insert on duplicate死锁一次排查分析过程

insert语句会对插入的这条记录加排他记录锁,在加记录锁之前还会加一种 GAP 锁,叫做插入意向(insert intention)锁,如果出现唯一键冲突,还会加一个共享记录(S)锁。

如何避免该 insert on duplicate 死锁问题:

  1. sql 更改为 insert ignore 方式,insert 会在 索引 和 主键 中加 record x locks,而不是 gap lock 或者 next key lock,所以不会有死锁。
  2. 删除唯一索引,尽量减少在数据库中使用 unique index,因为 unique key 会引起额外的 index 检查,需要更大的开销,本例中 duplicate-key checking 会使用 gap lock
  3. 代码加上互斥锁,避免并发触发死锁

根据支付宝 userId 调出付款界面

1
alipays://platformapi/startapp?appId=09999988&actionType=toAccount&goBack=NO&amount=1.00&userId=xxx&memo=123

使用上述字符串生成一个二维码,然后使用支付宝扫码,即可调出付款界面。

关键信息:userId、amount

抽奖功能

抽奖五要素

  1. 活动
  2. 场次
  3. 奖品
  4. 中奖概率
  5. 均匀投奖(即让用户均匀的抽走奖品)

通过抽奖五要素也得到了通用抽奖工具配置一场抽奖活动的5个基本步骤:

  1. 活动配置
  2. 场次配置
  3. 奖品配置
  4. 奖品中奖概率配置
  5. 奖品投奖配置

抽奖相关文章

接口偶尔出现请求超时问题

可能原因如下:

  1. 并发请求量大,服务器处理不过来
  2. 资源被其他功能占用,服务器处理不过来
  3. 网络延迟