【j2开奖】美丽说数据库架构变迁及中间件应用(2)
时间:2016-07-07 07:05来源:报码现场 作者:本港台直播 点击:
次
以上是纵向扩展实例,因为每个程序在读取数据库时都要去配置中心读取配置文件,本港台直播们就把配置文件进行拆分。比如专门给用户用的库就专属去
以上是纵向扩展实例,因为每个程序在读取数据库时都要去配置中心读取配置文件,本港台直播们就把配置文件进行拆分。比如专门给用户用的库就专属去读用户库的配置文件,举个例子比如A、B两个库专门给用户使用,然后后台脚本配了C、D,这样就可以将数据库和后台脚本拆分开。大促时就不需要动其开奖直播库,只需要在配置文件中增加用户库就可以把配置容量扩大,这就是纵向扩展做的事情。
再说横向扩展,本港台直播们对当需求集中到一个库以什么维度拆分进行了很多讨论,最后的结果是按照业务拆分。美丽说当时的情况是商业部门有交易小组、广告小组、专门对接商家的支付小组,本港台直播们先按照业务把一个商业库拆分为4个库,每个库基本上都是独立服务,服务之间通过接口访问。此时的GMV每天可以增加到100-200万的量级,但这对本港台直播们的目标是远远不够的,本港台直播们按照功能进行了二期拆分。
横向扩展以交易为例,通常电商网站促销之前都会进行抢劵活动,其实也相当于秒杀,但秒杀的不是商品而是优惠券。在拆分过程中一定要优先核心功能,首先要解决优惠券秒杀问题,要把优惠卷拆分出来。用户拿到优惠券以后就去看商品,当时本港台直播们的商品页面叫单宝页,又把单宝页拆分出来,用户查看商品后要添加到购物车,然后又把购物车拆分出来,看到购物车以后要提交订单,又把订单拆分出来,最后是商家和用户的反馈,由于并非是核心功能,就最后拆分。 其实拆分的过程没有这么简单,本港台直播觉得电商网站非常好的一点在于所有的指标都可以量化,本港台直播们拆分数据的依据是什么?就是本港台直播们对这次促销所定的目标,本港台直播们主要以GMV来定,这次促销的GMV是10亿,那用户订单数的金额大概就是在某个范围内,那本港台直播们的支付要承载多少压力、交易要承载多少压力、商家要承载多少,基本上做接口和压测都可以算出来。本港台直播们拆分的过程也是以这个数据为基础,比如最终以此评估拆分收益。
另一方面本港台直播们要解决短链接问题,本港台直播觉得其实有两方面问题,第一是频繁建立业务会超时。另外本港台直播对短连接没有一定的限制,也就是说数据库最大的链接数可能是13684,但秒杀的时候可能会有20万人在抢这个商品,可能就会有20万个短链接连到数据库,一瞬间就可以把数据库搞崩溃。如何解决这两个问题呢?
当时本港台直播们公司的情况是,正好有一个团队在解决某一个功能时做了一个有连接池功能的数据库代理,本港台直播们就把它拿来直接用,引入了连接池的概念。连接池就是数据库初始需求是解决短链接超时崩溃的功能,但核心价值反而不在这上面,本港台直播回过头来再想其核心价值大致有如下两点:
1、 proxy作为程序连接数据库的统一入口,可建立适当规范,源源不断的业务接入过程中,proxy可以保障是符合规范的,那可认为这些业务是可控的,方便未来的扩容和调整优化。
2、 和程序端解耦,业务爆发时,要求DBA短时间内进行大量的扩容工作,例如:垂直拆分,水平拆分,机器上下线。
开发过程中本港台直播们也实现了如下几大功能:
1、 连接池,用户程序请求连接时不需要新建,只要有空闲的链接,就可以进行复用;
2、 带权重的负载均衡,可根据机器性能设定相应权重。现在的硬件在不断发展,下一批机器到以后在硬件性能上肯定会提升很多,有了权重以后就可以根据机器性能设定相应权重,使其承担更多压力;
3、 大表透明水平切分,散表规则统一。比如按照用户ID分的表按照其开奖直播维度是不太好查的,后期本港台直播们做了并发操作,一个sql来的时候,本港台直播们可以拆分出10个线程到每一个库、每一个表里查询,最后将查询结果合并发给用户,如果一旦放开这个权限就有一个问题,可能同一时间有很多的需求链接不受控制,因为每个请求都会被分成100份。所以当时做的不是很完善,只支持以散表字段进行查询。
4、 透明的负载均衡,及故障切换,从库故障自动剔除。
5、 黑名单也分为两部分,一是sql黑名单,二是IP黑名单。sql黑名单无论是人为的有问题的sql还是程序bug或者安全漏洞造成的,只要本港台直播们一发现就会在代理上完全禁止掉,这样就能够保证数据安全。IP黑名单可禁止某些异常机器连接,保护数据库。
6、 防止数据库密码泄露,程序端仅可获得连接代理的密码。本港台直播们在基础文件前需要构造链接,就需要用户名密码这两个字段,有了代理以后用户可以拿到代理密码,本港台直播们在代理层进行加密处理,把密码隐去以防止密码泄漏,当然程序端也没法做非法操作,这些就可以在一定程度上保护数据库。
7、 主动断开功能,建立规则规范,对于不符合规范的sql可进行审核,一旦发现就可以自动断开,如获取结果集超过5M,在电商大促时,这类sql是致命的。
8、 连接数限制,连接数暴涨时,代理连接数限制,保护数据库不会被瞬间击垮。
9、 支持强制读主库。不支持跨库查询和分表后的复杂sql,如limit,count等。
转型时代最终架构:
(责任编辑:本港台直播) |
------分隔线----------------------------