【大阪】BMXUG勉強会 -Kubernates体験&Watson Discovery入門- 2019年3月27日参加レポート

f:id:silverbirder180:20190522223722p:plain
BMXUG
bmxug.connpass.com 今回、k8sの体験を目的として参加したのですが、意外な収穫があったので、 共有したく、記事を書くことにしました。

twitter.com

Watson Discovery

Watson Discoveryとは??

簡単に言うと、IBM製の検索APIになります。 全文検索システムでおなじみにElasticSearchとは違った「IBM」ならではの機能が搭載されています。 また、無料で使えるとのことで、興味津々になってしまいました。

どんな特徴があるの?

なにかしらの文章データをWatsonDiscoveryに渡してあげることで、 文章にあるコンテキストを種々様々な側面から抽出してくれます。 特に、大量のドキュメントを検索したいときに使う場合に活躍します。

メタ情報による検索

登録した文章データから良い感じのメタ情報を抽出してくれます。 たとえば、下記の属性があるみたいです。

  • エンティティ
  • リレーション
  • キーワード
  • カテゴリー
  • コンセプト
  • セマンティックロール
  • センチメント
  • エモーション

例えば、怒っている文章を渡すとWatsonDiscoveryでは、 「怒りのエモーション」メタ情報を付与されます。ほえ〜!すごい! 確かに独自な機能ですよね。
この機能は、日本語ではサポートされていませんでしたが、 2018年8月ごろにできるようになったそうです!

隠れたコンセプトをみつける

文章にあるワードだけでなく、文章にないワードのコンセプトも見出してくれるそうです。 どうなってるんだ!?

クローラも提供されている(WebCrewl)

日本語のニュースを定期的にクロールして、ディスカバリーの辞書を更新してくれる機能もあるそうです。 手段の1つに、URLを指定するだけで勝手にクロールしてくれる方法もあります。簡単だ。。。 これを使えば、データを用意しなくて済みますし、お問い合わせQ&Aみたいなのが簡単に作れちゃいます。

サンプル紹介

例えば、「喜ばれるホワイトデーのプレゼント」で検索してみます。 また、メタ情報検索として、センチメンタル「ポジティブ」を指定。 (データは、WebCrewlで収集済み)

結果を、種々様々な形式のランキングを表示してくれました。 例えば、「いくらお金をつかうか?」というランキングでは、TOPが無料でした。これは面白かった。

visual insight (ベータ版)

ワードの距離を視覚的に見せてくれるそう。wordCloudもありました。

最後に

IBMならではの、独特の全文検索システムAPIでした。 無料で使えるそうなので、時間があるときにでも使ってみたいなと思います!

【大阪】GCPUG Kansai 〜 Cloud Next Extended ~ - 2019年5月14日 参加レポート

f:id:silverbirder180:20190521230529j:plain
GCPUG Kansai Cloud Next Extended 案内板
gcpug-osaka.connpass.com こちらの参加しましたので、ご報告します。

twitter twitter.com

目的

2019/04/09 ~ 04/11 にサンフランシスコで開催された Google Cloud Next '19 San Francisco で発表された Google Cloud の 新サービスに関する解説や振り返りの内容がメインのイベントとなります!

セッション紹介

GCPUG Kansai 紹介

GCPUG Osaka
GCPUG Kobe
GCPUG Kyoto
GCPUG Nara
GCPUG Shiga
GCPUG Wakayama
FJUG Osaka (firebase)

関西には、こんなにも多くGCPUGコミュニティがあるみたいです。すごい、いっぱい! Osakaは、継続して参加しようと思います。GCP大好きですし。

Cloud Next Recap 1

発表者

Ian Lewis(Google)

内容

GoogleKubernetesの担当されているそうです。 また、Pyconや、connpassにも携わっているそうです。

Anthos

読み方は、アンソスと呼ぶそうです。難しい...。

特徴として、下記が挙げられるそうで...
・アプリケーションをモダナイズ
・ポリシーオートメーション
・一貫したエクスペリエンス

よーわからないので、ggってみた。 www.publickey1.jp

コンテナ化したアプリケーションをオンプレミスとクラウドのどちらでも実行可能にする、ハイブリッドクラウドおよびマルチクラウドのためのプラットフォーム。

オンプレミスを含むどのクラウド上にアプリケーションがデプロイされていても、Anthosの管理画面から統合管理可能。

なるほど、Anthosはマルチクラウドを実現するためのプラットフォームなのですね。 ふむふむ、わかりやすい。

また、IstioをベースとしてAnthosが作られたとも発表されていました。 Istioについては、こちらをご確認下さい。
Istioの機能の特徴として下記があるそうです。

k8sでは、対象とするクラスタを管理します。規模が拡大するにつれ、 サービスが複雑になってくるケースがあります。その際Istioが、そのあたりを 良い感じに管理してくれると、理解しています。(ざっくり感)
※ マルチクラスタは既に実現できていた(?)

Anthosは、その対象範囲をクラウドだけでなく、オンプレ(GKE on Prem)も含めるようにしたと思います。

CloudRun

これは、下記で一度試した経験があります。 qiita.com

コンテナとしてdeployできるようになります。 正直、AppEngine, CloudFunction, CoundRunとデプロイサービスが増えてきて、 どれが何に良いのか分からなくなりそうです...。下記に、まとまっていました。 docs.google.com

CloudRun on GKE

こちらは、k8sにCloudRunをdeployできるみたいです。 詳しくは分かりません。

Knative

cloud.google.com

Knative は、オンプレミス、クラウドサードパーティのデータセンターなど、場所を選ばず実行できるソース中心でコンテナベースの最新アプリケーションを構築する際には不可欠な一連のミドルウェア コンポーネントです。

んー、なんとなくわからなくないですが、他のサイトを見てみます。

www.apps-gcp.com

Knativeを使用するためには、Kubernetesがインストールされたクラスタを用意する必要がありますが、KnativeはKubernetesと同様にコンテナをオーケストレーションするためのものである、という点は変わりません。 Knativeは、クラウドにおけるPaaSやFaaSのようなアーキテクチャを、Knativeがインストールされていれば(つまり、Kubernetesクラスタであれば)どこでも実現できるものです。

なるほど。要は、クラウドサービスに依存しないコンテナオーケストレーションなんですね。 GCPを使おうがAWSを使おうが、エンジニアにとって、それは特段大切ではなく、 アプリケーションのプロダクトコードが重要だと思います。そこで、クラウドサービスを 意識せずに、k8sを使うことができちゃうということですね。

gVisor

www.publickey1.jp 従来は、下記のような問題をコンテナは抱えていました。

コンテナ間でOSのカーネルを共有しているためにコンテナ間の分離レベルは高くなく、同一OS上で稼働している別のコンテナの負荷の影響を受けやすかったり、コンテナからOSのシステムコールを直接呼び出せることなどによるセキュリティ上の課題を引き起こしやすくもあります。

そこで、gVisorの出番

従来のコンテナの軽量さを保ちつつ、コンテナの分離について新たな実装を提供することよって、準仮想化に近い、より安全な分離を提供するコンテナランタイム

なるほど〜!(ただ、記事を読んだだけw)

Cloud Next Recap 2

発表者

佐藤 一憲(Google)

内容

機械学習についてAutoMLを紹介されていました。 私は、そういったものが苦手だったので、よく覚えてないです...

Cloud Next Recap 3

発表者

Kirill Tropin(Google)

内容

スピーキングは英語だったので、よく覚えてないです...

Cloud Run ネタ

発表者

ちまめ@rito

発表資料

speakerdeck.com

内容

2コマンドでcloudrunできるぐらい、簡単! ただ、プロダクトとして扱うには、いくつか問題があるそう。

  1. docker full buildするみたいで遅い → kaniko で、cacheが効くそう。
    github.com

  2. memoryStoreがまだ未対応(VPC)

GCP大阪リージョンとレイテンシ

発表者

salamander さん

内容

大阪リージョンのレイテンシについて紹介されました。 docs.google.com

最後に

Googleでは、もはや当たり前のようにKubernetesのサービスを進めている印象でした。 クラウド、オンプレを関係なく動かせるプラットフォームであるAnthosや、 どのクラウドサービスでも関係なく動かせるコンテナオーケストレーションであるKnativeなど、 どこでもkubernetesを動かせるように進めらています。 これは、kubernetesを使えるようにならないと! 下記で、勉強中です! qiita.com

Go Conference 2019 Spring - 2019年5月18日 参加レポート

