Skip to content
This repository has been archived by the owner on May 1, 2024. It is now read-only.

[Discuss] saving code on the fly in our base #26

Open
jimages opened this issue Nov 28, 2018 · 3 comments
Open

[Discuss] saving code on the fly in our base #26

jimages opened this issue Nov 28, 2018 · 3 comments

Comments

@jimages
Copy link

jimages commented Nov 28, 2018

Many user complain that their code get lost when they close their broswers. Shall we consider save user code on the fly? My opinion is that we can set a demand (2000 read/write per seconds for example) and fork a new branch to experiment with other powerful programming language and tools. Only can we merge when our performance meet our demands.

assumption

  1. the string is less than 10KB for each snippet
  2. It doesn't matter if user's code will be save later after they save code in server case the lastest code is saved in the browser. we should keep. That means we should only keep the eventually consistent with the latest code.

Proposal on the architecture

We should try to save users code only when they try to test their code. After the website receive the requests, it save the code in the MQ and responded with OK. So the browsers can run very fast. and we have consumers to save the codes in our databases.

@huluoyang
Copy link
Collaborator

run tests 部分在浏览器端运行,只需要在弹出的窗口中当用户点击"继续闯关"时,才保存用户代码到数据库,这从逻辑上是可行的。近期可能不会用到 MQ,就是一个写入操作。
前提:熟悉后端逻辑和数据库用户表。
你可以看下 freecodecamp 这个仓库的 server 目录,并在本地运行 localhost:3000 和 localhost:8000。
你还可以看到 mongodb 中的 user 表。
还是有些难度的,你可以试试,应该会学到很多新东西。

@jimages
Copy link
Author

jimages commented Nov 29, 2018

可以,但是这样的架构有一个技术上面的要求:

  1. 存储用户代码的mongo要与网站的数据库脱离,这是因为要对mongo进行一些优化,比如:延长journaling的时间,在条件允许的情况下:例如使用了队列的情况下关闭mongodb的锁机制以提高数据库的写入性能,虽然会在一定程度上影响数据库的数据的可靠性,但是保存的代码这部分数据是可以有保障的。
  2. 由于之前在启用了保存代码功能的时候,网站就遇到了性能的瓶颈,我觉得可能还是要以MQ为开发的目标,所以接口在使用的时候要为MQ的使用预留接口
  3. 由于我个人目前擅长的语言不是node.js,我拿python3做开发可能会比较快,而且基本没有学习成本:我个人以及在一些个人项目上使用了MQ和微服务的相关架构,因此上手会比较快。

基于以上的信息,如果要用python和node.js混合协作开发,我建议使用rpc进行协同,通过docker并使用rpc来实现多语言的集成。而且这样的话,代码存储可以有单独为自己优化的mongodb实例。

待解决的问题

现在有两个方案,一个是python写一个微服务,然后node.js去调用这个微服务,这样的话,其他的地方没有什么问题,主要是要在node.js里面去集成一个rpc的调用接口,或者python单独写一个服务,如果这样的话,现有的node.js不需要任何的修改,只需要修改前端的js就可以,但是这样的问题就是python单独的服务器如何对用户进行鉴权?当然具体还需要我再花时间学习一下node.js然后研究一下才行。

@huluoyang
Copy link
Collaborator

这个项目目前所采用的技术架构已经足够复杂了,说实话,这种复杂度是否有必要,我保留质疑的观点。
freeCodeCamp 的精华是课程,其他都是辅助性的东西。
基于这个项目目前的技术架构来做改进,确实难度太高。
我已调整方向专供移动端,如果你有兴趣,可以联系我。

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants