日期:2014-05-16 浏览次数:20696 次
?????? 去年做了一个优化类项目,当时接收时,基本上oracle-db io已经被这个应用占据了79%的load,随着业务发展,DB响应已经到了无法忍受的地步。
?????? 具体场景为:实时监听买卖订单消息,订单保存45天,这些订单会每条都更加用户维度进行分析,分析规则比较复杂,基本有单笔订单,该用户近45天订单全量分析,分析完后给出该订单是否为真假,如果真的订单并且未结束,再汇总出总金额,需要实时计算。
????? 当时高峰期每秒进来订单量在300多,总计每天订单增长数维持在1KW,45天大体订单在4.5个亿。
????? 当时查询性能基本上已经慢到一个用户如果订单量>1000基本上响应时间在5秒以上。后续又来的业务需求,订单状态会发生变化,用户订单也时刻在发生变化,那么我们需要的金额就会时刻在变化,一旦变化就力度非常大,就需要预警。
????? 怎么办?a.新需求
????????????????? b.每天访问量越来越大,性能。
????????????????? c.公司搞大型活动订单高峰期预计比平时高5倍。
?????
????? 拆库是必然的,而且业务发展非常快,至少预估3年可扩展。
????? 拆库成本很高,数据迁移,停机。。。。
????? 半年后如果再次性能存在问题,再搞一次拆库实在不方便,而且还需要评估一些公司大型活动的冲击。
能否有种可以支持半年然后,可以无缝扩容一次,1年后再扩容一次。。。。
??? 存储集群:采用Mysql 作为数据库存储为例
??? 应用服务器:主要包括
a. 业务逻辑处理
b. 数据存取路由
c. 数据存取处理
??? 业务逻辑处理、数据存取处理两层基本实现与传统的处理没有区别,下面详细阐述数据? 路由的实现
?
a) 规则算法
这里采用的是针对用户(UserId) 的hash 值取余数(Key 值) , 传统的规则算法是当前需要分n 个库,分母就是n ,本专利采用小于n * (2t )的最大质数为分母,t 的值为你预估的无缝成倍扩容次数; 譬如当前需要划分16 个库能支撑应用性能,假设取t=8 ,那16 * (28 )=4096. 也就是说无缝扩容至少可以支持到4096 个库,4093 为最大的小于16 * (28 )=4096 的质数。
b) 路由映射关系
???
维护一份(