SlideShare una empresa de Scribd logo
1 de 51
Descargar para leer sin conexión
Bizweb Microservices Architecture
KhoiNM@dkt.com.vn
Agenda
• Giới thiệu về Bizweb
• Mô hình kiến trúc cũ & các vấn đề gặp phải
• Mô hình kiến trúc Microservices áp dụng cho Bizweb
• Demo
• Chia sẻ kinh nghiệm áp dụng
2
Sale
channel
Shipping
Sale Tool
Payment
CRM
Marketing
Theme
Store
App
Store
Bizweb
OPEN
platform
Thống kê Bizweb
• Shop trả phí đang hoạt động: +11K
• Shop tăng hàng tháng: +700
• Shop dùng thử hàng tháng: +10K
4
Kiến trúc Bizweb cũ
5
Công nghệ sử dụng
• .NET Framework
• ASP.NET Web Forms
• VB.NET
• SQL Server
• Windows Server / IIS
• Thrift – media server
• Redis – cache, chống DOS đơn
giản
• HA Proxy – load balancer
6
Kiến trúc Monolithic
7
Scale
Vertical Scaling Horizontal Scaling
8
Vấn đề hệ thống
• Công nghệ lạc hậu: phát triển từ năm 2007 trên nền tảng VB.NET
• Hệ thống chạy thiếu ổn định
• Sử dụng View engine của Web Forms:
• Stateful: website chứa file giao diện (60K thư mục template)
• Tốn nhiều thời gian biên dịch & khởi động lại IIS
• Khó scale được hệ thống do không đồng bộ được thư mục template
Vấn đề phát triển
• Có quá nhiều tính năng (48 module)
• Tốc độ phát triển chậm
• Khó nắm bắt & sửa code, đặc biệt là với nhân viên mới
• IDE bị quá tải, chạy chậm
• Khó mở rộng & phân chia đội ngũ
• Gắn chặt với 1 nền tảng công nghệ (Microsoft)
10
Kiến trúc Bizweb mới
11
Một số yêu cầu
• Tối giản số tính năng phát triển (23 tính năng)
• Mở API để các nhà phát triển ứng dụng có thể tích hợp
• Service hóa mọi nghiệp vụ, Web/API/Mobile gọi vào qua Service
• Cơ chế giao diện mới
• Dễ phát triển và mở rộng (scale hệ thống, team phát triển)
• Chỉ có 6 tháng phát triển để đưa vào hoạt động
12
Mô hình Microservices
13
Ưu điểm của kiến trúc Microservices
• Phân tách hệ thống ra thành từng service nhỏ, phục vụ 1 mục đích
duy nhất -> dễ hiểu, dễ sửa
• Project/Solution nhỏ -> IDE chạy nhanh
• Mỗi service chạy trên 1 instance riêng -> khởi động nhanh
• Deploy 1 service ko làm chết service khác -> deploy dễ hơn
• Ko phụ thuộc vào 1 nền tảng công nghệ nào cả
• Dễ scale
14
Scale
Functional Scaling
(Microservices)
Team Scaling
(Microservices)
15
Công nghệ sử dụng
• ASP.NET MVC
• C# / Java / NodeJS
• Spring Boot, Spring Cloud, Spring
Security, Spring Security OAuth
• Netflix OSS: Zuul, Hystrix,
Turbine, Eureka, Ribbon, Feign
• IIS/Jetty
• Windows Server / Ubuntu
• dotLiquid
• RabbitMQ
• Redis
• Nginx
• Cloud Service: Amazon EC2, S3,
Route53
• Apache Traffic Server
• Thumbor
16
17
Bizweb Microservices Architecture
Các vấn đề trong kiến trúc Microservices của
Bizweb
• Routing & Service Discovery
• Centralized Configuration
• Authentication & Authorization
• Fault Tolerance
18
Routing & Service Discovery
19
20
/admin/products.json
Request ngoài hệ thống Bizweb
???
Request vào hệ thống
Microservices
• Service chạy trên nhiều máy chủ,
ở nhiều port khác nhau
• Các service có thể bật, tắt, bổ
sung bất cứ lúc nào
• Cân tải giữa các microservices
• Request giữa các microservices
• Nginx (bản free) không giải quyết
được việc định tuyến này
21
Eureka Service Discovery
• Mỗi 1 service được định danh bằng
serviceId (cấu hình trong
spring.application.name)
• Service sử dụng Eureka Client để tương
tác với Eureka Server:
• Register: đăng ký mới (serviceId, host,
port)
• Renew: sử dụng heartbeats định kỳ đăng
ký lại để biết service còn hoạt động
• Get Registry: trả về danh sách host:port
của các service theo serviceId
22
Service Discovery & API Gateway
23
Get Registry
store
10.0.0.1:8080
10.0.0.2:8081
10.0.0.3:8082
Zuul API Gateway
• Địa chỉ truy xuất duy nhất để gọi vào các microservices
• Zuul là edge service -> không dùng để các microservices gọi lẫn nhau
• Zuul sử dụng Ribbon để gọi tới các service
• Client Load Balancer
• Caching
• ZuulFilter: xử lý các request theo cơ chế pipeline
• PRE: xử lý trước khi routing đến service
• ROUTING: thay đổi routing
• POST: xử lý sau khi service trả về kết quả
• ERROR: xử lý khi có lỗi xảy ra
24
25
RateLimitFilter
• Dùng để giới hạn tần suất gọi API
• Sử dụng giải thuật Leaky Bucket (Fill
Rate: 2 request/s, Bucket Size: 200)
• Thông tin trả về cho client qua Http
Header:
X-Bizweb-Api-Call-Limit: 16/200
• 16: số request đã sử dụng
• 200: số request tối đa
• Vượt ngưỡng: trả về mã lỗi 429 - Too
Many Requests
26
Centralized Configuration
27
Centralized Configuration
28
Vấn đề:
- Cấu hình phân tán, khó
kiểm soát
- Các service có 1 số cấu
hình chung, thay đổi là
phải đổi hàng loạt
- Reload config khi đang
chạy
Centralized Configuration
29
Spring Cloud Config
• Thông tin file cấu hình được lưu trong git hoặc file vật lý
• Tên file: {serviceId}.yml
• Nhiều môi trường: dev, test, stage, live...
• Kế thừa từ application.yml: mọi service đều lấy cấu hình
chung
• File bootstrap.yml: cấu hình serviceId, config server, môi
trường
• Reload Config: HTTP GET [service-host:port]/refresh
• Spring Cloud Bus 1.1 – đang phát triển, auto reload
30
Authentication & Authorization
31
Đối tượng yêu cầu truy cập
• 1st Party: Frontend, Backend, kho Theme, kho App, quản trị hệ
thống...: toàn quyền truy xuất mọi website
• 3rd Party: ứng dụng của các nhà phát triển cung cấp thêm tính năng
cho chủ website: chủ website cấp quyền truy xuất từng tài nguyên
• Private App: chủ website tự phát triển hoặc thuê làm: quyền truy
xuất mọi tài nguyên của website đó
• Mobile app: đăng nhập để lấy token truy xuất
→Cần 1 phương thức xác thực & kiểm tra quyền linh hoạt -> OAuth2 +
Spring Security
32
33
Ghi chú:
• 3rd Apps: xác thực OAuth qua
Access Token
• Private App: Basic Authentication
• Store Front: Client Credential
• Store Backend: Client Credential,
Session Credential (Share session
giữa Backend và OAuth Server)
Fault Tolerance
34
35
Fallback
Fault Tolerance
• Điều gì xảy ra khi Order Service chết?
• Chết hàng loạt các service liên quan
• Thời gian xử lý request lâu do phải chờ
timeout 30s
• Chiếm tài nguyên
• => cần giảm thời gian chết bằng cách
báo lỗi luôn (fail fast) , ko đưa vào
queue xử lý
• Bizweb sử dụng Hystrix để xử lý
Circuit Breaker Pattern
• Giống cầu dao điện:
• Closed: đóng – hoạt động
• Open: ngắt – không hoạt động
• Failure: exception hoặc timeout
• Threshold = failure / (success + failure) *
100%
• Threshold = 50%, volumn = 20, retry = 5s
-> trong 20 request gần nhất, 10 request lỗi
là ngắt, sau mỗi 5s cho 1 request qua để
kiểm tra, thành công thì đóng mạch, thất
bại thì tiếp tục mở
36
Hystrix Dashboard & Turbine
• Hystrix dashboard:
• Xem biểu đồ thời gian thực các API được gọi, độ trễ 2s
• Xem cho từng service instance
• Turbine: tổng hợp các service instance cùng serviceId lại để dễ theo
dõi
• Dữ liệu từ mỗi instance gửi về Turbine theo 2 cách:
• Gửi trực tiếp
• Gửi qua message queue (RabbitMQ)
37
Demo
Eureka, Hystrix Dashboard, RateLimitFilter, & Circuit Breaker
38
Bizweb mới đi được hơn 1/3 chặng đường
1. Mô hình ban đầu chạy được
• Hệ thống chạy ổn định theo hướng kiến trúc Microservices
2. Áp dụng CI/CD & Monitoring
• Tự động hóa quy trình test & deploy hệ thống
• Centralized logging, debug + performance tools, email/SMS/app alert
3. Phân tách service & Scale hệ thống
• Chia nhỏ Microservices
• Virtualization & Auto Scaling
39
Chia sẻ kinh nghiệm
40
41
Tiền điều kiện:
• Kỹ năng lập trình tốt
• Công cụ giám sát dịch vụ
• Áp dụng CI/CD
• Văn hóa DevOps
Nếu team bạn không đủ điều
kiện, bạn có dám làm?
42
Khó khăn gặp phải của team Bizweb
• Mô hình mới hoàn toàn, tài liệu/code mẫu ít
• Thư viện Spring Cloud Netflix vẫn đang phát triển
• Không có chuyên gia để hỏi
• Dịch chuyển closed source -> open source, từ Windows -> Linux
• Code đồng thời C#, Java (coding convention, tăng thời gian phát triển)
• Test phức tạp hơn
• Áp lực lớn, lụt deadline
• Nhân sự: thiếu người nghiên cứu & phát triển, thiếu vị trí DevOps
43
Thuận lợi
• Có mô hình chuẩn để học theo (Netflix, Shopify)
• Nghiệp vụ hệ thống không quá phức tạp
• Bounded Context không phải là vấn đề cần phải xử lý ngay từ đầu
44
Thiết kế hướng Microservices trước
• Nghiên cứu chuẩn viết API
• Không sử dụng phiên bản
API
• Định dạng URI snake_case
• Đặt tên hàm, biến
• Method: GET, POST, PUT,
DELETE
• Lựa chọn ngôn ngữ phù
hợp thay vì ngôn ngữ thời
thượng
• Tìm hiểu trước về Bounded
Context
45
Chưa cần áp dụng mô hình triệt để
• Phân tách ra 2-3 Service
• Gọi trực tiếp vào từng
service
• Hạn chế tối đa gọi chéo
giữa các service
• Chưa cần Service
Discovery, API Gateway,
Fault Tolerant, Message
Queue...
46
Hạn chế thêm nhiều công nghệ/công cụ mới
đồng thời
47
Cách tiếp cận của Bizweb
• Thiết kế hướng Microservices trước
• Chưa cần áp dụng ngay mô hình chuẩn
• Hạn chế thêm nhiều công nghệ/công cụ mới đồng thời
• Cải tiến & làm mịn dần
• Liên tục tự nâng cao kỹ năng của nhóm
48
Tham khảo
• http://netflix.github.io/
• http://spring.io/
• http://microservices.io/
• http://martinfowler.com/bliki/MicroservicePrerequisites.html
• http://martinfowler.com/articles/microservices.html
• http://12factor.net/
49
Liên hệ
• Nguyễn Minh Khôi – DKT Technology
• Email: khoinm@dkt.com.vn
• Facebook: https://fb.com/khoinguyen84
50
Giao lưu!
51

Más contenido relacionado

La actualidad más candente

Introduction to microservices
Introduction to microservicesIntroduction to microservices
Introduction to microservicesAnil Allewar
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESSOAT
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design IntroductionTung Nguyen Thanh
 
Tìm hiểu về OpenStack
Tìm hiểu về OpenStackTìm hiểu về OpenStack
Tìm hiểu về OpenStacklanhuonga3
 
Design Pattern - Những công thức vàng trong thiết kế
Design Pattern - Những công thức vàng trong thiết kếDesign Pattern - Những công thức vàng trong thiết kế
Design Pattern - Những công thức vàng trong thiết kếNhật Nguyễn Khắc
 
Bảo mật nội bộ và an toàn ip
Bảo mật nội bộ và an toàn ipBảo mật nội bộ và an toàn ip
Bảo mật nội bộ và an toàn ipNgcHng148
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitecturePaul Mooney
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architectureFaren faren
 
Event-driven microservices
Event-driven microservicesEvent-driven microservices
Event-driven microservicesAndrew Schofield
 
Gioi thieu-chung-ao-hoa
Gioi thieu-chung-ao-hoaGioi thieu-chung-ao-hoa
Gioi thieu-chung-ao-hoaanhhaibi
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음nexusz99
 
Bài 7: Thiết kế cơ sở dữ liệu vật lý
Bài 7: Thiết kế cơ sở dữ liệu vật lýBài 7: Thiết kế cơ sở dữ liệu vật lý
Bài 7: Thiết kế cơ sở dữ liệu vật lýMasterCode.vn
 
