<small id='QXEn5'></small> <noframes id='g6mEQKU'>

  • <tfoot id='hiUc'></tfoot>

      <legend id='GZoyw8IX'><style id='jUem'><dir id='9kl5y1sVHo'><q id='JoeUhT'></q></dir></style></legend>
      <i id='mycx'><tr id='OJj8Ag'><dt id='1g9wQm'><q id='XBUa2b'><span id='h3y1C7N'><b id='1EodDlLJbA'><form id='4ap9iqFSo'><ins id='NJaCMhq'></ins><ul id='tafIclM'></ul><sub id='XPoI'></sub></form><legend id='nvXVU6pPG1'></legend><bdo id='FdeCnOX'><pre id='I5vQjM'><center id='biE7Hue'></center></pre></bdo></b><th id='B0gxmbQ'></th></span></q></dt></tr></i><div id='C5SFsLvc'><tfoot id='KBmYR'></tfoot><dl id='wsPvR35KZ'><fieldset id='mO6cf'></fieldset></dl></div>

          <bdo id='eT904'></bdo><ul id='mPK80kou'></ul>

          1. <li id='oKA9hcq6pZ'></li>
            登陆

            放弃Python+C Salesforce将企业级软件全面迁移到Go言语

            admin 2019-10-17 162人围观 ,发现0个评论

              Python 十分适宜快速编写更高等级的运用程序,但并不总是能够供给企业级所需的高功用。C 能够创立高功用的可履行文件,可是增加功用会花费更多时刻。这篇文章共享了 Einstein Analytics 企业级软件从 C-Python 混合迁移到彻底运用 Go 运用程序的经历。

              咱们很少有时机直接将两种技能互比较较以完结同一使命。可是有时就会那么巧遇到星星排成一行的状况,比如从当时技能仓库中你一向得到的是负面影响,而这时恰巧呈现了满足你切当需求的新技能,或许项目的规划和功用集超过了现有技能的才能规模。

              在 Salesforce,咱们在曩昔几年中遇到了这种状况。咱们将大多数 Einstein Analytics 后端从 Python-C 混合渠道移植到了 Go.Go 是 Google 为大规划现代软件工程规划的一种言语。传说中,谷歌工程师想创立一种为大型运用程序规划的言语,并在等候大型 C ++ 项目编译时开端了对 Go 的规划。

              这篇文章将共享了咱们将企业级软件从 C-Python 混合迁移到(简直)彻底运用 Go 运用程序的经历。

              Einstein Analytics 将事务智能处理增加到 Salesforce 实例中。经过根据云的 AI 处理,不管结构和格局怎么,它都直接从 Salesforce CRM 数据以及尽可能多的客户外部数据中生成可行的见地或猜测、管道陈述、功用衡量。

              在后台,给定的 Salesforce 实例将 Einstein Analytics 功用揭露为惯例 Salesforce REST API 的一部分。这些链接到一个查询服务器集群,每个查询服务器都供给缓存在内存中的链接数据集的查询,可是它们能够从集群中的任何节点填充缓存的数据。为了办理一切这些恳求,咱们在每个服务器上都有一个优化的流程,该流程将恳求路由到恰当的节点,并将呼应转发到 API 恳求的发起者。关于任何读取数据集的查询服务器,这些调用都看起来是本地的。而本地意味着快速。较大的数据集是分区的,无状况查询和谐器聚合来自长途分区子查询的数据。

              数据集是运用 ETL(提取,转化,加载)创立的批处理,然后以专有的列式数据库格局存储。开端成为 Einstein Analytics 的产品的查询引擎和数据集创立东西是用 C 编写的, 运用 Python 包装器供给高档功用解析查询、REST API 服务器、表达式引擎等等。

              从本质上讲,该产品具有一举两得的优势。Python 十分适宜快速编写更高等级的运用程序,但并不总是能够供给企业级所需的高功用。C 能够创立高功用的可履行文件,可是增加功用会花费更多时刻。

              转 Go 初体会

              开端,这种组合是起作用的。可是,在开发该软件多年之后,Einstein Analy干比tics 开端呈现功用下降问题。这是由于不属于中心查询引擎的许多功用都被增加到了 Python 包装器中。这种办法能够快速开发和布置功用,可是跟着时刻的消逝,它们会连累整个体系。Python 的多线程功用不是很好,因而要求包装程序履行的次数越多,其履行作用就越差。

              之前的团队已经在考虑将包装器移植到 Go 上,因而咱们也做了一些研讨。咱们很快意识到,在企业级体系上,咱们将面对别的两个问题。首要,Python 运用松懈类型输入,这关于一个快速开发新主意并将其投入生产的小型团队十分有用,但关于某些客户为此支付数百万美元的企业级运用程序而言,却不太适宜。其次,咱们预见到一个巨大的依靠噩梦即将来临,由于布置正确的 Python 库、版别和文件是一件苦差事。所以在 2014 年,咱们决议移植 Python 包装器到 Go 上。

              开端,咱们对年青的 Go 生态体系持慎重情绪,可是当咱们研讨过该言语的规划方针后(转到 Google:软件工程服务中的言语规划)),它给咱们留下了深入的形象。它是为软件工程而规划的,而不只是是言语的复杂性,因而它的优势包含牢靠的内置东西,快速的编译和布置以及简略的毛病扫除。

              企业软件面对的实践问题是,与编写代码比较,需求花费更多的时刻阅览代码。咱们感谢 Go 使代码易于了解。在 Python 中,你能够编写超级高雅的列表推导式和简直是数学式的美丽代码。可是,假如你没有参加编写代码,那么这种高雅可能让可读性支付代价放弃Python+C Salesforce将企业级软件全面迁移到Go言语。

              第一个项目开展顺畅。咱们对新项目的功用和可维护性感到十分满足。咱们遇到的为数不多的诉苦之一是,在挑选可伸缩性而不是原始功用来协助它们进行废物收回时,需求在言语上进行权衡:他们决议开端将原始类型作为指针而不是值存储在接口中,这为咱们带来了功用开支放弃Python+C Salesforce将企业级软件全面迁移到Go言语和额定的分配。

              悉数迁移到 Go 上

              这个体会是适当好的,以至于在 2016 年编写具有更好的优化程序的新查询引擎内核并改善咱们的数据集创立东西时,咱们决议运用 Go 进行操作。咱们取得专业常识的速度与 Go 生态体系老练的速度差不多,因而削减开支并使咱们的代码在单一言语中可重用是有意义的。别的,咱们期望消除 CGO 接口的开支。

              最大的不确定要素是功用。Go 在其 Goroutines 中运用了异步 IO放弃Python+C Salesforce将企业级软件全面迁移到Go言语 的轻量级“ 绿色线程 ”模型,它为咱们供给了优于 Python 的多线程优势, 可是 C 代码运转的要多快就有多快——它用内置的安全性来交换速度,加上 C 编译器更老练,有更好的优化。咱们的团队创立了一个概念验证(POC),它在功用上简直与 C 引擎适当,但条件是咱们运用正确的编程方式:

              缓冲一切 IO,以削减 Go 体系调用的开支。在体系调用中,当时 Goroutines 会退让于该调用。

              假如可能发作严密循环,请运用结构替代接口,以最大程度地削减接口办法的直接开支。

              在严密循环内运用预分配的缓冲区(类似于 io.Reader 的作业办法),以最大程度地削减废物搜集压力。

              批量处理数据行是处理不良编译器内联的一种处理办法,以使实践核算更挨近数据,并最大程度地削减每次函数调用的开支。

              2017 年咱们完结了重放弃Python+C Salesforce将企业级软件全面迁移到Go言语写,新的 Go 版别的 Einstein Analytics 在 2018 年正式投入运用。经过将一切内容坚持为同一言语,咱们能够重用代码并进步作业效率。跨渠道和可移植的潜力使移植代码变得简略。假如咱们需求在移动运用程序中运用任何这些代码,则能够将其穿插编译到 iOS 或 Android,这样就能够正常作业了。

              之前,我说过该版别(简直)彻底用 Go 编写。但咱们的集群办理器是一个破例,它看起来好像有些古怪,由于 Kubernetes 和其他类型的集群和谐运用程序是 Go 的最常见用法,可是担任此服务的团队对运用 Java 感到更安闲。让团队掌控自己的组件很放弃Python+C Salesforce将企业级软件全面迁移到Go言语重要;你不能逼迫人们去做他们不想做的工作。

              虽然 Go 有一些有必要处理的局限性,但咱们对效果感到十分满足。Go 还会持续改善。他们经过将其移至静态单一分配方式来处理其编译器中的某些缺点,这使得进行花式优化变得愈加简略。废物收回变得越来越高效,而且编译器一般很智能,能够履行转义剖析,以检测何时能够廉价地在仓库而不是堆上分配变量值。

              作为开发人员,假如你想用任何言语编写高功用代码,你需求了解编译器的作业办法。这不是言语的悉数。Go 有一个十分简略的参阅文档——只要两页!可是了解编译器需求搜集一切这些零星的常识,它具体说明晰你能够在所运用的特定版别的 Go 中运用的一切优化。

              经过这些移植之后,咱们的团队在 Go 及其编译器技能方面积累了必定的专业常识。可是依然仍是会遇到一些问题。例如,你能够很简略地将数据写入到更廉价的仓库中,而放弃Python+C Salesforce将企业级软件全面迁移到Go言语不是写入到更贵重的堆中。只是经过阅览代码,你甚至都不知道会发作这种状况。因而,与需求高功用的任何新言语相同,你需求亲近监督进程并创立有关 CPU 和内存运用状况的基准。然后与社区共享你所学到的常识,以使这些常识变得不那么部分化。

              定论

              挑选一种较新的言语并将其引进企业公司可能是一场赌博。走运的是,Go 生态体系与咱们一同生长。Google 持续支撑该言语开展,并已被其他许多大型公司接收。现在,咱们具有一支全职从事 Go 的工程师团队,而且咱们持续取得了一些活跃的效果。咱们等待与 Go 社区一同生长,并共享咱们从经历中学到的更多常识。

              Salesforce 信赖支撑 Go 之类的开源技能能够推进咱们的职业向前开展,敞开新的职业生涯并树立对咱们创立的产品的信赖。

            (责任编辑:DF406)

            请关注微信公众号
            微信二维码
            不容错过
            Powered By Z-BlogPHP