web-technical-blog

web開発に関する技術メモ

CA.go #2の勉強会

タイトル

CA.go #2

日時

2017/09/06(水) 19:30〜

概要

サイバーエージェントのメディアサービスを担当しているGoエンジニアによる勉強会です。

資料

cyberagent.connpass.com

ULTRA Beer Bash 2017

ULTRA Beer Bash

地球にとどまらない!銀河レベルのAWS活用術

登壇者

  • 桑野 章弘 アマゾン ウェブ サービス ジャパン株式会社 /技術統括本部 ソリューションアーキテクト

日時

  • 2017/9/9(土) 12:00 - 12:45

AWSのグローバルインフラストラクチャ

  • 16のリージョン
  • 海外リージョンを使う話
  • この〇〇ってサービス東京にいつくるんですか?

海外リージョンを使うメリット

  • バージニアリージョンがサービスが早い
  • 新しいサービスをすぐに試すことが可能
  • AZが多いなどにより高い可用性を実現可能
  • 基本の価格も安いことが多い
  • グローバルなアプリケーションをよりラストワンマイルで提供可能

海外リージョン構成の種類

  • DR構成
  • マルチリージョン構成
  • 海外1リージョン構成
  • 一部の機能だけ利用
    • EMR,Redshitだけはみたいな使い方

海外リージョン構成を組む際に重要な部品

  • クロスリージョンレプリケーション

  • Amazon Auroraクロスリージョンレプリケーション

  • DynamoDB Streams?

  • 他リージョンへのコピー高速化

    • クライアントからのコピーを高速化する
    • S3 Transfer Acceleration
    • AWSのマネージドバックボーンネットワークを活用した高速ファイル転送
  • レイテンシベースルーティング

    • クライアントから一番近いリージョンを選択してそちらにトラフィックを向ける
  • Amazon CloudFront

    • CDNはキャッシュだけではいアプリケーションにも効く
    • AWSバックボーンネットワークの活用
    • レイテンシベースルーティング
    • ネットワークパスのTCP/IP最適化
    • キープアライブ接続によりRTTを削減
    • SSL/ TLS最適化
      • ユーザーに近いSSL/TLS終端
      • OCSP Stapling
      • セッションチケットのキャッシュ
  • Amazon Route 53

    • AWSDNSサービス
    • Failove + Geo + Latency + Health Check

海外事例

  • HOYA様事例
    • DRサイトを使用
    • SAPシステムのDRサイトをシンガポールリージョンに構築
  • Gunosy
    • Kinesis Firehost Kinesis Analytics
    • ブログで紹介されている
    • ログデータを拡充
  • Slack様事例

    • アメリカのリージョン1つより、サービスしている
    • CloudFrontwo利用したグローバルアプリケーション
    • EC2が多い
    • APIアクセスにCloudFrontを利用している
    • エッジローケーション間は超高速なNWで接続
    • ユーザーのラストワンマイルの一番近いエッジローケーション
  • マルチリージョンの事例:NetFlix様事例

    • 全世界への配信を3リージョンで実施
    • Open Connectと言われる独自のCDN網を構築
    • リージョン間フェイルオーバ(ChosKong)
    • 3つのリージョンのトラフィック状況を可視化
  • 注意点1
    • Amazonさんならリージョン間のレイテンシもそのうち上がりますよ
    • スループットは出るとして、低レイテンシの実現は難しい
    • リージョン間で動機を取るということはそのぶんのレイテンシを消費するということ
  • 注意点2
    • 国内からの非常に低いレイテンシが必要
    • ある程度高速、かつ同期的な処理がある
    • コンプライアンスなどの理由で国内にデータを持つ必要がある

まとめ

  • 海外リージョンを活用するメリットを一度考えましょう

ヤフーにおけるビッグデータ活用

登壇者

  • 塚本 浩司 ヤフー株式会社 / データ&サイエンスソリューション統括本部 サイエンス本部

日時

  • 2017/9/9(土) 13:00 - 13:45

人工知能

  • 要件定義やまとめなシステム作る方が常に先に重要になる

Agenda

  • ヤフーでの技術

ヤフーの規模

  • 1ヶ月/675億ページビュー

サービス

  • Media
  • Search
  • Video
  • Answer
  • Mail

売上の観点から

  • 大量のコンテンツ・広告

組織からみた技術

ヤフーの技術

技術テーマ

  • 大規模

データ基盤

対話処理

音声認識もDeepLearning

画像処理

PUSH通知タイミングが重要

  • いかに開いてもらうのか
  • KPIは大事

ユーザー行動に基づきタイミングを最適化

慶應大学との共同研究で大規模ライブテスト

  • Yahoo!JAPANトップアプリ(Android版)に実装
  • 開封ペースが大幅に改善

広告サービスYDNとは

  • Yahoo Displayad Network
  • ヤフ主力広告サービス
  • ヤフーのページ内や外部パートナ〜にサイトに表示
  • クリック課金
    • 広告がユーザーにクリックされると広告主がサイトに支払い
  • 良いクリックを稼ぐ
    • ユーザーの特性や状況にあった広告表示

YDNの仕組み

  • その人・その状況に最も合った広告を選びたい
  • 基本戦略としてはその人・その状況における全ての広告のクリック確率を計算し確率の大きなものを表示
  • 数十万種の特徴を使ったクリック確率予測式を利用

技術的負債とのつきあい方 〜マイクロサービス、ハイブリッドクラウドへの道のり〜

登壇者

  • 城倉 和孝 株式会社DMM.comラボ / CTO
  • 佐藤 紘典 株式会社DMM.comラボ / CTO室リードエンジニア

日時

  • 2017/9/9(土) 14:00 - 14:45

負債はなぜ生まれるのか?

  • 品質に問題を抱えるコード
  • 無計画な設計と実装
  • アップデートの放置
  • トレンドの移りわかり

そして、優先すべきビジネス的な制約

  • 納期
  • 優先順位

どうやって借金を返済していくか

  • 小さく継続的に返済する(CD/CI)
  • 適切なタイミングで返済する

モノリシックな1モジュール

未来への不安

  • 優秀なエンジニアが来てくれないのでは?
  • 増員しても効率が上がらないのでは?
  • 新しい技術って永久に使えないの?
  • 負荷が増え続け、サーバー何台買えばいいの?
  • セキュリティリスクが心配

返済した負債(2013年ローンチ)

  • Viewを切り離して別フレームワークで開発
    • コードの可読性向上
  • PC向け、スマホ向けモジュールの統一
    • 改善が効率的
  • PHP5系へのバージョンアップ
  • 新プラットホーム構想
    • API化してサービスをRESTfulに接続したい

返済した負債(2015年ローンチ)

  • プラットホーム(OpenAPI)の完全分離
  • API認証(OpenID)導入

変わったこと

  • 開発言語
  • モジュール
    • マイクロサービス
  • コード管理
  • テスト
    • CicleCI,Jenkins,Selenum etc
  • デプロイ
  • インフラ
    • オンプレ(仮想中心),AWS,GCP,Azure
  • 環境構築
    • CicleCI,Terraform,Dokker etc
  • ドキュメント
    • Confluenceで共有
  • 開発手法
  • チケット管理
  • チャット
    • Slack

Markdown Night 2017 Summerの勉強会

メルカリの方がブログがまとめてくれました。。
tech.mercari.com

golang.tokyo #8 勉強会

golangtokyo.connpass.com

概要

開催日

2017/8/28(月) 19:30〜

開催場所

DMM.com

ハッシュタグ

#golangtokyo


登壇者

星一 / hajimehoshi

登壇資料

https://docs.google.com/presentation/d/e/2PACX-1vSnqz_mJ04LkV56tLnPX9exLf-08axpSH69LQfuOupxWpOvlg1XXYXx4XZj6tAkUvrj6XnY-qqdnj3E/pub?start=false&loop=false&delayms=3000&slide=id.g2451cb4c0a_0_126

Ebiten - 概要

Ebiten - 機能

  • 描画
    • 矩形画像から矩形画像への描画
  • 入力
  • Wav,MPS,Ogg/Vorbis,PCM

Ebiten -メインループ

  • Runに毎フレーム実行する関数を指定する
  • 引数として画面を表す*ebiten.Imageが渡ってくる
  • 画像、画面、オフスクリーンなどが全てが*ebiten.Image

Ebiten - 描画

  • アフィン変換行列
  • 平行移動、拡大縮小、回転の組み合わせを1個の行列だけで表す

実例 - 償いの時計

  • ファミ通に載った
    • goで開発したの初めて…
  • 15000 DL(2017年8月)

  • RPGエンジンをGopherJSでJavascriptに変換

  • ブラウザ上でゲームのテスト

実装 - 描画

実装 - 音のデコーダ

  • MP3はどのブラウザでも動くため、ブラウザではネイティブのデコーダを利用
    • OggSafariでネイティブデコードできない

実装(デスクトップ) - GLFW

実装 GopherJS(ブラウザ)

  • GopherJS
    • GoをJavascriptに変換するソフトウェア
    • goroutineも動作する

実装 - パフォーマンス

  • プロファイルを取る
    • 他のプラットフォームに比べると一番やりやすい
  • コピーを避ける
  • ロック、チャネル、goroutineを避ける
    • 下手に呼ぶとsetTiemoutが呼ばれる
  • deferを避ける
    • deferなしより25倍遅い。実も元々遅い
  • リフレクションを避ける(encoding/jsonなど)を避ける
    • JSONからMessagePackに変更中

実装 - GopherJSの状況

  • GopherJSはまだまだ不安定

実装(モバイル)

  • gomobile bindを使用した
  • 実装に難航した
    • gomobileが悪い?
    • Goそのものが悪い?
    • GPUが悪い?
  • コンテキストロスト問題
  • パフォーマンスチューニング

登壇者

zchee

登壇資料

https://www.slideshare.net/KoichiShiraishi/go-by-zchee

個人で作っているGoパッケージ

  • Docker for Mac
    • とりあえずいいみたい

Neovim用のGoプラグインをpure Goで書いたもの

  • MessagePack RPC話せればどの言語でもプラグイン書ける。Goも例外ではない

まとめ

  • 個人プロジェクトはやったもの勝ち
  • まずは自分が不満を持ったものをやってみる
  • Goの速度を信じて、既存のものをもっと速くしたい

LT枠1

  • ChatOps
    • ナイスなリリースフロー

ChatOpsを導入すること

  • Pros
    • 手作業・属人性の排除
    • リリースの状況が追いやすい
    • サービスに愛着が枠
  • Cons
    • 権限管理が煩雑になりがち

ChatOpsの環境にGAEに使うこと

  • Pros
    • GAEのAPI実行が楽
  • Cons
    • RealtimeMesssaging APIが利用できない
    • uflfech: DEALINE_EXCEEDED
    • go-giuhubが動かない

気をつけたいこと

  • GAEとりあえずTaskQueuに積む
    • Slackの3秒ルール

LT枠2

  • GDBについて

  • デバックツールを使っていますか?

    • println(‘’)
    • 大量のlogの中から探し出さないといけない
    • 毎回 buildしなければいけない
    • デバックコードをcommitしてしまうことがある
  • GDB

    • GgggoがGDBをサポートしている
    • インストールめんどくさい
    • Qiitaとか見てインストールしてね
  • How to debug

    • デバックする際には最適化を外す
    • list command
    • break command
    • run command
    • continue command
    • delete command
    • backtrace
    • info command
      • global変数
      • info variables
      • info breakpoints
      • info goroutines
        • *がついているものが現在実行中のもの
    • print command
      • アドレスを表示したり
    • whatis
      • 変数の型のを表示
    • disas
      • 逆アセンンブル
    • watch
    • set variable

まとめ

  • tab補完が聞くのが気持ち良い
  • HTTP Serverのデバックどうするの?
    • deleveが良さそうかもです…

LT枠3

  • システム構築にgPRCを使った話

  • gRPC

  • RESTのエンドポイント辛い問題

  • コード生成で開発の効率化
  • Streaming RPC

  • ほとんどのクライアントがRESTを要求

  • GOOD

    • Streaming RPCが想定通りに使えた
    • 生成されるコードが自分好み
  • BAD
    • curlのように使えるクライアントが無い
    • サーバーのレスポンスにnilのフィールドがあるとpanicした
      • 今は改善されている
    • docker stackでシステムを立ち上げてしばらくたつと接続エラーが発生した

まとめ

  • gRPCは良い。

NoSQL / RDSの利用用途を整理したお話

開催日

  • 2017/8/23(水) 19:00

開催場所

イベント説明

  • NoSQL各種やRDBの選定について

Agenda

  • NoSQL / RDSの利用用途を整理したお話

資料

https://www.slideshare.net/secret/JGjjBkUZtJaTJP


所感

  • 「とりあえず使ってみる」精神で導入したら運用を辛くなる
  • Redis,DynamoDB,MongoDB,Amazon(Aurora)等、メリット・デメリットについてよく整理されている

