我们是如何将4000万用户吸引到网上汽车市场的?

116 阅读12分钟

DZone>数据库专区 >我们是如何将4000万用户吸引到在线汽车市场的?

我们是如何将4000万用户吸引到在线汽车市场上的?

以及为什么不需要不断优化。

Alexander Pavlenko user avatar通过

亚历山大-帕夫连科

·

Aug. 07, 21 -数据库区 -观点

喜欢 (1)

评论

保存

Tweet

2.09K浏览次数

加入DZone社区,获得完整的会员体验。

免费加入

在多年的IT工作中,尤其是NIX United公司,我注意到,项目越大,开发速度越快,团队越要改变逻辑,改善功能。 **在大型项目中,不断重构是一个不可避免的过程。**但有时也会出现一些问题。你不应该害怕它们。在这样的时刻,你有一个很好的机会来获得新的技能并提升你的专业知识。在应对了所有的困难之后,你将获得更多的客户信任。

在这篇文章中,我将谈论我们团队一直在犯的错误,直到我们想出如何解决这个问题。我强调了在我看来,什么是需要开发人员的最大效率。

伴随着一个故事

我们所处理的产品是一个美国的汽车经销商网站。当我们进入这个项目时,正在计划一个MVP。当时,80%的现有功能甚至不应该被完成。但是,这个项目在不断地增长,不断地变化,并且增加了许多交互功能。甚至当客户认为他进入了支持阶段时,我们仍然在引入新的功能。到了后来,我们几乎每周都会发布新功能。

其中一个功能成为了库存--一个影响用户看到的信息的相关性的后端程序。同时,用户从来不知道它。库存负责每天处理来自经销商的数据--关于汽车的信息和它们的照片。每天,网站都要进行更新,平均有500万辆汽车的新数据加入。另外,这个过程需要快速实施。

起初,客户对他最终想要得到的东西没有一个清晰的认识。随后,一切都发生得很匆忙。一些不准确的地方导致了数据处理花了14个小时。没有充分的记录:我们经历了哪些步骤,如果有什么东西崩溃了,那么在哪里,为什么。失败率也很高,例如,出现了一个错误的文件。问题甚至不在于失败的数量,而在于每次数据处理都必须手动开始,每一步都要被观察。

总的来说,这导致了数据丢失的高概率。如果程序在晚上崩溃,而且没有记录,第二天早上手动重启时,系统就会忽略新的文件。因此,新的数据被丢失了,昨天的信息没有被更新。结果,用户看到了不相关的数据。客户受到影响,我们也受到影响。

为了解决这个问题,我们采取了并行化进程的方式,并尽量减少人工控制。 现在,整个过程只需要几个小时。由于它在客户营业时间前两小时开始,网站有时间完全更新。而且,如果出现了故障,只需点击一下就可以迅速重启。

编制SPA应用程序的索引

爬虫无法看到我们的网站。网站页面要么没有被索引,要么被错误地索引。这影响了指标和搜索查询以及客户的总体情绪。

我们的SPA(单页应用程序)是用React实现的。在过去的五年里,搜索引擎优化的问题对这类应用程序来说非常重要。在互联网上寻找问题的解决方案后,我们偶然发现了两种完全对立的意见:有些人认为SPA应用程序的索引没有问题,有些人说有问题,甚至比单体还差。

在2017年项目开始时,流行的搜索引擎通常部分或完全不支持对JS应用程序的索引,谷歌除外。我们希望伪装者能解决我们所有的问题。但我们还没有走出困境。

在索引的问题中,出现了另一个困难--大量的JS和第三方JS脚本与我们集成。它们的数量只会越来越多,因为这是客户的倡议。我们意识到,在某些时候这将影响性能。因此,我们进行了彻底的改变--我们将网站的主要页面重写为一个单体(搜索查询的主页面和汽车页面)。它们是要求最多的,也是JS负载最重的。积极的变化没有多久就出现了。因此,我们学会了深入调查问题并鼓励客户与我们一起做。

巨大的数据库和它的处理

我们很快就达到了1500万用户**(剧透一下:我们在这个过程中达到了4000万**)。考虑到我们以前的经验,我们明白有必要建立记录,使数据处理不出现问题。在某种程度上,我们可以完全实现这套功能。

在研究过程中,我们经历了一些大公司,如Stackoverflow、Netflix、SoundCloud和GitHub,它们的任务与我们相似。他们都使用了2个工具--ElasticsearchRedis。我们也为我们的项目选择了它们。

我们需要做什么?我们需要一个高负载的系统,有可能操作一个巨大的数据库。该网站为其用户提供了各种经销商程序,他们参与了搜索和过滤数据。它还需要提供保存你喜欢的汽车和搜索查询的能力。这就是客户的痛苦。他不喜欢在网站上花了一些时间,使用了大量的过滤器,并进行了分类搜索后,你可能会在瞬间失去它。

有超过20种相互关联的过滤器。其中一个的选择直接影响到其他的能力。排序包括各种指标的困难条件。例如,其中一个排序有多级条件,并影响到列表中某辆车的优先级别。

参照Elasticsearch和Redis,我们立即划定了它们的影响范围。Elasticsearch是一种基本信息的存储,并帮助处理某些数据和过滤器的搜索结果。起初,Redis被赋予了一个小型缓存存储的角色,最终在可变性和功能上都有所增长。这帮助我们解决了数据方面的问题。新的挑战是功能性的,更多的是关于来自客户的即时变化。我们相当迅速和有效地处理了这些问题。