Đồ án thực tập cơ sở các kĩ thuật tấn công SQL injection và cách phòng chống
Đồ án thực tập cơ sở các kĩ thuật tấn công SQL injection và cách phòng chốngĐồ án thực tập cơ sở các kĩ thuật tấn công SQL injection và cách phòng chống
Đồ án thực tập cơ sở các kĩ thuật tấn công SQL injection và cách phòng chốngnataliej4
 
CQRS + Event Sourcing
CQRS + Event SourcingCQRS + Event Sourcing
CQRS + Event SourcingMike Bild
 
Ôn thi mạng máy tính
Ôn thi mạng máy tínhÔn thi mạng máy tính
Ôn thi mạng máy tínhKinhDinhBach
 

La actualidad más candente (20)

Introduction to microservices
Introduction to microservicesIntroduction to microservices
Introduction to microservices
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introduction
 
Tìm hiểu về OpenStack
Tìm hiểu về OpenStackTìm hiểu về OpenStack
Tìm hiểu về OpenStack
 
Design Pattern - Những công thức vàng trong thiết kế
Design Pattern - Những công thức vàng trong thiết kếDesign Pattern - Những công thức vàng trong thiết kế
Design Pattern - Những công thức vàng trong thiết kế
 
Bảo mật nội bộ và an toàn ip
Bảo mật nội bộ và an toàn ipBảo mật nội bộ và an toàn ip
Bảo mật nội bộ và an toàn ip
 
Microservice vs. Monolithic Architecture
Microservice vs. Monolithic ArchitectureMicroservice vs. Monolithic Architecture
Microservice vs. Monolithic Architecture
 
Microservices architecture
Microservices architectureMicroservices architecture
Microservices architecture
 
02 api gateway
02 api gateway02 api gateway
02 api gateway
 
SQL Injection
SQL InjectionSQL Injection
SQL Injection
 
Event-driven microservices
Event-driven microservicesEvent-driven microservices
Event-driven microservices
 
Gioi thieu-chung-ao-hoa
Gioi thieu-chung-ao-hoaGioi thieu-chung-ao-hoa
Gioi thieu-chung-ao-hoa
 
Dsd03 sta
Dsd03 staDsd03 sta
Dsd03 sta
 
서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음서버 개발자가 되기 위한 첫 걸음
서버 개발자가 되기 위한 첫 걸음
 
Bài 7: Thiết kế cơ sở dữ liệu vật lý
Bài 7: Thiết kế cơ sở dữ liệu vật lýBài 7: Thiết kế cơ sở dữ liệu vật lý
Bài 7: Thiết kế cơ sở dữ liệu vật lý
 
Đồ án thực tập cơ sở các kĩ thuật tấn công SQL injection và cách phòng chống
Đồ án thực tập cơ sở các kĩ thuật tấn công SQL injection và cách phòng chốngĐồ án thực tập cơ sở các kĩ thuật tấn công SQL injection và cách phòng chống
Đồ án thực tập cơ sở các kĩ thuật tấn công SQL injection và cách phòng chống
 
CQRS + Event Sourcing
CQRS + Event SourcingCQRS + Event Sourcing
CQRS + Event Sourcing
 
Ôn thi mạng máy tính
Ôn thi mạng máy tínhÔn thi mạng máy tính
Ôn thi mạng máy tính
 
Springboot Microservices
Springboot MicroservicesSpringboot Microservices
Springboot Microservices
 
Gitlab CI/CD
Gitlab CI/CDGitlab CI/CD
Gitlab CI/CD
 

Destacado

Distributed Transaction in Microservice
Distributed Transaction in MicroserviceDistributed Transaction in Microservice
Distributed Transaction in MicroserviceNghia Minh
 
ITEC - Qua trinh phat trien he thong BigData
ITEC - Qua trinh phat trien he thong BigDataITEC - Qua trinh phat trien he thong BigData
ITEC - Qua trinh phat trien he thong BigDataIT Expert Club
 
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
 
Đánh giá một website TMĐT theo nguyên tắc 7C (Tiki.vn)
Đánh giá một website TMĐT theo nguyên tắc 7C (Tiki.vn)Đánh giá một website TMĐT theo nguyên tắc 7C (Tiki.vn)
Đánh giá một website TMĐT theo nguyên tắc 7C (Tiki.vn)Louise Phạm
 
ITLCHN 18 - Automation & DevOps - Automic
ITLCHN 18 -  Automation & DevOps - AutomicITLCHN 18 -  Automation & DevOps - Automic
ITLCHN 18 - Automation & DevOps - AutomicIT Expert Club
 
itlchn 20 - Kien truc he thong chung khoan - Phan 2
itlchn 20 - Kien truc he thong chung khoan - Phan 2itlchn 20 - Kien truc he thong chung khoan - Phan 2
itlchn 20 - Kien truc he thong chung khoan - Phan 2IT Expert Club
 
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
 
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015IT Expert Club
 
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
 
Towards the Cloud: Architecture Patterns and VDI Story
Towards the Cloud: Architecture Patterns and VDI StoryTowards the Cloud: Architecture Patterns and VDI Story
Towards the Cloud: Architecture Patterns and VDI StoryIT Expert Club
 
Microservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudMicroservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudEberhard Wolff
 
API Management architect presentation
API Management architect presentationAPI Management architect presentation
API Management architect presentationsflynn073
 
Breaking the eggshell: From .NET to Node.js
Breaking the eggshell: From .NET to Node.jsBreaking the eggshell: From .NET to Node.js
Breaking the eggshell: From .NET to Node.jsBarbara Fusinska
 
Meet song nhi your virtual financial assistance
Meet song nhi   your virtual financial assistanceMeet song nhi   your virtual financial assistance
Meet song nhi your virtual financial assistanceDesignveloper
 
Essay amazon ec2 api
Essay amazon ec2 apiEssay amazon ec2 api
Essay amazon ec2 apiDuong Nguyen
 
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
 

Destacado (20)

Bizweb Microservices Architecture
Bizweb Microservices ArchitectureBizweb Microservices Architecture
Bizweb Microservices Architecture
 
Distributed Transaction in Microservice
Distributed Transaction in MicroserviceDistributed Transaction in Microservice
Distributed Transaction in Microservice
 
ITEC - Qua trinh phat trien he thong BigData
ITEC - Qua trinh phat trien he thong BigDataITEC - Qua trinh phat trien he thong BigData
ITEC - Qua trinh phat trien he thong BigData
 
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
 
Đánh giá một website TMĐT theo nguyên tắc 7C (Tiki.vn)
Đánh giá một website TMĐT theo nguyên tắc 7C (Tiki.vn)Đánh giá một website TMĐT theo nguyên tắc 7C (Tiki.vn)
Đánh giá một website TMĐT theo nguyên tắc 7C (Tiki.vn)
 
ITLCHN 18 - Automation & DevOps - Automic
ITLCHN 18 -  Automation & DevOps - AutomicITLCHN 18 -  Automation & DevOps - Automic
ITLCHN 18 - Automation & DevOps - Automic
 
itlchn 20 - Kien truc he thong chung khoan - Phan 2
itlchn 20 - Kien truc he thong chung khoan - Phan 2itlchn 20 - Kien truc he thong chung khoan - Phan 2
itlchn 20 - Kien truc he thong chung khoan - Phan 2
 
Migrating to aws
Migrating to awsMigrating to aws
Migrating to aws
 
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
 
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
ITLC - Hanoi - NodeJS - ArrowJS - 27-11 - 2015
 
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
 
Towards the Cloud: Architecture Patterns and VDI Story
Towards the Cloud: Architecture Patterns and VDI StoryTowards the Cloud: Architecture Patterns and VDI Story
Towards the Cloud: Architecture Patterns and VDI Story
 
Microservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring CloudMicroservice With Spring Boot and Spring Cloud
Microservice With Spring Boot and Spring Cloud
 
API Management architect presentation
API Management architect presentationAPI Management architect presentation
API Management architect presentation
 
Breaking the eggshell: From .NET to Node.js
Breaking the eggshell: From .NET to Node.jsBreaking the eggshell: From .NET to Node.js
Breaking the eggshell: From .NET to Node.js
 
Meet song nhi your virtual financial assistance
Meet song nhi   your virtual financial assistanceMeet song nhi   your virtual financial assistance
Meet song nhi your virtual financial assistance
 
Essay amazon ec2 api
Essay amazon ec2 apiEssay amazon ec2 api
Essay amazon ec2 api
 
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
 

Similar a ITLC HN 14 - Bizweb Microservices Architecture

Kinh nghiệm triển khai Microservices tại Sapo.vn
Kinh nghiệm triển khai Microservices tại Sapo.vnKinh nghiệm triển khai Microservices tại Sapo.vn
Kinh nghiệm triển khai Microservices tại Sapo.vnDotnet Open Group
 
Chuong 1 tong quan về lập trình web động
Chuong 1 tong quan về lập trình web độngChuong 1 tong quan về lập trình web động
Chuong 1 tong quan về lập trình web độngTHPT Ngô Quyền
 
Giới thiệu ASP.NET Core 2.0
Giới thiệu ASP.NET Core 2.0Giới thiệu ASP.NET Core 2.0
Giới thiệu ASP.NET Core 2.0Huân Bùi Đình
 
Slide 01-Web Application Overview (1).pdf
Slide 01-Web Application Overview (1).pdfSlide 01-Web Application Overview (1).pdf
Slide 01-Web Application Overview (1).pdfHuyVnh4
 
giới thiệu về Asp.net core 2.0
giới thiệu về Asp.net core  2.0giới thiệu về Asp.net core  2.0
giới thiệu về Asp.net core 2.0VanSy9x
 
đồ áN thiết kế web tuyển dụng sử dụng asp.net
đồ áN thiết kế web tuyển dụng sử dụng asp.netđồ áN thiết kế web tuyển dụng sử dụng asp.net
đồ áN thiết kế web tuyển dụng sử dụng asp.netnataliej4
 
Xây dựng extension portal cho nimbus
Xây dựng extension portal cho nimbusXây dựng extension portal cho nimbus
Xây dựng extension portal cho nimbusVu Hung Nguyen
 
Giới thiệu và triển khai private cloud
Giới thiệu và triển khai private cloudGiới thiệu và triển khai private cloud
Giới thiệu và triển khai private cloudTue Nguyen Dinh
 
VoIP with Opensips
VoIP with OpensipsVoIP with Opensips
VoIP with OpensipsTrần Thanh
 
GIỚI THIỆU CÁC DẠNG MÁY CHỦ SERVER
GIỚI THIỆU CÁC DẠNG MÁY CHỦ SERVERGIỚI THIỆU CÁC DẠNG MÁY CHỦ SERVER
GIỚI THIỆU CÁC DẠNG MÁY CHỦ SERVERPMC WEB
 
Bai3 basic servlets_956
Bai3 basic servlets_956Bai3 basic servlets_956
Bai3 basic servlets_956Ham Chơi
 
Lập trình web với các công nghệ phổ biến
Lập trình web với các công nghệ phổ biếnLập trình web với các công nghệ phổ biến
Lập trình web với các công nghệ phổ biếnSon Nguyen
 
Pham Anh Tu - TK Framework
Pham Anh Tu - TK FrameworkPham Anh Tu - TK Framework
Pham Anh Tu - TK FrameworkVu Hung Nguyen
 
Bao cao do an ltm hoan chinh
Bao cao do an ltm hoan chinhBao cao do an ltm hoan chinh
Bao cao do an ltm hoan chinhNgok Ánk
 
Itlc2015
Itlc2015Itlc2015
Itlc2015Huy Do
 
1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn
1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn
1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vnAiTi Education
 
Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012
Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012
Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012Eddie Bui
 

Similar a ITLC HN 14 - Bizweb Microservices Architecture (20)

Kinh nghiệm triển khai Microservices tại Sapo.vn
Kinh nghiệm triển khai Microservices tại Sapo.vnKinh nghiệm triển khai Microservices tại Sapo.vn
Kinh nghiệm triển khai Microservices tại Sapo.vn
 
Chuong 1 tong quan về lập trình web động
Chuong 1 tong quan về lập trình web độngChuong 1 tong quan về lập trình web động
Chuong 1 tong quan về lập trình web động
 
Arrowjs.io
Arrowjs.ioArrowjs.io
Arrowjs.io
 
Giới thiệu ASP.NET Core 2.0
Giới thiệu ASP.NET Core 2.0Giới thiệu ASP.NET Core 2.0
Giới thiệu ASP.NET Core 2.0
 
Slide 01-Web Application Overview (1).pdf
Slide 01-Web Application Overview (1).pdfSlide 01-Web Application Overview (1).pdf
Slide 01-Web Application Overview (1).pdf
 
