寄付窓口はこちら

Swift Server Update | try! Swift Tokyo 2019 1-12

The Swift Server Work Group (SSWG) の目的は、Swiftでのサーバーアプリケーション開発の安定した健全なエコシステムを作ることです。 現在フォーカスしているのは、コミュニティが信頼できる高品質で十分にメンテナンスされたライブラリやツールの開発を促進することです。 このトークでは、2018年9月にSSWGが発表されて以降の最近の開発を振り返ります。 オープンになっていなかったプロセスや参加する方法、コミュニティとチームが行なっているプロジェクトやプロポーザルの詳細について説明します。

f:id:niwatako:20190321153833j:plain

Swift Server Ecosystemについて見ていきたいと思います

f:id:niwatako:20190321153934j:plain

なぜSwift on Serverを使うのか。

人にとっても良い、デベロッパーも大好き、安全、エクスプレッシブでローレベルからハイレベルまで対応できる、コードシェアリングにも便利。

マシーンにもいい。

ガベージコレクション不要なのが気に入っています。

リソースが競合する問題が発生するがSwiftにはその問題がない

いくつかユースケースがある

f:id:niwatako:20190321154050j:plain

IBMプラットフォーム、Vapor、Amazon(ビデオプロセッサーパイプライン)、Appleも小さなものから大きなシステムまでプロダクトに使っています。

Opensource

f:id:niwatako:20190321154128j:plain

Kitura,Vapor、、、Appleからいくつかライブラリが出ています。FoundationDB、その他にもGoogleと一緒にGRPCがあります。

そして真ん中のロケットマークがSwiftNIO、去年このステージでアナウンスされたものでした

ここまではいいですよね

f:id:niwatako:20190321154254j:plain

ではこれが自分にとって正しいものなのか。既存のシステムがあると思いますが、こたえは、Yesです。しかしまだまだ開発中のものがあります。

f:id:niwatako:20190321154330j:plain

f:id:niwatako:20190321154345j:plain

DBとのやり取りが必要になってくる。DBドライバの状態はいろいろなものが混在してたくさんある。

Cと組み合わされた勝ちがあるということでCクライアントに対応しているのでそれを活用できるということはあるが足りないものがある、一貫性が足りない。

全体として一環とした同時実行モデルが存在していません。

WebがブロッキングでDBがノンブロッキングだとうまくいきません。逆もそうです。

ノンブロッキングの場合にどういう種類のプログラミングモデルでどのFeatureなのか、色々なモデルが必要

あと可観測性がとても重要

f:id:niwatako:20190321154521j:plain

システム全体として中を見ることができるようにする、全体を見ることができるようにする。

ロギングがまず1つ。テキスト情報で何が起きたか全部見ることが出来雨量にする。システムが大きくなったときにいろんなコンポーネントがロギングしている。一貫性が重要。いろいろなライブラリ、コンポーネントがあるなら同じようなロギング体制が必要。メトリクスも数字的な情報とか文脈を反映する情報、パフォーマンスなどをあつめる。すべてのコンポーネントの情報を一箇所に集めて表示したくなりますよね。

それから追跡、システムを流れてコンポーネントに飛んだときにトラッキングできなければなりません。大きなシステムでは追跡が難しいのでTracingの仕組みが必要になる。ヘッダやエンベロープなどキューのペイロードにつくものですね。

サーバーデベロッパーエクスペリエンスの向上

f:id:niwatako:20190321154726j:plain

必要なレベルの統合がなされていないのでバラバラのところがあるのでもう少し一貫して統合する必要がる。

Dockerも重要ですよね。macBookを使っていますが本番はLinux。コードのスプリットがあるかもしれません。本番のエミュレーションにはDockerが有効に働く。

IBMApple、Vaporで行ったServerWorkingGroup

f:id:niwatako:20190321154834j:plain

Swift言語そのものの外の部分、Networking、HTTP、セキュリティに関する部分、こちらはSwiftNIO

今足りないものを足している

f:id:niwatako:20190321154925j:plain

分散システムイベントドリブン、、、

Evolutionと似ている

f:id:niwatako:20190321154941j:plain

ピッチから投票、プロポーザル、それが終わってインキュベーションプロセスに入る。

ライブラリが3つのレベルで受け入れられた段階。

いくつか対応しているプロジェクト

f:id:niwatako:20190321155032j:plain

f:id:niwatako:20190321155042j:plain

f:id:niwatako:20190321155046j:plain

Developerが特定のSwiftバージョンをDockerベースで実行できるようにしたい

コミュニティの努力で発展してきた

f:id:niwatako:20190321155111j:plain

いまオフィシャルな場所としてAppleGithubに入っています。素晴らしいコミュニケーションでこのようなことをコミュニティで今後も進めていきたい

ロギングの部分、

f:id:niwatako:20190321155152j:plain

何が重要か、アーキテクチャーです。他のライブラリ、フレームワークをもってきたときにどこにログを送るか知らなくていい。

アプリケーションオーナーがそれを決めることができる。

全体の一つとして観測性を提供することができるが、すべてAPIベース。

これは他のエコシステムの体験からもってきたもの

f:id:niwatako:20190321155253j:plain

ロガーがミューテーションする。typesystemを活用する。ロガーはvalue type

全部のシステムを変えるのではなく

auto closureを使う

f:id:niwatako:20190321155325j:plain

ログを送ることを遅らせることができる

常に送るとパフォーマンスコストが高い

ログを取らなければいけないときは評価することができる

f:id:niwatako:20190321155412j:plain

メトリクスはまだプロポーザルフェーズです。

構想は似ています。API、メトリクスライブラリは切り分けられている。様々なシステムからメトリクスを見ていく。

ライブラリは分けられているので、これによってライブラリは情報を、たとえばHTTP、Webフレームワークであれ、使っていただくことができる。個々ではこのメトリクスがどこに行くかを決めるのではない、これが重要な要素に成る。

どういうコードが書かれるのか

f:id:niwatako:20190321155518j:plain

f:id:niwatako:20190321155525j:plain

Counterに対応している

モノリシックに増分していける。

もう一つ、タイマータイプ

f:id:niwatako:20190321155550j:plain

リクエストにどれくらい時間がかかっているのかという評価ができる。

タイマーの形が非常に面白いのは、量化をしていくときに使うことができる。

DBだとか、あるいはピークアワーオフピークアワーで変わっていくが実際に99%タイルがどうかというときにつかえる

汎用的なReorderタイプが有る

f:id:niwatako:20190321155646j:plain

ヒストグラムであればこうしたものがバックグラウンドのモデルとして使える

ゲージも使える

f:id:niwatako:20190321155701j:plain

DBクライアント

f:id:niwatako:20190321155717j:plain

PostgreSQLドライバを使ってSwiftNIOとのコンカレンシーモデルを作った

f:id:niwatako:20190321155800j:plain

Redisで同じようなことをしようとされています。

ネットワークライブラリ

f:id:niwatako:20190321155832j:plain

新しいバージョンリリースしました

f:id:niwatako:20190321155839j:plain

SwiftNIOは主要な変更は5との協業性

エコシステムのアンブロックをしてオンボーディングしていただきたいということで大きなバージョン変更。

HTTP/2も比較的大きな変更がありました。基本的に書き直した。

Cライブラリベースだった。結果的にパフォーマンスをみていてCライブラリではないだろうということでSwiftで書き直しました。

SSLも前のバージョンから変わってきました

Boring?SSLに寄ってできるようになったのがSwiftPM

SwiftNIOベースアプリケーションのモビリティを高めた

皆さんの参画をお待ちしています

f:id:niwatako:20190321160057j:plain

問題点、改善点などをお寄せください。フォーラムでいろいろな話があります

f:id:niwatako:20190321160125j:plain

色々ライブラリを書いていただきたいものがあります。

月次でSwift Linux Releaseが行われています。ぜひ皆さんにもご参画いただきたいと思います。

f:id:niwatako:20190321160210j:plain

ありがとうございました。