前言
随着公司业务的不断扩展,我们的应用程序数量和规模越来越大。为了更好地管理这些应用程序和保护它们的安全性,我们决定实施 API 网关。API 网关是一种将所有应用程序请求路由到相应服务的中间层,从而提高应用程序的可伸缩性和可用性的技术。它还提供了安全认证、流量管理和监控等功能,以保护我们的应用程序不受恶意攻击和过载请求的影响。在本文中,我们将介绍 API 网关的概念、优点和如何在公司技术架构现状下实施 API 网关。本文为个人技术分享,由于技术水平有限,可能有误望谅解。
最近遇见一个很奇怪的线上问题,就是生产环境MySQL(使用的是阿里云的RDS,版本号是5.7)的CPU莫名其妙地会被打满,导致整个服务不可用,最终耗费了很大的精力才定位到出现这个问题的原因。出现这类现象是因为当MySQL的time_zone=SYSTEM时,查询timestamp时会调用系统时区做时区转换,而系统时区存在全局锁,在并发大数据量访问会导致线程上下文频繁切换CPU使用率飙升,系统响应变慢。在排查问题时也在网上找了很多资料,但大都不是同一种问题,所以为这次排查做一次分享。本文为技术分享,可能有误望谅解。
出现这个问题的业务逻辑是查询一张存储用户搜索词的表,统计出最近七天搜索最多的几个关键词。在正常情况下查询正常,如果并发量增加RDS的CPU使用率飙升并且出现慢查询,这条SQL耗时能达到10s以上。表中的数据在20w左右,存在一个联合索引,正常查询会走索引,数据表的表结构如下: