51
Bizweb Microservices Architecture [email protected]

Bizweb Microservices Architecture

Embed Size (px)

Citation preview

Page 1: Bizweb Microservices Architecture

Bizweb Microservices [email protected]

Page 2: Bizweb Microservices Architecture

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

Page 3: Bizweb Microservices Architecture

Sale channel

Shipping

Sale Tool

Payment

CRM

Marketing

Theme Store

App Store

BizwebOPEN

platform

Page 4: Bizweb Microservices Architecture

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

Page 5: Bizweb Microservices Architecture

Kiến trúc Bizweb cũ

5

Page 6: Bizweb Microservices Architecture

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

Page 7: Bizweb Microservices Architecture

Kiến trúc Monolithic

7

Page 8: Bizweb Microservices Architecture

ScaleVertical Scaling Horizontal Scaling

8

Page 9: Bizweb Microservices Architecture

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

Page 10: Bizweb Microservices Architecture

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

Page 11: Bizweb Microservices Architecture

Kiến trúc Bizweb mới

11

Page 12: Bizweb Microservices Architecture

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

Page 13: Bizweb Microservices Architecture

Mô hình Microservices

13

Page 14: Bizweb Microservices Architecture

Ư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

Page 15: Bizweb Microservices Architecture

ScaleFunctional Scaling

(Microservices)

Team Scaling(Microservices)

15

Page 16: Bizweb Microservices Architecture

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

Page 17: Bizweb Microservices Architecture

17

Bizweb Microservices Architecture

Page 18: 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

Page 19: Bizweb Microservices Architecture

Routing & Service Discovery

19

Page 20: Bizweb Microservices Architecture

20

/admin/products.json

Request ngoài hệ thống Bizweb

???

Page 21: Bizweb Microservices Architecture

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

Page 22: Bizweb Microservices Architecture

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

Page 23: Bizweb Microservices Architecture

Service Discovery & API Gateway

23

Get Registrystore

10.0.0.1:808010.0.0.2:808110.0.0.3:8082

Page 24: Bizweb Microservices Architecture

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

Page 25: Bizweb Microservices Architecture

25

Page 26: Bizweb Microservices Architecture

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

Page 27: Bizweb Microservices Architecture

Centralized Configuration

27

Page 28: Bizweb Microservices Architecture

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

Page 29: Bizweb Microservices Architecture

Centralized Configuration

29

Page 30: Bizweb Microservices Architecture

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

Page 31: Bizweb Microservices Architecture

Authentication & Authorization

31

Page 32: Bizweb Microservices Architecture

Đố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

Page 33: Bizweb Microservices Architecture

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)

Page 34: Bizweb Microservices Architecture

Fault Tolerance

34

Page 35: Bizweb Microservices Architecture

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ý

Page 36: Bizweb Microservices Architecture

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

Page 37: Bizweb Microservices Architecture

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

Page 38: Bizweb Microservices Architecture

DemoEureka, Hystrix Dashboard, RateLimitFilter, & Circuit Breaker

38

Page 39: Bizweb Microservices Architecture

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

Page 40: Bizweb Microservices Architecture

Chia sẻ kinh nghiệm

40

Page 41: Bizweb Microservices Architecture

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

Page 42: Bizweb Microservices Architecture

Nếu team bạn không đủ điều kiện, bạn có dám làm?

42

Page 43: Bizweb Microservices Architecture

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

Page 44: Bizweb Microservices Architecture

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

Page 45: Bizweb Microservices Architecture

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

Page 46: Bizweb Microservices Architecture

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

Page 47: Bizweb Microservices Architecture

Hạn chế thêm nhiều công nghệ/công cụ mới đồng thời

47

Page 48: Bizweb Microservices Architecture

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

Page 49: Bizweb Microservices Architecture

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

Page 50: Bizweb Microservices Architecture

Liên hệ• Nguyễn Minh Khôi – DKT Technology

• Email: [email protected]

• Facebook: https://fb.com/khoinguyen84

50

Page 51: Bizweb Microservices Architecture

Giao lưu!

51