当前位置: 首页 > 科技观察

Serverless和Rust都是老技术的二次创业!_0

时间:2023-03-12 00:18:05 科技观察

翻译|蔡竹良还记得主机吗?Serverless就像:我们拥有这台机器,你来找我租。创新往往诞生在巨人的肩膀上!分时度假是起源于欧洲的一种度假模式,将酒店或度假村的客房或旅游公寓的使用权分成数周,期限为10年至40年,甚至更长。会员制的方式是一次性向客户销售,会员获得一年7天入住酒店或度假村的休闲方式。并通过兑换服务系统,会员将自己的客房使用权与其他会员的异地房间使用权进行兑换,从而实现低成本到各地旅游的目的。回想起来,无服务器是新的分时度假!我们都有健忘症。当我与年轻的开发人员谈论过去的技术时,他们常常茫然地注视我。公平地说,一部分是因为我有点“紧张”或“怪异”,但也有一部分是因为年轻的技术人员不了解旧技术。例如:一些年轻的技术人员不知道什么是2PhaseCommit。是不是不再需要事务管理了?银行不再需要一致性吗?如果您不在“同一页面”上,则此技术通过在不同服务器之间传输事务上下文来工作。因此,在一台服务器上提交是一个多阶段过程,几乎可以保证在所有服务器上成功或作为一个服务器回滚。这非常了不起,而且实际上效果很好(显然有一些注意事项)。令人惊讶的是,这是通过方法调用实现的。您无需执行任何操作,即使在完全不同的服务器上调用远程方法,它也能正常工作。几年前,我正在与一家名为Node-based的银行业初创公司交谈。他们表示,银行对与Node合作持开放态度。我知道他们在更“成熟”的环境中重写了他们的东西。当我使用一些“较新”的工具(如Node)时,我总是对缺乏基本功能感到惊讶。当然,如果你不把我们需要的一切都装进去,它会更简单、更小。当您放弃核心功能时,很容易构建简单的东西。2010年代的NoSQL大戏回到1999年,我正在组建自己的咨询公司,一位朋友让我见见他的老板。我去了这个办公室,“老板”说他有一个其他人没有的最惊人的想法。他们有资金,将在6个月内推出该产品,并在第一天向100万用户推出!我:好的。什么想法?他:你报名为我们工作后我会通知你的。我:我会签署一份NDA(NON-DISCLOSUREAGREEMENT,即保密协议)。他没有。这是个好主意。那些保密协议毫无价值。你注册了……出于某种原因,我能够抵制为这家公司工作的诱惑。大约一年后,他们显然没有推出,但我的咨询公司做得很好。我的朋友又给我打电话了。这次他们需要产品方面的帮助,所以我以咨询的身份去那里帮助他们。这个想法是在网站中内置一个聊天应用程序,以便网站的访问者可以互相聊天。一个竞争对手已经推出,我正在咨询其他几家有同样想法的公司。相反,他们专注于与电子商务相关的聊天。但我离题了……他们的系统表现非常糟糕。用户的速度就像粘在蜂蜜上的蚂蚁一样慢。显然,首席执行官坚持认为他们需要在第一天就支持100万用户(正如他告诉我的那样)。他们将此告知OracleCorporation,OracleCorporation表示他们需要一个由三台服务器组成的集群来支持此容量。然后他们与一家面向对象的数据库供应商交谈,后者承诺他们可以从一台机器上处理一百万用户。所以他们全力投入面向对象的数据库。当我对此感到震惊时,他们声称他们的数据非常“面向对象”,因为每个用户都可以拥有多个项目……呃。他们不了解事务边界,存储代码与所有代码混合在一起,而且速度很慢。这是不可靠和不可理解的。您可能不记得面向对象的数据库时代,但它是2010年代席卷我们行业的NoSQL风潮的先驱。在我担任顾问期间,我重新观看了这个故事的重播。这一次大多数公司都成功推出了。但后来他们发现拥有非结构化数据并不是万灵药。与仅使用良好的缓存和调整良好的SQL相比,他们获得的性能提升可以忽略不计。部署故事很复杂,辅助工具可能永远无法达到我们在SQL世界中所拥有的水平。需要明确的是:NoSQL有其利基,但这些数据库的通用用法并不是很好,并且源于RDD(恢复驱动开发)。这是我们这些绕过街区几次的人一遍又一遍地看到的模式:?旧技术笨重而复杂?人们发明了一些干净简单的东西?忘记旧技术的存在?新事物过于简单,没有做很多基本的事情重新发明那些复杂性新东西变得陈旧和笨重的复杂性需要重新发明......刷新/重复无服务器是新的大型机在过去的一个月里,我做了很多无服务器的东西,我觉得就像这是一个很大的退步。这是我们在使用PaaS时遇到的相同问题的重复。它实际上是一个大型机。过去,我们常常花钱在共享大型机上运行我们的工作。它有点像虚拟化环境,但想法是相似的:我们不拥有环境。云SaaS也是如此,但无服务器更进一步。甚至调试体验也很糟糕。我们无法从根本上控制我们的代码或基本应用程序逻辑。我试图弄清楚为什么人们将它用于基本任务以外的任何事情。我可以想到一个很好的用例:webhooks。获取webhook的管道代码总是很痛苦。它们很少触发,处理起来很麻烦。它可以像将内容添加到数据库并使用无服务器功能完成工作一样简单。由于无论如何都很难调试回调,因此在无服务器中糟糕的调试体验并不是一个巨大的障碍。但是对于其他所有用例,我都感到非常难过。人们花费大量时间检查和测量吞吐量,但只使用稍大的服务器,并且仅本地调用产生的吞吐量可能超过您可能需要的吞吐量。如果没有所有的供应商捆绑,我们就会陷入困境。通过Linode、DigitalOcean等托管,您将节省大量资金。就上市时间而言,仅使用缓存和快速本地工具将比您在云中构建的任何东西都容易得多。容器是一个巨大的进步,它们使这一切变得容易得多,但我们对使用容器(如K8S)的复杂性感到不知所措。不要误会我的意思。K8S很棒。但我们98%的人并不真正需要它,也不应该使用它。如果您是一家小型初创公司,Kubernetes会浪费您的时间和精力。回到Java和RustJava就是做好“遗忘”的一个例子。我们有Smalltalk,这很棒。当Java刚问世时,它是一个带有怪异C语法风格的劣质解决方案。Java抛弃了Smalltalk和C++中的许多伟大思想。它采用了一些有争议的想法(检查异常、原语等)。然而它奏效了。它引起了人们的注意;它可以利用这一点。它最初是一种轻量级语言,丢弃了其他平台添加的所有垃圾和过度设计。现在看,已经没有人用“轻量级”来形容它了。开发人员忙于创建更轻、更简单的语言来抱怨Java的bug。成功将使他们回到我们开始的地方。一种轻量级的语言,已经发展得太多了。Java是它现在应该出现的地方。这是为数不多的良好重写示例之一。Rust似乎也是少数例外之一。它以全新的方式重塑了C。很难说它是否会长期存在。但别搞错了,这个过程需要很多复杂性。有意识的再造是什么让现有语言或工具的再造在大众市场上取得成功,又是什么让这些工具半途而废?SQL死而复生,再次成为新创公司的最爱。对于C++则不能这样说。它们有何不同?尽管缺少我们在JVM世界中拥有的基本功能,但Node和Python仍然很受欢迎。那么发生了什么,他们会保持这种受欢迎程度吗?他们会把这些东西加回来吗?直到青少年时期,我们的大脑都在不断地添加突触。在我们十几岁的时候,我们把它们砍掉了。一种理论认为,这是我们作为青少年经历的所有变化的根源。我们需要断开对我们不再有用的东西。否则,我们只会学到父母知道的东西。我们不能通过犯自己的错误来改进。再试一次那一代人失败的事情。结果,我们重蹈覆辙,犯了一些新的可怕错误。我们也取得了一些惊人的飞跃和发现。这是创新起飞的地方,工程也是如此。我们如何区分:青少年焦虑和光明的新方向?老实说,我们做不到。作为一个年长的人,当我第一次看到这些东西时,我觉得很多东西都很傻。我们已经尝试过这些东西但都失败了。为什么要重复那个错误的方向?这就是创新之处。然而,如果我们仔细观察成功的尝试,我们可以看到什么对他们有用。Java并不是为了终结C++而设计的。当然,这可能是错觉。但Gosling设计它的目的是为了简单和轻便。要解决非常狭窄的利基市场,请关注安全性、规模和网络。Rust并不是为了杀死C而设计的。它旨在使Firefox等项目更加稳定和高效。我认为二次发明,就像任何初创公司一样,当我们最初将自己限制在一个非常小和狭窄的用例时,效果很好。通过这样做并保持最初的关注点,我们可以构建一些好的东西,然后实现巨大的飞跃。译者介绍蔡柱良,社区编辑,从事Java后端开发8年。曾从事传统广电BOSS系统,后投身互联网电子商务,负责订单、TMS、中间件等。原标题:ServerlessIstheNewTimeshare,作者:ShaiAlmog