午高峰页面转圈,第一反应常常是再加一台机器。同城小程序开发部署到自己的机器之后,要先分清慢在打开页面,还是慢在读写订单的库。加错地方,人多了仍然下不了单。
一、先看慢的是页面还是下单
打开首页、翻菜单很慢,但已经生成的单号在后台一点就开,多半是页面机器不够。一点提交就一直转,后台里单号迟迟没有,多半是业务库写不进去。两种慢,加法相反。
判断时不要只看有没有人抱怨。在高峰抽一笔:记下点击提交的时间,再看业务库里这笔出现的时间。间隔很长,就是库或写入排队。间隔很短但页面打不开,才是页面机器。
二、加页面机器时,库仍然只有一份
页面机器可以加。每一台都只负责把菜单页面给用户看、把下单请求送到同一业务库。不要给新页面机器配一份自己的小库。小库一多,同一笔单会写进不同地方,用户端和商家端就各看各的。
新机器加入之前,先确认它读的菜单和订单都指向原来的业务库。用一笔测试单:在新机器上下单,在旧的后台按单号能查到,金额一致。查不到就不要把它放进高峰。
三、什么时候该加库的能力
提交排队变长、导出对账表要等很久、按单号查询也变慢,这是业务库吃紧,加页面机器没用。可以先看是不是把导出和每日备份放在了高峰时段,把这些挪到营业结束之后,写入压力会下来。
仍不够,再增加业务库所在机器的磁盘和内存,或把只读的查询分到副本上。副本只给查询和对账读,下单仍写主库。主库和副本的订单必须是同一份的复制,不能两头各自接单。私有化部署下,主库在客户自己的机器上。
四、菜单和订单不要抢同一块磁盘
菜单图片、页面文件若和业务库堆在同一块磁盘上,高峰翻菜单会把下单拖慢。页面文件放在页面机器,订单放在业务库机器。两边磁盘分开之后,翻菜单再忙,也不应把已付款的写入堵住。
备份也避开高峰。备份读的是业务库,读的时候如果把磁盘占满,新订单会写失败。失败的单不应只在页面上提示成功。写进库失败,用户端应看到未成功,可以再试,避免用户以为下单了、库里没有。
五、加完之后用同一单号验收
无论加的是页面机器还是库的能力,验收都用单号,不用感觉。一笔从新页面提交的单,主库有、商家端能看到、金额是下单时记下的。再导出一张高峰时段的已完成表,笔数和主库一致。副本若有延迟,对账仍以主库为准,并写明延迟在可接受的范围内。
统一后台只连主库来改订单。若有人连到副本去改,改完会被主库盖掉,或者两边不一致。改价、取消都走主库。
六、机器清单写给以后值班的人
写清哪几台是页面、哪一台是主库、副本只读、文件放在哪、备份放在哪。清单和后台账号、源码一起交到客户这边。以后高峰再慢,先按清单判断加页面还是加库,而不是看到慢就买一台新的。
加页面机器之后的第一天,把新机器产生的单号抽十笔,看是否都在主库。十笔都在,才留在高峰里继续用。有一笔不在,就先拿下这台,查它写到了哪里,不要等投诉多了再查。只读副本若用来给出账,表头要写明它相对主库可能慢一截。正式结账仍导出主库。副本上改过的价格不算数,因为下一次从主库过来会盖掉。磁盘快满时,先清过期备份和旧的导出文件,不要先删订单。订单是对账依据,文件可以再生。
光合同城独立部署时,订单集中在客户的业务库,页面机器可以横向增加。验收标准是:加一台页面之后,新单仍进同一库;库变慢时,先挪走高峰备份,再考虑加强主库,而不是再复制一套订单。