Weitere ähnliche Inhalte
Ähnlich wie SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム (20)
Mehr von SmartNews, Inc. (19)
SmartNews TechNight Vol5 : SmartNews AdServer 解体新書 / ポストモーテム
- 3. 自己紹介
• 名前: たむたむ
• 職業: ソフトウェアエンジニア
• Twitter: @tamtam180
• 趣味: オンラインゲーム, セクシーなサービスを作る事
• OSS-Contribute: TokyoTyrant, Hadoop, Hive, ArangoDB,
PipelineDB
• SIer (2年)
• Square Enix (約6年)
– PlayOnline, FF-XIV
• Freelance (2年)
• SmartNews (いまここ)
- 9. 初期の開発スケジュール
• 08/15 API仕様確定
• 08/22 iOS SDK提供開始
• 08/29 Android SDK提供開始
• 09/12 Web SDK 提供開始
• 09/15 Adサーバ リリース
• 09/25 Android版テスト配信(public test)
• 10/08 Web版テスト配信
• 10/15 iOS版テスト配信(public test)
• 10/27 iOS Submit
• 10/28 Android Release
• 11/04 Standard Ad配信開始
• 11/16 Premium Ad配信開始
• 12/01 正式リリース & セールススタート
というスケジュール表が
8月20日に
投稿されていた
- 17. 使っている技術 – Java -
• Scala
• Java(1.8)
• Jetty (Embedded)
• Spring Framework (DI)
• Jackson
• SLF4j / Logback
• FastUtil
• Kryo
• Trie4j
• MyBatis
• Flyway
• Nashorn
• gRPC / ProtoBuf
• Guava
- 18. 使っている技術 – Middle Ware -
• NewRelic
• JMX with DataDog
• MySQL
• Redis
• DynamoDB
• Fluentd
• Kinesis
- 19. 使っている技術 – AWS -
• EC2
• S3
• CloudFront -> Akamai
• RDS
• DynamoDB
• ElastiCache(Redis)
• Redshift
• Kinesis
• Route53
Lambda
EC2 Container Service
CodeDeploy
CloudWatch
EMR
Device Farm
SNS
CloudSearch
Elastic Transcoder
SQS
- 20. Kernel Parameter
kernel.sysrq = 0
kernel.core_uses_pid = 1
kernel.sem = 250 256000 100 1024
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
# auto configure by kernel
#fs.file-max = 524280
#kernel.threads-max = 500000
net.ipv4.ip_local_port_range = 10000 65535
net.ipv4.ip_forward = 0
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.tcp_wmem = 4096 16384 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_fin_timeout = 5
net.ipv4.tcp_keepalive_time = 10
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl = 4
net.ipv4.tcp_max_syn_backlog=8192
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.core.rmem_default = 87380
net.core.rmem_max = 16777216
net.core.wmem_default = 16384
net.core.wmem_max = 16777216
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_timestamps = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.tcp_no_metrics_save = 1
net.ipv4.tcp_ecn = 0
- 23. アドサーバが持っている機能
• Filters
• Beacon Endpoint
• Budget Control
• Frequency Control
• Auction
• Bloom Filter
• Ad Allocation (Minimum Cost Flow)
• Optimizer
• Impression Smoother
• Web Tracking
• Preflight Mode
• Rehearsal Mode
• Restrict Mode
• SelfServe Delivery
• Admin API
- 28. 広告処理概要 - データの種類 -
• アドサーバが扱うデータの種類
– ユーザー主体の情報
– キャンペーン主体の情報
– メディア主体の情報
– マスタ情報
– 速報値カウンタ
- 29. 広告処理概要 - オンメモリ -
AdServer
Redis
Pubsub
MySQL
Master
MySQL
Slave
管理画面
Pub
1. Sub
2. 起動時に一気にLoad
6. キャッシュ更新
キャンペーン情報
OnMemory
各種情報はオンメモリで
Queue
4. Latch
5. Load
3. キャッシュ更新
- 31. 広告処理概要 - レプリケーション遅延対策 -
AdServer
Redis
Pubsub
MySQL
Master
MySQL
Slave
管理画面
1. Update
3. Pub(ID, LastTimestamp)
Sub
4. Timetamp比較
6. キャッシュ更新
キャンペーン情報
OnMemory
キャンペーン Table
最終更新時間 Table 2. Update5. Retry
各種情報はオンメモリで
- 33. 広告処理概要 – 速報値カウンタ -
AdServer
Redis
速報値情報
OnMemory
SDK
Beacon
LogFile Fluentd
S3
Kinesis
Redis
WriterCounter
ReadCounter
予算消化情報
時系列カウンタ
- 36. 広告識別子
Name Bit Description
Version 4 OTS Version
Timestamp 41 2012/12/10 00:00:00 起点のミリ秒
NodeId 24 サーバのID
RedisId 8 格納先RedisのID
Sequence 19 ラウンドロビンカウンタ
BitOptions 8 各種フラグ
Reserved 16 予約
- 46. 2014.11
• 基本機能は実装
– iOS, Android, WebSDKは実装済み
– Budget Control
– Auction
– Frequency Control
– Rehearsal Mode
– Restrict Mode
– Naive Allocation
– TrackingTool
– WebTag
- 50. Java Blocking
• 暗号化ライブラリがスレッドブロッカー
– Cipherのインスタンスはスレッドセーフではないので毎
回生成する必要がある
– ただし、Instance化する時にsynchronizedが存在する
– GenericObjectPoolを使った
• GenericObjectPoolもsynchornizedなコードが多い
– ThreadLocalを使うようにして回避
- 68. パフォーマンス事件 File.3
• 現象
– FullGCが多い
– ClassUnloadingが何故か多い
• 対処
– GC抑止のためにパラメータチューニング
– レキシカルスコープを参照しているLambda式
の排除
- 115. 最後に
• 意外と広告は面白い
– ソフトウェアエンジニアリング, 大量のログ, 機械学習, 最適
化問題, 大規模トランザクション
– 実時間で実現する必要がある
• 技術だけでなく、ビジネスも楽しもう
• もしかしたら、誰でも出来るかもしれない
• 誰でも出来る事は、誰にも出来ないレベルまで昇華しよう
• イノベーションは個人の裁量から生まれる