Inside of social count

681 views

Published on

socialcount.infoを作ってみた

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
681
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
1
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Inside of social count

  1. 1. @ku_suke 第一回このこん応募作品
  2. 2. What is Social Count ? ブログ記事などの ソーシャルアクショ ン数(はてぶ、 faceboook、 twitter、Google+、 Pocket)を合算する ことで、エントリに 対するつながりを可 視化するサービス。 人気記事がわかるブ ログパーツもある。
  3. 3. Overview  フロントサーバ パーツ image Front server(共用鯖+ストレージ)  APIサーバ  集計済みデータの返却  バッチサーバ widget www Node.js / express Node.js batch HandlerSocket Plugin (NoSQL) SQL query MySQL 5.5 (Percona)  静的コンテンツ・ブログ  各ソーシャルデータの集計 Web APIs (Fb/Tw/G+..) API/Batch server (VPS)
  4. 4. Service core  URLを受け取る ↓  各ソーシャルサービスに 件数を問い合わせる ↓  合算して保存 ↓ 返 却 ! URL SocialCount.info
  5. 5. Why social count?  技術ブログとアメブロを2つ書いてみて、はてぶと facebookのLike、Twitterへの広がりが異なることに 気づいた。  自分が掲載しているソーシャルボタン以外のアク ション数には意外と気づきにくい。  ソーシャル上での盛り上がりを可視化することで、 もっと読者と ことができる。
  6. 6. 技術的な話-1  Node.jsを選んだ理由  HelloWorldくらいしか経験がなかったから遊んで 見たかった。(express/ejs/async… etc)  複数の外部APIへの問い合わせを並列にリクエストで きるから。(直列だと単純に5倍近くかかる)  API提供を考えていたのでパフォーマンスが 出そうだったから。
  7. 7. 技術的な話-2  MySQL+HandlerSocket pluginにした理由  MySQLの扱いが楽+SQLパーサを通さない高速動作  5.6+innoDB memcached pluginにしようとしたとこ ろ、 namespace利用時の挙動が安定しなかった 。  HandlerSocketが用意されているPercona 5.5が 楽ちんだった。  もちろんNode用のnpmもあった。
  8. 8. スケール案-1  スケールアップさせる。 (コンビニワインコース→ドンペリコース) データがメモリに載る間はこれで問題なさそう。
  9. 9. スケール案-2  バッチサーバを分ける  フロントのreadは負荷が低いので Node.js まずはこれでのりきる。 MySQL Node.js Node.js
  10. 10. スケール案-3  フロントも厳しければ分離。 Node.js MySQL Slave Node.js Node.js MySQL Master Node.js Node.js Node.js MySQL Slave Replication なので簡単
  11. 11. その他  サポートする技術  Gitでデプロイ  Newrelicで監視  Perconaのツールでメンテ  台数が増えたらChef化 Node.js MySQL
  12. 12. ブログパーツ 取得したURLをバッチ で抽出し、記事のメタ データを取得しておい てブログパーツ化。 記事にアイキャッチ画 像がある場合は表示す るなどブロガーにはう れしい仕様。
  13. 13. ブログパーツのロードタイミング  ブログパーツの方式は大きく分けて2つ。Iframe型 か、document.writeなど直接書き込むタイプ。  Scriptの非同期ロードなど、ブログの表示速度を遅 くしないことが重要。  今回は動作が安定しているiframe版を採用。 (Twitterとかfacebookもiframeだったので、 マネしとけば大丈夫だろうという考え。)
  14. 14. 記事のタイトル・画像抽出  最初正規表現で頑張ろうとした。  <title>タグにブログ名が入る問題。 「SocialCountを作った – ku-sukeのブログ」  <og:image>タグが必ずしも入っていない問題。  さんざん悩んだ挙句、ReadabilityAPIを利用。 https://www.readability.com/developers/api
  15. 15. サムネイル画像の配信  そのままだとくそでかいので、いったんストレージ に保管+nginx+ngx_small_lightで動的縮小配信 nginx + small_light 元サイト AmazonS3 互換ストレージ ConoHa VPS
  16. 16. ぜひ使ってみてね! http://socialcount.info
  17. 17. おまけ:VPSの移行 せっかくなので、ConoHa契約してみた。 別サービス間とはいえ国内なので、 SSHでポートフォワーディングを張ったうえで、 MySQLのレプリケーションはるだけ! Node.js Node.js MySQL MySQL SSH Tunnel

×