f:id:silverbirder180:20190521224335j:plain
Go Conference 2019 Spring Coffee
gocon.connpass.com こちらに参加してきましたので、ご報告します!

公式: gocon.jp twitter: twitter.com

場所: リクルートライフスタイル本社 東京都千代田区丸の内1-9-2 グラントーキョーサウスタワー

よかったセッション

H1 (S): Hacking Go Compiler Internals 2

概要

Since the previous talk at Go Con 2014 Autumn, lots of things in the internals have changed. In this talk, I will try to give an overview of Go compiler internals and update the information as much as possible, along with my new hacks.

資料

今回

speakerdeck.com

前回

www.slideshare.net

感想

このセッションでは、Golangソースコード機械語になるまでのステップ、要はコンパイラの動きを紹介されていました。 大きく分類して11ステップあり、ざっくり要約すると下記のステップです。

1.コードをトークンに分割
2.構文木に構築
3.型チェック
4.インライン化
5.中間言語(SSA)の生成
6.機械語の生成

正直、高級言語ばかり使っていたので、機械語に近い低級言語の知識が乏しい私ですが、 今回のお話は、そういった初心者でも分かりやすく説明されていました。 この話を聞いて、純粋に疑問に持ったこととして「どこに最も時間がかかるのか」でした。 ちょうど、同じ疑問を持った方が質問されていて、回答として「型チェック」だそうです。 実際に調べるためのツールが、golangのbenchmarkがあるみたいなので、こちらを使って チューニングをすることができます。簡単なコードを書いて、試してみたいなと思いました。

A4 (S): Design considerations for container-based Go applications

概要

Go言語でのアプリケーション開発で、特にコンテナを前提とする場合の設計考慮点について話します。 例えば、Go言語でAPIを開発する場合、コンテナとして動かすことを前提とするケースが多いと感じます。コンテナベースで動かすことを前提とした場合、コンテナイメージ作成・アプリケーション監視において、考慮すべき点が出てくるでしょう。このトークでは、Go言語での実装にまで踏み込んだ上で、コンテナベースアプリケーションにおける設計の考慮点について話します。

資料

speakerdeck.com www.redhat.com

感想

Golangの話というより、コンテナで開発する上でのTipsの話でした。 Tipsは3つ紹介されていて、「Configuration」「Logging」「Monitering」です。 どれも、資料にあるベストプラクティスに沿った方法で、良い手法だなと勉強になりました。

・Configuration
設定情報をソースコードで管理するのではなく、環境変数を使うこと
→ 本番/検証等でもソースが変わらない
・Logging
ファイルに出力するのではなく、ストリーミングし外部サービスに流す
→ コンテナを使い捨てしやすくなる
・Monitering
ヘルスチェックのエンドポイントを提供する
→ 外部サービスと連携しやすくなる

他にもベストプラクティが資料に載ってあるので、時間があるときに読んでみたいなと思います。

B8 (L): CPU, Memory and Go

概要

基本的なCPUやメモリを簡単に触れ、Goの最適化、コンパイラの最適化、Goで実装したときのCPUやメモリの振る舞いを紹介します。 またこれら最適化の様子やパフォーマンスを実際にGoの標準ツールを使いながら確認していきます。

資料

speakerdeck.com

感想

Golangにおけるパフォーマンス・チューニングについて勉強になりました。 Golangだけの話なのかわかりませんが、コーディングする際に気にしたほうが良いと思います。

・動的配列を使うのではなくて、静的配列を使う
→ 動的配列だとメモリ確保のコストが高くなるので、遅くなってしまう

環境変数を使うのではなくて、定数を使うこと
→ 実行時にならないと処理が決まらず、コンパイラの最適化がされない

・メモリに割り当てる際は8byteずつで割り切れるようにすること(64bitの場合)
→ 隙間があった場合、パディングが発生して遅くなる(メモリアライメント)

そもそも低レイヤーについて全くわからない人なので、 CPUとMemoryについて知れてよかったです。

全体的な感想

Golangセミナーに初めて参加しました。 スポンサーの話を聞いていると、Golangを採用した理由は、 どの企業も「パフォーマンスの良さと、学習コストの低さ」 という理由が多かった印象があります。 また、DockerやKubernetesGolangで作られていたりと、 Golangはドンドンと人気になっていく言語なのかなと期待しています。

