作者:闲鱼技术-国有
成都创新互联公司是一家朝气蓬勃的网站建设公司。公司专注于为企业提供信息化建设解决方案。从事网站开发,网站制作,网站设计,网站模板,微信公众号开发,软件开发,微信平台小程序开发,十多年建站对成都墙体彩绘等多个领域,拥有多年的网站设计经验。
国有,闲鱼架构团队负责人。在7月13号落幕的2019年Archsummit峰会上就近一年来闲鱼在FlutterFaaS一体化项目上的 探索 和实践进行了分享。
随着无线,IoT的发展,5G的到来,移动研发越发向多端化发展。传统的基于Native+Web+服务端的开发方式,研发效率低下,显然已经无法适应发展需要。
我们希望 探索 闲鱼这样规模的独立APP的高效研发架构。主要思路是围绕Flutter解决多端问题,并使Flutter与FaaS等无服务容能力打通,形成云端一体化的研发能力,支持一云多端的发展需要。在某些场景已经取得效果,希望分享过程中的思考,与大家交流。
闲鱼选择Flutter主要是出于高性能的考虑。Flutter高性能主要来源于2个原因:
更多比较:
没有银弹的解决方案,Flutter与RN各有优点。如何选择因素很多,关键看如何取舍,举个例子:
云端技术栈的打通,是减少协同的不错的解法。以往前端+Node.js的一体化方案大家应该不会陌生,然而如果端侧使用了Flutter,那云侧Dart自然是第一选择。
FaaS的本质是运行在云端,那Dart适合用在云/Server上吗?
Dart语言早于Flutter,在最初的设计上,Dart就可以用于Web、Server。Dart具备一些服务端语言的特点:
闲鱼首先尝试将Dart作为普通的Server,替代传统的Java Server,然后再将Dart容器嵌入到FaaS容器中。建立Dart Server能力是第一步,也是主要的工作量所在。
闲鱼在Dart Server方面的建设思路:
开发期:
运行期:
上述内容实现了FlutterDart FaaS的技术栈的统一,但仅技术栈统一还远远不够,端、云的同学仍然无法真正互补和一体化打通,原因在于还有更多深入问题需要考虑:
面向这些问题,闲鱼的解法思路:
案例一,一体化在资源均衡方面的体现。在近期的一个项目中,云端一体化使原本2个月的项目时间,减少了20天。
案例二,一体化在业务闭环方面的体现。负责增长的一位开发同学,专注在增长业务上,在合适的情况下为合适的人投放合适的内容,以此带来用户的增长和活跃效果。一体化的方式下,可以统一云、端的切面,业务研发不再受云、端的限制。
一体化是建设高效研发框架的方向,并不是所有场景都需要一体化的开发,但一体化的Flutter、FaaS等技术组件,可以独立使用,也会带来效率提升,并且与原有的开发模式兼容。从一体化的思路去建设,可以使整体架构体系更加一致,也有机会做一体的架构沉淀。
未来闲鱼希望在一体化上做更多尝试和深入 探索 ,包括一体化工具、一体化业务平台、数据化智能化等方向。
编程语言Toit开源了!
Toit 是一种面向对象的物联网编程语言,在 IoT设备上能够实现秒级代码部署(注:如果使用C语言,一个简单的代码更改需要几分钟才能重新部署);同时,Toit也是一种现代的、内存安全的编程语言,集成了先进的编辑器功能,如语法高亮、goto-definitions 、代码自动补全等等。
Toit 编程语言具备以下特征:
Toit的出现是因为有一群软件工程师对IoT开发的现状感到不满,凭借着在Google为Flutter构建V8 JavaScript 引擎和Dart语言的丰富经验,他们开始自己构建适用于IoT的最佳平台。也正是在平台构建过程中,他们意识到必须有一种高效的编程语言来满足物联网的需求。最开始,他们尝试使用了Python和JavaScript,但在微控制器上,这两种语言的速度都不够快。
为了解决性能和健壮性问题,Toit团队开始研究Toit语言,经过测试发现,Toit在 ESP32 上的执行代码速度比 MicroPython 快 30 倍以上,同时学习门槛也很低,Python开发人员在几小时内就可以学会它。
为什么会选择开源Toit?Toit团队表示:“从一开始,我们就明确知道Toit肯定是会在某个时刻开源的,因为所有主流的编程语言都是开源的。开源可以获得充满活力的生态系统,编程语言才能被大规模采用。经过多次迭代和实际环境的应用,Toit语言已经成为微控制器编写强大软件的利器,我们希望更多开发者能够从中受益,因此选择将它开源出来。”
链接:
Toit 编译器、虚拟机和所有支持基础设施均在LGPL-2.1许可下获得许可。lib/目录中包含的标准库在MIT许可下获得许可。examples/ 目录中包含的示例在0BSD许可下获得许可。
某些子目录在它们自己的开源许可证下,在这些目录中有详细说明。这些子目录是:
虚拟机对 ESP-IDF 有要求,适用于 Linux 和 ESP32 构建(对于 Linux,它适用于 MBedTLS 实现)。
我们建议您使用 Toitware 的ESP-IDF fork,它有一些变化:
请记住将其添加到您的 ENV 中IDF_PATH:
如果要为 ESP32 构建映像,请安装 ESP32 工具。
在 Linux 上:
对于其他平台,请参阅乐鑫的文档。
请记住更新您的环境变量:
构建系统将自动使用 Toit 编译器的 32 位构建来为 ESP32 生成正确的可执行映像。如果您使用的是 64 位 Linux 机器并且您不支持编译安装的 32 位可执行文件,则您的构建可能会失败。您可以通过安装gcc-multilib和g++-multilib包在大多数 Linux 发行版上安装此支持。如果使用apt-get,则可以使用以下命令:
确保IDF_PATH已设置,如上所述。
然后在结帐的根目录下运行以下命令。
这将构建 Toit VM、编译器、语言服务器和包管理器。
然后你应该能够执行一个 toit 文件:
包管理器位于build/toitpkg:
语言服务器可以通过以下方式启动:
有关如何集成语言服务器,请参阅 IDE 的说明。
对于 VSCode,您还可以使用已发布的扩展。
对 Mac 构建的支持仍在进行中。目前,无法在 Mac 上为 ESP32 构建固件映像,因为它需要编译和运行 32 位可执行文件。我们正在努力 解决这个问题。
确保已设置 ESP32 工具的环境变量,如依赖项部分所述。
为您的 ESP32 设备构建一个可以使用esptool.py.
默认情况下,映像会启动并运行examples/hello.toit. 您可以使用自己的入口点并通过ESP32_ENTRYmake 变量指定它:
您可以通过设置ESP32_WIFI_SSID和 ESP32_WIFI_PASSWORDmake 变量轻松配置 ESP32 的内置 WiFi :
这允许 WiFi 在网络接口打开时自动启动。
Toit开源地址: