20121019 engineer startup_meeting

90
CTOのサービスへの関わり Engineer Startup Meeting 株式会社nanapi 取締役 CTO 和田修一 <[email protected] > 121023日火曜日

description

 

Transcript of 20121019 engineer startup_meeting

Page 1: 20121019 engineer startup_meeting

CTOのサービスへの関わり⽅方  -‐‑‒  Engineer  Startup  Meeting  -‐‑‒  

株式会社nanapi 取締役 CTO

和田修一 <[email protected]>

12年10月23日火曜日

Page 2: 20121019 engineer startup_meeting

本日の内容

CTOとしてnanapiで奮闘してきた3年間について簡単にお話できればとおもいます!

12年10月23日火曜日

Page 3: 20121019 engineer startup_meeting

本日のアジェンダ

nanapiができるまで• 創業時にとにかく大変なこと

• CTOは技術者の夢を叶えられるか?

システム構成といままでの経緯• 創業当時のシステム構成

• 創業当時の負荷分散とアプリケーション構成

• 現在のシステム構成

• 画像ファイルをスケールアウトさせる仕組み

開発体制の変化と現状• 開発体制の変化

• 「技術」から「プロダクト」へのシフト

nanapiで成し遂げたいこと• ハウツーDBで世界 No1を目指す

• ハウツーの先にある便利な世の中へ

12年10月23日火曜日

Page 4: 20121019 engineer startup_meeting

自己紹介

和田修一  (わだっぷ)名前

株式会社nanapi  取締役  CTO

所属

略歴• 2005年 楽天株式会社へ新卒入社• インフラ系の運用部署へ配属• その後、国際事業の立ち上げに携わる• 2009年 株式会社ロケットスタート(現:株式会社nanapi)本格始動

Unix的なアレ  -­‐  h-p://d.hatena.ne.jp/wadap/

BLOG

12年10月23日火曜日

Page 5: 20121019 engineer startup_meeting

本日のアジェンダ

nanapiができるまで

システム構成といままでの経緯

開発体制の変化と現状

nanapiで成し遂げたいこと

• 創業時にとにかく大変なこと

• CTOは技術者の夢を叶えられるか?

• 創業当時のシステム構成

• 創業当時の負荷分散とアプリケーション構成

• 現在のシステム構成

• 画像ファイルをスケールアウトさせる仕組み

• 開発体制の変化

• 「技術」から「プロダクト」へのシフト

• ハウツーDBで世界 No1を目指す

• ハウツーの先にある便利な世の中へ

12年10月23日火曜日

Page 6: 20121019 engineer startup_meeting

本日のアジェンダ

nanapiができるまで

システム構成といままでの経緯

開発体制の変化と現状

nanapiで成し遂げたいこと

• 創業時にとにかく大変なこと

• CTOは技術者の夢を叶えられるか?

• 創業当時のシステム構成

• 創業当時の負荷分散とアプリケーション構成

• 現在のシステム構成

• 画像ファイルをスケールアウトさせる仕組み

• 開発体制の変化

• 「技術」から「プロダクト」へのシフト

• ハウツーDBで世界 No1を目指す

• ハウツーの先にある便利な世の中へ

12年10月23日火曜日

Page 7: 20121019 engineer startup_meeting

創業して一人めのエンジニアということは

12年10月23日火曜日

Page 8: 20121019 engineer startup_meeting

創業して一人めのエンジニアということは

創業時はとにかくやることが多い!

12年10月23日火曜日

Page 9: 20121019 engineer startup_meeting

開発に関わるタスクだけあげていっても...

• 言語選定どうする?• フレームワークどうする?• ミドルウェアどうする?• 開発環境・テスト環境準備しないと... • サーバ業者選定• スケジュール検討• テスト!テスト!テスト!• 負荷試験、クオリティ管理• 監視の仕組みどうにかしないと• データバックアップ• セキュリティなんとかしないと• デプロイ方法• 自分が倒れたらどうする? etc...

12年10月23日火曜日

Page 10: 20121019 engineer startup_meeting

開発に関わるタスクだけあげていっても...

• 言語選定どうする?• フレームワークどうする?• ミドルウェアどうする?• 開発環境・テスト環境準備しないと... • サーバ業者選定• スケジュール検討• テスト!テスト!テスト!• 負荷試験、クオリティ管理• 監視の仕組みどうにかしないと• データバックアップ• セキュリティなんとかしないと• デプロイ方法• 自分が倒れたらどうする? etc...

12年10月23日火曜日

Page 11: 20121019 engineer startup_meeting

開発に関わるタスクだけあげていっても...

• 言語選定どうする?• フレームワークどうする?• ミドルウェアどうする?• 開発環境・テスト環境準備しないと... • サーバ業者選定• スケジュール検討• テスト!テスト!テスト!• 負荷試験、クオリティ管理• 監視の仕組みどうにかしないと• データバックアップ• セキュリティなんとかしないと• デプロイ方法• 自分が倒れたらどうする? etc...

12年10月23日火曜日

Page 12: 20121019 engineer startup_meeting

開発に関わるタスクだけあげていっても...

• 言語選定どうする?• フレームワークどうする?• ミドルウェアどうする?• 開発環境・テスト環境準備しないと... • サーバ業者選定• スケジュール検討• テスト!テスト!テスト!• 負荷試験、クオリティ管理• 監視の仕組みどうにかしないと• データバックアップ• セキュリティなんとかしないと• デプロイ方法• 自分が倒れたらどうする? etc...

12年10月23日火曜日

Page 13: 20121019 engineer startup_meeting

創業して一人めのエンジニアということは

ほかの部署がやってくれたことを全部自分でやらなければいけない!

12年10月23日火曜日

Page 14: 20121019 engineer startup_meeting

よく勘違いされがちなこと

面倒な社内調整とか、上司がいなくて自由に開発できるんだよね?

12年10月23日火曜日

Page 15: 20121019 engineer startup_meeting

よく勘違いされがちなこと

面倒な社内調整とか、上司がいなくて自由に開発できるんだよね?

調整はないけど、仕事量は膨大です!

12年10月23日火曜日

Page 16: 20121019 engineer startup_meeting

創業して一人めのエンジニアということは

全部自分でやらないといけないし、技術で何かあれば全部自分の責任

12年10月23日火曜日

Page 17: 20121019 engineer startup_meeting

創業して一人めのエンジニアということは

全部自分でやらないといけないし、技術で何かあれば全部自分の責任

会社員よりも圧倒的に大変です!

12年10月23日火曜日

Page 18: 20121019 engineer startup_meeting

簡単にまとめると

CTOとして起業にジョインするには、技術スキルだけでなく、ビジネススキルも重要

12年10月23日火曜日

Page 19: 20121019 engineer startup_meeting

本日のアジェンダ

nanapiができるまで

システム構成といままでの経緯

開発体制の変化と現状

nanapiで成し遂げたいこと

• 創業時にとにかく大変なこと

• CTOは技術者の夢を叶えられるか?

• 創業当時のシステム構成

• 創業当時の負荷分散とアプリケーション構成

• 現在のシステム構成

• 画像ファイルをスケールアウトさせる仕組み

• 開発体制の変化

• 「技術」から「プロダクト」へのシフト

• ハウツーDBで世界 No1を目指す

• ハウツーの先にある便利な世の中へ

12年10月23日火曜日

Page 20: 20121019 engineer startup_meeting

本日のアジェンダ

nanapiができるまで

システム構成といままでの経緯

開発体制の変化と現状

nanapiで成し遂げたいこと

• 創業時にとにかく大変なこと

• CTOは技術者の夢を叶えられるか?

• 創業当時のシステム構成

• 創業当時の負荷分散とアプリケーション構成

• 現在のシステム構成

• 画像ファイルをスケールアウトさせる仕組み

• 開発体制の変化

• 「技術」から「プロダクト」へのシフト

• ハウツーDBで世界 No1を目指す

• ハウツーの先にある便利な世の中へ

12年10月23日火曜日

Page 21: 20121019 engineer startup_meeting

かねがない!

創業時は金がない!金は超重要。ないと死にます。

12年10月23日火曜日

Page 22: 20121019 engineer startup_meeting

かねがない!

創業時は金がない!金は超重要。ないと死にます。

エンジニアが貢献できることは、コストを削減するしかない

12年10月23日火曜日

Page 23: 20121019 engineer startup_meeting

一般的な負荷分散をするための構成

Load  Balacner

Web  Servers

DB  Servers

Master Slave

12年10月23日火曜日

Page 24: 20121019 engineer startup_meeting

一般的な負荷分散をするための構成

Load  Balacner

Web  Servers

DB  Servers

Master Slave

• こういったシステム構成は裏セグメントが用意されてることが前提

• 裏セグメントを繋ぐと高コスト• グローバル接続のサーバのみで何とかしたい

12年10月23日火曜日

Page 25: 20121019 engineer startup_meeting

一般的な負荷分散をするための構成

Load  Balacner

Web  Servers

DB  Servers

Master Slave

• こういったシステム構成は裏セグメントが用意されてることが前提

• 裏セグメントを繋ぐと高コスト• グローバル接続のサーバのみで何とかしたい

画像ファイルは初期から分散しておかないと、早い段階でシステムが破綻する

12年10月23日火曜日

Page 26: 20121019 engineer startup_meeting

起業時の企画書(原文のママ)

12年10月23日火曜日

Page 27: 20121019 engineer startup_meeting

起業時の企画書(原文のママ)

どのページにアクセスが集まるのかを戦略からシステムへ落とす

12年10月23日火曜日

Page 28: 20121019 engineer startup_meeting

初期にとっていた負荷分散構成

処理の複雑さ

処理速度

12年10月23日火曜日

Page 29: 20121019 engineer startup_meeting

初期にとっていた負荷分散構成

処理の複雑さ

処理速度

TOPページ 記事ページ

12年10月23日火曜日

Page 30: 20121019 engineer startup_meeting

初期にとっていた負荷分散構成

処理の複雑さ

処理速度

TOPページ 記事ページ

検索ページ

投稿ページ マイページ

12年10月23日火曜日

Page 31: 20121019 engineer startup_meeting

初期にとっていた負荷分散構成

処理の複雑さ

処理速度

TOPページ 記事ページ

検索ページ

投稿ページ マイページ

12年10月23日火曜日

Page 32: 20121019 engineer startup_meeting

初期にとっていた負荷分散構成

処理の複雑さ

処理速度

TOPページ 記事ページ

検索ページ

投稿ページ マイページ

単純な処理を高速に

12年10月23日火曜日

Page 33: 20121019 engineer startup_meeting

初期にとっていた負荷分散構成

処理の複雑さ

処理速度

TOPページ 記事ページ

検索ページ

投稿ページ マイページ

単純な処理を高速に

12年10月23日火曜日

Page 34: 20121019 engineer startup_meeting

初期にとっていた負荷分散構成

処理の複雑さ

処理速度

TOPページ 記事ページ

検索ページ

投稿ページ マイページ

単純な処理を高速に

複雑な処理をそこそこの速度で

12年10月23日火曜日

Page 35: 20121019 engineer startup_meeting

初期にとっていた負荷分散構成

処理の複雑さ

処理速度

TOPページ 記事ページ

検索ページ

投稿ページ マイページ

フレームワーク利用せず

CakePHPを利用

12年10月23日火曜日

Page 36: 20121019 engineer startup_meeting

フレームワークは適材適所

全体の8割の負荷を占めるシステムが、実際はすごく単純なシステムだとしたら?

12年10月23日火曜日

Page 37: 20121019 engineer startup_meeting

フレームワークは適材適所

全体の8割の負荷を占めるシステムが、実際はすごく単純なシステムだとしたら?

フレームワークは通すだけで重いので、使い分けるだけで負荷軽減につながる

12年10月23日火曜日

Page 38: 20121019 engineer startup_meeting

踏まえた上でのnanapiの初期構成

Server  Aフレームワーク動くけど、アクセス少ない

フレームワーク利用

Server  B単純な処理だけど、アクセス多い

フレームワーク非利用

The  Internet

<データ転送>

12年10月23日火曜日

Page 39: 20121019 engineer startup_meeting

踏まえた上でのnanapiの初期構成

Server  Aフレームワーク動くけど、アクセス少ない

フレームワーク利用

Server  B単純な処理だけど、アクセス多い

フレームワーク非利用

The  Internet

¥  9,800円  /  month ¥  7,800円  /  month

<データ転送>

12年10月23日火曜日

Page 40: 20121019 engineer startup_meeting

踏まえた上でのnanapiの初期構成

Server  Aフレームワーク動くけど、アクセス少ない

フレームワーク利用

Server  B単純な処理だけど、アクセス多い

フレームワーク非利用

The  Internet

インターネット経由でデータを同期

¥  9,800円  /  month ¥  7,800円  /  month

<データ転送>

12年10月23日火曜日

Page 41: 20121019 engineer startup_meeting

時は流れ

12年10月23日火曜日

Page 42: 20121019 engineer startup_meeting

時は流れ

12年10月23日火曜日

Page 43: 20121019 engineer startup_meeting

時は流れ

3年で月間訪問者数は2200万超えに

12年10月23日火曜日

Page 44: 20121019 engineer startup_meeting

システムの規模に合わせて、構成を変え続けていくことが必要

12年10月23日火曜日

Page 45: 20121019 engineer startup_meeting

システムの規模に合わせて、構成を変え続けていくことが必要

過去のシステムを捨て続ける勇気も必要

12年10月23日火曜日

Page 46: 20121019 engineer startup_meeting

画像をスケールアウトについてちょこっとお話します。

12年10月23日火曜日

Page 47: 20121019 engineer startup_meeting

画像の重要さ

12年10月23日火曜日

Page 48: 20121019 engineer startup_meeting

画像の重要さ

記事ページを表示する上で、重要なデータ

12年10月23日火曜日

Page 49: 20121019 engineer startup_meeting

画像の重要さ

記事ページを表示する上で、重要なデータ

12年10月23日火曜日

Page 50: 20121019 engineer startup_meeting

画像の重要さ

記事ページを表示する上で、重要なデータ

12年10月23日火曜日

Page 51: 20121019 engineer startup_meeting

nanapiにおける画像の重要さ

• 画像が多い記事だと、10枚前後の画像がはいる• APIでの記事提供も外部にしているため、• 大量のリクエストをさばく必要がある• データ量、システム負荷ともにスケールアウトできるようにしておく

• サムネイルなどでも使うため、動的にサイズを変更する仕組みが必要

12年10月23日火曜日

Page 52: 20121019 engineer startup_meeting

画像をスケールする仕組み

画像の参照先を1つに集中させないためのしくみを導入

12年10月23日火曜日

Page 53: 20121019 engineer startup_meeting

アプリケーションサーバ

画像アップロード&参照の仕組み

画像専用Fileサーバ

画像配信サーバ

Load  Balacner Load  Balacner

12年10月23日火曜日

Page 54: 20121019 engineer startup_meeting

アプリケーションサーバ

画像アップロード&参照の仕組み

画像専用Fileサーバ

PUT/GET/DELETE

画像配信サーバ

Load  Balacner Load  Balacner

12年10月23日火曜日

Page 55: 20121019 engineer startup_meeting

アプリケーションサーバ

画像アップロード&参照の仕組み

画像専用Fileサーバ

PUT/GET/DELETE

画像配信サーバ

Load  Balacner Load  Balacner

HTTP経由でリモートのサーバへファイルを登録NFSなどを利用すると、いろいろアレなので

12年10月23日火曜日

Page 56: 20121019 engineer startup_meeting

アプリケーションサーバ

画像アップロード&参照の仕組み

画像専用Fileサーバ

PUT/GET/DELETE

画像配信サーバ

Load  Balacner Load  Balacner

HTTP経由でリモートのサーバへファイルを登録NFSなどを利用すると、いろいろアレなので

lsyncdlsyncdで指定したディレクトリの操作イベントをキャッチして、その結果を画像サーバへ転送

12年10月23日火曜日

Page 57: 20121019 engineer startup_meeting

アプリケーションサーバ

画像アップロード&参照の仕組み

画像専用Fileサーバ

PUT/GET/DELETE

画像配信サーバ

Load  Balacner Load  Balacner

HTTP経由でリモートのサーバへファイルを登録NFSなどを利用すると、いろいろアレなので

lsyncdlsyncdで指定したディレクトリの操作イベントをキャッチして、その結果を画像サーバへ転送

Rsync

