Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Golang微服务和与现有应用程序的通信_Ruby On Rails_Go_Microservices - Fatal编程技术网

Ruby on rails Golang微服务和与现有应用程序的通信

Ruby on rails Golang微服务和与现有应用程序的通信,ruby-on-rails,go,microservices,Ruby On Rails,Go,Microservices,我想在Rails应用程序上做一些扩展,我想使用Golang。 所以,今天我们有一个相当大的应用程序是用RoR编写的,其中很多处理和计算都是通过Ruby进行的,在某些情况下变得很慢 我想了解一下我们应用程序的一些部分,为了更好的性能,我想在Golang中重新编写它们 我想听听一些好的建议和做法,特别是如何开始拆分它们 致意 如何最好地吃大象?一次咬一口 由于这对您来说是一个新的世界,我将首先剥离应用程序中的一个功能,该功能起初与其他任何功能都没有高度关联。选择不使用任何实际业务逻辑的报告引擎或直接

我想在Rails应用程序上做一些扩展,我想使用Golang。 所以,今天我们有一个相当大的应用程序是用RoR编写的,其中很多处理和计算都是通过Ruby进行的,在某些情况下变得很慢

我想了解一下我们应用程序的一些部分,为了更好的性能,我想在Golang中重新编写它们

我想听听一些好的建议和做法,特别是如何开始拆分它们

致意

如何最好地吃大象?一次咬一口

由于这对您来说是一个新的世界,我将首先剥离应用程序中的一个功能,该功能起初与其他任何功能都没有高度关联。选择不使用任何实际业务逻辑的报告引擎或直接或类似查询数据库的定期维护任务。它不一定是最需要性能增强的(尽管如果必须费力地通过业务逻辑获取数据,IME报告几乎总是比较慢)。关键是要剥离一些不具备巨大先决条件的东西,以便您获得信心并了解新环境将如何插入

一旦你有了,考虑你需要多少业务逻辑和你的副作用有多深。试着在没有太多副作用并且尽可能接近经典函数(即一组输入,一个输出)的情况下找到你的第二批工作。如果您的RoR代码中有可以调度的东西(比如“我得到了所有这些数据”…然后神奇的事情发生了…然后“我输出了一些处理过的数据”),这是一个很好的选择

HTTP上来回的行程会增加一定的延迟(如果直接从浏览器进行,则会减少延迟,但仍然…),因此,在您知道可以获得收益的地方工作时要小心。一个针对旧代码的分析器将有助于解决这一问题——任何昂贵的东西都将是你的下一个候选者

如果你在处理低挂水果之后仍然需要优化,那么你可能需要考虑拆分你的商业规则,这样一些人生活在RoR世界,其他人生活在GO世界。不要维护同一业务规则的两个实现——这种方式是疯狂的。如果您确定订单是一个系统,而供应链是另一个系统,这很好,但不要尝试在这两种环境中维护供应链代码的实现

为了G-d的缘故,如果您将业务逻辑从一个旧系统迁移到一个新系统,请不要将旧代码保留在原来的位置而不使用!!!您有版本控制——如果有人需要引用旧的实现,请让他们挖掘。否则,您会将糟糕的代码维护人员与永远无法运行的残留代码混淆。如果您已经弃用了代码,请将其删除

哦,我相信我不需要这么说,但是你需要单元测试来验证bug的兼容性


最后,请记住RoR是高度面向MVC的,Go并不是本质上的MVC(尽管有一种方法是这样的)。您肯定会想要检查(并且诚实地说,可能会放弃)这些框架,徒劳地尝试进行直接端口。去吧:把它从你的系统里弄出来。然后继续做一些小的、渐进式的改进,慢慢地吃掉你的大象。

我刚刚读了你的帖子,真的很有帮助-也许我会把它打印出来,贴在墙上,因为我会在这段时间内重复十几次,非常感谢:)很高兴你喜欢它。与其说是技术,不如说是运行/参与此类技术转换而留下的老掉牙的战斗伤疤,但仍然。。。也就是说,我喜欢Go,并祝你好运——它真的是一种很棒的、快速的语言,而且很容易编写代码。是的,它非常有用,并且一定会遵循其中的一些原则。等我有实际问题再问的时候,我会回来的