接口优化策略

对于程序优化,我一直采取保守的态度,除非万不得已。但是随着业务的不断发展,程序越来越复杂,代码越写越多,优化似乎是终有一天会到来的事情。

那么对于一个典型的后台服务接口,我们可以从那些方面入手进行优化呢?

接口拆分

接口垂直拆分

垂直拆分可以简单理解为微服务化,把一个大而复杂的服务拆分成多个相互独立,职能单一的服务,单独部署。 更细粒度拆分的好处是,能对某个具体的微服务进行特殊优化,以最大的投入产出比来解决整个服务的性能。 垂直拆分还有一个好处是,对于非必须的接口,可以很方便的进行降级处理,把坏影响隔离到核心逻辑外部。 最容易想到的优化办法是把某个对整体性能有决定性影响的微服务接口进行水平扩容。

  • 注意: 拆分后必定会增加外部接口调用,多少会有些额外开销,但是对于有限几个调用,拆分的还是值得的。

接口水平拆分

这里说的水平拆分一定不是把一个接口部署更多份,因为这样只能解决接口的容量问题,但是不能减少接口的响应时间。 水平拆分可以简单理解成mapreduce模型,把整个计算逻辑或者数据平均分配到集群中的N个服务器去,然后由一台机器去并发调用并做结果合并。 理论上这种方式能把响应减少到的时间。

  • 注意: 一个问题需要考虑的是,如果并发调用的接口返回的数据量比较大,可能会对合并机器的网络负载和数据序列化(CPU)有一定影响。

缓存

接口缓存

一个有着复杂逻辑或者大量计算数据的接口,能对整个结果进行缓存再好不过了。缓存针对不同的场景会有多种策略,对于有大量并发请求的场景, 推荐一个方案:一种基于“哨兵”的分布式缓存设计,不会有损失第一个用户,也不会有定时更新缓存的额外开销。

本地缓存

本地缓存有两种场景,对于类似字典类型的数据,可以静态化后放入内存,定时去刷新或者采用通知机制去更新。

还有一种场景是用ThreadLocal缓存重复内部计算与重复的对象创建; 对于链路比较长或者循环比较深的接口,ThreadLocal减少重复计算和对象创建,从而降低RT和节约内存。

  • 注意: 在有内部并发的地方使用ThreadLocal一定要注意不同线程间的数据同步。主线程的ThreadLocal数据和每个并发子线程的ThreadLocal数据要同步好。

内部优化

非核心流程异步化

类似于发消息,写日志,更新缓存等不会影响接口准确性的非核心流程,可以采用异步方式进行处理,不阻塞主计算逻辑处理。

内部并发

如果进行水平拆分后,并发调用IO较大,可以考虑换成内部并发解决IO问题。如果内部并发涉及到每个线程更新同一个集合数据,不用忘了使用线程安全的集合。 这里有一个并发更新HashMap的case:并发环境下HashMap引起full gc排查。

时间: 2024-10-19 11:31:18

接口优化策略的相关文章

常见性能优化策略的总结

本文是一位美团老师把之前所做的各种性能优化的案例和方案加以提炼.总结,以文档的形式沉淀下来,并在内部进行分享.力求达到如下效果: 形成可实践.可借鉴.可参考的各种性能优化的方案以及选型考虑点,同时配合具体的真实案例,其他人遇到相似问题时,不用从零开始: 有助于开阔视野,除了性能优化之外,也能提供通用的常见思路以及方案选型的考虑点,帮助大家培养在方案选型时的意识.思维以及做各种权衡的能力: 常见性能优化策略分类: 代码 之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视.很多技术人员拿到

常见性能优化策略的总结(转)

add by zhj: 我个人感觉性能优化分析影响性能的因素有哪些,然后按影响力的大小进行排序,然后进行排序. 然后进一步分析每个因素为何会影响性能,把这些因素再找出来,再按影响力大小进行排序.基本上,经过 这两层的分析,基本就够用了.对这些因素思考解决办法. 1. 数据库层 我们的目标是减少IO访问,或者将IO访问进行负载均衡,分配到多台服务器,并行计算. 1.1 数据库的数据存储在硬盘,硬盘访问速度比内存慢太多,即IO多 1.2 数据量大导致扫描记录多,间接导致IO多 1.3 所有数据库访问

常见性能优化策略总结

常见性能优化策略分类 代码 之所以把代码放到第一位,是因为这一点最容易引起技术人员的忽视.很多技术人员拿到一个性能优化的需求以后,言必称缓存.异步.JVM等.实际上,第一步就应该是分析相关的代码,找出相应的瓶颈,再来考虑具体的优化策略.有一些性能问题,完全是由于代码写的不合理,通过直接修改一下代码就能解决问题的,比如for循环次数过多.作了很多无谓的条件判断.相同逻辑重复多次等. 数据库 数据库的调优,总的来说分为以下三部分: SQL调优 这是最常用.每一个技术人员都应该掌握基本的SQL调优手段

从hbase读取数据优化策略和实验对比结果

起因:工作需要,我需要每5分钟从hbase中,导出一部分数据,然后导入到ES中,但是在开始阶段编写的python脚本,我发现从hbase读取数据的速度较慢,耗费大量的时间,影响整个导数过程,恐怕无法在5分钟内完成导数工作 在咨询了老人后,采取部门优化策略,并记录了实验结果. hbase结果大致如下 粉丝表 rowKey  是粉丝ID 列名 含义 id 粉丝ID ut 更新时间 ...  ...     此hadoop集群有13台机器 任务的目标把hbase中前5分钟录入的数据录入到ES中. 1.

常见性能优化策略的总结 good

阅读目录 代码 数据库 缓存 异步 NoSQL JVM调优 多线程与分布式 度量系统(监控.报警.服务依赖管理) 案例一:商家与控制区关系的刷新job 案例二:POI缓存设计与实现 案例三:业务运营后台相关页面的性能优化 add by zhj: 我个人感觉性能优化分析影响性能的因素有哪些,然后按影响力的大小进行排序,然后进行排序. 然后进一步分析每个因素为何会影响性能,把这些因素再找出来,再按影响力大小进行排序.基本上,经过 这两层的分析,基本就够用了.对这些因素思考解决办法. 1. 数据库层

mysql 优化策略

from:https://dbaplus.cn/news-155-1531-1.html MySQL逻辑架构 如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器.下图展示了MySQL的逻辑架构图. MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理.授权认证.安全等功能均在这一层处理. MySQL大多数核心服务均在中间这一层,包括查询解析.分析.优化.缓存.内置函数(比如:时间.数学.加密等函数).所有的跨存储引擎的

MySQL存储引擎,索引及基本优化策略

存储引擎 与Oracle, SQL Server这些数据库不同,MySQL提供了多种存储引擎.什么是存储引擎?存储引擎其实就是一套对于数据如何存储,查询,更新,建立索引等接口的实现.不同存储引擎特性有所不同,我们根据需要进行选择,比如包含ETL操作的OLTP(联机交易处理)项目中我们通常选择InnoDB,而对于读操作较多几乎没有写操作的OLAP(联机分析处理)则选MyISAM的更多.因此并不是大家都用环境相似,同一版本的MySQL,能够使用的特性就是一致的.在MySQL终端中查看支持的存储引擎,

SEO链轮策略的优势,整体的SEO优化策略

SEO链轮策略的优势 从整体的SEO优化策略上来讲,seo链轮策略不仅仅可以很好的提升我们网站的权重,还能够帮助我们的网页加快收录速度,当搜索引擎蜘蛛爬进来的时候,利用SEO链轮策略可以很好的把蜘蛛给"团团围住"从而让蜘蛛更加广泛的抓取我们的网页.进而增加网站的收录数量以及访问数量. 理论上来讲,互联网上的每一个网站本来都是一个独立的网站,因为有了SEO链轮策略,因为有了友情链接,互联网上面的网站从此不再独立,从此让每一个网站紧密相联. 四:SEO链轮策略的缺点 虽然说SEO链轮策略在

关于手机短信接口优化

项目:目前需要支持手机号码注册,流程如下: 1)用户输入手机号码 2)点击获取手机校验码 3)收到短信息后,填入验证码.完成注册 有个问题,在项目中前期设计问题,导致短信接口被恶意调用. 调整方案: 网络提供方案: 推荐的对接方式:1.流程限定--将手机短信验证和用户名密码设置分成两个步骤,用户在注册成功用户名密码后,下一步才进行手机短信验证.(推荐)2.绑定图型校验码--将图形校验码和手机验证码进行绑定,这样能比较有效的防止软件恶意点击.(推荐) 不推荐的对接方式:3.短信发送间隔设置--设置