在Meteor-e上进行战斗飞行

在俄罗斯讲者中,很少有关于流星的话题的讨论(根据购物车中的频道和公共VK,Habr判断)。 经验交流是可能的,但大部分时间是在官方流星论坛上进行的。

很长一段时间以来,关于流星上哈布雷的文章都没有,因此,我想分享我们的故事。



我会告诉您有关我们的项目,我们如何来到流星以及如何进行的。 我将尽量不讨论细节或非常具体的事情-我将把它们留待讨论或另作文章。

关于项目


我们有一所儿童在线编程学校。 PolinaV撰写了一篇有关我们如何在线执行此操作的文章 。 在2018年初,我们开始积极开发我们的系统-Gena。

我们需要该基因有几个原因:

  • 大量不同的工具-excel,用于维护时间表,表格等的服务;
  • 单独使用工具并不方便。

对于第一个版本,我们重点介绍了关键功能:

  • 进度管理;
  • 学生/培训师管理;
  • 内部任务管理。

我们计算了用户数量,以及将要生成的数据量。 这些信息和粗略的开发计划已帮助我们奠定了基因的未来架构。

基因与流星


当我需要制作几个简单的原型时,我在2016年尝试了Meteor。 那时,我掌握了C#(但没有ASP),PHP和JS的技能。

我希望前后都使用一种语言,以免使项目复杂化,也不会重复逻辑(也许我对简单的原型撒了谎:)。 因此,我决定只选择JS,并选择NodeJS和MongoDB。

对于我和本文中的英雄而言,Web开发都是一堆晦涩的名字。 而且,由于已经有了开发经验,所以我了解到,有现成的解决方案可让您“完成任务”而不必担心其余的事情。

我不记得是如何找到流星的,但它使我受了几件事:

  • 易于安装/配置。 控制台中的一个命令-它是您的命令;
  • 准备好的数据传输通道(WebSocket + DDP );
  • 内置数据库-MongoDB (+ minimongo );
  • 一个编写UI- Blaze的简单工具;
  • 好的文档和相关文章/视频。

在实现了多个原型之后,我开始关注Meteor的开发,研究内部知识并亲自看到一些小项目。

现在是时候选择一种工具来实施基因了。 我将省略寻找其他乐器的详细信息,而将论点留给流星:

  • 就像我上面写的-全部放在一个盒子里;
  • 为了便于开发,我们可以牺牲性能和资源消耗作为回报;
  • 我们希望快速获得新功能,以便以后可以对其进行改进或废弃;
  • 可以在短时间内(2-3天)将开发人员JS连接到项目;
  • 有一个现成的软件包数据库

我将分别针对Blaze进行说-我故意做出了一个简单的决定,以免浪费时间研究更复杂的React / Vue(是的,他们没有参加炒作)。

为了维护任务和文档,我们使用Jira + Confluence。 该代码已在Bitbucket中结算。

结果,有这样的看法:

  • 如果您有一些简单的方法,请使用原始的JS / CSS / HTML并进行处理(例如,着陆);
  • 如果对性能,资源,功能有特定要求-寻找它;
  • 在其他情况下-以现成的框架为例,例如Meteor。 如果您烹饪正确,那么应该没有问题。

开发过程


选择工具后,计划的实施阶段开始。 我们并不总是仔细考虑需求,因此有时我们不得不多次重做该功能。 我们也有很多想法,我们会尝试在实际用户中尽快进行测试。

项目的结构(文件夹和文件的结构)有助于避免有关应在何处以及在何处的问题。 这写在文档中 。 如果有明确的区分,则编写易于支持和可扩展的代码会更容易。 UI功能分为多个组件,这些组件使您能够隔离功能块并重新使用它们,并且在进行重构时,您不会打破项目底线:)。

有许多现成的软件包可以解决某些问题。 例如,Meteor开箱即用地提供帐户管理(注册,授权等),发送电子邮件。 第三方解决其他问题。 其中一些是npm软件包的一层,因此现成的解决方案数据库非常大。

我的错误是拒绝测试。 这个决定是为了节省时间,因为“客户看不到测试”。 但是,通过观察Jire中新出现的错误的情况,我意识到是时候改变这种方法了。 他们返回了测试并开始在TDD上进行写作。 另外,在代码进入开发分支之后,他们开始通过CircleCI运行测试以确保没有人破坏任何东西。

为了维护代码样式, 已配置 ESLint + 漂亮 。 这样可以避免在考虑PR(拉动请求)的阶段进行样式校正和荒谬的错误。 为了使“错误的”代码不会到达git,对Husky进行了配置-该工具可以在提交阶段(不仅限于)执行必要的任务。 因此,在代码进入提交之前,它会通过eslint和更漂亮的检查。

值得一提的是一个重要的缺点,即项目的构建速度。 第一次组装大约需要30秒,具体取决于熨斗。 此外,当更改代码时,该过程大约需要5-10秒。 在弱铁上,数字可能更大。 我使用MacBook Pro 15,i7、16GB中期,我很好。

他们决定在Digital Ocean上启动该基因。 有一个原因-价格。 亲爱的流星的官方托管 。 AWS比DO更便宜,但更复杂。 还有其他选择,但决定使用DO。

飞行


目前,我们可以同时将多达100个用户连接到Gene。 这不算什么,但是我们也有很大的安全余量。 我们希望在当前配置下能承受1000CCU。

到目前为止,两个10美元的服务器+ 5美元的代理服务器足以满足我们的需求(用于平衡)。 每个服务器都是nodejs应用程序+ MongoDB。 用于监视的服务器是单独启动的。 我们已经预测了流量的增长,因此我们将有时间来部署新服务器(增加分支并向上游添加一条线路)。

浇注新版本的Genes很高兴。 为此,编写了一个小脚本,该脚本将项目收集到tar中(使用meteor build命令 ),将其上载到服务器,解压缩,运行npm i并启动守护程序。 通常需要1分钟。
如果省略细节,则类似以下内容(如果有意思,我将准备要点):

小提琴
# meteor build --architecture=os.linux.x86_64 --server-only $BUILD_PATH scp $TAR_FILE_PATH $SERVER_APP_PATH #  cd $APP_ROOT rm -r bundle tar -xzf $TAR_NAME cd $APP_ROOT/bundle/programs/server/ && npm i -q cd $APP_ROOT/bundle sudo forever-service install $SERVICE_NAME --script $APP_ROOT/bundle/main.js --envVars "$ENV_VARS" sudo service $SERVICE_NAME start 


我们通过Kadira观察Gena(帖子开头的图片)。 我不得不用铃鼓跳舞一点以在自己的设备上跑步,但这是值得的。 一切都清晰易懂。

稳定性还没有问题。 未观察到意外崩溃或内存泄漏。

结论


我们在开始半年后就启动了该基因。 团队与Gene一样成长。 最有可能的是,我们将超出整体,而将出现微服务,队列,单个软件包等。 但这是一个完全不同的故事...

流星在变。 对于那些在1.4版及更低版本上尝试过的人,我建议查看更改列表 。 希望您会感到惊喜。

流星上有用的材料清单:


谁与流星一起工作或有兴趣-通过电报加入我们的聊天室。

抱歉,如果我没有透露任何重要主题,请尝试在评论中回答。

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


All Articles