
2025.02.12
職員一人あたり52時間の残業削減に成功 kintone導入がもたらした富士吉田市の自治体DX“変革”ハウツー
サーバサイドの技術スタック・アーキテクチャ総ざらい(全1記事)
提供:スマートニュース株式会社
リンクをコピー
記事をブックマーク
Nobutoshi Ogata 氏(以下、Ogata):みなさん、こんばんは。「サーバーサイドの技術スタック・アーキテクチャ総ざらい」ということで、お話しさせていただこうと思います。よろしくお願いします。
はじめに、タイトルの通りサーバーサイドで使っている技術スタック、アーキテクチャに関してざっくりご紹介します。SmartNewsがどのようにニュース記事などを選定しているのか、そういったアルゴリズムの話は、申し訳ありませんが今回は一切お話ししません。
まず簡単に自己紹介をさせていただきます。改めまして、尾形と申します。
現在SmartNewsのSREチームのエンジニアリングマネージャーをやっております。
入社は2015年なので、今年で丸4年経ちました。入社して開発基盤やインフラ周りの整備をやりつつ、次の年から当時はなかったSREチームを立ち上げて、マネージャーをやっています。
まずはSmartNewsについて、ご説明させていただきます。
SmartNewsは、スマートフォン、タブレット向けのニュースアプリで、おかげさまで日米で5,000万ダウンロードを突破し、月間アクティブユーザーも日米で1,000万人以上(※2)に成長しました。(注: App Annie, May 2018 date)
SmartNewsをお使いいただけている方は、どのぐらいいらっしゃいますでしょうか?
(会場挙手)
ありがとうございます!
先ほどからチラチラと出てきているマスコットキャラクターは「地球くん」という名前で、とても愛されています。では、中身に入っていきます。
まず、技術スタックに関してです。SmartNewsは主に2つの配信基盤からできておりまして、ニュースを配信する部分と、広告を配信する部分。これは別々のプロダクトになっています。
今回はニュースの配信基盤にフォーカスしてお話ししたいと思います。
基本的な技術スタックなんですけど、ほぼすべてAWSで動いています。OSはAmazon Linuxを使っています。コンテンツをデリバリーするCDNとしてはAkamaiを使っていて、ごく一部はCloudFrontを使っています。WAFに関してもAkamalのWAFを使っています。
プログラミング言語は、Java8とJava11という感じで、徐々に8から11への移行を進めています。9割方Java8、Java11で、残り10パーセントはRubyやGolang、Scala、Kotlinを使用しています。
ここではオンライン処理とDMPの2つに分けて説明します。オンライン側の処理はAWSのロードバランサーを挟んで、そこにオートスケールグループを作り、その下でEC2のインスタンスが動くという、ごく普通の構成です。
中身としては、リバースプロキシにnginx、JavaはSpring Bootで作られていることが多いです。embedded Tomcatをそのまま使っています。
コンテナはどうしているかと言うと、今のところはECSを使っています。ECSはわりと出てすぐに使い始めていて、当時は今のようにECSの便利機能がなかったので、そのあたりは自分たちで作りこんでいます。nginxやConsul Templateを使って、動的に名前解決しサービスディスカバリーしていくところも、すべて自力で作りました。
EKSに関してはまだプロダクションでは使っていませんが、現在検証中です。
次にDMP、データマネジメントプラットフォームです。ログを集計したり分析する基盤なんですが、基本的にEMR、Hive、Prestoあたりの技術を使いつつ、ジョブのマネジメントとしてAirflowを使っています。
BIツールとして、ChartioやSuperset、Jupyterを使っています。
インスタンスのプロビジョニングは、基本的にはAWSのAMIイメージに共通で必要なものは全部突っ込んで送るようにやり込んで使っています。あと、インスタンスにタグを付けているんですが、そのタグによって役割が決まって、それによって自律的に必要なものを自分でプロビジョニングしています。
成果物のデプロイに関しては、AWSのCode Deployを使っています。ツールとしては、itamae、Terraform、CircleCI、Jenkinsなどを使っていて、最後のVAddyという技術はCIに組み込んで使えるオンラインの脆弱性検査ツールになってます。
監視や通知はどうしているかというと、Datadogで統一しています。Datadogで監視を行っていろいろ設定をしているのですが、一定のしきい値を超えたり、本来出るべきでないログが溢れてしまう、あるいは一定期間出るべきログが出ていないものを監視して、必要であればPagerDutyを使って開発者の電話を鳴らす仕組みになっています。
あとはRunscopeというツールを使っています。これは外形監視ツールで、外から実際にREST APIをたたいて、正しい応答が返ってきているかを外部から確認するためのツールです。
New Relicに関しては、APIですね。アプリケーションに組み込んで、どのようなSQLが使われているかであったり、この関数はどのくらい時間がかかっているかといったことを計測するツールも組み込んで使っています。
ちょっと珍しいかもしれないものとしては、PipelineDBを一部で使っています。先ほどニュース側と広告側があるという話をしましたが、ニュース側に関しては内部の通知しか使っていません。あとはHazelcastを使っていて、これに関しては後ほどご説明します。
次にニュースがどのように配信されるのか、データの流れや規模をご紹介していきます。
この図を見ても何がなんだかわからないと思いますが、ざっと説明すると、上が実際にユーザーがどんな記事を見たか、どんなアクションを起こしたかという、ユーザー行動ログを集める部分です。
真ん中が記事の検索やパーソナライズされたデータをユーザーに渡すための部分です。こちらが一番メイン側の部分になります。こちらは実際にパブリッシャーの方々から提供されたニュースをインデクシングして、われわれのデータベースに取り込みをしている部分です。
最後に、下の部分はユーザーにプッシュ通知を送るための基盤部分になります。
では、数字的にどんな感じかざっと並べてみました。この数字を見てピンとくるかどうかはわかりませんが、だいたいこんな感じです。
CDN側ではこんな感じです。これは単位がbitなので、若干大げさかもしれませんが、規模的にはこのくらいのデータを扱っています。
続いて、ニュース配信部分のアーキテクチャについてお話します。
基本的にメインのサービスは、APIゲートウェイ的な役割を果たすAuto Scalingグループが中心にあり、アプリケーションロードバランサーの下に配置されて動きます。検索エンジンでインデックスされた記事が検索可能な状態になって、サーチエンジンを使って記事を探し出します。
基本的にはAuto Scalingグループを積極的に活用するようにしていて、Auto ScalingグループとLambdaやSNSを組み合わせて、スケールアウト、スケールインはほぼ自動的に動いてくれるようになってます。
当然スケールアウト前提なので、そもそもアプリケーションの作りがスケールアウトできるようになっているのは、言うまでもないことではあります。
サーチエンジンなんですが、ここはAWSでもスケールが難しい部分で、がんばってキャッシュを2層作ってなるべく負荷を上げないようにしつつ、オフライン処理でキャッシュの処理も絶えず更新する作りにしています。
パーソナライズ部分なんですが、当然人によって中身が違います。この辺はキャッシュを作ること自体非常に難しいので、Hazelcastを使っています。要はインメモリーデータグリッドのような感じです。
大量の request とそれに伴う非同期処理を効率よくさばく・わかりやすく記述するため Reactive Streamsを採用し、さらに自律的に自分自身の負荷の状況を見て処理の内容を飛ばしたりといったことをするようにしています。
最後になりますが、プロダクトや組織、あるいはサービスの提供範囲もどんどん成長していっています。もっとスケーラブルで安定した基盤が必要になってくる状態になってきています。USとも開発を進めていますので、時差も超えて、もっと簡単に、もっとスムーズに開発できる環境を、これから整えていく必要があると考えています。
そのためには、仲間がより多く必要であると思っているので、ぜひ興味を持っていただければと思います。
ここに現在募集している職種の一覧が掲載されていますので、ご興味のある方はここを見ていただくか、この後の懇親会で社員にお声がけいただければと思います。
手前みそではありますが、主要な社内制度を持ってきました。けっこういろいろな手当てが揃っていて、非常に快適に仕事をしやすくなっているのではないかと思います。渋谷駅から徒歩10分と書いてありますが、ここに入れるべきではなかったですね……すみません(笑)。
(会場笑)
福利厚生に関しても、「ここはどうなってるの?」という質問があれば、後ほどお声掛けいただければと思います。
それでは、ご清聴ありがとうございました。
(会場拍手)
スマートニュース株式会社
関連タグ:
2025.02.13
“最近の新人は報連相をしない”という、管理職の他責思考 部下に対する「NG指示」から見る、認識のズレを防ぐコツ
2025.02.06
すかいらーく創業者が、社長を辞めて75歳で再起業したわけ “あえて長居させるコーヒー店”の経営に込めるこだわり
2025.02.13
AIを使いこなせない人が直面する本当の課題 元マッキンゼー・赤羽雄二氏が“英語の情報”を追い続ける理由
2025.02.12
マネージャーは「プレイング3割」が適切 チームの業績を上げるためのマネジメントと業務の比率
2025.02.12
何度言っても変わらない人への指示のポイント 相手が主体的に動き出す“お願い”の仕方
2025.02.13
「みんなで決めたから」を言い訳にして仲良しクラブで終わる組織 インパクトも多様性も両立させるソース原理
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.02.10
32歳で「すかいらーく」を創業、75歳で「高倉町珈琲」で再起業 「失敗したからすかいらーくができた」横川竟氏流の経営哲学
2025.02.14
報連相ができない部下に対するコミュニケーションの取り方 「部下が悪い」で終わらせない、管理職のスキル向上のポイント
2025.02.10
A4用紙を持ち歩いて殴り書きでアウトプット コクヨのワークスタイルコンサルタントが語る、2種類のメモ術
着想から2か月でローンチ!爆速で新規事業を立ち上げる方法
2025.01.21 - 2025.01.21
新人の報連相スキルはマネージメントで引きあげろ!~管理職の「他責思考」を排除~
2025.01.29 - 2025.01.29
【手放すTALK LIVE#45】人と組織のポテンシャルが継承されるソース原理 ~人と組織のポテンシャルが花開く「ソース原理」とは~
2024.12.09 - 2024.12.09
『これで採用はうまくいく』著者が語る、今こそ採用担当に届けたい「口説く」力のすべて
2024.11.29 - 2024.11.29
【著者来館】『成果を上げるプレイングマネジャーは「これ」をやらない』出版記念イベント!
2025.01.10 - 2025.01.10