メモ

  • NoSQL vs RDBについては以下を意識する
    • 何を重要視するか
    • どのようにパフォーマンスを出すか
    • 問い合わせ
    • 一貫性の維持
    • データモデル
  • キー・バリュー型
    • Redis,Memcache etc…
  • カラム指向型
  • ドキュメント型
    • MongoDB,DynamoDB etc …
    • スキーマレスなのでデータを柔軟に格納できる
    • キー・バリューよりも検索性に優れる
  • Redis
    • シンプルなKey-Valueストアで、非常に高速
    • 生存期間設定可能
    • インメモリベース
    • データ型
      • 文字列、リスト、セット、ソート済みセット、ハッシュ型
    • 2種類の永続化
    • AWS提供のElastiCacheサービスとして利用可能
  • ElastiCashe
    • AWSが提供する完全マネージド型サービス
    • データストアとして Redis/ Memcachedが利用可能
  • ElastiCashe + Redis
    • 永続化についてのコマンドは無効になっている
    • スナップショットファイルの作成などは設定画面から管理する
    • トランザクションログファイルの作成については、Multi-AZ構成の場合は不可

DMMにおけるサーバーレス構築の今と未来の勉強会

開催日

  • 2017/8/1(水) 19:00〜21:30

開催場所

イベント概要

Agenda

  • Serverless Single Page Apps -DMM CM AWARDS-
  • DMM picturesを流行りのサーバーレス構成で開発している話
  • LambdaだけじゃないAWSのサーバーレス

資料

所感

  • AWS Lambdaがも盛り上がってきている
  • インフラエンジニアなしで開発ができるのが良い
    • ただし、ネットワークについての知識は必要

D&S Data Night vol.06 (データ分析/データ収集)の勉強会

開催日時

2017/7/19(水)19:00〜21:30

開催場所

ヤフー株式会社17F

Agenda

  • 「ヤフーのロギングSDKの挑戦 〜データドリブン企業を目指して〜」
  • 「 データマネジメントに必要な、システム『以外』のもの」
  • 「データ分析技術が変えるビジネスの未来」

資料

https://www.slideshare.net/techblogyahoo/sdk-yjdsnight

ロギングSDKの挑戦

  • サービスごとにログの活用が難しい
  • 自動ロギング導入

ロギンク対象指定のI/F

  • ios
    • AssociatedObjectの利用

ロギンク対象の監視・判定処理

  • スクロール監視
  • ポーリング
    • 一定時間ごとに処理を実行
  • イベントのフック
    • イベント発生ごとに処理を実行

可視状態

  • window&screen
  • root view
  • scroll view
    Window座標系で判断する

まとめ


データマネジメントに必要な、システム「以外のもの」

  • サービスごとのデータ活用
    • サービス間をまたいでの活用はまだ未熟
    • 相互に活用したい
  • サービス数は100近くある
    • 戦略的なデータマネジメントが必要
  • 何をどういう順番でやれば良いか?
    • データマネジメント領域
    • DMBOKKv1 + v2などを参考に領域を整理
      • RDBMSの時代の本みたい
  • データマネジメントPOI
  • Data Stewardship
    • 組織的にデータマネジメントに貢献する(責任を負う)こと
  • ヤフーでのData Stewardship体制は
    • 体制の新設
    • カンパニー単位(サービスの集合)でデータの意思決定Data Directorを新設
    • 既存の他の体制にXXX
  • CDO:全社規模の計画リード
    • Board:全社規模の意志決定
    • Data Directors:全社施策の検討・提案・実行&カンパニー内のCOO
  • ビックすぎるデータ
    • 増え続けるデータの種類、量、課題の専門性
  • ヤフーとしてのビジネス判断
    • ビジネス的にリスクがあるケースについて、誰かがヤフーを代表として専門的な見地から判断できる必要がある
  • レギュレーションの一元管理

まとめ

  • Data Stewardship & Ownership
    • データ分析
    • DWH
    • BIツール
    • データモデル

データ分析技術が変えるビジネスの未来

自動化と社会

  • 仕事が奪われた人はどうするんだ!?
    そのため自動化の進め方は非常に重要

自動化とデータ分析技術

  • 少ないデータで学べること
  • 計算量が減ること

幾何学を基本とした数学的な説明が重要であると考える

  • 内部で何が起きているのかわからない

機械学習幾何学

  • 多様体=座標のようなものと考えください

データ分析の数学的理解への課題

  • 2次元での回帰分析や多項式なら人間から見て直感的に理解できた

まとめ

  • データ分析