【イベントレビュー】2023年1月のScala Meetup

第 8 回 Scala Meetup は先週の土曜日に無事終了し、3 人の上級 Scala ユーザーが 2000 人以上のオンライン ユーザーと 3 つの主要なトピックを共有しました。

同時に、ファンからの質問に答えて、「Scala への参入と発展の道、分散シナリオでの Akka の適用」など、注目を集めている問題についても全員で議論しました。講演のトランスクリプトはここからダウンロードできます。

Scala の最新ニュースや活動について学ぶために、Bitu Technology の公開アカウントに注目してください。バックグラウンドでメッセージを残して、 Scala 開発交流グループへの参加を申請することも大歓迎です。

Tubi の gRPC Evolution Road

Tubi Scala チームと gRPC

Tubi のバックエンド エンジニアである Zhang Zhenglai 氏は、まず gRPC 誕生の背景とその主な関連機能を紹介しました。

gRPC は、クロス言語、クロスプラットフォームの高性能マイクロサービスを構築するためによく使用され、インターフェイスの優先順位、効率的な伝送、優れた互換性などの優れた特徴により、クラウドネイティブ時代のサービス通信のデファクトスタンダードとなっています。 Google からも承認されており、CNCF の中核となるアイテムの 1 つです。

gRPC には主に 4 つの通信モードがあり、実際のビジネス シナリオに応じて柔軟に選択できます。

・一方向RPC(単項/単純RPC)

· サーバー側ストリーミング RPC

· クライアント側ストリーミング RPC

· 双方向ストリーミング RPC

Zhenglai 氏はまた、実機上で単純な gRPC HelloWorld アプリケーションをデモし、gRPC と他の通信フレームワークの類似点と相違点を比較し、さまざまなフレームワークの長所と短所をリストしました。gRPC を、REST や同じ RPC などの他のフレームワークと比較してみましょうフレームワーク Thriftの特徴がよく分かりました。

 その後、Zhenglai 氏は、Tubi が gRPC を使用する理由を次のように述べました。これは、gRPC の優れた設計ポイントの要約に相当します。

· リソース定義ではなくサービス定義。さまざまなビジネス ニーズに適しています (ドメイン モデリングに便利)

· 強力な型制約、開発および保守コストの削減、エンジニアの生産性の向上 (タイプ セーフ設計要件に沿った)

· 多言語サポート、さまざまなチームがビジネス ニーズに応じてより適切なプログラミング言語を選択できます (より多くのツールを使用できます)

· 集中化された ProtoBuf コード ベースを通じて、さまざまなチームがサービス定義を簡単に共有できます (チームがサービスを維持し、均一にモデル化するのに便利です)

ProtoBuf の効率的なシリアル化パフォーマンスと小さいシリアル化ボリューム (Akka では、Protobuf はクラスター間の Whisper 情報のシリアル化にも使用されます)

· ストリーム操作のネイティブ サポートにより、大規模なデータ送信がより効率的になります (ストリーム処理はビジネス シナリオにおいて非常に重要です)

· 優れたパフォーマンス、高スループットかつ低遅延のサービスをサポート可能

· コミュニティは活発で、生態系は急速に成熟しています。

· Kubernetes は緊密に統合されており、HealthCheck やサービス ディスカバリなどの機能を使用できます

Tubi Akka-gRPC の移行

Scala を使用して構築された Tubi の内部サービスは、Akka フレームワークに大きく依存しています。Akka-gRPC が成熟した後、その優れたパフォーマンスと実用的な機能により、Tubi チームは gRPC サービスを gRPC ランタイムから Akka-gRPC に移行し始めました。

Zhenglai 氏は、対応するパフォーマンス ベンチマークも提供しました。Akka-gRPC を移行すると、高負荷時のシステムのパフォーマンスと安定性が向上します。この段階での主な利点は、保守性の向上です。

AkkaによるLICENSEの置き換えの影響に関して、Zhenglai氏は、Tubiは引き続きLightbendと協力し、Akkaの関連サービスを使用すると述べた。

——上記のシェアはKenさんからのものです

Zhenglai さんの共有を通じて、Tubi の具体的な Scala アプリケーションがどのようなものかを学びましたが、より実践的な共有であり、理論だけを眺めるよりもはるかに優れていると感じました。

——上記の共有はアルファからのものです

Scala と関数型プログラミング

@ユアン・ヤン

 まず、北京知源人工知能研究所が発案したTongxiangプロジェクトを紹介した。これは医師に臨床補助診断の助けを提供し、効率と診断精度を最適化する伝統的な中国医学のAI+補助診断システムである。これは非常に興味深い応用ポイントだと私は思います。Scala と Typescript によって開発されています (Yuan 氏はタイプ セーフティに注目しているようです)。