giới thiệu về Asp.net core 2.0
giới thiệu về Asp.net core  2.0giới thiệu về Asp.net core  2.0
giới thiệu về Asp.net core 2.0
 
đồ áN thiết kế web tuyển dụng sử dụng asp.net
đồ áN thiết kế web tuyển dụng sử dụng asp.netđồ áN thiết kế web tuyển dụng sử dụng asp.net
đồ áN thiết kế web tuyển dụng sử dụng asp.net
 
Code Camp #1
Code Camp #1Code Camp #1
Code Camp #1
 
Xây dựng extension portal cho nimbus
Xây dựng extension portal cho nimbusXây dựng extension portal cho nimbus
Xây dựng extension portal cho nimbus
 
Giới thiệu và triển khai private cloud
Giới thiệu và triển khai private cloudGiới thiệu và triển khai private cloud
Giới thiệu và triển khai private cloud
 
VoIP with Opensips
VoIP with OpensipsVoIP with Opensips
VoIP with Opensips
 
GIỚI THIỆU CÁC DẠNG MÁY CHỦ SERVER
GIỚI THIỆU CÁC DẠNG MÁY CHỦ SERVERGIỚI THIỆU CÁC DẠNG MÁY CHỦ SERVER
GIỚI THIỆU CÁC DẠNG MÁY CHỦ SERVER
 
Bai3 basic servlets_956
Bai3 basic servlets_956Bai3 basic servlets_956
Bai3 basic servlets_956
 
Bảo mật ứng dụng web
Bảo mật ứng dụng webBảo mật ứng dụng web
Bảo mật ứng dụng web
 
Lập trình web với các công nghệ phổ biến
Lập trình web với các công nghệ phổ biếnLập trình web với các công nghệ phổ biến
Lập trình web với các công nghệ phổ biến
 
Pham Anh Tu - TK Framework
Pham Anh Tu - TK FrameworkPham Anh Tu - TK Framework
Pham Anh Tu - TK Framework
 
Bao cao do an ltm hoan chinh
Bao cao do an ltm hoan chinhBao cao do an ltm hoan chinh
Bao cao do an ltm hoan chinh
 
Itlc2015
Itlc2015Itlc2015
Itlc2015
 
1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn
1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn
1 số ứng dụng của Redis, NoSQL tại MXH Tamtay.vn
 
Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012
Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012
Một số ứng dụng của Redis, NoSQL tại Tamtay - PHPDay 2012
 

