①开始学习了DevOps,因为数据工程师将MLOps列入了他们的考虑范围内

太长了,没时间看。

为了未来的发展,我决定系统地掌握DevOps/MLOps实践系列。就我个人而言,我认为将前端语言Typescript(ts)和后端语言Scala/Python(带有Spark生态系统)连接起来是一个很好的起点。

评判原因:

1) フロントエンド開発者(js/tsユーザー)にpythonは親和的
 ※js/tsユーザーが併用するプログラム言語の定番の一つがpythonとなっているらしい ★1
2) tsのモデル定義とsparkのモデル定義の親和性が高い
 ※Typescriptのインターフェース定義とSpark向けのcase classが特に類似。
3) tsとsparkとの相互呼び出しが容易となりつつある(「jsii」の魔法)。
  ※例、jsiiによって、typescriptで書かれたnodejsアプリのテストをScala/Pythonで行うことが可能に。
4) terraform/ansible/docker/hashi stackあたりはなんとかなる私の課題は、今風のフロントエンド。

★ 1的來源:JavaScript使用者使用的”第二種程式語言”,第一名是Python。

[1] Node.js上的TypeScript生态系统已经成熟。

Typescript是一种具有类型的js兼容语言。相对于js,它可能有一些更高的门槛,但对于使用带类型的后端语言(如C#/Scala等)编写的工程师来说,Typescript是一个可靠的选择。在nodejs中运行Typescript已经积累了一些在web开发中不可或缺的知识和技巧。

我們將以Nest.js框架作為例子,這是近年來在Node.js上的一個解決方案(儘管框架的流行會有所變化,但是Typescript on nodejs很可能會持續成為一個標準選擇)。參考一下,Nest.js是很棒的。

[2] 后端和前端之间的区域。

Typescript模型定义具有接口的,与C#或Scala兼容。
让我举一个例子。
您在上述Nest.js的杰出文章中,使用Nest.js创建用户界面时创建的User模型的接口user.interface.ts如下所示:

export interface IUser {
    id: string;
    name: string;
    kana: string;
    email: string;
    postcode: string;
    address: string;
    phone: string;
    password: string;
    admin: boolean;
    createdAt: Date;
    updatedAt: Date;
}

然而,针对Spark的scala类的对应可能是以下的形式:

case class IUser (
    id: String,
    name: String,
    kana: String,
    email: String,
    postcode: String,
    address: String,
    phone: String,
    password: String,
    admin: Boolean,
    createdAt:TimeStamp,
    updatedAt:TimeStamp
)

只需要一个选项,以下是一种可能的汉语翻译:

这个水平可以通过机械替换实现(这里以Scala为例,但类似于TypeScript的带有类型注释的Python(PySpark)也是相同道理)。在Spark中,用于持久化的属性通常只使用基本类型,如String/Int/Boolean/TimeStamp等,这样在实际工作中更加简单。如果在前端方面也可以安全地使用相同的写法,那就方便了(根据对nest.js的概览来看,我觉得它可能可以安全且有效地编写…真正决定是否要自己动手编写,还是另外一回事)。
如果能够从基于TypeScript的node.js生成json数据,并将其传输到Spark中(可以通过插入Kafka等中间环节,或将其作为准流处理),那么其后的操作就无关紧要了。在后端,Spark是描述数据存储之间数据中枢的一种标准解决方案(连接csv、cassandra、hive、neo4j、机器学习基础设施等等)。

通过jsii,可以在Python/Scala上进行Node.js的Typescript测试。

在下面这篇文章中了解到了AWS自家开发的jsii。
也就是使用TypeScript编写的程序可以在Python等语言中运行的神奇的”jsii”。

通过JSII,可以直接从Python/JVM语言(Scala)/C#调用TypeScript代码。换句话说,可以使用Python或Scala编写TypeScript的测试代码。在实际运营的系统中,由于前端的情况(例如服务扩展等),TypeScript的模型会不断变化。随着模型的变化,能够持续测试数据的传输是非常有用的(例如,在将没有类型的数据(如CSV)引入Spark世界时进行测试相当麻烦)。

从下次开始动手。

最近,我个人在学习如何快速构建一个带有追求性能的Web前端的系统的幕后工作(数据基础设施)。虽然对前端技术不太熟悉,但我已经逐步接触了Svelte/typescript/nodejs/firebase等技术,并逐渐获取了感觉。未来,我还想尝试使用nestjs/SSR/ts2elm等技术与后端的Spark进行连接。希望能够利用nodejs和Docker作为目标,在CI/CD中使用github action来帮助我。