分123456梅田昌太さん「PHPerがAWSと出会ってDevOpsを目指した話⁠」⁠アプリケーションエンジニアである梅田さんが,Rettyのサービス拡大とともに発生した問題とどう向き合ってきたかについて紹介しました。スタートアップで,サービスの機能を追加していくことと,ユーザーが増えて発生する問題の解決を両立させて進めていくために,という話はとても興味深かったです。Rettyのサービスについて紹介しました。インフラ構成別で分類すると次のようになっています。レティの飲食店様向けのサービス次に,サービスの成長に伴うインフラの構成と,その際に発生した問題を説明しました。~5万ユーザ:VPSで稼働。10万ユーザ~:AWSに移行(EC2のみで稼働⁠)⁠。50万ユーザ~:AWSアーキテクチャを意識し,EC2からサービスを分離。100万ユーザ~:EC2の冗長化をして,スケールアウトし始めた。Monitによる死活監視を始めた。200万~400万ユーザ:サブドメインをAWS+VPCに移行。linuxにし,MySQL・PHPのversionをバージョンアップした。~500万ユーザ:ログをTreasureDataに移行し,CIはCircleCIで回すようにした。Opsを楽にしてくれたサービスたちの個人的ランキングも紹介しました。toolみたいなもの。gitのリポジトリをデプロイできる。Environemnetとコミットを指定してデプロイ。RDS高いが,Multi_AZは素晴らしい。メンテフリーで,気軽にスケールアップできる。S3EBSで,でかいインスタンスを用意するのはあまり良くない。最後に,大事だと思うこととして,「⁠自前で解決することもできるが,コストがかかっても,運用コストを下げてアプリケーションの開発に専念すること」「⁠AWSが推奨するアーキテクチャに乗って,インフラはAWSに任せること」を挙げていました。中野拓さんは,1つ1つのマイクロサービスを複数のAPIでコンポーネント化して実現する際に,増えるI/OをPHPでどのように多重化するかについて説明しました。マイクロサービスはどうしてI/Oが遅くなるかを紹介しました。APIによってアプリケーションをコンポーネント化してつくることを指します。その際,ネットワークI/Oは遅いので多重化します。このI/Oを多重化のためにPHPの非同期APIを使うことになります。真のI/O多重化としてcurl_multiを取り上げましたが,これを書くのは大変だと紹介し,書きやすく抽象化したいと言います。node.jsは1スレッド1プロセスですが,同時に複数のリクエストをさばくことができます。あらゆるI/Oが徹底的に非同期・多重化されています。このnode.jsを真似たものにReactPHPというのがあります。callbackが使いづらく,既存のPHPライブラリが使えません。そこで,中野さんはyield(ジェネレータ)を薦めました。関数を一時停止・再開できる機能です。これを用いることで,既存のコードにほとんど手をいれずに処理を多重化できることを説明しました。まとめ最後に,まとめとして次のことを挙げました。アクセスログはネットワークエンジニアにお任せしない風潮になってきていて最近辛いところです。祖山寿雄さんは,アクセスログ解析基盤構築について発表しました。PHPとログPHPはWebアプリケーションを作るための言語ですが,Webアプリケーションを運用するとログが残ります。ログはどこにあるのかというと,アクセスログなら/var/log/wwwや/app/tmp/logなどにあります。これら生ログを目視するのは,泣きたくなります。grepすると多少ましになりますが,sed&awkなどの職人芸を必要とする場合が出てこないことを祈るばかりです。古いログは圧縮されています。これを展開して編集して......ということは,したくないはずです。簡単にログを調べたいアクセスログは行動履歴なので,きちんと使うことで,会員登録後にアクティブになったユーザとそうでないユーザの行動にどんな違いがあるか?等の情報も取得できます。HadoopとかRedshiftとかはよく分からず,分析自体はExcelとかRとかに任せるとして,必要なデータを簡単に分析したい時は次の2つのプロセスを考えるのが良いと言います。ログ調査を効率化しようログ調査を効率化するために,ElasticsearchとKibanaを薦めました。Elasticsearchはオープンソースの検索エンジン。Solrとよく比較されます。Kibanaは表示したり,クエリを作ったりします。検索的にログを調べられて便利です。静的ファイルとして存在しているので,軽いのがメリットです。ユーザーの行動解析をしよう解析にはBigQueryがお薦めだと言います。BigQueryではSQLライクなクエリが書けるのと,とにかく安いのが素晴らしいとのこと(1Tの検索でも5ドル程度⁠)⁠。スキーマレスではないので,JSONなりCSVなりで入れてやる必要はあります。Elasticsearchのクエリはネストが続くため,人間の視認性が悪い。そこだけはBigQueryが良いそうです。データを投げるだけでGoogleがやってくれるので便利だと述べていました。BigQueryもKibanaほどではないにしてもダッシュボードを作ることができますが,ガチャガチャと打ち込むとクエリ課金なので注意が必要です。ログを入れるためのfluentdBigQueryやElasticsearchにログを入れるには,fluentdを使います。fluentdを使うことで,phpやsyslog,apache,それぞれのミドルウェア毎のログを整形したり,いろいろな形式で取り出すことができます。通常はこのような作業は大変です。fluentdが代わりにやってくれます。設定のテンプレートも公開されています。ログのフィルタリングができるので,必要なログだけBigQueryやElasticsearchに渡すことができたりするとのことです。フローの制御はタグをつけることで実装します。具体的にはX行目のタグはABCみたいな感じです。ログを送るデモそして,nginxのログをBigQueryとElasticsearchに送るデモを行いました。注意点として,BigQueryはクエリ課金なので,できるだけ絞ったほうが良いとのこと。静的ファイルはいらない,などです。fluentdのconfigは65k程度で書けます。項目にタグ付けをして,フィルタするイメージです。タグ付けされた項目に応じて送り込むテーブルを変更したりすることもできることを説明しました。PHPとはかなりかけ離れていましたが,是非これらを使ってみたいと思ったセッションでした。会社でポイントサイトの開発を担当。業務でもプライベートでも一番長く触っている言語はPHPだが,最近はNode.jsやアプリ開発に浮気中。PHPを使うようになって9年。楽しい事には何でもやってみるスタイル。趣味はプログラミング,仕事もプログラミング。最近はアプリ開発が多くなっているが,Web開発となるとPHPは手放せない。仕事でしかPHP書いていません。5.5は素敵だと思っています。2019」を開催しました。DAY1・DAY2の様子を注目セッションとともにお伝えします。LINEのエンジニア3名がイベントに先駆けて見どころを紹介します。コードの安全性・安定性を高める開発サイクル~テスト管理の効率を上げ,脆弱性診断を自動で行う~本連載では,連載「業務を改善する情報共有の仕掛け」を受けつつ,安全性・安定性を加えた開発サイクルについて考えていきます。若者世代から圧倒的な人気を誇るライブ配信&動画投稿コミュニティアプリ「MixChannel」(ミクチャ)の裏側(レコメンドシステムやサーバサイド開発など)について解説していきます。その他の連載CSS3アニメーションでつくるインターフェイス表現CSS3によるアニメーション表現を紹介していきます。その中でも,幅広い読者に応用してもらえるだろうインターフェイスを主なお題とします。MySQL道普請便り本連載では,MySQLを使ったアプリ開発・運用に関するノウハウをご紹介していきます。RecipeUbuntuの強力なデスクトップ機能を活用するための,いろいろなレシピをお届けします。JavaScriptセキュリティの基礎知識JavaScriptに関するセキュリティ上の問題はどこで発生し,どうすれば防ぐことができるのか?について解説していきます。〜システムをきちんと運用するための基礎知識システムは「作って終わり」ではなく,運用の中でさまざまな問題が発生します。問題の発生に備えて事前にどのような対応をしておくべきなのか,問題発生時に何をしなければならないのか,ポイントを解説していきます。きたみりゅうじの聞かせて珍プレーソフトウェア開発の現場で体験したトホホな失敗,思わずうなる珍プレーをきたみりゅうじ氏が四コママンガで紹介。Linuxのメンテナンスの傍ら,Linuxやオープンソースソフトと日々を過ごす著者が,その魅力とつきあい方を,エッセイ風味でお届けします。PRESS特別編集部員,さわやか笑顔のスーパーハカーはまちちゃんとネット大好き14歳わかばちゃんが,毎号,読者の皆さんから寄せられたおたよりを紹介します。皆さんの日頃の悩みにも答えちゃいますよ。]メールでのお知らせメールで次の案内をお送りしております。メールの配信を希望する方は,利用したい項目をチェックしてメールアドレスを入力し,[登録]ボタンをクリックしてください。UPDATES[ほぼ週間に1回]新刊メールマガジン[ほぼ週間に1回]電脳会議の各号案内[ほぼ1ヵ月半に1回]※変更する場合や停止する場合は,登録情報変更ページをご覧ください。※登録いただいたメールアドレスには,そのお知らせ以外,配信いたしません。Ltd.ページ内容の全部あるいは一部を無断で利用することを禁止します。個別にライセンスが設定されている記事等はそのライセンスに従います。