Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
日経電子版でのDjango活用事例紹介 / djangocongressjp2022-nikkei
Search
bungoume
November 12, 2022
Technology
7.3k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
日経電子版でのDjango活用事例紹介 / djangocongressjp2022-nikkei
bungoume
November 12, 2022
More Decks by bungoume
See All by bungoume
djangocongressjp2023_password_hash
bungoume
2
1.6k
CircleCIの活用事例とCI高速化/circleci-community-meetup3-speedup
bungoume
3
1.6k
Password Hashing djangocongress 20180519
bungoume
5
4.3k
OSSで始めるセキュリティログ収集/oss-securitylog-builderscon2017
bungoume
29
11k
日経電子版のアプリ開発を支えるログ活用術/nikkei-log-201609
bungoume
1
1.4k
Kibanaで秒間1万件のアクセスを可視化した話/nikkei-kibana-loganalyst2015
bungoume
20
17k
uwsgi-docker-pycon2015
bungoume
10
61k
Ansibleを結構使ってみた/ansible-nikkei-2015
bungoume
32
15k
Dynamic Inventoryと参照変数
bungoume
2
5.1k
Other Decks in Technology
See All in Technology
Reactの設計論
uhyo
24
13k
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
8
3.5k
20260912_スクラムにジェネラリストは必要か
ryugen04
0
420
作品が生態系になった ─ Mini Tokyo 3D から世界へ
nagix
0
190
DEFCON34-Write-up_HYCu-MYCu
daikiokazaki
0
160
AIを活用するために決めた "やらないこと" - 価値に注目する / Not betting on AI
soudai
PRO
2
540
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
越境するなら専門用語を使うな高校校歌 / If you wanna cross border, you shouldn't use jargon
vtryo
0
140
Genieを崇めよ
kameitomohiro
0
150
2026-09-18 gotanda.sre Terraformで複数環境作ったり、複数Stateに分割したりそれとTerragrunt / Terraform multi envs and multi states
masasuzu
1
410
2026-09-11 【Snowflake World Tour Tokyo 2026】Snowflakeを起点に、AI Agentが自律稼働し続ける未来へ / Driving AI Agents with Snowflake
civitaspo
0
640
HHKBエバンジェリストになる方法
941
0
110
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
390
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
230
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.7k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
18k
4 Signs Your Business is Dying
shpigford
187
23k
Everyday Curiosity
cassininazir
0
320
Paper Plane (Part 1)
katiecoart
PRO
2
11k
Are puppies a ranking factor?
jonoalderson
2
3.9k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
350
Designing for Performance
lara
611
70k
Transcript
日経電子版でのDjango活用事例紹介 DjangoCongress JP 2022 Yuri Umezaki 2022/11/12
Yuri Umezaki • 検索API (Django, Elasticsearch) • OAuth認可 API基盤(DRF, oauthlib)
• アクセスログ分析 自己紹介 2
• 日経電子版の紹介 • 社内でのDjango事例 • 教育 • Djangoを7年(1.7から4.1)使っての変遷 • 直近の開発
• Tips • 今後について 目次 3
1876年(明治9年)12月創刊 約145年の歴史 全世界で256万部(紙・電子版の合計)※ を発行する世界最大の経済新聞社 ※2022/7 時点 https://marketing.nikkei.com/media/newspaper/mediadata/ 日本経済新聞社について 4
• 全部で70リポジトリ以上 ◦ 電子版API (今回主に説明) ◦ 法人向けサービス ◦ 社内ツール ◦
検証デモツール ◦ etc… 社内のDjango利用状況 5
• 2010年3月創刊 • 有料ユーザー79万人 • 無料ユーザー 450 万人以上 • 月間2億PV
日経電子版とは *1 2022/1/1時点 https://marketing.nikkei.com/media/web/ 6
電子版の構成図 CDN(Fastly) internet BFF(アプリ) CDN(Fastly) BFF(web) CDN(Fastly) API基盤 ID基盤 検索API
レコメンド メール バナー 記事保存 ランキング 動画・音声 7
電子版の構成図 CDN(Fastly) internet BFF(アプリ) CDN(Fastly) BFF(web) CDN(Fastly) API基盤 ID基盤 検索API
レコメンド メール バナー 記事保存 ランキング 動画・音声 8 このあたりがDjango
• API基盤へのアクセス: 2500 req/sec • 稼働インスタンス数: 全体で300台以上 ◦ API基盤は約60台 •
Push通知直後のアクセス: 数万req/s • CDNキャッシュによりBFFは500rps ※t3.smallなど小さいインスタンスを多数動かしています 規模感 9
• 可能な限りCDNでキャッシュができるようなAPI構造 ◦ JWT利用などの工夫である程度ステートレスに権限判定 ◦ Vary, Surrogate-Control (CDN-Cache-Control) の設定(※) ◦
Pushピーク時は個人別のデータアクセスを極力減らす • ETagを活用して通信量削減 ※Djangoの挙動に注意 https://code.djangoproject.com/ticket/32055 負荷をCDNで防ぐために 10 CDN(Fastly) internet BFF(アプリ)
• CI: GitHub Actions • 環境: AWS ElasticBeanstalk (Docker) •
アクセスログ: fluentd -> S3, ES+Kibana • アラートログ: Sentry • 監視: バッチサーバ+E2E, StatusCake, PagerDuty 基本構成 11
• 管理サイトでデータベースの内容を簡単に確認・変更できる • 社内で知見の共有が行いやすい ◦ ライブラリやディレクトリ構成をほぼ共通にできる • ドキュメントが充実しており、研修にも利用しやすい • DBスキーマ管理まで一元的にできる
◦ 特にmigrationが行いやすい Django 良いなぁと感じるポイント 12
13 • 社内向けツール ◦ バナー情報管理 ◦ client_id発行管理 ◦ ユーザ管理ツール •
実験的システム ◦ 本番運用へ移行しやすい Django管理サイト利用例
• 基盤 ◦ Docker設定 ◦ AWS ElasticBeanstalk等の環境構築, CI設定 ◦ 本番・開発など分けた設定値
◦ healthcheck pathの用意 • ログ設定 ◦ Sentryの設定, uWSGIのアクセスログ設定 社内Djangoテンプレート 14
新人研修+α • Django公式チュートリアル • PyQ (pyq.jp) • DRFでのAPI開発 • Django自体のコードリーディング
最近はDjangoの本も多数出てきている。 研修 15
• DRFでAPIが作成できる • ブログを一通り作ってもらう ◦ webの理解も進む ◦ DBのモデル設計 • 一人で勉強できるサービス
研修 16
• Django自体もPythonで読みやすい • 機能に興味を持ったとき調べやすい ◦ 例: SECURE_SSL_REDIRECTってなんだろう? ▪ ドキュメントを見る・先輩に聞く ▪
挙動を詳しく知りたいときはコードを見る • Djangoを利用したOSSサービスのコードリーディング Django の学習面メリット 17
• SQLAlchemy modelとpydantic modelに慣れるまで混乱しがち? ◦ 慣れると型定義など便利 ◦ Django+RDBは情報が多く取り掛かりやすい • ディレクトリ構成が人によって結構変わる
• (社内のユースケースでは)性能面で極端な差はでなかった FastAPIも試してみたけど 18
• DB MigrationはDjangoが楽 • 参考実装をDjangoでやり、アクセスが増えたらGoでも用意 golangも使い始めているけれど 19
20 Djangoを7年間使って
Dockerベースなのでライブラリ対応をみて都度更新 (毎年10月に公開、翌年4月に更新ぐらいのペース) • 過去 ◦ python:3.5.2-alpine -> python:3.6.4-stretch ▪ alpineのmuslと一部ライブラリの相性が良くない
• ex: uwsgiでharakiriが発生すると詰まる等 ◦ PyPy, Pystonは今は使わず ▪ 何度か試そうとしたが安定性+CPython新機能を優先 Python3.4 -> 3.11 21
deprecation warningに定期対応しておくと比較的容易に更新できる https://docs.djangoproject.com/ja/4.1/internals/deprecation/ • Python2系の互換削除による変更 • セキュリティ強化に伴う設定追加 • Middleware更新 •
urlsの変更 • JSONField追加 • timezone周りの変更, pytz削除 Django 1.7 -> 4.1 22
PBKDF2のイテレーション数 → Djangov4.1で390000 v4.2で480000 Python3.7.7 + Django v2.0 => 55ms
Python3.10.7 + Django v4.1 => 215ms Djangoの認証をAPIで利用している人は遅くなっていないか確認を https://speakerdeck.com/bungoume/password-hashing-djangocongress-20180519 Tips DjangoCongressJP 2018 Password Hashingより 23
• requirements.txt ◦ dev環境のパッケージ管理がしにくい ◦ 孫依存のバージョン固定が抜けて本番エラーに • -> pipenv (2018/7頃〜)
◦ 2019/5頃〜 dependabotによる更新自動化 ◦ 依存解消やインストールが遅すぎる • -> poetry (2020/3頃〜) ◦ pyproject.toml に各種設定を寄せる 依存ライブラリ管理まわりの主な変遷 (例) 24
• flake8, coverage • isort, black導入(2018〜) • mypy導入(2018〜) • pyright一部導入(2021〜)
チェックツールの主な変遷 (例) 25
• 最近はフロントエンドをNodejsで作るケースが多くなった ◦ frontendとbackendで言語が割れたので学習コスト増 ◦ 1アプリ内ににフロント用nodejsとapi用python併用 ▪ multi-stage-docker, 複数コンテナ 最近よくある構成
26
27 サービス安定化に向けてアプリケーションのマルチリージョン化 直近で実施したアーキテクチャ変更事例
アプリケーションのマルチリージョン化 28 Tokyo APP DB US internet APP DB 同じ構成を用意
DNS等で切替
アプリケーションのマルチリージョン化 29 Tokyo APP DB US internet 最小数のApp DB(読込専用) DNS等で切替
レプリケーション 別ドメイン 確認アクセス
• DBはリードレプリカであり、書込出来ない ◦ 管理画面(Django admin)にもログインできない バックアップリージョン利用時の問題点 30
• Djangoのsined_cookie sessionを活用する 解消 31
社内Django templateのTips集 32
• 外部通信でhttpsを利用するときはConnectionを使い回すべし ◦ TLS接続はCPU負荷が高い ◦ PoolするだけでCPU使用率1/3に Tips 33
• uWSGIで設定を環境変数で指定できるように ◦ メモリ量に合わせて変更が容易 Tips 34
• uWSGIのログはLTSV出力して分析しやすく Tips 35
• urls.py のpathに該当するか出力すると便利 Tips 36
nginxを挟むときは接続上限数を入れる → アクセス過多時は即時エラーを返す → 処理が詰まっても長期で影響が広がらない Tips nginx.conf の一部抜粋 37
• 共通のGitHub Actionsを利用してdeployを簡潔に記述 Tips 38
39 • 性能改善効果が大きい箇所の最適化 • 型定義の強化 • 管理サイトのアカウントを社内ADに寄せる 今後進めたいこと
• 日経電子版の紹介 • 社内でのDjango事例 • 教育 • Djangoを7年(1.7から4.1)使っての変遷 • アプリケーションのマルチリージョン化紹介
• Tips • 今後について まとめ 40
• 管理サイトでデータベースの内容を簡単に確認・変更できる • 社内で知見の共有が行いやすい ◦ ライブラリやディレクトリ構成をほぼ共通にできる • ドキュメントが充実しており、研修にも利用しやすい • DBスキーマ管理まで一元的にできる
◦ 特にmigrationが行いやすい Django 良いなぁと感じるポイント(再) 41
42 一緒にDjangoバックエンドの開発に取り組んでくれる仲間を募集中です カジュアル面談から気軽に話しましょう https://hack.nikkei.com/ [PR] 私たちはエンジニアを積極採用中です