怎么提高api接口的稳定性?

ealongDeng


这个问题我就结合着自己的项目来说一说。

我们现在的项目是没有前台页面的,只对外提供接口服务,甚至我们项目都没有交易类的服务,都是单纯的查询类服务。项目最初的建设目标就是为了缓解核心系统数据查询的压力,或者你们可以把我们项目看成几个核心项目的缓存层(因为有多个核心系统,我们项目还可以提供跨系统的查询,这一点也很重要)。

打铁还需自身硬,要提高接口的稳定性和响应速度,首先代码要写好:

  • 我们项目采用了关系型数据库做中间库,数据经过加工后落地到MongoDB和Redis,对外的提供的服务,只会查询MongoDB和Redis;

  • 数据加工很重要,关系型数据库中需要多表关联的查询,现在只查询MongoDB的一个collection就可以了。(因为要做数据加工,所以数据和生产库比,有一定的延迟,这个一定要看业务场景是否允许有延迟);

  • MongoDB采用副本集+分片的方式部署,副本集保证数据库的稳定性,挂掉一台,还有其他几台可以使用;分片保证数据量增大后,可以平行扩容。(现在数据量大概在亿级,个位数);

  • 服务部署还采用比较传统的方式,N台服务器前面挂负载均衡;上各种监控,随时关注接口调用和资源使用情况;


  • 严格的参数校验,避免做无用的查询;

  • 大原则就是:【能查缓存就不要查数据库,能不查的话就更好】

除了自身架构之外,还有些非自身的控制:

  • 内部系统在调用接口的时候,主要通过网络权限的控制,除此之外不做任何的限制,包括鉴权;

  • 如果是互联网端的接入,还是需要依赖网关;由网关做鉴权、限流、降级、熔断等;

  • 参与对方系统功能的设计(这一点很神奇),因为大多数时候都是公司内部的系统,所以在做需求讨论的时候,最好能看一下对方系统的调用场景;很有可能调整一下什么时候调用接口,就能大大减少接口的调用次数;

  • 建议调用方设置合理的超时时间,并有合理的重试机制;

  • 如果可以的话,最好可以采用异步调用的机制;


  • 如果接口要依赖于另外系统的接口,也需要额外的做一些考虑(依赖的接口返回慢或者报错,自己的接口肯定会有问题);比如数据时效性要求不高的话,可以考虑把对方接口返回的数据缓存下来(设置失效时间,保证一段时间后能把最新的数据刷新回来),但如果数据时效性要求非常高,可以考虑使用熔断;不过说实话,还没见过谁敢用熔断的....

希望我的回答,能够帮助到你!我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。


会点代码的大叔


在日常的开发工作中,API随处可见,现在市面上也有专门的数据类公司提供各种各样的API服务。API的稳定性直接关系到应用的稳定,那该如何提高API接口的稳定性呢?下面我来逐步和大家讲解一下以供参考。

API是什么?

API是应用程序编程接口的简称,其实可以理解为是某种服务的一种封装形式,通过API就可以获得某种服务而不需要了解其内部实现原理,基本上每款软件应用都有自己的API,供内部或外部调用。


API本身也是属于应用软件(开发人员通过编程语言开发的),它的表现形式有很多种,主要的有:

  • RPC

  • SOAP

  • RESTful

API的稳定性会受哪些因素影响?

API性能会受到很多因素影响的,比如说:

  • API所在服务器的配置直接影响了API的性能(如:并发、响应速度);

  • API被调用的次数;

  • API受到黑客攻击;

  • 不同网络环境下访问API时的速度存在差异等。

如何提高API接口的稳定性?

1、API的高可用方案

什么是高可用呢?高可用是指通过一些技术手段,避免服务出现异常、或减少异常导致的服务不可用时间。

API部署时也需要考虑高可用,我们推荐的方案是:

  • API多节点部署(同一个API服务部署多个),然后通过负载均衡进行分流;

  • API作好容错机制;

  • 做好限流,避免某用户访问API次数过多导致API负载较高;

  • 必要的熔断机制,如果API存在多级调用的情况,那熔断机制就很重要了,因为当某个API不可用时可能会导致请求阻塞,严重时会影响整台服务器的稳定;

  • 做好权限认证,必须是合法用户才能访问API接口。

2、API的性能优化

API其实也是一种应用,同样是由开发人员开发的,因为API充当的是服务的核心,所以API的性能尤为重要,我们在开发API时需要注意以下几点:

  • API需要做好解耦,如果耦合度过高容易导致API性能下降、出现问题时不好定位;

  • API涉及到数据库操作时,SQL语句要做好优化,避免SQL查询效率低下;

  • 对于及时性要求不高的数据,可在API层做一定缓存处理;

3、API访问速度优化

如果API是公司内部使用,建议以内网IP形式访问API服务;如果API也对外提供服务,可考虑将服务器部署在BGP机房,如果机房不在BGP机房建议在API层上方走CDN加速。


以上就是我的观点,对于这个问题大家是怎么看待的呢?欢迎在下方评论区交流 ~ 我是科技领域创作者,十年互联网从业经验,欢迎关注我了解更多科技知识!

网络圈


看你的接口涉及哪些方面,比如数据库,缓存,或者依赖第三方接口,先从自身代码优化起,然后一步步优化下去,怎么减少变数,比如数据库挂了接口能不能正常,缓存挂了接口逻辑怎么处理,第三方接口老超时不稳定代码应该怎么走。


分享到:


相關文章: