SlideShare a Scribd company logo
1 of 20
Architecture Sustaining
LINE Sticker Services
Masahiro IDE, LINE CORP
About me
• Masahiro Ide
• Software Engineer of LINE server development
• Especially StickerShop backend server
• Joined: Oct, 2015
• Contribute to Armeria
• Our open sourced asynchronous RPC/REST library
• https://github.com/line/armeria
Agenda • Sticker Shop Server
• History
• Our Architecture
• Implementations
What is Sticker Shop?
Sticker Shop … in 2015
One of the biggest monolithic Java application in LINE
• Purchasing, Serving, Ranking stickers in 1 app
• Many pains, troubles
• Takes more than 3 hours to restart app
Sticker Shop in 2018
Now shift to microservice way for scalability
• 1 million stickers
• 30 services
• Purchasing, Serving, Ranking stickers, etc.
• 70K requests/sec in peek time
StickerShop Architecture Overview
(Simplified)
Central Dogma – Configuration Repository Service
Talk server
ElasticSearch
Client
ReverseProxy
Thrift/HTTP2
Thrift/HTTP2
Redis
MySQL
Sticker capability
server
Shop server Search FE
Thrift/HTTP2
Implementation
• What we need is…
• Performance
• Prepared to faults
• Observability
• Stable feature rollout
Central Dogma
• Repository service for textual configurations
• JSON, YAML, XML …
• Highly available
• multi-master, eventually consistency
• Version controlled
• https://line.github.io/centraldogma/
Armeria - Our RPC layer
• Asynchronous RPC/REST library
• built on top of Java 8, Netty, HTTP/2, Thrift and gRPC
• Take care common functionality for microservice
1. Load balancing
2. Circuit Breaker / Retry / Throttling
3. Tracing (Zipkin) / Monitoring integration
• etc.
https://line.github.io/armeria/
1. Client-side load balancing
• No proxy load balancers
• Proxy would be inefficient when
considering request heavy services
• CentralDogma as a service discovery
• All services register a name and
a list of machines in CentralDogma
• All clients monitor CentralDogma and
balance requests across machines
LB
Client
Server
Client
Server
Server
Proxy load balancing
1. Client-side load balancing
• No proxy load balancers
• Proxy would be inefficient when
considering request heavy services
• CentralDogma as a service discovery
• All services register a name and
a list of machines in CentralDogma
• All clients monitor CentralDogma and
balance requests across machines
Central Dogma
Client
Server
Client
Server
Server
2. Circuit Breaker - Avoid cascading failure
• Server die suddenly
• e.g. Hardware failure
• Upstream cannot proceed part
of requests, in worst case
• Blocks all of application thread
• LINE die
Service A
Service C
Service B
2. Circuit Breaker - Avoid cascading failure
• Circuit Breaker pattern*
1. Monitors failures
2. Return error immediately without
RPC once the failures reach
a threshold
Service A
Service C
Service B
CircuitBreaker
CircuitBreaker
* https://martinfowler.com/bliki/CircuitBreaker.html
3. Tracing
• Hard to point out the slowness/bug in microservice
• No one provides complete picture of system performance
Talk server
ElasticSearch
Reverse Proxy
Redis
MySQL
Shop server
Search FE
T=start
T=end
3. Tracing
• Solution: Distributed tracing with Zipkin
Rollout features using CentralDogma (CD)
• Rollout to production within
10 minutes of being changed
• Deploy a YAML file to all our
production servers via CD
• Record changes in CD
commit log
Rollout features using CentralDogma
• Rollout to production within
10 minutes of being changed
• Deploy a YAML file to all our
production servers via CD
• Record changes in CD
commit log
30%CacheV2 rollout:
Central
Dogma
Service
Service
Service
commit
YAMLPull & Reload config
Developer
Conclusion
• Our system is built on top of our OSSs
• Armeria, CentralDogma, and more
• … are still evolving
• Trouble may happen
• Make a well trouble-prepared system
• Let's do a smooth release
Q & A

More Related Content

What's hot

Etsy Activity Feeds Architecture
Etsy Activity Feeds ArchitectureEtsy Activity Feeds Architecture
Etsy Activity Feeds Architecture
Dan McKinley
 
Introduction to Storm
Introduction to Storm Introduction to Storm
Introduction to Storm
Chandler Huang
 

What's hot (20)

RocksDB detail
RocksDB detailRocksDB detail
RocksDB detail
 
MyRocks Deep Dive
MyRocks Deep DiveMyRocks Deep Dive
MyRocks Deep Dive
 
MongoDB vs. Postgres Benchmarks
MongoDB vs. Postgres Benchmarks MongoDB vs. Postgres Benchmarks
MongoDB vs. Postgres Benchmarks
 
NATS Streaming - an alternative to Apache Kafka?
NATS Streaming - an alternative to Apache Kafka?NATS Streaming - an alternative to Apache Kafka?
NATS Streaming - an alternative to Apache Kafka?
 
Stability Patterns for Microservices
Stability Patterns for MicroservicesStability Patterns for Microservices
Stability Patterns for Microservices
 
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
Performance Tuning RocksDB for Kafka Streams' State Stores (Dhruba Borthakur,...
 
SOLID & Design Patterns
SOLID & Design PatternsSOLID & Design Patterns
SOLID & Design Patterns
 
Distributed Transaction in Microservice
Distributed Transaction in MicroserviceDistributed Transaction in Microservice
Distributed Transaction in Microservice
 
Sapo Microservices Architecture
Sapo Microservices ArchitectureSapo Microservices Architecture
Sapo Microservices Architecture
 
The C10k Problem
The C10k ProblemThe C10k Problem
The C10k Problem
 
Grokking TechTalk #31: Asynchronous Communications
Grokking TechTalk #31: Asynchronous CommunicationsGrokking TechTalk #31: Asynchronous Communications
Grokking TechTalk #31: Asynchronous Communications
 
Etsy Activity Feeds Architecture
Etsy Activity Feeds ArchitectureEtsy Activity Feeds Architecture
Etsy Activity Feeds Architecture
 
Introduction to Storm
Introduction to Storm Introduction to Storm
Introduction to Storm
 
Grokking Techtalk #39: How to build an event driven architecture with Kafka ...
 Grokking Techtalk #39: How to build an event driven architecture with Kafka ... Grokking Techtalk #39: How to build an event driven architecture with Kafka ...
Grokking Techtalk #39: How to build an event driven architecture with Kafka ...
 
Bizweb Microservices Architecture
Bizweb Microservices ArchitectureBizweb Microservices Architecture
Bizweb Microservices Architecture
 
Cassandra consistency
Cassandra consistencyCassandra consistency
Cassandra consistency
 
CQRS in 4 steps
CQRS in 4 stepsCQRS in 4 steps
CQRS in 4 steps
 
What Every Developer Should Know About Database Scalability
What Every Developer Should Know About Database ScalabilityWhat Every Developer Should Know About Database Scalability
What Every Developer Should Know About Database Scalability
 
MongoDB WiredTiger Internals: Journey To Transactions
MongoDB WiredTiger Internals: Journey To TransactionsMongoDB WiredTiger Internals: Journey To Transactions
MongoDB WiredTiger Internals: Journey To Transactions
 
Cassandra at Instagram 2016 (Dikang Gu, Facebook) | Cassandra Summit 2016
Cassandra at Instagram 2016 (Dikang Gu, Facebook) | Cassandra Summit 2016Cassandra at Instagram 2016 (Dikang Gu, Facebook) | Cassandra Summit 2016
Cassandra at Instagram 2016 (Dikang Gu, Facebook) | Cassandra Summit 2016
 

Similar to Architecture Sustaining LINE Sticker services

LINE Bot API with Armeria
LINE Bot API with ArmeriaLINE Bot API with Armeria
LINE Bot API with Armeria
Soo Kim
 

Similar to Architecture Sustaining LINE Sticker services (20)

LINE Bot API with Armeria
LINE Bot API with ArmeriaLINE Bot API with Armeria
LINE Bot API with Armeria
 
Metrics driven development with dedicated Observability Team
Metrics driven development with dedicated Observability TeamMetrics driven development with dedicated Observability Team
Metrics driven development with dedicated Observability Team
 
Building Awesome APIs with Lumen
Building Awesome APIs with LumenBuilding Awesome APIs with Lumen
Building Awesome APIs with Lumen
 
How to Structure Your Xamarin Solution by Adhering to Common .NET Practices -...
How to Structure Your Xamarin Solution by Adhering to Common .NET Practices -...How to Structure Your Xamarin Solution by Adhering to Common .NET Practices -...
How to Structure Your Xamarin Solution by Adhering to Common .NET Practices -...
 
Realtime traffic analyser
Realtime traffic analyserRealtime traffic analyser
Realtime traffic analyser
 
Thick client application security assessment
Thick client  application security assessmentThick client  application security assessment
Thick client application security assessment
 
Building a Modern Website for Scale (QCon NY 2013)
Building a Modern Website for Scale (QCon NY 2013)Building a Modern Website for Scale (QCon NY 2013)
Building a Modern Website for Scale (QCon NY 2013)
 
[CocoaHeads Tricity] Andrzej Dąbrowski - Dependency injection and testable ar...
[CocoaHeads Tricity] Andrzej Dąbrowski - Dependency injection and testable ar...[CocoaHeads Tricity] Andrzej Dąbrowski - Dependency injection and testable ar...
[CocoaHeads Tricity] Andrzej Dąbrowski - Dependency injection and testable ar...
 
Tom van gaever-sp_serviceapplications_spsbe17
Tom van gaever-sp_serviceapplications_spsbe17Tom van gaever-sp_serviceapplications_spsbe17
Tom van gaever-sp_serviceapplications_spsbe17
 
ReactJs Optimizations , Making server side react faster
ReactJs Optimizations , Making server side react faster ReactJs Optimizations , Making server side react faster
ReactJs Optimizations , Making server side react faster
 
We Built This City - Apigee Edge Architecture
We Built This City - Apigee Edge ArchitectureWe Built This City - Apigee Edge Architecture
We Built This City - Apigee Edge Architecture
 
The Need of Cloud-Native Application
The Need of Cloud-Native ApplicationThe Need of Cloud-Native Application
The Need of Cloud-Native Application
 
Web Clients for Ruby and What they should be in the future
Web Clients for Ruby and What they should be in the futureWeb Clients for Ruby and What they should be in the future
Web Clients for Ruby and What they should be in the future
 
Building a [micro]services platform on AWS
Building a [micro]services platform on AWSBuilding a [micro]services platform on AWS
Building a [micro]services platform on AWS
 
Adding Real-time Features to PHP Applications
Adding Real-time Features to PHP ApplicationsAdding Real-time Features to PHP Applications
Adding Real-time Features to PHP Applications
 
How to Build a Big Data Application: Serverless Edition
How to Build a Big Data Application: Serverless EditionHow to Build a Big Data Application: Serverless Edition
How to Build a Big Data Application: Serverless Edition
 
How to Build a Big Data Application: Serverless Edition
How to Build a Big Data Application: Serverless EditionHow to Build a Big Data Application: Serverless Edition
How to Build a Big Data Application: Serverless Edition
 
Tokyo Azure Meetup #5 - Microservices and Azure Service Fabric
Tokyo Azure Meetup #5 - Microservices and Azure Service FabricTokyo Azure Meetup #5 - Microservices and Azure Service Fabric
Tokyo Azure Meetup #5 - Microservices and Azure Service Fabric
 
Application Performance Management
Application Performance ManagementApplication Performance Management
Application Performance Management
 
Modernizing the Legacy - How Dish is Adapting its SOA Services for a Cloud Fi...
Modernizing the Legacy - How Dish is Adapting its SOA Services for a Cloud Fi...Modernizing the Legacy - How Dish is Adapting its SOA Services for a Cloud Fi...
Modernizing the Legacy - How Dish is Adapting its SOA Services for a Cloud Fi...
 

More from LINE Corporation

More from LINE Corporation (20)

JJUG CCC 2018 Fall 懇親会LT
JJUG CCC 2018 Fall 懇親会LTJJUG CCC 2018 Fall 懇親会LT
JJUG CCC 2018 Fall 懇親会LT
 
Reduce dependency on Rx with Kotlin Coroutines
Reduce dependency on Rx with Kotlin CoroutinesReduce dependency on Rx with Kotlin Coroutines
Reduce dependency on Rx with Kotlin Coroutines
 
Kotlin/NativeでAndroidのNativeメソッドを実装してみた
Kotlin/NativeでAndroidのNativeメソッドを実装してみたKotlin/NativeでAndroidのNativeメソッドを実装してみた
Kotlin/NativeでAndroidのNativeメソッドを実装してみた
 
Use Kotlin scripts and Clova SDK to build your Clova extension
Use Kotlin scripts and Clova SDK to build your Clova extensionUse Kotlin scripts and Clova SDK to build your Clova extension
Use Kotlin scripts and Clova SDK to build your Clova extension
 
The Magic of LINE 購物 Testing
The Magic of LINE 購物 TestingThe Magic of LINE 購物 Testing
The Magic of LINE 購物 Testing
 
GA Test Automation
GA Test AutomationGA Test Automation
GA Test Automation
 
UI Automation Test with JUnit5
UI Automation Test with JUnit5UI Automation Test with JUnit5
UI Automation Test with JUnit5
 
Feature Detection for UI Testing
Feature Detection for UI TestingFeature Detection for UI Testing
Feature Detection for UI Testing
 
LINE 新星計劃介紹與新創團隊分享
LINE 新星計劃介紹與新創團隊分享LINE 新星計劃介紹與新創團隊分享
LINE 新星計劃介紹與新創團隊分享
 
​LINE 技術合作夥伴與應用分享
​LINE 技術合作夥伴與應用分享​LINE 技術合作夥伴與應用分享
​LINE 技術合作夥伴與應用分享
 
LINE 開發者社群經營與技術推廣
LINE 開發者社群經營與技術推廣LINE 開發者社群經營與技術推廣
LINE 開發者社群經營與技術推廣
 
日本開發者大會短講分享
日本開發者大會短講分享日本開發者大會短講分享
日本開發者大會短講分享
 
LINE Chatbot - 活動報名報到設計分享
LINE Chatbot - 活動報名報到設計分享LINE Chatbot - 活動報名報到設計分享
LINE Chatbot - 活動報名報到設計分享
 
在 LINE 私有雲中使用 Managed Kubernetes
在 LINE 私有雲中使用 Managed Kubernetes在 LINE 私有雲中使用 Managed Kubernetes
在 LINE 私有雲中使用 Managed Kubernetes
 
LINE TODAY高效率的敏捷測試開發技巧
LINE TODAY高效率的敏捷測試開發技巧LINE TODAY高效率的敏捷測試開發技巧
LINE TODAY高效率的敏捷測試開發技巧
 
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
LINE 區塊鏈平台及代幣經濟 - LINK Chain及LINK介紹
 
LINE Things - LINE IoT平台新技術分享
LINE Things - LINE IoT平台新技術分享LINE Things - LINE IoT平台新技術分享
LINE Things - LINE IoT平台新技術分享
 
LINE Pay - 一卡通支付新體驗
LINE Pay - 一卡通支付新體驗LINE Pay - 一卡通支付新體驗
LINE Pay - 一卡通支付新體驗
 
LINE Platform API Update - 打造一個更好的Chatbot服務
LINE Platform API Update - 打造一個更好的Chatbot服務LINE Platform API Update - 打造一個更好的Chatbot服務
LINE Platform API Update - 打造一個更好的Chatbot服務
 
Keynote - ​LINE 的技術策略佈局與跨國產品開發
Keynote - ​LINE 的技術策略佈局與跨國產品開發Keynote - ​LINE 的技術策略佈局與跨國產品開發
Keynote - ​LINE 的技術策略佈局與跨國產品開發
 

Recently uploaded

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Recently uploaded (20)

🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdfTech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
 

