在线搜索和预订服务在世界各地的版权旅行的诞生的故事:开发者的话

一切如何开始
理想的折磨
技术及其独特之处
如何存放以及存放在哪里?
不仅要存储,而且要搜索
这是神秘的SEO
CDN我们的一切
总结一下

一切如何开始


我想分享我们创建在线服务以搜索和预订世界各地版权旅行的半年历史。 在撰写本文时,目标是谈论从头开始创建我们自己的解决方案的经验以及我们在此过程中遇到的问题和挑战,因此请不要严格判断。

首先,它是一种什么样的服务,以及为什么有必要创建它。 长期以来,我们的团队为企业客户从事各种大型项目。 这些是银行,企业,大型控股公司以及文档管理系统的门户。 自然地,在这样一个细分市场工作意味着对感兴趣的员工只有一小部分人会感到满意,并且不一定能长期成功地使用它。

造成这种情况的原因有很多:在开始阶段对项目缺乏了解,渴望省钱并获得最完善的设备,在最后阶段改变需求而未对条款和预算进行任何修改。 如您所见,在这种情况下,双方的项目满意度都很难实现。

因此,在获得所有这些经验之后,我们决定尝试在市场上进行尝试,在这个市场上,来自客户的反馈迅速增加,您将尽快了解产品的兴趣,并每天查看服务的使用情况。
事实证明,我们平静的日子已经过去了!

理想的折磨


首先要做的是想出一个我们想要提供的有用的想法,它不在市场上,并且会被感知和预期。 我们有几个这样的样本,在最初的两个月中,我们进行了实验以寻找未来。 如您所知,技术方面也存在问题,因为有必要在最短的时间内完成功能化的模型,检查其可操作性,并不断对其进行改进或重做。

刚开始时,我们所使用的技术不是非常适合jQuery和C#(我们在先前项目中使用过)。 这些工具使我们无法快速灵活地应对挑战。 幸运的是,我们已经考虑了用于客户端和服务器开发的新方法。 我们的选择取决于Angular 2和Node.js。 该解决方案使我们能够快速形成可以在最短时间内修改的组件和模块(在当天,我们可以将它们重做两次或三次)。

我们得出的结论是,每个组件都应尽可能小,并且可以集成到其他组件和模块中。 因此,在实验过程中,我们积累了足够的模板,可以根据这些模板组装各种工作布局。

但是,如果我们足够快地找到了这些工具,并且在战斗中越来越多地提高了我们的技能(我会立即注意到Google可以为您提供帮助,但是请不要忘记视频教程),那么另一个问题就出现了在哪里存储数据。 但是稍后我将讨论这个问题,现在回到想法本身。

我们旨在组织旅行的主要服务媒介,您会立即说,在我们这个时代,有很多旅行网站和服务,以及同一批旅行社,我也同意。 但是,问题是如何改变普通游客的休息态度,让他有机会获得最大的印象,并以个人的方式对待自己的挚爱。
我们知道,一项雄心勃勃的计划无法通过一项服务或一项解决方案来解决,但我们始终需要从某个地方开始。 现在,在确立了自己的主要目标之后,我们开始寻找第一块砖,它将作为我们未来解决方案的基础。 经过长时间的搜索,我们想到了一种服务的想法,我现在想谈一谈。

这是什么

简而言之,这是旅行者的优步。 想象一下,您是一位经验丰富的旅行者,曾到世界各地许多有趣的地方旅行,并且真的想分享他的经验,很好,并赚了一些钱。 另一方面,一位游客因躺在海滩上吃喝玩乐而土耳其度假而感到厌倦。 这些人需要以某种方式团结起来。 因此,我们决定帮助这些人找到彼此。
该服务是一个市场,有经验的游客可以在此注册以设计他们的旅行,并将其提供给未来的旅行者。

技术及其独特之处


如何存放以及存放在哪里?


正如我已经写过的,在选择了用于创建服务的工具之后,出现了选择数据仓库的问题。 当然,多年来,我们已经习惯于关系数据库,尤其是SQL Server。 但是,需要一个平台,以便在一开始时进行最少的配置,并在进一步支持下付出最少的努力,并具有扩展我们的服务开发和访客数量的能力。

因此,在搜索过程中,找到了一个满足我们所有要求的解决方案,那就是Firebase实时数据库。 这项服务帮助我们解决了数据存储,托管,身份验证服务以及用于存储静态数据的仓库的问题。 另外,该服务在Google的支持之下,这反过来又给我们带来了很多好处,因为它提供了单独的库来使用Angular 2,并且方便,快捷。 但是,我们获得的最酷的功能是开箱即用的实时数据库。 我们最初的感觉简直太棒了。

现在,我们不必不断地向服务发出请求,监视客户端上数据的相关性,等到数据到达客户端为止(嗯,我注意到,Angular也为我们提供了帮助)。 我们在一天中的某个地方配置了所有这些功能,然后开始直接创建我们的服务,而不会因基础结构问题而分心。 我必须马上说,在开发过程中,我们没有在此服务上花费一毛钱,因为基本版本是免费的,并且对于开发,测试和试验来说已经足够了。

不仅要存储,而且要搜索


