SlideShare a Scribd company logo
1 of 52
Download to read offline
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Kiến trúc hệ thống quảng
cáo lớn trên nền scala.
@huydx (Φφ)
CyberAgent Inc
ITLC HANOI
MONTHLY PUBLIC MEETUP
Toong Coworking Space – Hà N i – 22/12/2015ộ
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Agenda
• Giới thiệu
• Quảng cáo trên Internet: Programmatic Ad
• Scale về kiến trúc / middleware trong một hệ thống
quảng cáo lớn
• Scale về code thông qua functional programming và
scala
• Demo
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Agenda
• Giới thiệu
• Quảng cáo trên Internet: Programmatic Ad
• Scale về kiến trúc / middleware trong một hệ thống
quảng cáo lớn
• Scale về code thông qua functional programming và
scala
• Demo
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Giới thiệu bản thân
• Name: Huy
• Position: Software Engineer
• Location: Tokyo/Japan
• Favourite Language: Ruby/Scala/Java
• Other
• Admin/cofounder of Ruby Vietnam
• cofounder of kipalog.com / ktmt blog
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
CyberAgent
• Thành lập 1998 (17 năm)
• Các dịch vụ chính: mạng xã hội (ameba (40tr
users)), quảng cáo trên internet (adagency,
adtech), game, investment
• Doanh thu 1 năm ~ 2.4 tỉ USD
• ~5000 nhân viên
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Adtech Studio
• Chuyên nghiên cứu, phát triển các hệ thống quảng cáo
(DSP, SSP, AdNetwork, Affiliate, DMP…)
• Một vài con số (trên toàn bộ studio):
• Network Uplink: 160GBS
• Overall QPS: ~2-3millions/per sec
• Overall data size: ~ 30PB
• Overall server instance: ~1-2000 servers (AWS, DC)
• Ngôn ngữ: Scala, Java, PHP, Ruby, Go
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Agenda
• Giới thiệu
• Quảng cáo trên Internet: Programmatic Ad
• Scale về kiến trúc / middleware trong một hệ thống
quảng cáo lớn
• Scale về code thông qua functional programming và
scala
• Demo
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
• Bài nói sẽ nói chính về programmatic advertising
bao gồm: banner ad và in-feed ad, chủ yếu về khía
cạnh kĩ thuật
Chú ý
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Quảng cáo==
đem thông tin của
ng i c n bánườ ầ
đến ng i c n muaườ ầ
Quảng cáo != evil
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Nhưng How???
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
• Tại sao hiện tại chúng ta phải hứng chịu nhiều
quảng cáo tồi??
• Do hiển thị quảng cáo qua thoả thuận trực tiếp
• Do không có đủ thông tin người dùng
• Do máy móc, thuật toán chưa đủ "thông minh"
• Do người cần mua và người cần bán không đến
được với nhau
•......
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
openRTB ra đời
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
•RTB == real time bidding
Việc hiển thị quảng cáo diễn ra tại realtime
thông qua việc "bán" view của user tại thời
điểm user visit website
Advantage:
User "ngon" sẽ được mua với giá đắt
User "tồi" sẽ được mua với giá rẻ
--> có lợi cho cả bên bán lẫn bên mua
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
người bán
user
1, visit
2. phát lệnh bán
3. đấu giángười bán
người mua
người mua
1000vnd
2000vnd
3000vnd
người bán
4. hiển thị quảng
cáo của bên thắng
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
openRTB == ngôn ngữ để bên
mua nói chuyện với bên bán
Đặc điểm:
• Fix format thay vì fix protocol (có thể sử dụng
cả json, xml hay protobuf)
• Format khá uyển chuyển để chứa đủ thông
tin cho việc đấu giá trở nên hiệu quả
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Những khó khăn
• Scale hệ thống (~millions qps)
• Scale dữ liệu lớn ( TB~PB)
• bidding Logic RTB
• Tracking user giữa mobile/web
• Thuật toán để đưa quảng cáo đến đúng với người
dùng
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Agenda
• Giới thiệu
• Quảng cáo trên Internet: Programmatic Ad
• Scale về kiến trúc / middleware trong một hệ thống
quảng cáo lớn
• Scale về code thông qua functional programming và
scala
• Demo
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Hệ thống phụ trách
• DMP system
• QPS: ~10000req/s (140 instances)
• Hadoop: ~100nodes
• Cassandra: 15nodes (7TB)
• Aerospike: 14nodes (~2TB RAM!)
• MySQL: ~100GB
• Datasize: 4.5billions cookie data
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Stack
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Architecture in short
front
server
log
aggregator
(fluentd)
redshift
hdfs
BI tool
aerospike
(user data)
(fast layer)
cassandra
(user data)
(slow layer) hadoop
(batch
layer)
spark
ML job
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Architecture in short
front
server
log
aggregator
(fluentd)
redshift
hdfs
BI tool
aerospike
(user data)
(fast layer)
cassandra
(user data)
(slow layer) hadoop
(batch
layer)
spark
ML job
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Why Aerospike
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Aerospike
• Rất nhanh với SSD
• Ghi trực tiếp vào SSD không qua OS
• 99.99% request sẽ dưới 1ms
• Vertical scale với P2P cluster
• Cross-datacenter replication
• Rất ổn định ( chưa thấy chết bao giờ )
• Tuy nhiên giá server đắt do:
• Phải trang bị RAM lớn cho index
• Phải trang bị SSD đúng chuẩn
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Aerospike rất được tin dùng bởi các công ty
quảng cáo lớn như: Appnexus, bluekai,
adform… :))))
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Tại sao cần cả
cassandra và aerospike
• Aerospike server quá đắt (1server 200GB
Ram ~ 10k$)
• Khi cho data từ batchlayer vào thì việc
rebuild index của aerospike ảnh hưởng
performance
• Cassandra có performance khi batch write
rất tốt, tuy nhiên tốc độ read lại không đảm
bảo
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Architecture in short
front
server
log
aggregator
(fluentd)
redshift
hdfs
BI tool
aerospike
(user data)
(fast layer)
cassandra
(user data)
(slow layer) hadoop
(batch
layer)
spark
ML job
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Một chút về spark/hadoop
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Hadoop & Spark
• Hadoop là solution không thể thiếu để xử lý
dữ liệu lớn
• Tuy nhiên Map/Reduce java code quá nhiều
boilerplate
• Unit test khó viết (MRUnit đã không còn
update từ 1 năm trước)
• Đang viết lại toàn bộ xử lý qua Spark
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Hadoop & Spark
• Why Spark
• Code được viết bằng scala (yay!)
• Compability với hadoop (hadoopApiFile)
• Ít boiler plate, code sáng sủa hơn rất nhiều
• Dễ viết test hơn nhờ khái niệm RDD
• Đi kèm với bộ mlib để xử lý machine
learning
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Hadoop & Spark
• Một vài trick thú vị
• Lzo encode để giảm lượng dữ liệu + lzo có
thể đọc được trực tiếp từ mapper
• Serialize data dưới dạng protobuffer có thể
speed up tốc độ xử lý
• Spark có thể đọc trực tiếp dữ liệu từ S3 ->
giảm chi phí HDFS
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Architecture in short
front
server
log
aggregator
(fluentd)
redshift
hdfs
BI tool
aerospike
(user data)
(fast layer)
cassandra
(user data)
(slow layer) hadoop
(batch
layer)
spark
ML job
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Tạo BI tool với redshift
• Redshift là columnar database của amazon
• Hỗ trợ truy vấn dữ liệu theo PostgreSQL syntax
• Adhoc query trở nên dễ dàng hơn rất nhiều
(window function support)
• Redshift scale rất tốt chỉ với thêm instance
• Điểm yếu: giá cao, không insert được data
realtime (chỉ support batch insert/ bulk load)
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Architecture in short
front
server
log
aggregator
(fluentd)
redshift
hdfs
BI tool
aerospike
(user data)
(fast layer)
cassandra
(user data)
(slow layer) hadoop
(batch
layer)
spark
ML job
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Front server với
• Scala lightway webframework ( trong thời gian
gần sẽ thành akka-http)
• Actor model (thông qua akka)
• Tận dụng core rất tốt (% sự dụng trên mỗi core
thường là xấp xỉ nhau)
• Fault-tolerance với rất nhiều pattern thú vị
(tham khảo let-it-crash: reaper pattern,
backpressure streaming….)
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Every one
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Architecture in short
front
server
log
aggregator
(fluentd)
redshift
hdfs
BI tool
aerospike
(user data)
(fast layer)
cassandra
(user data)
(slow layer) hadoop
(batch
layer)
spark
ML job
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Fluentd
• Là một giải pháp aggregate log từ "source" đến
"destination" <made in japan>
• Một số đặc điểm thú vị
• Dựa trên cơ chế plugin
• Code viết trên ruby -> dễ debug, dễ đọc, dễ viết
• Fault tolerance tốt (cơ chế buffer, retry... khá
thông minh)
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
fluentd
agent
fluentd
agent
fluentd
agent
fluentd
agent
1xx
instances
fluentd
server
fluentd
server
fluentd
server
3
instances
redshift
buffer &
bulk upload
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Agenda
• Giới thiệu
• Quảng cáo trên Internet: Programmatic Ad
• Scale về kiến trúc / middleware trong một hệ thống
quảng cáo lớn
• Scale về code thông qua functional programming và
scala
• Demo
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Tại sao lại cần
functional programming
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Thực ra là không cần
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Monad
Monoid
Functor
Ring
Endofunctor
Semigroup
Kleisli
FreeMonad
haelochurch.wordpress.com/2012/04/24/functional-programming
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
• Bạn không cần biết tất cả những khái niệm trên
để hiểu về functional programming (FP)
• Nắm vững một số “ cách nghĩ” (concept) của FP
giúp code của bạn (có thể) trong sáng hơn, (có
thể) ít bug hơn, và (có thể) scale tốt hơn rất nhiều
Important!
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
• Tách biệt “ hiệu ứng phụ” (side effect) với những đoạn
code thuần ("pure code")
• pure code là những đoạn code với cùng 1 đầu ra sẽ
“ luôn luôn” output ra 1 kết quả (Referential
transparency)
• Một số ví dụ về side effect
• Mutable variable (re-assignment)
• Thao tác IO (database)
• Logger, Cache…
Một số “ cách nghĩ” của FP
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
• Thay vì nghĩ về từng bước giống như imperative
programming thì hãy nghĩ về luồng xử lý (how)
• First class function (truyền xử lý, hay là truyền
how) (ví dụ như sử dụng hàm map trong ruby
hay scala thay vì for loop)
• Function combination: kết hợp nhiều xử lý con
thành 1 xử lý to (for comprehension)
Một số “ cách nghĩ” của FP
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
• Luôn cố gắng tổng quát hoá mọi bài toán bằng hết mức có thể
(generic). Ví dụ:
• Monoid type class mô hình tất cả các đối tượng có khả năng
thao tác với nhau thông qua binary operator (ví dụ như phép +,
phép *)
• Option type class mô hình tất cả các đối tượng có khả năng
chứa giá trị null -> tránh trường hợp NPE trong java
• Chuyển vất vả về library designer, người dùng (application
programmer sẽ rất “ nhàn”)
Recommend cuốn “ From Mathematics to Generic Programming” của
Alexander A. Stepanov
Một số “ cách nghĩ” của FP
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Một số tính năng của FP hay
được sử dụng
• Basic
• Kết hợp nhiều function
• Sử dụng linh hoạt Option/Either/Future
• FP Iterator style như foldLeft hay là @tailrec
• Pattern matching
• Advance
• Monadic composition
• Type class
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Hiệu quả đạt được
• Tránh mutable state sẽ giúp code có thể lý luận
được chỉ nhờ đọc code, tránh được các thể loại
bug khó phát hiện (heisenbug)
• Generic hoá giúp code dễ mở rộng
• Sử dụng function pipelining (kết hợp nhiều xử lý
con thành 1 xử lý nhỏ) một cách thành thạo sẽ
giúp code dễ hiểu hơn nhiều
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Điểm bất lợi của FP
• Functional programming không dễ
• Khó scale về mặt con người
• Khó thực hiện ở giai đoạn “ start up” khi cần tốc
độ nhiều hơn là chất lượng code
• Tìm ra một giới hạn “ vừa đủ” để áp dụng là rất
khó vì thế giới FP rất rộng lớn
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Giải quyết
• Thực hiện các buổi học nhóm thường xuyên trong
nội bộ công ty
• Thắt chặt tuyển dụng (những người thành thạo
FP thường sẽ <ít có> khả năng là một lập trình
viên "tồi" !!!)
• Học haskell, closure trước (bắt tay vào học FP
trên scala sẽ không tự nhiên bằng haskell hay
closure)
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Một số tài liệu tham khảo
•Paper
• http://monkey.org/~marius/funsrv.pdf (your server as a function)
•Book
• Functional programming in scala
• Functional Programming Patterns in Scala and Clojure: Write Lean
Programs for the JVM
• Learn your haskell for great good
•Slide
• http://www.slideshare.net/pnicolas/advanced-scala-concepts
ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy
Demo session
(openrtb +
a little bit of FP)

More Related Content

Viewers also liked

IM Group hợp tác Haravan - slide nền tảng tổng thể haravan
IM Group hợp tác Haravan - slide nền tảng tổng thể haravanIM Group hợp tác Haravan - slide nền tảng tổng thể haravan
IM Group hợp tác Haravan - slide nền tảng tổng thể haravanDuc Nguyen Minh
 
Nghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGi
Nghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGiNghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGi
Nghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGiNghia Minh
 
Building Bizweb Microservices with Docker
Building Bizweb Microservices with DockerBuilding Bizweb Microservices with Docker
Building Bizweb Microservices with DockerKhôi Nguyễn Minh
 
Distributed Transaction in Microservice
Distributed Transaction in MicroserviceDistributed Transaction in Microservice
Distributed Transaction in MicroserviceNghia Minh
 
Tiki.vn - How we scale as a tech startup
Tiki.vn - How we scale as a tech startupTiki.vn - How we scale as a tech startup
Tiki.vn - How we scale as a tech startupTung Ns
 
Overview mobile application advertising systems 16.08.2013
Overview mobile application advertising systems 16.08.2013Overview mobile application advertising systems 16.08.2013
Overview mobile application advertising systems 16.08.2013Quy Bui
 
NoSQL for great good [hanoi.rb talk]
NoSQL for great good [hanoi.rb talk]NoSQL for great good [hanoi.rb talk]
NoSQL for great good [hanoi.rb talk]Huy Do
 
Giới thiệu redmine(2013)
Giới thiệu redmine(2013)Giới thiệu redmine(2013)
Giới thiệu redmine(2013)Quy Bui
 
Building .NET Microservices
Building .NET MicroservicesBuilding .NET Microservices
Building .NET MicroservicesVMware Tanzu
 
google project glass technology
google project glass technologygoogle project glass technology
google project glass technologymahesh b
 
UX Designer Skills
UX Designer SkillsUX Designer Skills
UX Designer SkillsPhowr Quang
 
Zero to one.PETER THIEL
Zero to one.PETER THIELZero to one.PETER THIEL
Zero to one.PETER THIELSreeja Sarella
 
High performance web sites with multilevel caching
High performance web sites with multilevel cachingHigh performance web sites with multilevel caching
High performance web sites with multilevel cachingDotnet Open Group
 

Viewers also liked (15)

IM Group hợp tác Haravan - slide nền tảng tổng thể haravan
IM Group hợp tác Haravan - slide nền tảng tổng thể haravanIM Group hợp tác Haravan - slide nền tảng tổng thể haravan
IM Group hợp tác Haravan - slide nền tảng tổng thể haravan
 
Graph ql
Graph qlGraph ql
Graph ql
 
Nghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGi
Nghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGiNghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGi
Nghiên cứu luật kết hợp áp dụng xây dựng mạng chia sẻ đồ vật MiGi
 