Rsyncプロトコルで随時転送

12年10月23日火曜日

Page 58: 20121019 engineer startup_meeting

HTTPで画像ファイルを投稿できるので、言語に左右されない仕組み

12年10月23日火曜日

Page 59: 20121019 engineer startup_meeting

フレームワークは適材適所

画像の容量が1サーバ内におさまらないとどうするの?

12年10月23日火曜日

Page 60: 20121019 engineer startup_meeting

投稿の容量が問題になれば

アプリケーションサーバ

画像専用Fileサーバ

ファイル名によってどのサーバに属するか対応表を管理

画像配信サーバ

Load  Balacner Load  Balacner

対応するサーバに対してファイルを転送する

12年10月23日火曜日

Page 61: 20121019 engineer startup_meeting

サーバが動作している環境についてちょこっとお話します

12年10月23日火曜日

Page 62: 20121019 engineer startup_meeting

サービスの特性

12年10月23日火曜日

Page 63: 20121019 engineer startup_meeting

サービスの特性

アクセス数の伸びがほぼ計算通りにふえていくサービス

12年10月23日火曜日

Page 64: 20121019 engineer startup_meeting

計画的にサーバを増設することで、物理サーバを利用しコストを下げられる

12年10月23日火曜日

Page 65: 20121019 engineer startup_meeting

クララオンラインさまのインフラ支援プログラムを利用

12年10月23日火曜日

Page 66: 20121019 engineer startup_meeting

本日のアジェンダ

nanapiができるまで

システム構成といままでの経緯

開発体制の変化と現状

nanapiで成し遂げたいこと

• 創業時にとにかく大変なこと

• CTOは技術者の夢を叶えられるか?

• 創業当時のシステム構成

• 創業当時の負荷分散とアプリケーション構成

• 現在のシステム構成

• 画像ファイルをスケールアウトさせる仕組み

• 開発体制の変化

• 「技術」から「プロダクト」へのシフト

• ハウツーDBで世界 No1を目指す

• ハウツーの先にある便利な世の中へ

12年10月23日火曜日

Page 67: 20121019 engineer startup_meeting

本日のアジェンダ

nanapiができるまで

システム構成といままでの経緯

開発体制の変化と現状

nanapiで成し遂げたいこと

• 創業時にとにかく大変なこと

• CTOは技術者の夢を叶えられるか?

• 創業当時のシステム構成

• 創業当時の負荷分散とアプリケーション構成

• 現在のシステム構成

• 画像ファイルをスケールアウトさせる仕組み

• 開発体制の変化

• 「技術」から「プロダクト」へのシフト

• ハウツーDBで世界 No1を目指す

• ハウツーの先にある便利な世の中へ

12年10月23日火曜日

Page 68: 20121019 engineer startup_meeting

開発体制の変化 - 2009年時点の開発体制

社長  /  Director

取締役  /  Engineer

外部Designer

Engineer

Director

Designer

:1名:1名:0名

12年10月23日火曜日

Page 69: 20121019 engineer startup_meeting

開発体制の変化 - 2009年時点の開発体制

社長  /  Director

取締役  /  Engineer

外部Designer

約2ヶ月でnanapiを構築(別の受託をやりながら)

Engineer

Director

Designer

:1名:1名:0名

12年10月23日火曜日

Page 70: 20121019 engineer startup_meeting

開発体制の変化 - 2010年時点の開発体制

社員  /  Designer

社長  /  Director

取締役  /  Engineer

Engineer

Director

Designer

:1名:1名:1名

12年10月23日火曜日

Page 71: 20121019 engineer startup_meeting

開発体制の変化 - 2010年時点の開発体制

社員  /  Designer

社長  /  Director

取締役  /  Engineer

Engineer

Director

Designer

:1名:1名:1名

社員デザイナーを採用

12年10月23日火曜日

Page 72: 20121019 engineer startup_meeting

開発体制の変化 - 2011年時点の開発体制

取締役  /  Engineer・Director

社員  /  Designer 社員  /  Designer

社員  /  Engineer

Engineer

Director

Designer

:1名:2名:2名

12年10月23日火曜日

Page 73: 20121019 engineer startup_meeting

開発体制の変化 - 2011年時点の開発体制

