首页 文章 精选 留言 我的

精选列表

搜索[全球覆盖],共10000篇文章
优秀的个人博客,低调大师

vivo 全球商城:商品系统架构设计与实践

一、前言 随着用户量级的快速增长,vivo官方商城v1.0的单体架构逐渐暴露出弊端:模块愈发臃肿、开发效率低下、性能出现瓶颈、系统维护困难。 从2017年开始启动的v2.0架构升级,基于业务模块进行垂直的系统物理拆分,拆分出来业务线各司其职,提供服务化的能力,共同支撑主站业务。 商品模块是整个链路的核心,模块的增多严重影响系统的性能,服务化改造势在必行。 本文将介绍vivo商城商品系统建设的过程中遇到的问题和解决方案,分享架构设计经验。 二、商品系统演进 将商品模块从商城拆分出来,独立为商品系统,逐渐向底层发展,为商城,搜索,会员、营销等提供基础标准化服务。 商品系统架构图如下: 前期商品系统比较杂乱,包含业务模块比较多,如商品活动业务、秒杀业务,库存管理,随着业务的不断发展,商品系统承载更多的业务不利于系统扩展和维护。 故思考逐渐将商品业务逐渐下沉并作为最底层、最基础的业务系统,并为众多调用方提供高性能的服务,下面介绍商品系统的升级历史。 2.1 商品活动、赠品剥离 随着商品活动的不断增多,玩法多样,同时与活动相关的额外属性也相应增加,这些都并不是与商品信息强关联,更偏向于用户营销,不应该与核心商品业务耦合在一起,故将其合并入商城促销系统。 赠品不仅仅是手机、配件,有可能会是积分、会员等,这些放在商品系统都不合适,也不属于商品模块的内容,故同步将其合并入商城促销系统。 2.2秒杀独立 众所周知,秒杀活动的特点是: 限时:时间范围很短,超过设置的时间就结束了 限量:商品数量很少,远低于实际库存 访问量大:价格低,可以吸引非常多的用户 基于以上特性,做好一个秒杀活动不是一蹴而就,由于系统资源共享,当突发的大流量冲击会造成商品系统其他业务拒绝服务,会对核心的交易链路造成阻塞的风险,故将其独立为单独的秒杀系统,单独对外提供服务。 2.3代销系统成立 我们商城的主要销售品类还是手机以及手机配件等,商品的品类比较少,为了解决非手机商品品类不丰富的问题,运营考虑与知名电商进行合作,期望引入更多的商品品类。 为了方便后续扩展,以及对原有系统的不侵入性,我们经过考虑专门独立出一个子系统,用于承接代销业务,最后期望做成一个完备平台,后续通过提供开放API的方式让其他电商主动接入我们业务。 2.4库存剥离 库存管理的痛点: 由于我们的库存都是到商品维度,仅仅一个字段标识数量,每次编辑商品都需要为商品调整库存,无法动态实现库存管理; 同时营销系统也有自己活动库存管理机制,入口分散,关联性较弱; 可售库存和活动库存管理的依据都是实际库存,造成容易配置错误。 基于以上痛点,同时为了更方便运营管理库存,也为未来使用实际库存进行销售打下基础,我们成立库存中心,并提供以下主要功能: 与ecms实际库存进行实时同步; 可以根据实际库存的仓库分布情况,计算商品的预计发货仓库和发货时间,从而计算商品预计送达时间; 完成低库存预警,可以根据可用库存、平均月销等进行计算,动态提醒运营订货。 三、挑战 作为最底层的系统,最主要的挑战就是具备稳定性,高性能,数据一致性的能力。 3.1稳定性 避免单机瓶颈:根据压测选择合适的节点数量,不浪费,同时也能保证沟通,可以应对突发流量。 业务限流降级:对核心接口进行限流,优先保证系统可用,当流量对系统压力过大时将非核心业务进行降级,优先保证核心业务。 设置合理的超时时间:对Redis、数据库的访问设置合理超时时间,不宜过长,避免流量较大时导致应用线程被占满。 监控&告警:日志规范化,同时接入公司的日志监控和告警平台,做到主动发现问题并及时。 熔断:外部接口接入熔断,防止因为外部接口异常导致本系统受到影响。 3.2 高性能 多级缓存 为了提升查询速度,降低数据库的压力,我们采用多级缓存的方式,接口接入热点缓存组件,动态探测热点数据,如果是热点则直接从本地获取,如果不是热点则直接从redis获取。 读写分离 数据库采用读写分离架构,主库进行更新操作,从库负责查询操作。 接口限流 接入限流组件, 直接操作数据库的接口会进行限流,防止因为突发流量、或者不规范调用导致数据库压力增加,影响其他接口。 不过早期也踩过一些坑: 1、商品列表查询造成redis key过多,导致redis内存不够的风险 由于是列表查询,进行缓存的时候是对入参进行hash,获取唯一的key,由于入参商品较多,某些场景下入参是随时变化的,根据排列组合,会造成基本每次请求都会回源,再缓存,可能造成数据库拒绝服务或者redis内存溢出。 方案一:循环入参列表,每次从redis获取数据,然后返回; 这个方案解决了key过多导致内存溢出的问题,但是很明显,它增加了很多的网络交互,如果有几十个key,可想而知,对性能会有不小的影响,那有什么其他办法能减少网络交互呢,下面我们看方案二。 方案二:我们通过对原有的Redis 组件进行增强,由于Redis集群模式不支持mget,故我们采用pipeline的方式实现,先根据key计算出其所在的slot,然后聚合一次性提交,这样每个商品数据只需缓存一次即可,同时采用mget也大大提升了查询速度。 这就即解决了key值过多的问题,也解决了方案一中多次网络交互的问题,经过压测对比,方案二比方案一性能提升50%以上,key越多,效果越明显。 2、热点数据,导致redis单机瓶颈 商城经常有新品发布会,发布会结束后会直接跳转到新品商详页,此时新品商详页就会出现流量特别大且突发、数据单一,这就导致Redis节点负载不平衡,有些10%不到,有些达到90%多,而一些常规的扩容是没有效果的。 针对热点问题我们有以下解决方案: key的散列,将key分散到不同的节点 采用本地缓存的方式 开始我们采用的是基于开源的Caffeine完成本地缓存组件,本地自动计算请求量,当达到一定的阀值就缓存数据,根据不同的业务场景缓存不同的时间,一般不超过15秒,主要解决热点数据的问题。 后来替换成我们自己研发的热点缓存组件,支持热点动态探测,热点上报,集群广播等功能。 3.3 数据一致性 1、对于Redis的数据一致性比较好解决,采用“Cache Aside Pattern”: 对于读请求采用先读缓存,命中直接返回,未命中读数据库再缓存。对于写请求采用先操作数据库,再删除缓存。 2、由于库存剥离出去,维护入口还是在商品系统,这就导致存在跨库操作,平常的单库事务无法解决。 开始我们采用异常捕获,本地事务回滚的方式,操作麻烦点,但也能解决这个问题。 后来我们通过开源的seata完成分布式事务组件,通过改写代码引入公司的基础组件,目前已经接入使用。 四、总结 本篇主要介绍商城商品系统如何进行拆分、并慢慢下沉为最基础的系统,使其职责更加单一,能够提供高性能的商品服务,并分享在此过程中遇到的技术问题和解决方案,后续会有库存系统的演进历史、分布式事务相关内容,敬请期待。 作者:vivo官网商城开发团队-Ju Changjiang

