2016-08-20 87 views
-1

我试图更好地理解服务器语言/框架及其在微服务环境中使用的潜在优点和缺点。开发时间对我来说并不重要,因为这是为了我自己的个人项目,学习使用正确的工具解决问题对于我来说比开发构建服务所需的时间更重要。在选择服务器语言时,我必须考虑除开发时间之外的其他因素吗?

我越想越想,应该在90%的时间里使用药剂。究其原因有二:

1)并发意味着许多用户可以点击该服务没有失败

2)大多数微服务有0的处理开销,他们打了一个数据库,并返回一个JSON。即使用更快的语言触击数据库所带来的收益与使用更慢的语言无法区分。有问题的数据库将确定返回数据的速度,而不是服务器语言,因为数据库实现本身将使用C++等低级语言编写。 (这是真的吗?Elixir + Postgresql比Go + Postgresql慢得多,甚至是Ruby + Postgresql?是Postgresql还是语言发出请求的瓶颈?)

假设上述2为真,那么它代表我之所以会在90%的时间内使用Elixir,是因为我会得到一个面向未来的交通高峰期服务,并且它通常具有与任何其他数据库检索Rest API相同的执行速度。

其他服务需要像图像识别服务一样的处理器速度的10%时间我会用C++或Python实现,因为它的图像库已经在C++中用于图像识别(即Tensor Flow)。

这是一种考虑何时使用特定语言进行微服务的正确方法?如果不是,除了开发时间,我还应该考虑什么?

+0

@enzian这个问题对于程序员来说是不合适的 - 它会很快被拒绝并在那里关闭,参见http://meta.programmers.stackexchange.com/questions/6483/why-was-my-question-关闭或投票表决/ 6490#6490推荐阅读:** [Programmers.SE是怎么回事?堆栈溢出指南](http://meta.programmers.stackexchange.com/q/7182/31260)** – gnat

回答

0

假设上述2属实,那么按理说,我认为我会用药剂90%的时间[...]

使这些类型的语句时要小心!他们诱惑你选择你在创建新服务时总是选择的东西,实际上你应该考虑该服务应该做什么,以及哪些语言和框架可以帮助你最好地达到目标!这就是说:你的两个前提是真的!数据库命中是最昂贵的操作,而并发处理是处理更大负载时的重要工具。它们是真实的,但并不完整:您可能需要考虑其他条件,如资源消耗,调度您的平台的行为等。

关于语言的计数:托管语言(例如,基于JVM的所有内容或.NET运行时)总是意味着一定的静态开销,因为它们需要做垃圾回收,或者需要随时编译代码,运行时动态类型推导,反射等。这意味着它们需要更多的内存和CPU周期你的机器比其他语言如C++,GO,Rust等等。

虽然您必须自己用C++等语言进行内存管理,但像GO,D和Rust这样的语言试图为完全托管的语言/运行时提供一个中间地带,如JVM或.NET。

至少和您在语言/运行时选择的一样重要的是您的架构。所有涉及经典数据库的东西都可能会给你带来问题,在磁盘的任何部分都会在负载下杀死你!

那么我的建议是什么?记住所有的变量(请求延迟并不是唯一的指标!资源消耗也可能是一个杀手!),选择最好的语言和工具链来满足您的服务满足并验证不同体系结构的任何目的!

相关问题