阅读文章《当当网系统分级与海量信息动态发布实践》3
解耦与SOA实践
经过多年实践,当当网逐步完成系统架构的SOA化改造,并通过SOA化,实现了服务解耦与高内聚,简化了架构复杂度,这是主流零售型电商平台通常选择的道路。基于分布式的服务使系统具备更强的伸缩性和扩展性,系统瓶颈更易定位和优化,满足业务快速增长的需要。
SOA即面向服务的架构,在业界并没有统一的标准,但有一些公认的设计原则:标准合约、松散耦合、服务抽象、可复用性、服务自治、无状态性、可发现性、可组合性。
在实际应用过程中,根据系统情况以其中部分原则为侧重点,不求全责备,简单实用为上。
2012年起,当当网启动一系列重点项目,首先对开放平台进行重构,使开放平台成为搭建在PIM、库存、价格、促销、订单、TMS等主业务系统之上一套具备更灵活的扩展性的业务平台。
这次重构是当当网近年的重大架构调整之一,之后各主业务系统陆续实现业务平台化,支持多商家甚至是平台级跨商家的业务模式。开放平台将原有独立管理的商家商品信息、订单流程迁移至PIM系统和订单系统进行统一管理,充分发挥服务的可复用性,减少重复逻辑的多点实现带来的开发和维护成本。
商品信息是电商业务系统中的核心主数据,是促销、价格、库存、礼券、搜索等系统的基础数据来源。PIM系统作为商品主数据系统,承担着管理商品基础数据、关系、品牌、类目和状态等信息的职能,商品数据量在千万级别。
PIM系统的SOA建设经过了两个阶段。第一阶段主要是实现服务化,因服务设计粒度过细,发布的服务达到数百个,其他系统要完成一个业务功能可能需要调用多个PIM服务,增加了服务使用方的逻辑复杂度,也带来了更多的网络交互开销,不能称为SOA的最佳实践。
为此,又进行了第二阶段改造,将第一阶段实现的服务定义为基础服务,根据业务需要将其组合,提供粗粒度的对外服务,解决了之前的问题。粗粒度服务能够提供独立的业务功能,可能同时依赖于多个系统的基础服务,当服务使用方因业务需要调用多个粗粒度服务时,可能会对同一个基础服务发起多次访问,产生叠加的系统压力。我们经过分析认为,底层服务资源的消耗能够简化上层应用逻辑,对于系统架构层次的合理性更为有益,只要提高底层基础服务的性能,上层服务能力将更具弹性。
遵循SOA的系统解耦有时会增加系统资源开销,甚至降低部分服务性能指标,但可使系统架构更为清晰,增加服务复用性,具备更强的业务扩展性,提高开发测试效率,降低开发运维的人力成本,及时响应业务创新,使IT系统重现活力。
通过上述系统架构治理,当当网以很少的临时性系统准备顺利度过2013年双11大促。
海量动态信息流的快速发布
当当网打造综合品类电商平台,开放商家入驻,随之而来的是商品数据量迅速突破千万。商品信息是电商业务流程前端的重要数据,是进行营销活动、生成订单的基础。商品信息在前台有多种展示页面,大规模营销活动期间运营人员需要进行大量操作设置,价格、库存等也会更为频繁地更新。目前库存日更新量峰值超过1500万SKU的变化;价格日更新数据量达500万以上SKU,极限峰值超过1000万,每秒可能超过1万。数据同步及时性、一致性指标关乎用户体验和营销活动执行效率,如此大量的数据,在各业务系统之间高效稳定传输,对系统架构提出了很大的挑战。
当当网的商品数据有多个来源,自营实物商品来源于ERP系统,电子书来源于数字业务系统,商家商品来源于开放平台,最终这些商品的数据都由主业务系统中的PIM、库存系统、价格系统集中统一管理,再发布到搜索系统、推荐系统、前端页面展示等系统。为了对商品信息中的关键数据同步时效进行监控,当当网建立了啄木鸟监控系统,覆盖了近20个信息流路径数百个节点,对超出同步时限的环节自动报警,以便及时处理,避免发生严重的延迟。
商品的关键数据包括商品基本信息、库存和价格,库存和价格都依赖于商品基本信息,对于不同类型的数据,根据应用场景区别对待。平台化之后,每个商品都归属于一个商家,以商家ID为维度进行散列,将商品基本信息保存在数据库中,支持水平扩展,可以满足商品数据不断增长的需要。对于历史版本的商品信息,则迁移至历史版本库,作为订单交易快照供用户查询。库存数据在前端展示只关注是否有货,并不需要将每一次库存变化同步,在库存变为0或从0变为正整数时触发状态同步,交易下单时实时查询当前库存即可,此种变数量为状态的方式极大地减少了同步数据量,提高了数据一致性。
价格属于高度敏感的数据,对于手机专享价等类型,业务运营有设置生效时间、失效时间的要求,为保证前端按照时间动态展示,我们将生效时间段数据也发布到前端系统,由使用方判断当前有效价格。图2中给出了主要信息流。
图2 主要信息流示例
即便已经对不同类型的商品信息数据流进行了差异化处理,仍然不能排除短时间内会发生大量数据造成系统同步阻塞,影响正常业务运营操作的及时发布。极端情况下,超出系统处理能力还可能导致系统崩溃。为解决此类问题,我们采用批量、异步、分流、限流等手段进行处理。
批量、批次操作
限制API调用频次的同时,我们提供批量API供商家对商品信息进行更新,批量更新方式减少了各环节交互次数,提高了系统吞吐量,更好地贴合营销活动中批量处理的需求。在系统内部,批量方式能够有效降低系统资源开销,并能对频繁更新的商品数据进行合并处理,提高处理速度,使数据更新及时准确。
增加异步处理,减少同步处理
信息流同步经过多个系统,每个系统处理逻辑和吞吐能力不同,采用同步机制可能导致上游系统将下游系统拖垮,因此采用异步机制最为稳妥。异步方式有两点好处:一方面起到缓冲的作用,下游系统依据自身能力控制处理数据量,避免遭受超负荷的冲击,保证系统稳定运行;另一方面实现系统隔离解耦,一旦下游系统出现异常,上游系统仍然能正常处理数据,不至于引发连锁反应。
分流
不同的信息对处理时效的要求也不同,库存、价格、商品上下架状态同步及时性要求很高,而商品基本信息,如名称、副标题、详情则相对较低。拆分不同的同步路径,对及时性要求高的数据配置更多的系统资源,既保障了敏感数据的及时性,又避免了数据积压相互干扰。同理,针对三种不同的数据来源渠道(ERP、数字业务系统、开放平台),也可通过分流方式保证自营实物、电子书和商家商品信息的及时同步。
限流
多数的商品数据来源于商家,商家会通过一些第三方系统与当当网开放平台对接,调用API进行数据同步。一些不合理的同步机制设置会频繁发起大量的数据同步请求,而多数请求属于无效数据,这类数据难以识别,会浪费大量的系统资源,干扰有效数据的处理。我们在开放平台对每个商家调用API的频次进行限制,根据商家商品数量合理分配,有效地抑制了无效数据的泛滥。
随着多年双11和集中促销模式的考验,电商系统的峰值设计理念和实践已经慢慢趋于成熟,但仍然是所有电商类公司技术团队的最重要任务之一。
当当网技术团队经过多年的沉淀,积累了大量处理电商业务峰值的经验。通过深入分析应用场景,对系统进行分级,SOA化完成系统解耦,并采用多种技术手段实现海量数据的高效处理发布,不断提升系统吞吐能力,确保为用户提供稳定友好的购物服务体验,充分体现技术力量在产业中的重要作用。
文章链接:https://mp.weixin.qq.com/s?__biz=MzIyNjE4NjI2Nw==&mid=2652557384&idx=1&sn=fe85ffb4b3b87737c43637a948a21cf4&chksm=f39a353cc4edbc2ae3f34f18bdd8d3cab16bc9384dc8dacc3a0ec682881bf0b777b2ae5c1e04&scene=21#wechat_redirect