最も印象的だったのは、プロジェクトの全体構成を説明する際に、タイトルが「圏論の理論的裏付け」となっていたことですが、ここに圏論に関する概念の共有につながる小さな穴が掘られたかどうかはわかりませんが、その後の演説。

 次に、Yuan 氏は関数型プログラミングの関連概念を説明し、なぜ副作用を管理する必要があるのか​​、関数型プログラミングのベスト プラクティスはどのようになっているのかを理解しましょう。

関数型プログラミングは厳密であり、より科学的かつ効果的にビジネスやアプリケーションを構築するために役立つ、問題に対処するためのフレームワークに似ています。まずデータとその形式を明確にし、次に異なるデータ間の変換ロジック、つまり変換操作を実現する機能を定義し、最後にビジネスロジックに従ってそれらの機能を接続する必要があります。

私の個人的な経験によれば、変換演算機能を実装するプロセスでは、最初にビジネス ロジックの大きな枠組みに従って主要な機能を定義し、次にレイヤーごとに分離することができ、最終的にコア機能は次のとおりであることがわかります。いくつかの小さな関数で構成されています。

この利点は、記述されたコンポーネントの構成と論理的な再利用性が向上することです。副作用を考慮して、コンポーネントを可能な限りロジックの外側の層にプッシュし、最初にコアのロジック層を最大化し、最後にコアのロジック層に再焦点を当てる必要があります。副作用。

想像してみてください。コア コードの 70% 以上が副作用のある関数の処理ロジックに関するものである場合、コード ロジックを理解する際に非常に悪い読み心地をもたらし、非常に冗長に見えます。それが私たちが望んでいることです。考えられるアプローチは、最初にコア ロジックを理解してから、最後に副作用の管理に集中することです。

袁先生は、このような開発パラダイムは AI の自動プログラミングと良い相関関係があると述べましたが、実際、AI が解決する必要がある問題を関数型プログラミングの手法で説明することは、難しいことではありません。将来的には、より多くの AI アプリケーションが開発者の効率向上に役立ちます (CodePilot と chatGPT が良い例で、非常に強力です!)、プログラマーはより多くの価値を実現しながら自分の仕事をより有意義なものにすることができ、これは機械的な労働の重複ではありません。

 次にユアン氏はモナドとIOモナドの概念を「ボックスモデル」を通して説明した。

Yuan 先生の説明はとてもわかりやすいです。最も興味深い例の 1 つは、モナドを何かを行うための具体的な計画に喩えることです。これは、何かを行うこととその結果が入った箱でもありますが、計画された実行は可変です (副作用、異なる時間や場所で実行すると異なる結果); 計画の各ステップは新しいボックスを生成しますが、すぐには開きません。このボックスには副作用がある可能性があります。しかし、何かがある可能性があることもわかっています。これにより、「もしも」の状態で設計と実装を完了し、最終的に副作用に対処できるようになります。

プランの生成は純粋な関数ですが、プランの実行はそうではありません。Monad を使用して、副作用を管理および制御する機能を維持しながら、設計時に純粋な関数で実装できるようにします。

 最後に、Yuan 氏は Cats ライブラリの型クラスをざっと調べ、Zhiyuan チームのオープンソース Flag Boot マイクロサービス開発ライブラリと Spring Boot フレームワークを比較する Benchmark を紹介しました。 !

——上記のシェアはKenさんからのものです

Yuan Yang 先生の話は私にとってとても刺激的でした。彼はモナドを説明するために新しい比喩を使っていました。とても鮮やかに感じられ、モナドについての理解が深まりました。

——上記の共有はアルファからのものです

インタラクティブ ノートブックの Scala

Li Feng 先生の共有のおかげで、Scala が非常に多くの分野に適用できることを知り、これまで仕事で使用したことのない多くの興味深く実用的な Scala ライブラリについて学びました。先生のプログラミングに対する熱意とこの職業への献身的な姿勢も私に伝わりました。

——上記の共有はZからのものです

Li Feng 先生は多くの内容を共有していただき、研究がより深くなったと感じました。私にとって、これまでこの研究に接したことがなかったので、理解するのは困難でしたが、Li Feng 先生が教えてくれたのはとても良かったです。私が長年蓄積してきたことも共有しており、後でゆっくりと理解できる文書です。

Scala の学習方法については、Li Feng 氏の共有が非常に印象的でした。特に学習意欲を生み出す必要性は、ビジネス、仕事上の発展のニーズ、または境界を広げたい個人的な興味などによってもたらされます。

——上記の共有は隣の建設現場からのものです

TubiにおけるScalaの適用事例

Scala と Akka-Stream を使用して、完全にレスポンシブな広告配信システムを構築する

Scala と akka-stream を使用した広告オークションの処理

Scala Meetup の過去のおすすめ

【イベント振り返り】2022年6月

【イベント振り返り】2021年1月

【イベント振り返り】2020年9月

【イベント振り返り】2020年4月

Tubi に参加して、  Scala でより良いサービスを作成しましょう!

おすすめ

転載: blog.csdn.net/weixin_49193714/article/details/128729285