关于一个每天请求50W次接口的设计实现过程
从大学开始关注博客园,到工作之后注册了博客园账号,直至今日终于能够静下心来将自己个人的所学,所得,所悟能够分享出来与大家分享,好开心~
言归正传,需求背景是博主所在的公司为一个在线OTA公司,客户端上各个项目(酒店,机票,景区,出境之类)的订单列表接口融合在一起之后对客户的查看订单非常不方便,而且列表信息相对于客人来说过于冗余,但是列表接口又不能缺少,为了推动客户体验,将当前待使用的行程信息能够更加完整的展现给客户,于是推动了行程助手的需求。
该需求主要目的就是将客人的历史订单摒弃掉,而将客人待出行使用的订单信息完整的表现给客人,提升客户的出行体验。
需求下来之后,针对于我这边,机票项目而言,需要做到的不仅仅是将订单信息展现出来,围绕行程这个主题,需要将航班的动态信息也能够动态的展现给客人。
需要解决的几个问题:
1.航空公司信息,机场信息为静态信息,查询数据库过于浪费
2.查询的信息较多,需要优化查询sql
3.动态信息由于不和订单相关联的表在一个数据库中,而跨库联查不可取,需要重点解决
问题思考过程:
1.航空公司和机场信息这种静态信息,查库是明显耗时耗力的,航空公司的信息由于比较少,表内的记录在五十条左右,因此采用单例模式,将信息加载在内存中直接调取即可。机场信息由于存在的记录在五百条左右,而且每条信息的维度很多,因此采用了Redis这种支持List的存储系统,提高性能。
2.查询SQL,涉及到了5张业务逻辑表的查询,与DBA确认查询索引,提高查询语句的性能。
3.航班动态信息从供应商处推送获得会落地到本地库中,由于更新比较频繁,而且跨库查询太耗时,因此数据库这一块已经暂时放弃了,
处理动态信息方面,博主使用了MC(Memcached)+JOB(不明白的同学百度Quartz调度系统)搭建了更新航班动态信息的缓存框架,
主要思路是,使用JOB捞取供应商落地的信息,根据推送时间,每60秒捞取一次当前最近90秒的更新信息,同时将订单相关的一些固定信息也一并组装,同步到MC中。
在接口内部进行查询的时候优先进入MC中查询信息,当MC中查询不到时再去库里捞取,拼装返回
收获:
1.逻辑上的思考需要缜密,将有可能碰到的问题列出来,逐一的思考解决方案就会找到胜利的钥匙
2.在数据库发生瓶颈,难以达到预期效果时,巧妙的去运用缓存(单键类,Redis,MC)是一个非常好的解决方案,但是缓存的更新机制需要考虑清楚,否则会成为一个累赘
关于一个每天请求50W次接口的设计实现过程的更多相关文章
- 一个vue请求接口渲染页面的例子
new Vue({ el:'#bodylist', data: { list: [ { "type_id": "1", "type_name" ...
- JMeter基于http请求的web接口性能测试总结
[本文出自天外归云的博客园] 基于http请求的web接口性能测试总结 压测的目的:对于Web接口压测的目的最终是要在对数据库造成压力的情况下观察压测服务器的cpu是否达到预警值.memory是否发生 ...
- 【JMeter】JMeter完成一个java请求的压测
先定义一下我说的remoteService:即远程调用服务,没有http的url.不对外提供或者对外提供有限的服务.具体视各公司的代码架构所定,比如有些公司为web工程,scf服务,db.scf即为服 ...
- 一个用js写的接口http调试程序
公司有非常多手机app的项目.手机app又要常常訪问后台提交与查询数据. 所曾经端app与后台的开发与測试过程中接口调试是一个常常要做的工作. 而每当出现一个BUG,前端appproject师与后台p ...
- GOLang(第二篇 发起一个Http请求)
import ( "net/http" "net/url" ) //发送一个简单的get请求 func GetRequest { //联系使用 make(map ...
- 网站开发进阶(四)Tomcat Server处理一个http请求的过程
Tomcat Server处理一个http请求的过程 假设来自客户的请求为: http://localhost:8080/wsota/wsota_index.jsp 1) 请求被发送到本机端口8080 ...
- 解决Ajax请求后台Servlet接口拿不到JSON数据问题
前端Ajax请求代码如下: window.onload=function() { var url='http://127.0.0.1:8080/testpj/ErrorlogServlet'; $.a ...
- iOS开发之线程组解决请求多个接口数据,完成后,再刷新界面
1.多任务请求接口,完成后,在刷新数据,常用方法 2018年07月18日 16:34:38 hbblzjy 阅读数:1382 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- 接口测试工具-Jmeter使用笔记(一:运行一个HTTP请求)
博主自从毕业从事软件测试行业距今一年半时间,大多数时间都在跟各种API打交道,使用过的接口测试工具也有许多,本文记录下各工具的使用心得,以及重点介绍我在工作中是如何使用Jmeter做测试的,都是在wi ...
随机推荐
- Memcache修改端口
修改端口 网上很多的说法都无法起作用(像下面这样) D:\.......memcached -p 10000 -d start 现在有两种解决方法 ①直接修改注册表 HKEY_LOCAL_MACHIN ...
- JodaTime library not available - @DateTimeFormat not supported
使用spring的@DateTimeFormat来格式化Date类型时,报错: org.springframework.validation.BindException: org.springfram ...
- java使用httpcomponents 上传文件
一.httpcomponents简介 httpcomponents 是apache下的用来负责创建和维护一个工具集的低水平Java组件集中在HTTP和相关协议的工程.我们可以用它在代码中直接发送htt ...
- JAVA基础知识点:内存、比较和Final
1.java是如何管理内存的 java的内存管理就是对象的分配和释放问题.(其中包括两部分) 分配:内存的分配是由程序完成的,程序员需要通过关键字new为每个对象申请内存空间(基本类型除外),所有的对 ...
- 虚拟机Linux----Ubuntu1204----root登录设置
说明:装好的ubuntu12.04登录时,默认是看不到root用户的,需要设置一下. 1.先用普通用户登录,打开终端,切换为root用户,如下: su root 2.修改 sudo gedit /et ...
- tomcat发布记录
web项目发布详细步骤 服务器 tomcat服务器1.删除webapps文件夹里面的项目war包-->ifm.war(项目war名称)2.把项目的ifm.war放到webapps里面3.删除we ...
- SSH 无密码访问其它机器 和 Windows 上 putty 无密码访问 Linux 机器
1. 从一台 Linux 机器(ubuntu1)上无密码访问其它机器(ubuntu2) (1)登录 ubuntu1 并切换到用户比如 s1 (2)运行 ssh-keygen -t rsa (3)运行c ...
- 译:Google的大规模集群管理工具Borg(二)------ Borg架构
3.Borg 架构 一个Borg的cell由一系列的机器组成,通常在cell运行着一个逻辑的中央控制器叫做Borgmaster,在cell中的每台机器上则运行着一个叫Borglet的代理进程.而Bor ...
- Verilog (一) assignment, register and net
Verilog 区分大小写, 且所有关键字都是小写 1 register = storage keyword reg; default x; variable that can hold value ...
- UESTC 914 方老师的分身I Dijkstra
题意:求有向图的往返最短路的最长长度. 分析:求第一次到所有点的距离可以用一次Dijkstra求最短路求出来.考虑回来的路,想想就知道,从每个点回来的路即为将边的方向反转再求一次最短路后的结果. 所以 ...