因此,在第一个Beta版准备就绪后,就出现了过滤数据的问题,我们意识到了Firebase的第一个缺点。 事实证明,根本不支持针对大量条件进行数据采样的过程。 可以只选择一种条件来选择数据,也可以在一个字段中收集多个值,然后对其进行过滤。 这种方法不适合我们,我们再次开始寻找解决方案。
当然,我们没有拒绝Firebase,因为这一减号与这项服务所提供的全部优势没有重叠。 幸运的是,我们在研究过程中获得了使用Google Big Query的经验,因此决定应用它。 首先是Google,第二是本地和喜爱的SQL查询,而且每月免费拥有1TB数据的成本较低。

同样,一切变得清晰易懂,他们编写了数据发送服务并将其成功地固定到Cloud Function。 我忘了说Firebase还照顾了后端,您可以在Nodejs上编写自己的触发器,并将其挂在数据库中的任何事件以及http请求上。

如您所见,寻找解决方案和方法的过程已成为我们的日常任务,因为几乎每天我们都面临着需要迅速解决的新挑战。

焦点小组测试开始时,我们没有时间放松和冷静地继续创建我们的服务,并且我们意识到用户已经习惯了非常快速地切换过滤器,并希望立即看到他们的工作结果。 这样的要求迫使我们放弃了Big Query并寻求新的东西。 由于Big Query的响应速度最高为2秒,因此数据量最少。 当然,这里没有什么可怪的,因为该服务旨在处理大量信息,而不是对一系列连续请求做出快速反应。

结果,我们选择了弹性搜索。 该产品使我们能够构建一个快速的搜索引擎,我们的过滤开始满足用户的要求。 我不会在这里说太多,因为该产品开始流行,并且有足够的信息。 我唯一要注意的是,对于此产品,您需要一个需要托管在某处的虚拟机。 此功能同时提供Google和Microsoft,因此您可以选择。 使用bitnami资源进行配置同样容易。 我们为自己选择了Azure,这种选择并不是因为技术特性,而是因为第三方因素。

这是神秘的SEO


现在正在运行该服务,正在开发平台,并且一切似乎都很好,我们正在努力争取光明的未来。 但是,这带来了推广我们的服务和关键SEO问题。 我从没想过Angular的创建者可能不会解决这个问题。 事实证明,单页应用程序在提供此功能方面非常薄弱,老实说,它根本不是。 是的,您可以将静态数据缝到meta标签中,并且当您绕过Crowl或共享时提供相同的信息时,这肯定是错误的且无效的。 上网浏览后,我们发现了一项如此出色的服务,它是Angular 4,Angular Universal的一部分。 阅读说明后,我们意识到这是我们所需要的,徒劳地责骂了框架的开发人员。

一段史诗般的故事始于将这种幸福感带入我们的项目中,我注意到那时已经编写了大约10个大模块,并使用了大约12个第三方npm软件包。 得益于Internet上的手册,一个干净项目的第一个配置非常完美,一切似乎都已开始。 此外,我们将服务器部分全部扭曲在Firebase的同一Cloud Function上。 好了,现在我们必须尝试战斗代码,然后出现问题。 首先,事实证明,所有第三方npm软件包都应支持Angular 4,在服务器端的代码中,您将无法使用变量窗口,文档等,嗯,调试所有这些快乐是不现实的。

我不会描述这项服务所带来的所有折磨,因为这很痛苦。 我要说的一件事是,我们没有克服它,我不知道或不完全理解它,或者仅仅是它仍然潮湿并且没有准备好进行生产性使用。 通常,由您决定谁可以成功,但我们决定在此停下来。 结果,编写了一个服务,该服务侦听所有http请求并返回index.html请求,但是在此之前,该服务会向其中抛出必要的元标记。 结果,结果很好,并且飞行3个月以来一直很正常。 顺便说一下,我们也将所有相同的第三方因素都托管在Azure上。

CDN我们的一切


这里又是一段稳定的时光,工作相对安静。 没人想到Facebook会给我们带来惊喜。 好的一天,事实证明在FB中共享不起作用。 起初我们以为这是由于FB中的安全策略收紧了,然后是IP阻塞,但我们没有找到原因。 联系支持FB和Firebase,但彼此踢对方。

我们唯一确定的问题是问题出在我们存储在Firebase商店中的图片的URL中,我立即告诉您,URL在此处非常具体。 我们决定将所有静态内容也转移到Azure,随着照片上传速度的提高,我将告诉你这个决定是正确的,并且您可以更灵活,更透明地管理所有这些内容。

总结一下


目前,我们已经在第3个月投入生产,我们正在不断改进和扩展功能。 对于版本控制,我们当然会使用Git,我们将逐步实现构建和部署的自动化。 每天大约有450次新的不重复访问,最多可增加1000个用户。 而且一切正常。

我想从所有发言中总结一下:

  1. 无需尝试解决由于一项服务或一项技术而在项目中出现的所有问题。
  2. 尝试开发通用模块,以在将来获得更大的灵活性。
  3. 云服务提供商的选择纯粹是个人问题,因为通常它们都提供相同的服务集。 问题仍然在于价格和您的偏好。
  4. 设计解决方案,以便您可以在不同的服务提供商和技术之间迁移,或者至少考虑一项可能采取的策略。
  5. 好吧,不要害怕尝试。

Source: https://habr.com/ru/post/zh-CN414975/


All Articles