ウィリアムのいたずらの、まちあるき、たべあるき

ウィリアムのいたずらが、街歩き、食べ物、音楽等の個人的見解を主に書くブログです(たま~にコンピューター関係も)

AWSのサーバーレスの話とGoogleのMFI(モバイルファースト)RWD(レスポンシブ)の話

2017-10-08 19:07:55 | Weblog
10月8日PHP Conference 2017に行ってきた!つづきをメモ




■Serverless FrameworkでAWSフルマネージドなツールをいくつか作って得たアーキテクチャ設計の知見

・自己紹介

・サーバーレスアーキテクチャ
 諸説ある
 イベントドリブン
 AWS Lambda
 サーバー単位でなくイベント単位
 ステートレスで構築:スケーラビリティの恩恵

・AWS Lambda
 イベント単位でコンテナ立ち上がり、ファンクション実行
  CGIのようなイメージ
 コンテナは大体破棄→ステートレスな実装
  →別のサービスを利用する必要

・LAMPアーキテクチャとサーバーレスの比較
 LAMP ユーザー管理領域
  Linix、PHP、MySQL
 サーバーレス
  API Gateway→Lambdaファンクション実行
  クラウドウォッチ
  S3イベント
  ユーザー管理部分
   Lambdaファンクションだけ

・サーバーレスフレームワーク
 サーバーレスアーキテクチャでアプリケーションを構築するためのフレームワーク
 他のFaaSも扱えるAzure Founction、Google Functionも扱える

・プログラマブルクラウドフォーメーション+AWS Lambda
 全部デプロイできる

・どのようなツールが作れるか
  backslack
  faultline
  utsusemi APIで動的な更新が可能な性的サイト生成
  hubedit
→紹介したものはすべて
  sls deploy
 ででぷろいできる
 git cloneして
 cdして
 npm install
 configコピー

 運用できる?→運用してる
 ストレージ3つ 2400行

・サーバーレスアーキテクチャ
  LAMPアーキテクチャとは違うことを知る
  プロセスが動いているサーバーにステートを持たない
  安易にRDMS(RDS)を使うとあんちパターン
   →コネクション
  動画などのバイナリの扱い:大きさ制限
  認証の仕組み

・マネージドサービス

・サーバーレスアーキテクチャで生きてくる
 設計・アイデア

・Post with config
  設定値をリクエストに付与する
  秘匿値 KMSで暗号化

・Reversed Timestamp ID
  新しい順の一覧
  RDSはあんちパターン、DynamoDBでデータ一覧もアンチパターン
  S3で

・Instant Job Queue
  再帰的なinvoke→DoSになりかねない→キューを作る(SQS)

・S3 Object Tagging
 メタ情報保存

・Env Sync
 デプロイ時の環境変数とプロセスの環境変数の同期




■大規模WebサイトのURL刷新の方針と実装
・自己紹介

・Pixivの紹介
 イラストコミュニケーションサービス
 デスクトップ版、モバイル版:別のHTML
 ドメインは別々
 PHP、独自コード(フレームワーク使わない)

・今日話すこと
 URL刷新→SEO

・PixivのURL
 あまり規則性ない
 URLの刷新:ユーザーもBOTもみやすい
 作品がユーザーに結びつく

・作品はユーザーに結びつく
 理由→SEO
  /user/AAAが高く評価されるのでは?
 novelは例外
  ユーザーの週間

・GoogleのMFI(Mobile First
 →将来的にモバイル版

・ドメイン統合
 デスクトップ/モバイルのドメイン統合への期待
 MFIのためにルーターを導入したのでURL刷新が現実的になった
 URL刷新にはユーザビリティの工場とSEO

・障壁
 www.touchにルーターはなかった
  課題:ルーターの作成

・ルーター
 パトリシアトライをを使ったコア実装
 ルーティング
 ルーター利用の課題
   クラス名の重複:クラス名にパスを利用
   global関数:クラス関数化(staticファンクション)

・Vim script
 Vimのコマンドを並べたもの
 .vimrc
 vim -S file名
  コードリファクタリングの強力なDSL 
・URL組立:reverse_route

・相対パスの廃止

。まだまだ続く
 Google、RWD(レスポンシブWebデザイン)を強く推奨

質疑応答
 テストは?curlたたいて、500にならないかで確認
リダイレクトは?
 ルーターで行ったので、問題にならなかった(一部301)
 リバースルート

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PHP7.2の機能とかPHPでKafkaとか聞いてきた

2017-10-08 12:00:43 | Weblog
今(10月8日)PHP Conference 2017
に行ってる最中!午前中をメモ(遅れたので途中から)




■PHPの今とこれから2017(途中から)

7.2の機能

・PHP7.2は7.1から約10%高速化
 →5.6から7.0が大きく変わった

・新しい引数型宣言/戻り値object
 従来 Type hintingではクラス名を指定していた
 →汎用クラスobjectを型引数・戻り値に指定できる

・パスワードの保存と攻撃への対策
 ハッシュ生成
  md5,sha1→GPUの総当たりで高速にとかれる
 パスワード検証
  タイミングを計る:対応策は大変

 →パスワード生成 password_hash() 検証 password_verify()
  細心の実装を簡単に
  アルゴリズム・オプション・ソルト・パスワード

 7.2で新しいアルゴリズム Argon2
 →従来Blowfish
  メモリコスト、時間コスト、並列度を調整可能

・Libsodium標準サポート化
 openssl→間違った使い方
  libsodiumを標準化

・認証つき暗号(AEAD)
 認証つき暗号:chacha20+Poly1305
 鍵生成→暗号化→復号・検証

・廃止になったもの
 Mcrypt
 7.2で廃止予定→PHP8.0で廃止:E_DEPRECATED警告

・名前によるエクステンションロード
 soとdll extention=mbstring

・PHPフレームワーク
 Laravelの人気高い

・HHVM/Hackの深化
 3.24(LTS):PHP5をサポートする最終版
 HHVMの将来(2017/9/18)
  PHP7の完全互換は目指さない
  主なPHPツール(composer等)のHHVM版を提供

・PHPのこれから
 PHP7.3開発が開始される
 JIT for PHP:OpCacheを拡張。Zendが次期

・PHPユーザー会

・Challenge やってもたを共有しよう 7

 
■Apache Kafkaによるスケーラブル アプリケーション開発
・自己紹介
・今日はしないけど、Laravelの本書いている

・スケーラビリティ:以下の3つの透過性を満たすこと
 規模透過性
  負荷の工程に合わせて、ソース・プールを拡大・縮小できること
 位置透過性
  はなれていてもOK
 異種透過性
  機器、ソフト異なってもOK

・アジェンダ
 メッセージキュー
 Apache Kafkaって何なの?
 PHPアプリケーションからどう使うか

・メッセージキュー
 背景:どんなもので必要
  コメント投稿サービス
  アプリケーション実装
   シンプルなアプリケーション構成
   複雑化するアプリケーション
     機能追加
     コメント情報を他の機能で利用したい
     条件による一覧情報のソート変更
  ビジネスの成長とともに肥大化するアプリケーション
   収益化のために機能
   利便性のための機能
   既存機能の拡張
  アプリケーションのクラスそのものをコンポーネント化
   →依存性を取り除く

 アプリケーション・データベースリファクタリング
  統合した機能をコンポーネント提供
  APIによるデータ操作の抽象化
  データベースパフォーマンス改善
 →きれいなアプリケーションに近づく

 巨大なアプリケーションへ
  サービス拡大に伴うアプリケーション追加
  依存コンポーネント増加→仕様変更吸収
  増加するAPI利用→溢れ出す他サービスのビジネスロジック
  データベース問題→Elasticsearch,solrなどの導入

 深刻な問題
  仕様変更に伴うコンポーネント修正とリリース複雑化
   ライぶらりのバージョンあげなきゃ
  アプリケーション間連携の複雑化
  データ同期の複雑化
   リアルタイムでデータがほしい
   インデックス更新が定期実行
  どこかのサービスを修正したら・・・

 成長していく事業に合わせて、アプリケーションをどうスケールさせるか
  変わりゆく環境
   データを取得するには?
   APIコールによる都度確認?
   キャッシュは何分?
 
  それぞれのサービスでそれぞれの言語
   ライブラリが負の遺産化

 データ処理
 →複雑化
   認証が入る:
   キャッシュなしでアクセス→高負荷状態

 CQRS
  書き込みと読み込みの責務を分離する設計
  メソッド:アクションを実行するコマンドか、データを返すクエリかのいずれかにする
  CQRS パターン
   データベース操作を読み込み、書き込みと分離
   RDBMSを生かす:正規化・トランザクション
   サービスに合わせたモデリング
   イベントソーシングと組み合わせる:イベントの永続化

 フレームワークに見るキュー
  Laravelでは時間がかかる処理や非同期処理向けにキューコンポーネントを提供


・Kafkaって何?
 メッセージングシステム
 多様な分散型メッセージングミドルウェア
  Redis
  ZeroMQ
  RabbitMQ  

Redis
  KVSの一機能、PubSub
  sentinelを利用してフェイルオーバー
  LPUSHなどを利用してメッセージ保管
  トランザクションなし

 ZeroMQ
  ライブラリ
  アプリケーションが通信、メッセージ処理

 RabbitMQ
  AMQP
  エンタープライズで多様、VMの環境
  メッセージの永続化、レプリケーション、トランザクションあり
  →メッセージの蓄積苦手だったが、できるようになった

Kafka
  Zookeeperを利用したクラスタリングによる高可用性
  メッセージの永続化、レプリケーション、再取得化
  ビッグデータ対応
  シーケンシャルアクセスによる高速化、ストリーム対応
  Kafka Connectによる周辺システムとの高い親和性(kinesisと同じ)

 概要
  プロデューサー:メッセージ配信
  コンシューマー:サブスクライバ、一定期間保管
  ブローカー:本体

 Zookeeper:こーでぃね―ションエンジン
  設定管理や名前解決を行う
  奇数台で構築→だちょうくらぶの熱湯と同じ?

 topic
  メッセージ格納、FIFOで

 パーティション
  負荷分散

 Kafka connect
  周辺システムからのデータ取り込み(source)
  データ送信(sink)の二種類をサポート
  Amazon SQS,MongoDB,Elastic search,RDBMSに格納できる
  自由に拡張できる(java,scala)

 Kafka Stream
  ストリーム処理を実装する機能
   →絶え間なくやってくる
  コンシューマーなしにデータ格納時に別のトピックに格納
  Java scala

 Exactly Once
  正確に1度だけ発行
 メッセージ保証
  重複ゆるす
  欠損ゆるす
  許さない

 KSQL
  メッセージをSQLで
  デベロッパープレビュー
  RESTで

 Kappaアーキテクチャ
  ラムダアーキテクチャに対して、
  Kafkaを利用したアーキテクチャ
   →Kappaアーキテクチャ
   Kafka→Spark→Cassandra→Query

 分析処理
   Kafka採用
   PHPエクステンションがある

・Kafka client for PHP
 いくつか手段がある
 RdKafka
  librdkafka(C/C++)をPHPで利用可能にしたエクステンション
  PHP5/7対応

 実行
  addBroker
  トピック名指定
  パーティション指定
 
 コンシューマー
  クループIDを同じにする
  コンシューマー設定値を指定
  どのパーティション?

 スーパーバイザーの利用
  ハートビート:hqartbeat.internal.ms
    session.timeout.msより小さく、1/3より大きく
  PDO:明示的に切断・接続

 大事なこと
  クリーンな実装:PHPのものをふくめない
  Rdkafkaか、Fluentdかはアプリしだい
  ライブラリ経由でなく、そのまま利用する

 メッセージのバリデーションはどこで?
  プロデューサー
   最低限の型を守る
  コンシューマー
   正しくなければスキップ
 Kafka streamという選択肢
 サービスの知識は専用のStreamで行う→マイクロサービスであれば

 Kafkaと連携するDB:pipelineDB→PHPでSQL
  →PostgreSQLコンパチ=PDOで

 一歩進んだ分散アプリケーション
  Prestoを利用し、RDBやRedisと組み合わせたデータ取得が可能

 はじめかた
  公式ページからダウンロード
  confluentからダウンロード→おすすめ
  HadoopなくてもOK
  クラスタ管理、メッセージ管理ツール有

・まとめ
 これは問題解決の1つ
 Stream処理など必要ならkafkaを推奨

  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする