比 12306 大 10 倍瓶颈:中国每天火车票600万,机票100万张,但是火车票价格不变,机票价格随时变化。而且机票是动态实时数据,公司自己开发的机票数据接口是xml或String格式数据,与美国eterm公司数据连接,每次查询收费约0.3元,必须放弃实时数据而建立机票缓存数据节省查询费。
数据调用:客户请求查询机票价格, mysql数据库没有及时数据就直接通过机票接口查询并存入数据库,再从数据库读出数据给前台查询页面。
公司设计同时在线最高100万ip,最高并发每秒1万的请求的java-mysql并发编程。
请求高手指点....
如何处理高并发问题,参考这里:https://yq.aliyun.com/articles/696140?source=5176.11533457&userCode=ffsbbyn0
官方帮助文档地址:阿里云帮助中心
更多参考: 阿里云官方(新用户需官网注册查看)
首先要理解业务,每一次请求都获取实时的机票价格是无意义的,因为数据量非常大,而且查询费用很高,实际上查询的人数一般远多于下单的人数。所以查询可以用一个近似的请求,而下单的时候再做一次准确的查询。具体来说就是建立一个缓存,定期把机票查询的结果放入缓存,这样前台的查询压力可以全部转移到缓存上,缓存定期刷新。如果有人有下单意愿,再引导到下单界面,在这个界面实时查询一次机票接口,获取实时价格再下单。
个人建议吧,采用可以伸缩的架构,web层与业务层解耦(可以考虑MOM,如:activemq。这样,你们的处理层可以水平伸缩而不受web层的影响,可以考虑broker伸缩。自然,web层伸缩也应该很容易达成。)最基本的动静分离,读写分离这些都是考虑的。
对于极高热点数据区的读可以考虑采用cache或者cache & persistece,比如:redis、couchbase等。对于猛烈的写(这个地方考虑事务有无必要),如果无需事务,那么redis、couchbase、cassandra其实都挺不错的。如果要考虑事务就比较麻烦了,建议采用集群事务数据库,毕竟自己实现事务于数据存粗外不是件容易的事。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。