取締役  /  Engineer・Director

社員  /  Designer 社員  /  Designer

社員  /  Engineer

Engineer

Director

Designer

:1名:2名:2名

エンジニアが2名に!

12年10月23日火曜日

Page 74: 20121019 engineer startup_meeting

開発体制の変化 - 2012年(現在)時点の開発体制

取締役  /  Engineer・Director

Chief  Product  Manager

社員  /  Engineer

社員  /  Designer

社員  /  Engineer

社員  /  Engineer

社員  /  Designer

社員  /  Designer

社員  /  Director 社員  /  Designer

Engineer

Director

Designer

:1名:4名:4名

12年10月23日火曜日

Page 75: 20121019 engineer startup_meeting

技術からプロダクトへのシフト

「技術」から「プロダクト全般」を担当するようにシフト

12年10月23日火曜日

Page 76: 20121019 engineer startup_meeting

技術からプロダクトへのシフト

「技術」から「プロダクト全般」を担当するようにシフト

CTOとして技術に特化するか、サービスまで見るかは分かれ道

12年10月23日火曜日

Page 77: 20121019 engineer startup_meeting

本日のアジェンダ

nanapiができるまで

システム構成といままでの経緯

開発体制の変化と現状

nanapiで成し遂げたいこと

• 創業時にとにかく大変なこと

• CTOは技術者の夢を叶えられるか?

• 創業当時のシステム構成

• 創業当時の負荷分散とアプリケーション構成

• 現在のシステム構成

• 画像ファイルをスケールアウトさせる仕組み

• 開発体制の変化

• 「技術」から「プロダクト」へのシフト

• ハウツーDBで世界 No1を目指す

• ハウツーの先にある便利な世の中へ

12年10月23日火曜日

Page 78: 20121019 engineer startup_meeting

本日のアジェンダ

nanapiができるまで

システム構成といままでの経緯

開発体制の変化と現状

nanapiで成し遂げたいこと

• 創業時にとにかく大変なこと

• CTOは技術者の夢を叶えられるか?

• 創業当時のシステム構成

• 創業当時の負荷分散とアプリケーション構成

• 現在のシステム構成

• 画像ファイルをスケールアウトさせる仕組み

• 開発体制の変化

• 「技術」から「プロダクト」へのシフト

• ハウツーDBで世界 No1を目指す

• ハウツーの先にある便利な世の中へ

12年10月23日火曜日

Page 79: 20121019 engineer startup_meeting

nanapiで成し遂げたいこと

12年10月23日火曜日

Page 80: 20121019 engineer startup_meeting

nanapiで成し遂げたいこと

12年10月23日火曜日

Page 81: 20121019 engineer startup_meeting

nanapiで成し遂げたいこと

12年10月23日火曜日

Page 82: 20121019 engineer startup_meeting

nanapiで成し遂げたい世界観

○○についてわからないから検索して調べよう

12年10月23日火曜日

Page 83: 20121019 engineer startup_meeting

nanapiで成し遂げたい世界観

○○についてわからないから検索して調べよう

12年10月23日火曜日

Page 84: 20121019 engineer startup_meeting

nanapiで成し遂げたい世界観

○○のやり方について、nanapiで調べよう

12年10月23日火曜日

Page 85: 20121019 engineer startup_meeting

nanapiが成し遂げるべきこと

nanapiで探せばどんなハウツーも見つかるという世界を目指したい

12年10月23日火曜日

Page 86: 20121019 engineer startup_meeting

nanapiが成し遂げるべきこと

nanapiで探せばどんなハウツーも見つかるという世界を目指したい

「ハウツーDB」として世界最大の情報量をもつサービスへ

12年10月23日火曜日

Page 87: 20121019 engineer startup_meeting

nanapiが成し遂げるべきこと

そしてその先にあるより便利になった世の中を作ることに貢献したい

12年10月23日火曜日

Page 88: 20121019 engineer startup_meeting

nanapiが成し遂げるべきこと

そしてその先にあるより便利になった世の中を作ることに貢献したい

目標でもあり義務

12年10月23日火曜日

Page 89: 20121019 engineer startup_meeting

12年10月23日火曜日

Page 90: 20121019 engineer startup_meeting

12年10月23日火曜日