阿里二面:列出 Api 接口优化的几个技巧


当越来越多对性能的吐槽反馈到我们这里的时候,我们意识到,接口性能的问题的优先级必须提高了。然后我们就跟踪了1周的接口性能监控,这个时候我们的心情是这样的:

cda37bf6bee35087de1f8426991b4b83.jpeg

有20多个慢接口,5个接口响应时间超过5s,1个超过10s,其余的都在2s以上,稳定性不足99.8%。作为一个优秀的后端程序员,这个数据肯定是不能忍的,我们马上就进入了漫长的接口优化之路。本文就是对我们漫长工作历程的一个总结。

哪些问题会引起接口性能问题?

这个问题的答案非常多,需要根据自己的业务场景具体分析。这里做一个不完全的总结:

  • 数据库慢查询
    • 深度分页问题
    • 未加索引
    • 索引失效
    • join过多
    • 子查询过多
    • in中的值太多
    • 单纯的数据量过大
  • 业务逻辑复杂
    • 循环调用
    • 顺序调用
  • 线程池设计不合理
  • 锁设计不合理
  • 机器问题(fullGC,机器重启,线程打满)


1、慢查询(基于mysql)

1.1 深度分页

所谓的深度分页问题,涉及到mysql分页的原理。通常情况下,mysql的分页是这样写的:

select name,code from student  limit 100,20

含义当然就是从student表里查100到120这20条数据,mysql会把前120条数据都查出来,抛弃前100条,返回20条。当分页所以深度不大的时候当然没问题,随着分页的深入,sql可能会变成这样:

select name,code from student  limit 1000000,20

这个时候,mysql会查出来1000020条数据,抛弃1000000条,如此大的数据量,速度一定快不起来。那如何解决呢?一般情况下,最好的方式是增加一个条件:

select name,code from student  where id>1000000   limit 20

这样,mysql会走主键索引,直接连接到1000000处,然后查出来20条数据。但是这个方式需要接口的调用方配合改造,把上次查询出来的最大id以参数的方式传给接口提供方,会有沟通成本(调用方:老子不改!)。

1.2 未加索引

这个是最容易解决的问题,我们可以通过

show create table xxxx(表名)

查看某张表的索引。具体加索引的语句网上太多了,不再赘述。不过顺便提一嘴,加索引之前,需要考虑一下这个索引是不是有必要加,如果加索引的字段区分度非常低,那即使加了索引也不会生效。另外,加索引的alter操作,可能引起锁表,执行sql的时候一定要在低峰期(血泪史!!!!)

1.3 索引失效

这个是慢查询最不好分析的情况,虽然mysql提供了explain来评估某个sql的查询性能,其中就有使用的索引。但是为啥索引会失效呢?mysql却不会告诉咱,需要咱自己分析。大体上,可能引起索引失效的原因有这几个(可能不完全):

db8d8565072d6e5f2baf6362429770fa.jpeg

需要特别提出的是,关于字段区分性很差的情况,在加索引的时候就应该进行评估。如果区分性很差,这个索引根本就没必要加。区分性很差是什么意思呢,举几个例子,比如:

  • 某个字段只可能有3个值,那这个字段的索引区分度就很低。
  • 再比如,某个字段大量为空,只有少量有值;
  • 再比如,某个字段值非常
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Legal Disclaimer........................................................................................................................................................... I Preface ......................................................................................................................................................................... II Table of Contents ........................................................................................................................................................ III 1. Introduction ......................................................................................................................................................... 6 1.1. Glossary.................................................................................................................................................... 6 2. Revision History .................................................................................................................................................... 7 3. Scenario Overview ............................................................................................................................................... 8 3.1. Account Management.............................................................................................................................. 8 3.1.1. Account Status ............................................................................................................................. 8 3.1.2. Account Actions ........................................................................................................................... 8 3.1.2.1. 3.1.2.2. 3.1.2.3. 3.1.2.4. Activate ............................................................................................................................ 9 Enable, Suspend, Disable, Delete..................................................................................... 9 Set/Get Hosting Status................................................................................................... 10 SSO ................................................................................................................................. 12 3.2. Credit Limit............................................................................................................................................. 13 3.3. Billing Statement .................................................................................................................................... 13 3.4. Ticket System (Draft) .............................................................................................................................. 13 3.5. Event Notification................................................................................................................................... 15 3.6. Pricing Info and Realtime Enquiry (Draft) .............................................................................................. 15 3.7. Admin Management (Beta).................................................................................................................... 15 4. API Overview ...................................................................................................................................................... 16 4.1. Account Management............................................................................................................................ 17 4.2. Credit Limit............................................................................................................................................. 17 4.3. Billing Statement .................................................................................................................................... 17 4.4. Ticket System (Draft) .............................................................................................................................. 17 4.5. Event Notification................................................................................................................................... 18 4.6. Pricing Info (Draft) .................................................................................................................................. 18 4.7. Admin Management .............................................................................................................................. 18 4.8. Data Type ............................................................................................................................................... 18 4.9. Error Info ................................................................................................................................................ 18 5. API Call Methods ................................................................................................................................................ 19 5.1. 5.2. 5.3. Request Structure .................................................................................................................................. 20 5.1.1. Service Address .......................................................................................................................... 20 5.1.2. Communication Protocol ........................................................................................................... 20 5.1.3. Request Methods ....................................................................................................................... 20 5.1.4. Request Parameters ................................................................................................................... 20 5.1.5. Character Encoding .................................................................................................................... 20 Public Parameters .................................................................................................................................. 20 5.2.1. Public Request Parameters ........................................................................................................ 20 5.2.2. Public Return Parameters .......................................................................................................... 21 Returned Results .................................................................................................................................... 21 5.3.1. Successful Results ...................................................................................................................... 22 Version:1.3.0 III Alibaba Cloud Partners API Documentation/Table of Contents 5.3.2. Error Results............................................................................................................................... 22 5.4. Signature Mechanism ............................................................................................................................ 23 6. API References.................................................................................................................................................... 25 6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 6.7. 6.8. Account Management............................................................................................................................ 25 6.1.1. CreateAccount............................................................................................................................ 25 6.1.2. GetAccountInfo .......................................................................................................................... 25 6.1.3. QueryAccounts........................................................................................................................... 25 6.1.4. SetAccountStatus ....................................................................................................................... 26 6.1.5. CreateSsoLoginUrl ...................................................................................................................... 26 6.1.6. SetHostingStatus ........................................................................................................................ 26 6.1.7. GetHostingStatus ....................................................................................................................... 27 Credit Limit............................................................................................................................................. 27 6.2.1. InitializeCreditLimit .................................................................................................................... 27 6.2.2. GetCreditLimitInfo ..................................................................................................................... 28 6.2.3. SetCreditLimit ............................................................................................................................ 28 6.2.4. SetWarningThreshold ................................................................................................................ 28 6.2.5. ClearCreditBalance..................................................................................................................... 29 Billing Statement .................................................................................................................................... 29 6.3.1. QueryResellerDailySubscription................................................................................................. 29 6.3.2. QueryResellerDaliyPAYG............................................................................................................. 30 6.3.3. QueryEndUserDailySubscription ................................................................................................ 30 6.3.4. QueryEndUserDailyPAYG............................................................................................................ 31 6.3.5. QueryResellerMonthSummary .................................................................................................. 31 6.3.6. QueryEndUserMonthSummary ................................................................................................. 32 Ticket System (Draft) .............................................................................................................................. 32 6.4.1. CreateTicket ............................................................................................................................... 32 6.4.2. QueryTickets .............................................................................................................................. 33 6.4.3. CreateTicketReply ...................................................................................................................... 34 6.4.4. GetTicketReplies......................................................................................................................... 34 6.4.5. QueryTicketProducts.................................................................................................................. 34 6.4.6. QueryProductFAQs..................................................................................................................... 35 6.4.7. GetAttachmentTempUrl............................................................................................................. 35 Event Notification................................................................................................................................... 35 Pricing Info (Draft).................................................................................................................................. 35 6.6.1. GetRegions ................................................................................................................................. 35 6.6.2. GetProducts ............................................................................................................................... 36 6.6.3. GetComponents ......................................................................................................................... 36 6.6.4. GetPrice...................................................................................................................................... 36 6.6.5. EnquiryRealtimePrice................................................................................................................. 36 Admin Management .............................................................................................................................. 38 6.7.1. CreateAdminAccount ................................................................................................................. 38 6.7.2. GetAdminAccountInfo ............................................................................................................... 38 6.7.3. QueryAdminAccounts ................................................................................................................ 39 6.7.4. SetAdminAccountStatus ............................................................................................................ 39 Data Type ............................................................................................................................................... 39 6.8.1. JsonArrayString<T> .................................................................................................................... 39 Version:1.3.0 IV Alibaba Cloud Partners API Documentation/Table of Contents 6.9. 6.8.2. DateType .................................................................................................................................... 39 6.8.3. AccountType............................................................................................................................... 39 6.8.4. AkType........................................................................................................................................ 40 6.8.5. TicketType .................................................................................................................................. 40 6.8.6. TicketStatusType ........................................................................................................................ 40 6.8.7. TicketReplyType ......................................................................................................................... 40 6.8.8. TicketProductType...................................................................................................................... 40 6.8.9. TicketProductFaqType ................................................................................................................ 41 6.8.10. AdminType ............................................................................................................................... 41 6.8.11. RellserDailySubscriptionType................................................................................................... 41 6.8.12. RellserDailyPAYGType............................................................................................................... 42 6.8.13. EndUserDailySubscriptionType ................................................................................................ 42 6.8.14. EndUserDailyPAYGType ............................................................................................................ 43 6.8.15. ResellerMonthSummaryType .................................................................................................. 43 6.8.16. ResellerMonthPordSummaryType ........................................................................................... 43 6.8.17. EndUserMonthSummaryType.................................................................................................. 44 Error Info ................................................................................................................................................ 44 6.9.1. Common Error Codes................................................................................................................. 44 6.9.2. Http Status Codes....................................................................................................................... 44 7. References.......................................................................................................................................................... 44

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值