また、スポンサーの中で「既存システムをGolangに再構築した」や 「Golangの知識を得るために勉強会を開催した」など、各社Golangへ 積極的に活動を試みていることをお聞きしました。

反省

Google TeamであるKatie Hockmanのspeakingが英語だったために、ほとんど聞き取ることができませんでした。 実にもったいないと感じました。

※ 資料まとめ engineer-fumi.hatenablog.com

Algolia Community Party in 京都 - 2019年5月10日 参加レポート

algolia.connpass.com こちらに参加しましたので、ご報告までに記事を書こうと思います。

Algolia Community Party in 京都 - 2019年5月10日
Algolia Community Party in 京都 - 2019年5月10日

Algoliaって?

百聞は一見にしかず

まずは下記サイトで、色々検索してみて下さい!

どれも爆速に結果が返ってきませんか !? これ、 実はSaaSで動いているんですよ ?

概要

www.algolia.com

Products to accelerate search and discovery experiences across any device and platform.

Algoliaは、全文検索を提供してくれるSaaSです。 全文検索を使う場合、一般的にはElastic SearchやSolrといったものをサーバに乗せて管理することが多いかと思います。 使い始めると、「カテゴリ選択、ファセット絞り込み、ハイライト」等の機能がほしくなり、独自開発することもあると思います。 Alogliaでは、そういった全文検索に関わる機能をSaaSとして提供してくれます。

使われているところでは、ブログサービスであるmediumや、オンライン決算処理であるStripeのドキュメントがメジャーでしょうか。 エンジニア向けとしては、Docker Hubにも使われています。また、Firebaseの公式でも使用事例として紹介されています。これは驚きですね。

firebase.google.com

Algoliaの会社としては、フランスから2012年よりスタートしました。 ベンチャー企業であり、日本人のエンジニア募集もあるそうです。

SaaSコミュニティ用のイベントがあるそうで、こちらにAlgoliaさんも登壇されています。 www.saastr.com www.saastr.com

どんな機能があるの?

お話をAlgoliaのSolution Architectである@shinodoggから説明があったものとして、下記のような機能があるそうです。

  • 検索時の表記ゆれ
  • タイプミス補助
  • カテゴリ、ファセットによる絞り込み
  • 検索キーワードのハイライト
  • パーソナライゼーション
  • A/B テスト
  • GEO検索
  • 画像検索
  • 音声検索

他にも「安い」と検索すると設定次第で「500円以下の商品」を表示させるような こともできるそうです。あとは、チャットボットにも使えるとのことです。

※ ただ、まだ日本語には対応していないみたいで、現在開発中とのこと。

どうやって使うの?

github.com OSSとしてライブラリを提供されています。 手っ取り早く使いたいときは、instantsearch.jsでしょうか。

community.algolia.com こちらも参考になるかと思います。

Algoliaは知っていたの?

知っていました。 Algoliaを知ったきっかけは、大学時代の友人(id:castaneai)からでした。 Algoliaは、全文検索システムを構築せずとも、お手軽に使えて、しかも高機能なSaaSということで、 個人開発をする私にとって興味を持ち始めました。

その後、下記の記事で書いた通りOSS Gateの対象にもさせてもらいました。

tech-blog.monotaro.com

また、作りたいものリストに溜まっていたアプリを作る時間があったので、 最近では、下記のような書籍管理を作りました。検索はAlgoliaを使っています。

github.com

なぜ会場が、はてな株式会社なの?

はてなの社長であるid:chris4403さんが、@shinodoggと前職での知り合いだったからだそうです。

mackerel.io

はてなも、サーバー監視サービスであるmackerel(鯖)をSaaSとして提供しています。 このお二方が、前職を離れてからも、同様の事業に携わっているということに、不思議な縁だな〜と思いました。

会場では、ピザを提供して頂きました。美味しかったです!ごちそうさまでした!

最後に

SaaSは、その専門の技術を持ってサービス提供をされています。 独自に開発するよりも、そういった専門のSaaSを駆使することで、 開発コストや運用コストの削減につながります。 そもそも、そういった専門技術を持っていない環境は、独自開発することとなり、 学習コストもかかりますし、非機能要件を考えないといけないので大変です。

「かけるべき部分に時間を割いて、それ以外はSaaSに移す」というのは今の時代の効率良い開発スタイルだなと思います。