ITLC HN 14 - Bizweb Microservices Architecture

  • 2. Agenda • Giới thiệu về Bizweb • Mô hình kiến trúc cũ & các vấn đề gặp phải • Mô hình kiến trúc Microservices áp dụng cho Bizweb • Demo • Chia sẻ kinh nghiệm áp dụng 2
  • 4. Thống kê Bizweb • Shop trả phí đang hoạt động: +11K • Shop tăng hàng tháng: +700 • Shop dùng thử hàng tháng: +10K 4
  • 6. Công nghệ sử dụng • .NET Framework • ASP.NET Web Forms • VB.NET • SQL Server • Windows Server / IIS • Thrift – media server • Redis – cache, chống DOS đơn giản • HA Proxy – load balancer 6
  • 9. Vấn đề hệ thống • Công nghệ lạc hậu: phát triển từ năm 2007 trên nền tảng VB.NET • Hệ thống chạy thiếu ổn định • Sử dụng View engine của Web Forms: • Stateful: website chứa file giao diện (60K thư mục template) • Tốn nhiều thời gian biên dịch & khởi động lại IIS • Khó scale được hệ thống do không đồng bộ được thư mục template
  • 10. Vấn đề phát triển • Có quá nhiều tính năng (48 module) • Tốc độ phát triển chậm • Khó nắm bắt & sửa code, đặc biệt là với nhân viên mới • IDE bị quá tải, chạy chậm • Khó mở rộng & phân chia đội ngũ • Gắn chặt với 1 nền tảng công nghệ (Microsoft) 10
  • 12. Một số yêu cầu • Tối giản số tính năng phát triển (23 tính năng) • Mở API để các nhà phát triển ứng dụng có thể tích hợp • Service hóa mọi nghiệp vụ, Web/API/Mobile gọi vào qua Service • Cơ chế giao diện mới • Dễ phát triển và mở rộng (scale hệ thống, team phát triển) • Chỉ có 6 tháng phát triển để đưa vào hoạt động 12
  • 14. Ưu điểm của kiến trúc Microservices • Phân tách hệ thống ra thành từng service nhỏ, phục vụ 1 mục đích duy nhất -> dễ hiểu, dễ sửa • Project/Solution nhỏ -> IDE chạy nhanh • Mỗi service chạy trên 1 instance riêng -> khởi động nhanh • Deploy 1 service ko làm chết service khác -> deploy dễ hơn • Ko phụ thuộc vào 1 nền tảng công nghệ nào cả • Dễ scale 14
  • 16. Công nghệ sử dụng • ASP.NET MVC • C# / Java / NodeJS • Spring Boot, Spring Cloud, Spring Security, Spring Security OAuth • Netflix OSS: Zuul, Hystrix, Turbine, Eureka, Ribbon, Feign • IIS/Jetty • Windows Server / Ubuntu • dotLiquid • RabbitMQ • Redis • Nginx • Cloud Service: Amazon EC2, S3, Route53 • Apache Traffic Server • Thumbor 16
  • 18. Các vấn đề trong kiến trúc Microservices của Bizweb • Routing & Service Discovery • Centralized Configuration • Authentication & Authorization • Fault Tolerance 18
  • 19. Routing & Service Discovery 19
  • 21. Request vào hệ thống Microservices • Service chạy trên nhiều máy chủ, ở nhiều port khác nhau • Các service có thể bật, tắt, bổ sung bất cứ lúc nào • Cân tải giữa các microservices • Request giữa các microservices • Nginx (bản free) không giải quyết được việc định tuyến này 21
  • 22. Eureka Service Discovery • Mỗi 1 service được định danh bằng serviceId (cấu hình trong spring.application.name) • Service sử dụng Eureka Client để tương tác với Eureka Server: • Register: đăng ký mới (serviceId, host, port) • Renew: sử dụng heartbeats định kỳ đăng ký lại để biết service còn hoạt động • Get Registry: trả về danh sách host:port của các service theo serviceId 22
  • 23. Service Discovery & API Gateway 23 Get Registry store 10.0.0.1:8080 10.0.0.2:8081 10.0.0.3:8082
  • 24. Zuul API Gateway • Địa chỉ truy xuất duy nhất để gọi vào các microservices • Zuul là edge service -> không dùng để các microservices gọi lẫn nhau • Zuul sử dụng Ribbon để gọi tới các service • Client Load Balancer • Caching • ZuulFilter: xử lý các request theo cơ chế pipeline • PRE: xử lý trước khi routing đến service • ROUTING: thay đổi routing • POST: xử lý sau khi service trả về kết quả • ERROR: xử lý khi có lỗi xảy ra 24
  • 25. 25
  • 26. RateLimitFilter • Dùng để giới hạn tần suất gọi API • Sử dụng giải thuật Leaky Bucket (Fill Rate: 2 request/s, Bucket Size: 200) • Thông tin trả về cho client qua Http Header: X-Bizweb-Api-Call-Limit: 16/200 • 16: số request đã sử dụng • 200: số request tối đa • Vượt ngưỡng: trả về mã lỗi 429 - Too Many Requests 26
  • 28. Centralized Configuration 28 Vấn đề: - Cấu hình phân tán, khó kiểm soát - Các service có 1 số cấu hình chung, thay đổi là phải đổi hàng loạt - Reload config khi đang chạy
  • 30. Spring Cloud Config • Thông tin file cấu hình được lưu trong git hoặc file vật lý • Tên file: {serviceId}.yml • Nhiều môi trường: dev, test, stage, live... • Kế thừa từ application.yml: mọi service đều lấy cấu hình chung • File bootstrap.yml: cấu hình serviceId, config server, môi trường • Reload Config: HTTP GET [service-host:port]/refresh • Spring Cloud Bus 1.1 – đang phát triển, auto reload 30
  • 32. Đối tượng yêu cầu truy cập • 1st Party: Frontend, Backend, kho Theme, kho App, quản trị hệ thống...: toàn quyền truy xuất mọi website • 3rd Party: ứng dụng của các nhà phát triển cung cấp thêm tính năng cho chủ website: chủ website cấp quyền truy xuất từng tài nguyên • Private App: chủ website tự phát triển hoặc thuê làm: quyền truy xuất mọi tài nguyên của website đó • Mobile app: đăng nhập để lấy token truy xuất →Cần 1 phương thức xác thực & kiểm tra quyền linh hoạt -> OAuth2 + Spring Security 32
  • 33. 33 Ghi chú: • 3rd Apps: xác thực OAuth qua Access Token • Private App: Basic Authentication • Store Front: Client Credential • Store Backend: Client Credential, Session Credential (Share session giữa Backend và OAuth Server)
  • 35. 35 Fallback Fault Tolerance • Điều gì xảy ra khi Order Service chết? • Chết hàng loạt các service liên quan • Thời gian xử lý request lâu do phải chờ timeout 30s • Chiếm tài nguyên • => cần giảm thời gian chết bằng cách báo lỗi luôn (fail fast) , ko đưa vào queue xử lý • Bizweb sử dụng Hystrix để xử lý
  • 36. Circuit Breaker Pattern • Giống cầu dao điện: • Closed: đóng – hoạt động • Open: ngắt – không hoạt động • Failure: exception hoặc timeout • Threshold = failure / (success + failure) * 100% • Threshold = 50%, volumn = 20, retry = 5s -> trong 20 request gần nhất, 10 request lỗi là ngắt, sau mỗi 5s cho 1 request qua để kiểm tra, thành công thì đóng mạch, thất bại thì tiếp tục mở 36
  • 37. Hystrix Dashboard & Turbine • Hystrix dashboard: • Xem biểu đồ thời gian thực các API được gọi, độ trễ 2s • Xem cho từng service instance • Turbine: tổng hợp các service instance cùng serviceId lại để dễ theo dõi • Dữ liệu từ mỗi instance gửi về Turbine theo 2 cách: • Gửi trực tiếp • Gửi qua message queue (RabbitMQ) 37
  • 38. Demo Eureka, Hystrix Dashboard, RateLimitFilter, & Circuit Breaker 38
  • 39. Bizweb mới đi được hơn 1/3 chặng đường 1. Mô hình ban đầu chạy được • Hệ thống chạy ổn định theo hướng kiến trúc Microservices 2. Áp dụng CI/CD & Monitoring • Tự động hóa quy trình test & deploy hệ thống • Centralized logging, debug + performance tools, email/SMS/app alert 3. Phân tách service & Scale hệ thống • Chia nhỏ Microservices • Virtualization & Auto Scaling 39
  • 40. Chia sẻ kinh nghiệm 40
  • 41. 41 Tiền điều kiện: • Kỹ năng lập trình tốt • Công cụ giám sát dịch vụ • Áp dụng CI/CD • Văn hóa DevOps
  • 42. Nếu team bạn không đủ điều kiện, bạn có dám làm? 42
  • 43. Khó khăn gặp phải của team Bizweb • Mô hình mới hoàn toàn, tài liệu/code mẫu ít • Thư viện Spring Cloud Netflix vẫn đang phát triển • Không có chuyên gia để hỏi • Dịch chuyển closed source -> open source, từ Windows -> Linux • Code đồng thời C#, Java (coding convention, tăng thời gian phát triển) • Test phức tạp hơn • Áp lực lớn, lụt deadline • Nhân sự: thiếu người nghiên cứu & phát triển, thiếu vị trí DevOps 43
  • 44. Thuận lợi • Có mô hình chuẩn để học theo (Netflix, Shopify) • Nghiệp vụ hệ thống không quá phức tạp • Bounded Context không phải là vấn đề cần phải xử lý ngay từ đầu 44
  • 45. Thiết kế hướng Microservices trước • Nghiên cứu chuẩn viết API • Không sử dụng phiên bản API • Định dạng URI snake_case • Đặt tên hàm, biến • Method: GET, POST, PUT, DELETE • Lựa chọn ngôn ngữ phù hợp thay vì ngôn ngữ thời thượng • Tìm hiểu trước về Bounded Context 45
  • 46. Chưa cần áp dụng mô hình triệt để • Phân tách ra 2-3 Service • Gọi trực tiếp vào từng service • Hạn chế tối đa gọi chéo giữa các service • Chưa cần Service Discovery, API Gateway, Fault Tolerant, Message Queue... 46
  • 47. Hạn chế thêm nhiều công nghệ/công cụ mới đồng thời 47
  • 48. Cách tiếp cận của Bizweb • Thiết kế hướng Microservices trước • Chưa cần áp dụng ngay mô hình chuẩn • Hạn chế thêm nhiều công nghệ/công cụ mới đồng thời • Cải tiến & làm mịn dần • Liên tục tự nâng cao kỹ năng của nhóm 48
  • 49. Tham khảo • http://netflix.github.io/ • http://spring.io/ • http://microservices.io/ • http://martinfowler.com/bliki/MicroservicePrerequisites.html • http://martinfowler.com/articles/microservices.html • http://12factor.net/ 49
  • 50. Liên hệ • Nguyễn Minh Khôi – DKT Technology • Email: khoinm@dkt.com.vn • Facebook: https://fb.com/khoinguyen84 50