Architecture Sustaining LINE Sticker services

  • 1. Architecture Sustaining LINE Sticker Services Masahiro IDE, LINE CORP
  • 2. About me • Masahiro Ide • Software Engineer of LINE server development • Especially StickerShop backend server • Joined: Oct, 2015 • Contribute to Armeria • Our open sourced asynchronous RPC/REST library • https://github.com/line/armeria
  • 3. Agenda • Sticker Shop Server • History • Our Architecture • Implementations
  • 5. Sticker Shop … in 2015 One of the biggest monolithic Java application in LINE • Purchasing, Serving, Ranking stickers in 1 app • Many pains, troubles • Takes more than 3 hours to restart app
  • 6. Sticker Shop in 2018 Now shift to microservice way for scalability • 1 million stickers • 30 services • Purchasing, Serving, Ranking stickers, etc. • 70K requests/sec in peek time
  • 7. StickerShop Architecture Overview (Simplified) Central Dogma – Configuration Repository Service Talk server ElasticSearch Client ReverseProxy Thrift/HTTP2 Thrift/HTTP2 Redis MySQL Sticker capability server Shop server Search FE Thrift/HTTP2
  • 8. Implementation • What we need is… • Performance • Prepared to faults • Observability • Stable feature rollout
  • 9. Central Dogma • Repository service for textual configurations • JSON, YAML, XML … • Highly available • multi-master, eventually consistency • Version controlled • https://line.github.io/centraldogma/
  • 10. Armeria - Our RPC layer • Asynchronous RPC/REST library • built on top of Java 8, Netty, HTTP/2, Thrift and gRPC • Take care common functionality for microservice 1. Load balancing 2. Circuit Breaker / Retry / Throttling 3. Tracing (Zipkin) / Monitoring integration • etc. https://line.github.io/armeria/
  • 11. 1. Client-side load balancing • No proxy load balancers • Proxy would be inefficient when considering request heavy services • CentralDogma as a service discovery • All services register a name and a list of machines in CentralDogma • All clients monitor CentralDogma and balance requests across machines LB Client Server Client Server Server Proxy load balancing
  • 12. 1. Client-side load balancing • No proxy load balancers • Proxy would be inefficient when considering request heavy services • CentralDogma as a service discovery • All services register a name and a list of machines in CentralDogma • All clients monitor CentralDogma and balance requests across machines Central Dogma Client Server Client Server Server
  • 13. 2. Circuit Breaker - Avoid cascading failure • Server die suddenly • e.g. Hardware failure • Upstream cannot proceed part of requests, in worst case • Blocks all of application thread • LINE die Service A Service C Service B
  • 14. 2. Circuit Breaker - Avoid cascading failure • Circuit Breaker pattern* 1. Monitors failures 2. Return error immediately without RPC once the failures reach a threshold Service A Service C Service B CircuitBreaker CircuitBreaker * https://martinfowler.com/bliki/CircuitBreaker.html
  • 15. 3. Tracing • Hard to point out the slowness/bug in microservice • No one provides complete picture of system performance Talk server ElasticSearch Reverse Proxy Redis MySQL Shop server Search FE T=start T=end
  • 16. 3. Tracing • Solution: Distributed tracing with Zipkin
  • 17. Rollout features using CentralDogma (CD) • Rollout to production within 10 minutes of being changed • Deploy a YAML file to all our production servers via CD • Record changes in CD commit log
  • 18. Rollout features using CentralDogma • Rollout to production within 10 minutes of being changed • Deploy a YAML file to all our production servers via CD • Record changes in CD commit log 30%CacheV2 rollout: Central Dogma Service Service Service commit YAMLPull & Reload config Developer
  • 19. Conclusion • Our system is built on top of our OSSs • Armeria, CentralDogma, and more • … are still evolving • Trouble may happen • Make a well trouble-prepared system • Let's do a smooth release
  • 20. Q & A

