今年的“双十一”全民网购狂欢节已经落下帷幕,从各电商企业发布出来的数据来看,今年的热烈程度再次毫无悬念狂刷以往的记录。而在这一切的背后,是一场“真枪实弹”的技术硬仗,更是一场能令技术人“热血沸腾”的技术狂欢。本文中,牛小七将总结国内各大知名电商的技术架构实践,带大家一睹它们如何鏖战“双十一”?
当当:促销系统和交易系统双系统重构
重构促销系统:当当原促销系统模型较陈旧、扩展性差、不成熟并且与其它系统耦合严重,因此,此次的核心改进点在于促销系统的扩展性、灵活性,系统解耦和更强大的数据处理能力。在确定基本促销模型并抽象后,重点在于实施解耦,当当将直读DB和存储冗余促销数据的系统修改为调用服务及监听MQ;在逻辑回收方面,将促销校验与促销计算提取为交易服务,回收原先由购物车、交易系统自行处理的促销逻辑。此外,还做了提取促销工具属性及完善促销系统查询服务的工作。在应用架构实现上,从前端页面到后端逻辑,尽量避免有逻辑与促销类型直接绑定,全部以插件化方式与促销模型对接,完全根据促销类型的配置进行组装。鉴于促销的时效性和实时性要求,当当在数据库前加Redis缓存,以提高响应速度,同时监听MQ,根据事件清理相应的缓存数据。
重构交易系统:当当交易系统的重构使用了业界较成熟的系统方案,重构过程主经包括易于管理的集中化配置、将大流程计算结果进行缓存提高页面刷新速度、小版本结算与统一结算合并、巧借Nginx的reload配置进行灰度发布等。由于交易系统的计算都和金钱有关,当当还提出线上并行比对方案,根据老交易系统比对新交易,保证其逻辑正确。此外,还开发了分流功能,按照用户id分流前,先使用测试白名单中的用户进行预验证,预验证通过后,再按比例由低至高逐步切换。值得一提的是,基于灰度发布技术,新交易系统的Web服务器很容易做到按需伸缩。
苏宁:主抓四大方向
系统拆分:技术上分析主流程、分离主干系统和枝叶系统、根据业务内聚性独立出主干系统,做到分别部署。并根据业务功能拆分出会员、商品、库存、价格、购物车、交易、订单和内容管理几大系统,组建对应的研发中心来维护;根据交易环节的系统压力,独立出抢购和秒杀系统,拆分出购物券、云钻等营销类的系统,并组建营销中心。
基础平台:基础平台主要抓基础架构、通用系统、中间件及包括运维监控、持续集成、大数据分析、风控系统在内的平台。主要工作包括系统之间的通讯、统一验证和内部管理系统的统一权限、Session共享、分布式调用链、Redis分片存储、数据库的分库分表中间件、统一配置管理和流控等。
研发流程:除通过代码走查、sonar平台、各种测试等手段,中心也采用代码飞检来确保代码质量。代码飞检即定期快速评审系统核心代码,主要由各个系统负责人、架构师以及总监负责。流程发布检查单为系统的最后一关,需经过产品负责人、开发负责人、QA、测试负责人、DBA、运维人员、以及线上验证人员对各个环节进行确认,确保系统上线过程少出问题或出问题能及时下架。
系统保障:主要重视提高系统负载能力和应急预案两方面。在提高系统负载能力方面,根据历史数据对双11流量进行预估,细化到每个系统的PV、UV、峰值TPS,并对目前系统压力、容量和相关指标进行统计。此外,对系统进行了自上而下的体检,针对发现问题制定相关方案。具体体现在对系统架构梳理、关键代码优化以及中间件调优。在应急预案方面,主要涉及拒绝黑名单、限流及降级策略。限流通过防火墙流控、中间件流控功能和组件实现。
蘑菇街:五个关注焦点
稳定性:对已遇到过的问题,及时采用各种方式解决或规避。
多维度的阈值监控:实时pid数量监控、调整容器内存计算算法更精确监控内存、修改container里的rsyslog配置,只让宿主机去读kernel以解决日志乱序。在压力大的情况下,为个别容器进行动态的CPU、内存等扩容或缩容,调整甚至放开磁盘iops限速和网络的TC限速。此外,定期扫描线上潜在风险。
灾备和紧急故障处理:如在不启动DockerDaemon情况下,离线恢复Docker中数据的方法。方法是:用dmsetup create命令创建一个临时的dm设备,映射到Docker实例所用的dm设备号,通过mount临时设备,恢复原有数据。支持Docker容器冷迁移。通过管理平台界面一键实现跨物理机迁移。
与已有运维系统的对接:Docker集群须能与现有运维系统无缝对接,才能快速响应,做到秒级的弹性扩容/缩容。因而以统一的容器管理平台,实现对多个Docker集群的管理,从下发指令到完成容器的创建可以在7秒内完成。
性能优化:针对磁盘IO的性能瓶颈,调优部分内核参数。引入Facebook的开源软件flashcache,将SSD作为cache,提高docker容器的IO性能。通过合并镜像层次优化docker pull镜像的时间。在docker pull时,每一层校验的耗时很长,通过减小层数,不仅大小变小,docker pull时间也大幅缩短。
唯品会:六个设计要点
系统模块有效切分:原业务系统在实际运作中业务耦合严重、模块划分不合理,导致模块之间边界不清楚。唯品会从整个系统角度出发,梳理整个流程,重新做系统定位,将不同业务子系统做物理分离,减少彼此依赖,使各个子系统独立部署,出现问题后能快速采取措施,隔离出问题模块,将故障影响降到最低。
服务化解耦,集中服务治理:基于Spring的Java开发框架独立自主开发Venus系统,涵盖数据库访问层封装、缓存接口封装、CRUD服务代码自动生成、OSP/REST服务调用接口封装及异步支持等方面,降低开发复杂度,、提高开发效率、提升代码质量,、规范开发流程。
增加异步访问:对于系统间实时性要求不高、执行耗时的操作,可通过异步处理提高调用者性能、响应能力。通过异步调用通知非主要流程,加快系统主要业务流程的反应速度和性能,异步处理机制可起到缓冲的作用,被通知的下游系统可依据自身能力控制处理数据量,避免遭受超负荷的冲击,保证系统稳定运行,增加系统可用性。分布式异步消息队列服务器可在宕机后确保消息不丢失,异步系统有重试机制,从而提高系统可用性、健壮性和扩展性。
多阶段缓存,降低后端压力:做动静分离降低后端压力。引入分布式缓存,对缓存数据服务节点做统一集中管理,支持缓存集群弹性扩展,通过动态增加或减少节点应对变化数据访问负载;冗余机制实现高可用性,无单点失效,不会因服务器故障而导致缓存服务中断或数据丢失。应用端使用统一的API接口访问缓存服务器。此外,唯品会还巧用应用服务器本地缓存,将基本不修改的配置数据、全局数据缓存在应用服务器本地,减少对后端缓存服务器实例的峰值冲击。
优化数据库访问:优化复杂查询和关键模块的数据库慢查询。保证在实现功能的基础上,减少对数据库的访问次数;通过查询参数,减少对表的访问行数,最小化结果集,减轻网络负担。采用读写分离技术,通过一主多从,写操作只发生在主表,多操作发生在从表上以缓解对主数据库的访问压力。并借助于分布式缓存,提供远大于数据库访问的性能。在设计时,需要防止缓存失效带来的缓存穿透压力,容许一定程度的数据冗余。对于关键模块,为防止因依赖而影响当前模块的性能和可靠性,可适度保存其它模块的关键数据,减少由于访问其它模块服务带来的系统损耗和可靠性压力。使用NoSQL数据库对海量大数据进行存储和处理。
加强系统监控:在系统和网络层面的监控,主要监控服务器指标(如CPU、内存、磁盘、流量、TCP连接数等)和数据库指标(如QPS、主从复制延时、进程、慢查询等)。业务层面监控主要通过在指定页面做埋点,和从业务系统的数据库两种方法,将需要监控的数据抽取出分析处理,存入自己维护的数据库中,然后通过浏览器页面、展示监控数据,页面同时提供各种时间维度上的筛选、汇总。此外,独立研发应用性能监控平台Mercury,通过在应用程序中植入探针逻辑实现对应用代码、关系数据库、缓存系统的实时监控。Mercury通过收集日志、上报日志的方式即时获取相关性能指标并进行智能分析,及时发现分布式应用系统的性能问题以及异常和错误,为系统解决性能和程序问题提供方便可靠的依据。
巧用云服务,挖金“双十一”
对于电商平台来讲,如果Web服务、业务数据库及静态资源部署在同一台服务器上,会相互影响执行效率;此外,还会有单点故障的问题,面对以上问题,最直接的方案则是做动静分离。而电商平台多重图片应用,需要消耗大量的带宽资源,同时图片的存储和处理会产生大量的成本。因此,使用第三方的存储服务将使得电商企业可以从容应对业务增长,特别是在“双十一”这种关键的场景下更显得尤为重要。在电商的业务场景中,七牛的技术方案将主要帮助他们解决如下难题。
KODO对象存储:电商平台有着诸如图片及部分社区电商平台的视频存储的需求。静态资源从业务服务器上剥离出来存储在七牛,加载时性能会提高。对于此,七牛把存储系统(甚至是主机系统和未来大的计算系统)进行孵化和提取出来,存储系统的扩容可达100PB级。
融合CDN加速:在类似“双十一”这样的大促活动中,宝贝刷不出来会严重影响电商平台用户的体验,而将电商平台的宝贝图片通过CDN缓存到靠近用户的节点,能提高CDN效率。同时,由于七牛云服务的弹性扩容,也避免了电商因大促自建存储而耗费各种资源等情况,让电商平台能自如应对突发业务的流量。此外,七牛特有的融合CDN加速平台,是引入主流CDN厂商优质节点与七牛自有高质量节点相结合而形成的,全面覆盖各运营商,真正做到了无盲区,特别关注小运营商区域,确保各区域的网购用户都能享受到最优的服务体验。七牛融合CDN加速成功实现了节点级互备,确保服务高可用高性能及持续可用。
DORA数据处理:电商平台上图片的各种转码需求非常大。由于移动设备种类繁多、屏幕分辨率不一致,就需要非常多的规格。如果图片一有改动,就需要让后台运维遍历所有图片重新转化。这样不仅加大了运维人员的工作量,还需要大量的存储空间。七牛图片实时转码功能,可帮助电商用户实时扩展新的图片规格,并且将转码生成的新规格图片放在七牛提供的缓存层供App调用,不用占用存储空间。这种服务器端只需存储一份原图,其他规格实时生成且不占用存储空间的机制,自然能帮助其节省大量的存储成本,同时用户体验也能得到很好的提升。此外,存储于七牛的所有JPEG格式的图片均可实时转码成WebP格式,还可进一步提升用户访问图片的流畅度,同时帮用户节省流量。
目前,七牛已为包括有赞、帮5买、有货(YOHO)、美柚、穿衣助手、明星衣橱、蘑菇街、1626奥特莱斯等在内的电商客户提供安全存储、双向加速及图片处理服务。
温馨提醒:这是一个最好的时代,七牛融合CDN已于“双十一”前全面降价,降幅达42%。
声明:本文部分内容根据微信公众账号InfoQ的《盘点电商大战背后的技术力量支撑》一文整理而成。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/54204.html