为什么我没有金币公司网上商城商城

金币公司网上商城(积分)商城(下称“商城”)是众多App内的一个产品随着App使用的用户越来越多,商城对于用户留存的提升扮演着重要的角色;做为提高用户黏性的核心产品,在拥有很好用户体验的同时也必须存在着一个高效、稳定的系统。

商城是一个基于虚拟货币(下称“金币公司网上商城”)进行运营的产品,也就意味着我们需要给用户发放金币公司网上商城,用于用户兑换各种奖品我们需要详细记录用户金币公司网上商城的收支情况,并提供给用户查询在redis、memcache盛行的时代,构建一个几十万QPS的只读系统并不复杂需要做到:无状态服务+多级緩存,并且能够进行水平扩展应该就差不多了。而商城需要记录每秒十万的用户行为需要的是每秒数十万(这里翻倍了)的数据读写(insert&update)操作,这种量级是无法在单实例数据上完成的那么该如何分库分表。

Tip 1 . 在做设计时首先要明确3个事情
1. 业务场景,不要空談设计场景是什么
2. 目标,系统需要做到的目标是什么
3. 分析上述两点得到什么结论

那么,对于用户行为数据的场景是:1.用户A查询自己的所有金币公司网上商城记录(不能查别人的)2.查看商城内金币公司网上商城数量分布情况。对于第二个场景可以直接通过大数据进行统計分析(不进行详细解读)对于第一个场景,系统需要做到的目标是:用户A只进行一次查询就可以得到所有数据(不考虑分页场景)。分析上述两点得到结论:按用户id进行分库分表。(分析过程有些磨叽了哈哈,忍着)
原则明确后能够开始进行分库分表吗?不能需要进一步确认,如何分分多少?扩容成本对于数据库扩容,我们选择以2的N次幂进行扩容这种方式的好处是,进行扩容时只需偠将数据copy一份就可以,上层应用增加数据库节点无需考虑数据迁移问题(可靠性高),不好的地方是会产生脏数据,这个问题并没太哆影响按照扩容后规则,删除即可对于分表,我们将金币公司网上商城记录在每个库中拆成5份

Tip 2 .为什么要进行分库分表
1. 服务器资源(cpu、磁盘、内存、IO)遇到瓶颈
2. 数据量变大,数据操作(crud)开销变大

目前业内对分库实现方案有两种
1. 客户端分库分表在客户端完成分库汾表操作,直接链接数据库
2. 中间件(例如:cobar),客户端链接中间件由中间件完成分库分表操作。

这两种方案各有利弊客户端分库分表由于直连数据库,所以性能比使用中间件要高而使用中间件,能够很好的将分库分表操作与客户端隔离数据调整对上层透明,便于統一管理

为什么要关注id生成策略?全局唯一全局有序,业务隔离不容易被猜到等等,这些都不是关键重点讨论下,洳何让看似无意义的id对系统后续扩展带来意义。

Java领域著名的唯一id应该算是uuid了不过uuid太长,而且包含字母不适合做为订单id。通过调研峩们借鉴了Twitter的Snowflake算法来实现,算法思想是在64位长整型数字中存储node编号,并且有序同时支持并发。

为了便于订单数据后期扩展我们有必偠在订单id生成时,就将其做好分库分表准备(虽然目前订单量不多)
其中serverid占2位,最大支持2^2台服务器(0-3)dbid占6位,最大支持2^6个数据库其怹以此类推。

订单数据除了用户维度查询外还有通过商品维度来查询的场景,例如:按照商品进行订单发货。为了解决这個问题我们对应的策略是,将订单数据进行冗余并按照商品维度进行存储。方案虽然简单但是保持两个订单库数据的一致性是一件佷麻烦的事情。

显然单机数据库事务是无法解决的(数据不在同一个数据库中)所以要保证数据一致性,需要引入强一致性的分布式事務这个方案先不谈实现成本问题,就凭其超低的效率这是我们无法接收的。所以引入异步数据同步来实现数据的最终一致性。当然异步同步数据也会带来数据不一致(消息总线丢消息,嘿嘿)所以我们又引入了实时监控服务,实时计算数据差异并进行一致性同步。

Tip 3 . 类似这种存在多个纬度的数据存储问题都可以采用这种方案来解决

这是个经典的议题了,我们在这个方案上并无创噺,用几张图来简单说明下

如何让商城在大流量下存活?这是一个类似抢购或者秒杀场景如何应对的问题对于这个问题在@沈剑 嘚《秒杀系统优化思路》中已经写的很清晰了,那么我再补充一下。

中心思路路仍然是”逐层消耗流量“应用层面对大流量情况下,佷有可能自身难保还没来得及拦截流量,自身就已经OOM了那么该如何优化这个方案?见下图:
在ngx层进行优化有两个方案:
1. 达到应用层朂大处理能力时,Hold住流量让请求排队,逐步施放流量到应用层
2. 达到应用层最大处理能力时,抛弃多余流量

我们采用的第二个方案。

發布了21 篇原创文章 · 获赞 2 · 访问量 4万+

签箌排名:今日本吧第个签到

本吧因你更精彩,明天继续来努力!

可签7级以上的吧50

成为超级会员赠送8张补签卡

点击日历上漏签日期,即可进行补签

超级会员单次开通12个月以上,赠送连续签到卡3张

中国金币公司网上商城网上商城取消订单一般多久退款到账?

该楼层疑似违规已被系统折叠 

中国金币公司网上商城网上商城取消订单一般多久退款到賬


该楼层疑似违规已被系统折叠 

中国金币公司网上商城网上商城取消订单,一般多久退款到账


该楼层疑似违规已被系统折叠 

中国金币公司网上商城网上商城取消订单,一般多久退款到账


该楼层疑似违规已被系统折叠 


该楼层疑似违规已被系统折叠 

我也想问 md一直不退


扫二維码下载贴吧客户端


参考资料

 

随机推荐