Notas del editor

  1. Bizweb được phát triển từ năm 2006 dựa trên nền tảng công nghệ ASP.NET + Web Forms là mô hình khá phát triển vào thời gian đó.
  2. Hệ thống chạy thiếu ổn định: Lựa chọn deploy vào 5h sáng, mất 2 tiếng để hệ thống hoạt động bình thường Khi cần phải khởi động lại IIS vào ban ngày -> hệ thống thiếu ổn định mất 4-5 tiếng Deploy 1 hệ thống lớn khó, 1 thay đổi nhỏ cũng phải build lại toàn bộ hệ thống, test & deploy lại toàn bộ
  3. Được sử dụng rộng rãi bởi các hãng công nghệ lớn: Amazon, Ebay, Netflix Kiến trúc Microservices giải quyết được các vấn đề gặp phải của kiến trúc Monolithic: Phân tách code ra thành từng service nhỏ, mỗi service phục vụ 1 mục đích duy nhất -> code nhỏ, dễ hiểu, dễ sửa Tách nhỏ nên ko làm solution lớn -> IDE chạy nhanh Tách nhỏ mỗi service chạy trên 1 container riêng -> khởi động nhanh Deploy dễ hơn, deploy 1 service ko làm chết service khác Scale application dễ dàng hơn: sevice nào dùng nhiều thì scale nhiều instance Dễ chia team (nguyên tắc 2 chiếc bánh Pizza) Ko phụ thuộc vào 1 nền tảng công nghệ nào cả, nếu cần có thể viết lại hoàn toàn 1 service dùng nền tảng công nghệ mới, DB mới mà ko ảnh hưởng đến các phần khác. Miễn đảm bảo interface không đổi là được.
  4. Mô hình microservices tổng quan của Bizweb
  5. Câu hỏi số 3: các microservice có gọi trực tiếp nhau không?
  6. Câu hỏi số 3: Phân biệt Authentication vs Authorization Phân biệt Scope với Role
  7. Hỏi về CI/CD Hỏi về Container
  8. Ko phân tách ngay còn tránh được rủi ro khi xác định Bounded Context: yêu cầu thay đổi nhiều, kinh nghiệm phân tách chưa có dễ phân tách nhầm -> sẽ phải sửa rất nhiều.
  9. Đủ thời gian cho team nghiên cứu, áp dụng, control hệ thống