当竞争者拥有更多和更快的时候

每个客户都希望拥有最大的、最有成效的、可识别的、以及最重要的、可盈利的产品。我们的客户也不例外。他一直在寻找改善资源的方法。汽车经销商网站在美国非常流行。有很多类似的网站,相应地也有很多竞争对手。我们需要找到一种方法来脱颖而出。

在工作过程中,我们在2个指标上比较了资源。

  • 可视化页面加载 - 当用户可以看到它并与之互动时。
  • 完全加载--当所有的脚本和进程都加载到视觉内容上。

由于许多集成和我们方面的一些缺陷,我们在完全加载方面远远落后于我们的竞争对手。此外,搜索页面的低性能也非常令人失望。需要进行紧急优化。因此,我们将超过或至少去追赶竞争对手,变得更加方便用户。

这里需要注意的是,在某些时候,客户开始积极提出创新。

我们在匆忙中改变和增加了很多。最终的商业逻辑与原来的有很大的不同。不断逾期的最后期限。

由于缺乏时间,我们没有充分考虑新业务逻辑的特点。因此,我们方面有几个不足之处。除其他事项外,这也是开始产品优化的原因。

在所有的优化中,我想强调的是缓存。

这个过程被分为2个阶段。

  • 我们的管理员负责Nginx的缓存。
  • 开发人员负责PHP优化的部分。

在分析了实体和结构之后,我们确定了可以单独缓存的点。此外,我们还发现了哪些实体变化最频繁/最不频繁,它们携带哪些信息,以及它们对用户的重要性。因此,我们不仅对它们进行了单独的缓存,而且还选择了不同的缓存寿命,以及在某些条件下可以不按计划重新创建的额外进程。例如,新的过滤器出现的可能性要比经销商送来一辆与当前过滤器(品牌、型号)完全匹配的新车的可能性小得多。在这种情况下,缓存的可行性就比较小。通过这种方式,我们将数据的相关性失败的可能性降到了最低。

在改进缓存和其他优化之后,我们看到整个网站的工作有了积极的成果。

统计数字说明了问题:在视觉负载方面,我们绕过了我们的竞争对手,而在整体上,我们接近了第一个竞争对手,这也可以说是一种成功。

追求更好的性能

我喜欢美国数学家、畅销书《计算机编程的艺术》的作者唐纳德-克努斯的一句话。

"如果你把所有能优化的东西都优化了,你将永远不快乐"。

但客户非常喜欢这个优化结果,所以他的目标是尽可能快的性能。我找到了几个测量工具,并把我们的大部分精力投入到分析这些工具上。

我们尝试了几个。例如,Dareboost和Google Audits。

Dareboost是一个成熟的网站,有很多指标,并允许逐帧加载页面到毫秒,第二个是Chrome检查器中的一个普通标签,做同样的事情,但细节较少。

谷歌审计中,你可以选择分析的应用程序类型(移动或桌面)和指标来检查网站。

该资源将漏洞分为五类。

  • 可访问性。
  • 性能。
  • 渐进式网络应用程序。
  • 最佳实践。
  • SEO。

我们的产品不是PWA,所以我们在其余类别中进行了测试。

所有Dareboost的功能都可以通过付费订阅获得。该资源甚至知道如何确定使用什么技术来创建页面。根据分析的结果,你可以建立图表,并确定未来应该改进的点:什么是可以纠正的,虽然它不带有关键的东西,和需要紧急解决的问题。

关于我们的网站,Dareboost和谷歌审计都表示赞同。最常见的情况是,他们注意到缺乏元标签和HTTP头文件。或者,在这些工具看来,它们的设置不够安全。

渐渐地,我们对更好的性能的追求归结为改善缓存,在页面上添加HTTP头和元标签,并使移动版本的用户友好。所有的变化都是在最短的时间内发生的。其余的时间,我们试图向客户解释,任何后续的改变都只是在浪费资源,而不是带来理想的效果。

这已经到了荒谬的地步。谷歌审计说,我们在元标签中没有企业颜色,这影响了搜索查询的URL的颜色。但是增加了这个标签后,虽然我们在这项工作上花了不少时间,但在视觉上没有任何变化。

及时更新依赖关系的关联性

Elastic和Laravel的标准更新导致我们所使用的库完全不再被支持。我不得不手动添加一些层。很简单,但是很费时间。在我们的案例中,定期更新导致一个专家工作了近50个小时。

我们想: 我们是不是应该写一些脚本来监控这些库?在Laravel的主要版本中,他们写了关于安全漏洞的更新和修复,这非常重要。我想没有一个客户会拒绝花时间来解决安全问题.只要我们掌握了这个时机, 这个过程就变得简单了.接下来的更新是有规律的,花费的时间也最少。

最后我想说的是:失败是一个大型项目生活中不可或缺的一部分。没有必要因为它们而心烦意乱,指手画脚,也没有必要每次在下一个困难面前都感到惊恐。只要打起精神,举一反三,让客户高兴起来。想通了你以前不知道的事情,或者通过向同事解释一些新的东西,将来你就能更快地应对更大的挑战。

主题。

数据库设计、 数据处理、 优化、 真实世界的经验

DZone贡献者所表达的观点属于他们自己。

DZone上的热门话题


评论

数据库 合作伙伴资源