Building Bizweb Microservices with Docker
Building Bizweb Microservices with DockerBuilding Bizweb Microservices with Docker
Building Bizweb Microservices with Docker
 
Migrating to aws
Migrating to awsMigrating to aws
Migrating to aws
 
Distributed Transaction in Microservice
Distributed Transaction in MicroserviceDistributed Transaction in Microservice
Distributed Transaction in Microservice
 
Tiki.vn - How we scale as a tech startup
Tiki.vn - How we scale as a tech startupTiki.vn - How we scale as a tech startup
Tiki.vn - How we scale as a tech startup
 
Overview mobile application advertising systems 16.08.2013
Overview mobile application advertising systems 16.08.2013Overview mobile application advertising systems 16.08.2013
Overview mobile application advertising systems 16.08.2013
 
NoSQL for great good [hanoi.rb talk]
NoSQL for great good [hanoi.rb talk]NoSQL for great good [hanoi.rb talk]
NoSQL for great good [hanoi.rb talk]
 
Giới thiệu redmine(2013)
Giới thiệu redmine(2013)Giới thiệu redmine(2013)
Giới thiệu redmine(2013)
 
Building .NET Microservices
Building .NET MicroservicesBuilding .NET Microservices
Building .NET Microservices
 
google project glass technology
google project glass technologygoogle project glass technology
google project glass technology
 