Editor's Notes

  1. こんにちは、LINEのIde masahiroです。これからの20分間は我々LINEのサービスの1つであるsticker、それを支えているアーキテクチャや仕組み、その概要をお話しできればと思います。よろしくお願いいたします。まず最初に(次のページ)
  2. 私はLINEでサーバサイドエンジニアをしています。特にメッセージングやスタンプなどを中心に開発を行っています。2015年の10月に入社したのでおよそ2.5年ほど経ちましたが、LINEでは日本語や韓国語、英語などの言葉の壁、サービスの部署の壁などは特別なく、自由な開発を行えていると思っています。それでは、(次のページ)
  3. 本題に移っていきましょう。これが本日のアジェンダになります。まず、最初にこの発表で扱うサービスであるstickershop、そのサービスだったりアーキテクチャの概要を紹介します。そのあとに、それを支えるRPC layerの紹介、そしてサービスのリリースを支えるopsの紹介をします。それでは最初の内容に移っていきましょう。
  4. LINEでも良いですし、他のメッセージングアプリでも構いません。Stickerを作ったことがある方はいますか?もしくはstickerを買ったこと? あるいは送ったこと?送ることは結構な人数がいますかね?ありがとうございます。そうです。ラフに言うと、stickerに関連する、作る、買う、送る、この3つの仕組み提供しています。(厳密には送る部分はmessagingに関わるserviceが担当しますが、概ね間違っていないと思う) そしてアプリケーションの規模、サービスの規模を表す1つの例として、2015年に我々は(次のページ)
  5. サービスが発展して行く中でいくつかの問題を抱えていました。ほとんどの原因は巨大なmonolithic applicationであったことに起因します。それにより、
  6. それでは2018年に戻ってきましょう。現在のstickershopは、この3つの数字で表せると思います。これは大体の数字ですが、2018年現在でおおよそ1 million productが実際のstickerとして皆さんの手元から相手のchatに届いています。そして、おおよそ3つの機能を提供するために30以上のmicroserviceによって作る、売る、送るという機能は作られてます。最後に、サービスとして処理するrequestの量ですが、peek of peekで話しますと大体70K req/sec程度が一番忙しい時にはあったりするという規模感になっています。では、それを実現するアーキテクチャはどのようになっているでしょうか?(次のページ)
  7. この図はstickershopのアーキテクチャを表しています。先ほど30以上のサービスから構成されていると言いましたが、ここでは代表して数個のserviceが登場しています。青い線で書かれているように、LINE clientから送られてきたrequestはreverse proxyを通じてbackend serverに機能に応じてrequestを投げていき、storageまでアクセスされます。それぞれのサービスはお互いに通信しながらサービスを提供するので、大体メッシュ状のような形状になっていて、CentralDogmaと呼ばれるconfiugrationを一箇所で管理するserviceと繋がっています。そして、LINE ClientとserverはThrift over http2のrequestで通信が行われています。同様に、サーバ間の通信は大体Thrift over http2で行われています。
  8. では、我々はこのアーキテクチャをどのように支えているのでしょうか?今日はこの4つの点で話してみたいと思います。まず初めにサービスのインフラとして(次のページ)
  9. まず最初に説明したいのは、CentralDogmaと呼ばれるconfigurationを一箇所で管理するserviceです。サービスをrolloutしたりconfigurationを
  10. そして、これまで説明してきたサービスにおいて、通信は、それを支えるRPC layer、Armeriaと呼ばれるserver/client libraryによって提供されています。 Armeriaは我々がopen sourceにしたAsynchronous RPC/REST libraryです。Eventloop baseのnetwork libraryであるnettyをベースにしており、その上でHTTP1, HTTP2, そしてThriftやgRPCなどRPC機能を提供しています。一番下に書いてあるURLでdocumentationやソースコードは公開されていますのでもし興味がありましたらぜひ試してください。 このArmeriaでは、先ほど説明したようなmicroserviceを実現する上で必要な機能も合わせて提供してくれています。代表的な機能としてはLoad balancingの機能や、リクエストが失敗した時、サービスに障害があった時に有用なthrottling, request limittingの機能、また、モニタリングやサービス全体のトレースを行うためのintegrationがあります。
  11. 古典的なサービスではclientとserverの間の間にproxyを置いて、requestをservingしていたと思います。しかし、storage serviceのようなrequestの多いサービスではLBを経由するコストは無視できません。我々は(次のページ)
  12. CDを用いたclient side loadbalancingの仕組みを作り、サーバサイドのinter connectionのrequestを効率化しています。
  13. そして、次に説明したいのはcircuit breakerという仕組みです。みなさんご存知の通り、applicationは様々な理由によって突然死にます。そして、最悪の場合、その障害はupstreamサーバのrequestをブロックし、application serverのthreadをブロックします。そして最終的にはその影響はサービス全体に波及してLINEが死にます。そのような状況を防ぐために(次のページ)
  14. Circuit Breakerという仕組みを利用してサービスの影響を波及させないようにしています。仕組みについては非常によく知られています。このURLを参考にしていただければと思います。 (次のページ)
  15. 3つめに紹介したいのはtracingについてです。Microservice上で開発する上で一番大変なことは何か問題が発生した時にそれがどこで発生したかを正しく理解することです。 (次のページ)
  16. (次のページ)
  17. 最後に紹介したいのは、どのようにfeatureのrolloutをしているかについてです。 All of our servers run a background thread called the “CentralDogma watcher” which constantly watches the CentralDogma_config.json copy on memory, reloading it when it changes. This allows CentralDogma to reload without interruption to the server.
  18. 最後に紹介したいのは、どのようにfeatureのrolloutをしているかについてです。 All of our servers run a background thread called the “CentralDogma watcher” which constantly watches the CentralDogma_config.json copy on memory, reloading it when it changes. This allows CentralDogma to reload without interruption to the server.
  19. ここまで、Armeria, CentralDogma、いくつかのLINE, StickerShopを支える仕組みについて紹介してきました。