优秀的个人博客,低调大师

全球商业领袖调查:网络安全与疫情“齐飞”

根据Telia Carrier的一项新调查,45%的商业领袖声称他们的公司因新冠疫情而遭遇了更多的网络安全事件。 从地域分布来看,55%的美国和49%的英国受访者的网络安全受到这些攻击的影响最为严重(表明他们的业务比欧洲企业的业务更容易成为目标),这反过来又导致绝大多数受访者(60%)增加了在网络安全领域的投资。 1.业务影响 68%的企业领导者表示,他们的公司在过去12个月中经历了DDoS攻击,其中英国(76%)和美国(73%)的受攻击比例显著高于德国(59%)和法国(56%)。 此外,超过一半的参与调查的领导者证实他们在那段时间经历过DDoS勒索攻击或其他勒索攻击,其中大多数(65%)受攻击的目标是英国公司,而法国的数量相对较少(38%)。 “由于这些事件的敏感性,调查没有确定网络犯罪分子在多大程度上成功地从企业勒索了钱财,但数据统计结果确实突出了问题的严重性,并且许多DDoS攻击背后都有经济动机。调查结果还清晰地表明,英国企业正在成为专门被针对的目标,因此美国和英国企业的担忧加剧是有道理的。”Telia Carrier的首席布道师Mattias Fridström解释道。 新冠疫情也让很多商业领袖意识到了业务和网络安全的脆弱性。自新冠病毒大流行以来, 51%的受访者感觉更容易受到网络攻击,其中美国和英国企业领导者的受威胁感尤其强烈。 DDoS攻击也对很多商业领袖产生了巨大影响。11%的受访者表示此类攻击构成的威胁非常严重,可能会破坏业务连续性;另有40%的受访者表示,此类攻击产生了重大影响,导致业务严重中断和收入损失。 受影响最严重的国家是英国(43%),紧随其后的是美国(39%),其中金融服务和IT服务行业的组织受到的影响最大。 2.安全痛点 令人吃惊的是,78%的领导者透露,他们在过去12个月内响应了多达100起网络安全事件,其中英国和美国企业遭遇的网络安全事件数量最多。 至于面临的网络威胁的性质,网络钓鱼(欺诈者通过电话、电子邮件或短信联系受害者并诱使他们泄漏敏感信息)毫无悬念地被许多领导人(56%)视为头号网络威胁。也许更能说明问题的是,几乎同样多(49%)的受访者认为DDoS攻击与网络钓鱼的威胁性处于同一级别。 Mattias Fridström评论道:“企业的综合安全解决方案由多个组件组成,其中网络安全只是其中的一个部分。然而,网络可能是安全堆栈中最脆弱的部分,因为它固有地暴露于外部世界——通常是远程的。当网络出现问题时,所有依赖网络的系统和工作流程也会受到影响。当您看到这些调查结果时,毫无疑问,网络安全维护成本仍是迄今为止最大的企业安全成本,42%的领导者将其列为了最大的安全支出。” 3.攻击缓解 为了应对网络安全威胁,近一半(45%)的领导者目前通过使用ISP/网络提供商DDoS保护来缓解DDoS攻击。相当多的人拥有自己的内部缓解/清理能力(34%);不到五分之一的企业使用了基于云的解决方案,然而100家企业中仍然有3家小规模企业的网络安全令人担忧,网络安全威胁并没有缓解。 当被问及他们对网络服务提供商的DDoS防护服务的熟悉程度时,超过一半(53%)的受访者表示,他们认为自己并不熟悉网络服务提供商提供的DDoS防护服务。其中,美国的企业领导人对网络安全的熟悉程度最高,而法国领导人的熟悉程度最低。 【本文是51CTO专栏作者“安全牛”的原创文章,转载请通过安全牛(微信公众号id:gooann-sectv)获取授权】 戳这里,看该作者更多好文

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册