UX Designer Skills
UX Designer SkillsUX Designer Skills
UX Designer Skills
 
Zero to one.PETER THIEL
Zero to one.PETER THIELZero to one.PETER THIEL
Zero to one.PETER THIEL
 
High performance web sites with multilevel caching
High performance web sites with multilevel cachingHigh performance web sites with multilevel caching
High performance web sites with multilevel caching
 

ITLCHN16 - Kiến trúc hệ thống quảng cáo lớn

  • 1. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Kiến trúc hệ thống quảng cáo lớn trên nền scala. @huydx (Φφ) CyberAgent Inc ITLC HANOI MONTHLY PUBLIC MEETUP Toong Coworking Space – Hà N i – 22/12/2015ộ
  • 2. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Agenda • Giới thiệu • Quảng cáo trên Internet: Programmatic Ad • Scale về kiến trúc / middleware trong một hệ thống quảng cáo lớn • Scale về code thông qua functional programming và scala • Demo
  • 3. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Agenda • Giới thiệu • Quảng cáo trên Internet: Programmatic Ad • Scale về kiến trúc / middleware trong một hệ thống quảng cáo lớn • Scale về code thông qua functional programming và scala • Demo
  • 4. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Giới thiệu bản thân • Name: Huy • Position: Software Engineer • Location: Tokyo/Japan • Favourite Language: Ruby/Scala/Java • Other • Admin/cofounder of Ruby Vietnam • cofounder of kipalog.com / ktmt blog
  • 5. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy CyberAgent • Thành lập 1998 (17 năm) • Các dịch vụ chính: mạng xã hội (ameba (40tr users)), quảng cáo trên internet (adagency, adtech), game, investment • Doanh thu 1 năm ~ 2.4 tỉ USD • ~5000 nhân viên
  • 6. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Adtech Studio • Chuyên nghiên cứu, phát triển các hệ thống quảng cáo (DSP, SSP, AdNetwork, Affiliate, DMP…) • Một vài con số (trên toàn bộ studio): • Network Uplink: 160GBS • Overall QPS: ~2-3millions/per sec • Overall data size: ~ 30PB • Overall server instance: ~1-2000 servers (AWS, DC) • Ngôn ngữ: Scala, Java, PHP, Ruby, Go
  • 7. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Agenda • Giới thiệu • Quảng cáo trên Internet: Programmatic Ad • Scale về kiến trúc / middleware trong một hệ thống quảng cáo lớn • Scale về code thông qua functional programming và scala • Demo
  • 8. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy • Bài nói sẽ nói chính về programmatic advertising bao gồm: banner ad và in-feed ad, chủ yếu về khía cạnh kĩ thuật Chú ý
  • 9. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Quảng cáo== đem thông tin của ng i c n bánườ ầ đến ng i c n muaườ ầ Quảng cáo != evil
  • 10. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Nhưng How???
  • 11. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy • Tại sao hiện tại chúng ta phải hứng chịu nhiều quảng cáo tồi?? • Do hiển thị quảng cáo qua thoả thuận trực tiếp • Do không có đủ thông tin người dùng • Do máy móc, thuật toán chưa đủ "thông minh" • Do người cần mua và người cần bán không đến được với nhau •......
  • 12. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy openRTB ra đời
  • 13. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy •RTB == real time bidding Việc hiển thị quảng cáo diễn ra tại realtime thông qua việc "bán" view của user tại thời điểm user visit website Advantage: User "ngon" sẽ được mua với giá đắt User "tồi" sẽ được mua với giá rẻ --> có lợi cho cả bên bán lẫn bên mua
  • 14. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy người bán user 1, visit 2. phát lệnh bán 3. đấu giángười bán người mua người mua 1000vnd 2000vnd 3000vnd người bán 4. hiển thị quảng cáo của bên thắng
  • 15. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy openRTB == ngôn ngữ để bên mua nói chuyện với bên bán Đặc điểm: • Fix format thay vì fix protocol (có thể sử dụng cả json, xml hay protobuf) • Format khá uyển chuyển để chứa đủ thông tin cho việc đấu giá trở nên hiệu quả
  • 16. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Những khó khăn • Scale hệ thống (~millions qps) • Scale dữ liệu lớn ( TB~PB) • bidding Logic RTB • Tracking user giữa mobile/web • Thuật toán để đưa quảng cáo đến đúng với người dùng
  • 17. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Agenda • Giới thiệu • Quảng cáo trên Internet: Programmatic Ad • Scale về kiến trúc / middleware trong một hệ thống quảng cáo lớn • Scale về code thông qua functional programming và scala • Demo
  • 18. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Hệ thống phụ trách • DMP system • QPS: ~10000req/s (140 instances) • Hadoop: ~100nodes • Cassandra: 15nodes (7TB) • Aerospike: 14nodes (~2TB RAM!) • MySQL: ~100GB • Datasize: 4.5billions cookie data
  • 20. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Architecture in short front server log aggregator (fluentd) redshift hdfs BI tool aerospike (user data) (fast layer) cassandra (user data) (slow layer) hadoop (batch layer) spark ML job
  • 21. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Architecture in short front server log aggregator (fluentd) redshift hdfs BI tool aerospike (user data) (fast layer) cassandra (user data) (slow layer) hadoop (batch layer) spark ML job
  • 22. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Why Aerospike
  • 23. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Aerospike • Rất nhanh với SSD • Ghi trực tiếp vào SSD không qua OS • 99.99% request sẽ dưới 1ms • Vertical scale với P2P cluster • Cross-datacenter replication • Rất ổn định ( chưa thấy chết bao giờ ) • Tuy nhiên giá server đắt do: • Phải trang bị RAM lớn cho index • Phải trang bị SSD đúng chuẩn
  • 24. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Aerospike rất được tin dùng bởi các công ty quảng cáo lớn như: Appnexus, bluekai, adform… :))))
  • 25. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Tại sao cần cả cassandra và aerospike • Aerospike server quá đắt (1server 200GB Ram ~ 10k$) • Khi cho data từ batchlayer vào thì việc rebuild index của aerospike ảnh hưởng performance • Cassandra có performance khi batch write rất tốt, tuy nhiên tốc độ read lại không đảm bảo
  • 26. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Architecture in short front server log aggregator (fluentd) redshift hdfs BI tool aerospike (user data) (fast layer) cassandra (user data) (slow layer) hadoop (batch layer) spark ML job
  • 27. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Một chút về spark/hadoop
  • 28. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Hadoop & Spark • Hadoop là solution không thể thiếu để xử lý dữ liệu lớn • Tuy nhiên Map/Reduce java code quá nhiều boilerplate • Unit test khó viết (MRUnit đã không còn update từ 1 năm trước) • Đang viết lại toàn bộ xử lý qua Spark
  • 29. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Hadoop & Spark • Why Spark • Code được viết bằng scala (yay!) • Compability với hadoop (hadoopApiFile) • Ít boiler plate, code sáng sủa hơn rất nhiều • Dễ viết test hơn nhờ khái niệm RDD • Đi kèm với bộ mlib để xử lý machine learning
  • 30. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Hadoop & Spark • Một vài trick thú vị • Lzo encode để giảm lượng dữ liệu + lzo có thể đọc được trực tiếp từ mapper • Serialize data dưới dạng protobuffer có thể speed up tốc độ xử lý • Spark có thể đọc trực tiếp dữ liệu từ S3 -> giảm chi phí HDFS
  • 31. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Architecture in short front server log aggregator (fluentd) redshift hdfs BI tool aerospike (user data) (fast layer) cassandra (user data) (slow layer) hadoop (batch layer) spark ML job
  • 32. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Tạo BI tool với redshift • Redshift là columnar database của amazon • Hỗ trợ truy vấn dữ liệu theo PostgreSQL syntax • Adhoc query trở nên dễ dàng hơn rất nhiều (window function support) • Redshift scale rất tốt chỉ với thêm instance • Điểm yếu: giá cao, không insert được data realtime (chỉ support batch insert/ bulk load)
  • 33. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Architecture in short front server log aggregator (fluentd) redshift hdfs BI tool aerospike (user data) (fast layer) cassandra (user data) (slow layer) hadoop (batch layer) spark ML job
  • 34. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Front server với • Scala lightway webframework ( trong thời gian gần sẽ thành akka-http) • Actor model (thông qua akka) • Tận dụng core rất tốt (% sự dụng trên mỗi core thường là xấp xỉ nhau) • Fault-tolerance với rất nhiều pattern thú vị (tham khảo let-it-crash: reaper pattern, backpressure streaming….)
  • 35. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Every one
  • 36. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Architecture in short front server log aggregator (fluentd) redshift hdfs BI tool aerospike (user data) (fast layer) cassandra (user data) (slow layer) hadoop (batch layer) spark ML job
  • 37. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Fluentd • Là một giải pháp aggregate log từ "source" đến "destination" <made in japan> • Một số đặc điểm thú vị • Dựa trên cơ chế plugin • Code viết trên ruby -> dễ debug, dễ đọc, dễ viết • Fault tolerance tốt (cơ chế buffer, retry... khá thông minh)
  • 38. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy fluentd agent fluentd agent fluentd agent fluentd agent 1xx instances fluentd server fluentd server fluentd server 3 instances redshift buffer & bulk upload
  • 39. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Agenda • Giới thiệu • Quảng cáo trên Internet: Programmatic Ad • Scale về kiến trúc / middleware trong một hệ thống quảng cáo lớn • Scale về code thông qua functional programming và scala • Demo
  • 40. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Tại sao lại cần functional programming
  • 41. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Thực ra là không cần
  • 42. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Monad Monoid Functor Ring Endofunctor Semigroup Kleisli FreeMonad haelochurch.wordpress.com/2012/04/24/functional-programming
  • 43. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy • Bạn không cần biết tất cả những khái niệm trên để hiểu về functional programming (FP) • Nắm vững một số “ cách nghĩ” (concept) của FP giúp code của bạn (có thể) trong sáng hơn, (có thể) ít bug hơn, và (có thể) scale tốt hơn rất nhiều Important!
  • 44. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy • Tách biệt “ hiệu ứng phụ” (side effect) với những đoạn code thuần ("pure code") • pure code là những đoạn code với cùng 1 đầu ra sẽ “ luôn luôn” output ra 1 kết quả (Referential transparency) • Một số ví dụ về side effect • Mutable variable (re-assignment) • Thao tác IO (database) • Logger, Cache… Một số “ cách nghĩ” của FP
  • 45. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy • Thay vì nghĩ về từng bước giống như imperative programming thì hãy nghĩ về luồng xử lý (how) • First class function (truyền xử lý, hay là truyền how) (ví dụ như sử dụng hàm map trong ruby hay scala thay vì for loop) • Function combination: kết hợp nhiều xử lý con thành 1 xử lý to (for comprehension) Một số “ cách nghĩ” của FP
  • 46. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy • Luôn cố gắng tổng quát hoá mọi bài toán bằng hết mức có thể (generic). Ví dụ: • Monoid type class mô hình tất cả các đối tượng có khả năng thao tác với nhau thông qua binary operator (ví dụ như phép +, phép *) • Option type class mô hình tất cả các đối tượng có khả năng chứa giá trị null -> tránh trường hợp NPE trong java • Chuyển vất vả về library designer, người dùng (application programmer sẽ rất “ nhàn”) Recommend cuốn “ From Mathematics to Generic Programming” của Alexander A. Stepanov Một số “ cách nghĩ” của FP
  • 47. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Một số tính năng của FP hay được sử dụng • Basic • Kết hợp nhiều function • Sử dụng linh hoạt Option/Either/Future • FP Iterator style như foldLeft hay là @tailrec • Pattern matching • Advance • Monadic composition • Type class
  • 48. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Hiệu quả đạt được • Tránh mutable state sẽ giúp code có thể lý luận được chỉ nhờ đọc code, tránh được các thể loại bug khó phát hiện (heisenbug) • Generic hoá giúp code dễ mở rộng • Sử dụng function pipelining (kết hợp nhiều xử lý con thành 1 xử lý nhỏ) một cách thành thạo sẽ giúp code dễ hiểu hơn nhiều
  • 49. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Điểm bất lợi của FP • Functional programming không dễ • Khó scale về mặt con người • Khó thực hiện ở giai đoạn “ start up” khi cần tốc độ nhiều hơn là chất lượng code • Tìm ra một giới hạn “ vừa đủ” để áp dụng là rất khó vì thế giới FP rất rộng lớn
  • 50. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Giải quyết • Thực hiện các buổi học nhóm thường xuyên trong nội bộ công ty • Thắt chặt tuyển dụng (những người thành thạo FP thường sẽ <ít có> khả năng là một lập trình viên "tồi" !!!) • Học haskell, closure trước (bắt tay vào học FP trên scala sẽ không tự nhiên bằng haskell hay closure)
  • 51. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Một số tài liệu tham khảo •Paper • http://monkey.org/~marius/funsrv.pdf (your server as a function) •Book • Functional programming in scala • Functional Programming Patterns in Scala and Clojure: Write Lean Programs for the JVM • Learn your haskell for great good •Slide • http://www.slideshare.net/pnicolas/advanced-scala-concepts
  • 52. ITLC Hanoi (https://facebook.com/itlchanoi) – Do Xuan Huy Demo session (openrtb + a little bit of FP)