Một hệ thống với 75.000 đơn hàng/1 ngày, quản lý tới hàng triệu SKU, giao dịch chạy qua hệ thống lên tới con số nghìn tỉ với tổng cộng trên 8.000 khách hàng đang sử dụng.
Đó chính là: Sapo - Phần mềm quản lý bán hàng trên nền tảng mở, quản lý bán hàng đa kênh, sử dụng kiến trúc Microservices thay thế kiến trúc Monolithic cũ.
Qua buổi chia sẻ kéo dài trong 2h, diễn giả Khôi Nguyễn sẽ giới thiệu về mô hình kiến trúc Microservices và một số bài toán đặc thù của Sapo đã được giải quyết dựa trên mô hình này.
Diễn giả:
Nguyễn Minh Khôi (https://www.facebook.com/khoi.nguyen.84 ) -
CTO DKT Technology ( http://www.dkt.com.vn/ )
ITLC HN 14 - Bizweb Microservices ArchitectureIT Expert Club
Trong 2.5 tiếng diễn giả Nguyễn Minh Khôi sẽ trình bày các vấn đề liên quan đến kiến trúc của Bizweb - giải pháp hosting bán hàng online với trên 10,000 website đang hoạt động:
a. Kiến trúc Bizweb cũ và các khó khăn gặp phải, giải thích lý do xây dựng lại toàn bộ hệ thống từ đầu
b. Giới thiệu kiến trúc Microservices của Bizweb
c. Các vấn đề cần giải quyết trong hệ thống mới
d. Kinh nghiệm thực tế trong việc triển khai Microservices cho Bizweb
Kiến trúc phần mềm cho các site chịu tải lớn – Software architecture for high traffic Website
Case study giới thiệu về kiến trúc của một site traffic lớn đó là stackoverflow.com - trang hỏi đáp về lập trình rất nổi tiếng
Bài trình bày của bạn Ngô Xuân Hòa tại Meetup 4 của Ha Noi .NET Group.
Chi tiết vui lòng xem tại: http://tungnt.net
Một hệ thống với 75.000 đơn hàng/1 ngày, quản lý tới hàng triệu SKU, giao dịch chạy qua hệ thống lên tới con số nghìn tỉ với tổng cộng trên 8.000 khách hàng đang sử dụng.
Đó chính là: Sapo - Phần mềm quản lý bán hàng trên nền tảng mở, quản lý bán hàng đa kênh, sử dụng kiến trúc Microservices thay thế kiến trúc Monolithic cũ.
Qua buổi chia sẻ kéo dài trong 2h, diễn giả Khôi Nguyễn sẽ giới thiệu về mô hình kiến trúc Microservices và một số bài toán đặc thù của Sapo đã được giải quyết dựa trên mô hình này.
Diễn giả:
Nguyễn Minh Khôi (https://www.facebook.com/khoi.nguyen.84 ) -
CTO DKT Technology ( http://www.dkt.com.vn/ )
ITLC HN 14 - Bizweb Microservices ArchitectureIT Expert Club
Trong 2.5 tiếng diễn giả Nguyễn Minh Khôi sẽ trình bày các vấn đề liên quan đến kiến trúc của Bizweb - giải pháp hosting bán hàng online với trên 10,000 website đang hoạt động:
a. Kiến trúc Bizweb cũ và các khó khăn gặp phải, giải thích lý do xây dựng lại toàn bộ hệ thống từ đầu
b. Giới thiệu kiến trúc Microservices của Bizweb
c. Các vấn đề cần giải quyết trong hệ thống mới
d. Kinh nghiệm thực tế trong việc triển khai Microservices cho Bizweb
Kiến trúc phần mềm cho các site chịu tải lớn – Software architecture for high traffic Website
Case study giới thiệu về kiến trúc của một site traffic lớn đó là stackoverflow.com - trang hỏi đáp về lập trình rất nổi tiếng
Bài trình bày của bạn Ngô Xuân Hòa tại Meetup 4 của Ha Noi .NET Group.
Chi tiết vui lòng xem tại: http://tungnt.net
Grokking Techtalk #39: How to build an event driven architecture with Kafka ...Grokking VN
Bài talk chia sẻ về quá trình 2 năm ứng dụng Kafka và Kafka Connect để chuyển đổi mô hình hệ thống của Vexere từ Monolithic thành Microservice, Event Driven:
+ Event driven architecture là gì?
+ Làm thế nào để xây dựng 1 hệ thống event driven architecture một cách hiệu qủa bằng Kafka và Kafka Connect
+ Các use case hữu ích với Kafka & Kafka Connect
+ Kinh nghiệm thực tế và các bài học rút ra
- Về diễn giả: Anh Nguyễn Văn Lợi là một kỹ sư phần mềm với hơn 9 năm kinh nghiệm thực tế từ các công ty có hệ thống lớn trong các mảng VoIP, Ecommerce, Big Data, Logistics. Tại Vexere, anh luôn đề cao tinh thần tự học hỏi, phát triển và chia sẻ để team member liên tục tích lũy kiến thức, kỹ năng, nhằm tăng hiệu quả công việc và mang lại sản phẩm có trải nghiệm tốt nhất cho người dùng.
Grokking TechTalk #33: High Concurrency Architecture at TIKIGrokking VN
- Speaker: Nguyễn Hoàng Bách - Senior Principal Engineer @ TIKI
Trải qua 9 năm xây dựng và phát triển hệ thống, đội ngũ engineer TIKI lần lượt phải giải quyết từng bài toán kỹ thuật khó khăn để hệ thống phát triển theo kịp tốc độ tăng trưởng của business. Đặc thù của hệ thống Ecommerce có một thách thức lớn là phải đảm bảo tính chính xác của dữ liệu nhưng đồng thời vẫn phải đáp ứng lượng truy cập lớn. Do đó High Concurrency Architecture có vai trò quan trọng trong kiến trúc tổng thể của TIKI. Nó cũng là bước tiến lớn của các kỹ sư TIKI trong 6 tháng qua.
Grokking Techtalk #40: Consistency and Availability tradeoff in database clusterGrokking VN
Những năm gần đây, cùng với sự bùng nổ của các startup cùng các loại công nghệ như máy học, lượng dữ liệu phát sinh cần thu thập và xử lý trong các hệ thống ngày càng tăng cao.
Chính vì vậy, đối với các hệ thống lớn thì việc lưu trữ và xử lý dữ liệu trên một node database đã không đáp ứng được nữa, đòi hỏi phải sử dụng nhiều node kết nối với nhau để hình thành database cluster.
Đối với các database cluster nói riêng và hệ thống Distributed System nói chung, có khá nhiều chủ đề thú vị để đào sâu. Trong buổi thảo luận này, chúng ta sẽ giới hạn trong việc khảo sát về cách ba hệ thống Redis, Elastic Search và Cassandra tổ chức cluster cũng như sự trade-off giữa tính nhất quán (consistency) và khả năng đáp ứng (availability) của ba hệ thống này.
- Speaker: Lộc Võ - Lead Software Engineer @ Grab
This presentation introduces every aspects of the Kafka ecosystem:
- Concepts: explain all misleading concepts such as topic vs partition vs replication, producer vs consumer vs consumer group, group leader vs group coordinator, ...
- Advanced concepts: delivery semantic; idempotent producers; isolation levels; differences between the offsets such as High Watermark, Log End Offset, Last Stable Offset ...
- Kafka architecture: explain all Kafka components such as brokers, controllers, zookeeper, ...
- Overview of Kafka security: TLS/SSL, SASL, Kerberos, ...
- Overview of Kafka ecosystem: Kafka Stream, Kafka Connect, Schema Registry, monitoring tools.
- Kafka in Golang: How to use Kafka client in Golang.
- Comparison with other message queues such as RabbitMQ.
Design patterns là một đề tài "khó nuốt" với đa số lập trình viên ở buổi đầu tìm hiểu. Lý do là vì design patterns được xây dựng trên những khái niệm trừu tượng cũng như phải tuân thủ các nguyên tắc lập trình hướng đối tượng.
Đến với TechTalk #32: SOLID & Design Patterns, các bạn sẽ được giới thiệu những nguyên tắc cần phải tuân thủ này và cách thức áp dụng những design patterns quen thuộc vào giải quyết các bài toán một các ngắn gọn, xúc tích và hiệu quả thông qua các ví dụ thực tế.
Speaker: Khôi Nguyễn - Senior Software Engineer @ KMS Technology
Building Cloud-Native App Series - Part 2 of 11
Microservices Architecture Series
Event Sourcing & CQRS,
Kafka, Rabbit MQ
Case Studies (E-Commerce App, Movie Streaming, Ticket Booking, Restaurant, Hospital Management)
Communication between Microservices is inherently unreliable. These integration points may produce cascading failures, slow responses, service outages. We will walk through stability patterns like timeouts, circuit breaker, bulkheads and discuss how they improve stability of Microservices.
Grokking Techtalk #38: Escape Analysis in Go compilerGrokking VN
Trong quá trình phân tích hiệu năng, hiểu và nắm vững ngôn ngữ lập trình cũng như cách thiết kế của nó là rất hữu ích. Go là một trong những ngôn ngữ được sử dụng phổ biến trong các hệ thống phân tán có hiệu năng cao. Để hiểu rõ hơn cách mà Go compiler phân tích cách cấp phát bộ nhớ khi biên dịch chương trình, hãy nghe những chia sẻ của anh Cường về Escape Analysis trong Go compiler.
Về diễn giả:
Anh Lê Mạnh Cường là một kĩ sư phần mềm có 8 năm kinh nghiệm chuyên sâu trong backend và Quản trị hệ thống Linux. Là một OSS contributor tích cực, anh Cường đã có nhiều cống hiến vào cộng đồng mã nguồn mở, đặc biệt là Go và ecosystem của Go.
Grokking Techtalk #39: How to build an event driven architecture with Kafka ...Grokking VN
Bài talk chia sẻ về quá trình 2 năm ứng dụng Kafka và Kafka Connect để chuyển đổi mô hình hệ thống của Vexere từ Monolithic thành Microservice, Event Driven:
+ Event driven architecture là gì?
+ Làm thế nào để xây dựng 1 hệ thống event driven architecture một cách hiệu qủa bằng Kafka và Kafka Connect
+ Các use case hữu ích với Kafka & Kafka Connect
+ Kinh nghiệm thực tế và các bài học rút ra
- Về diễn giả: Anh Nguyễn Văn Lợi là một kỹ sư phần mềm với hơn 9 năm kinh nghiệm thực tế từ các công ty có hệ thống lớn trong các mảng VoIP, Ecommerce, Big Data, Logistics. Tại Vexere, anh luôn đề cao tinh thần tự học hỏi, phát triển và chia sẻ để team member liên tục tích lũy kiến thức, kỹ năng, nhằm tăng hiệu quả công việc và mang lại sản phẩm có trải nghiệm tốt nhất cho người dùng.
Grokking TechTalk #33: High Concurrency Architecture at TIKIGrokking VN
- Speaker: Nguyễn Hoàng Bách - Senior Principal Engineer @ TIKI
Trải qua 9 năm xây dựng và phát triển hệ thống, đội ngũ engineer TIKI lần lượt phải giải quyết từng bài toán kỹ thuật khó khăn để hệ thống phát triển theo kịp tốc độ tăng trưởng của business. Đặc thù của hệ thống Ecommerce có một thách thức lớn là phải đảm bảo tính chính xác của dữ liệu nhưng đồng thời vẫn phải đáp ứng lượng truy cập lớn. Do đó High Concurrency Architecture có vai trò quan trọng trong kiến trúc tổng thể của TIKI. Nó cũng là bước tiến lớn của các kỹ sư TIKI trong 6 tháng qua.
Grokking Techtalk #40: Consistency and Availability tradeoff in database clusterGrokking VN
Những năm gần đây, cùng với sự bùng nổ của các startup cùng các loại công nghệ như máy học, lượng dữ liệu phát sinh cần thu thập và xử lý trong các hệ thống ngày càng tăng cao.
Chính vì vậy, đối với các hệ thống lớn thì việc lưu trữ và xử lý dữ liệu trên một node database đã không đáp ứng được nữa, đòi hỏi phải sử dụng nhiều node kết nối với nhau để hình thành database cluster.
Đối với các database cluster nói riêng và hệ thống Distributed System nói chung, có khá nhiều chủ đề thú vị để đào sâu. Trong buổi thảo luận này, chúng ta sẽ giới hạn trong việc khảo sát về cách ba hệ thống Redis, Elastic Search và Cassandra tổ chức cluster cũng như sự trade-off giữa tính nhất quán (consistency) và khả năng đáp ứng (availability) của ba hệ thống này.
- Speaker: Lộc Võ - Lead Software Engineer @ Grab
This presentation introduces every aspects of the Kafka ecosystem:
- Concepts: explain all misleading concepts such as topic vs partition vs replication, producer vs consumer vs consumer group, group leader vs group coordinator, ...
- Advanced concepts: delivery semantic; idempotent producers; isolation levels; differences between the offsets such as High Watermark, Log End Offset, Last Stable Offset ...
- Kafka architecture: explain all Kafka components such as brokers, controllers, zookeeper, ...
- Overview of Kafka security: TLS/SSL, SASL, Kerberos, ...
- Overview of Kafka ecosystem: Kafka Stream, Kafka Connect, Schema Registry, monitoring tools.
- Kafka in Golang: How to use Kafka client in Golang.
- Comparison with other message queues such as RabbitMQ.
Design patterns là một đề tài "khó nuốt" với đa số lập trình viên ở buổi đầu tìm hiểu. Lý do là vì design patterns được xây dựng trên những khái niệm trừu tượng cũng như phải tuân thủ các nguyên tắc lập trình hướng đối tượng.
Đến với TechTalk #32: SOLID & Design Patterns, các bạn sẽ được giới thiệu những nguyên tắc cần phải tuân thủ này và cách thức áp dụng những design patterns quen thuộc vào giải quyết các bài toán một các ngắn gọn, xúc tích và hiệu quả thông qua các ví dụ thực tế.
Speaker: Khôi Nguyễn - Senior Software Engineer @ KMS Technology
Building Cloud-Native App Series - Part 2 of 11
Microservices Architecture Series
Event Sourcing & CQRS,
Kafka, Rabbit MQ
Case Studies (E-Commerce App, Movie Streaming, Ticket Booking, Restaurant, Hospital Management)
Communication between Microservices is inherently unreliable. These integration points may produce cascading failures, slow responses, service outages. We will walk through stability patterns like timeouts, circuit breaker, bulkheads and discuss how they improve stability of Microservices.
Grokking Techtalk #38: Escape Analysis in Go compilerGrokking VN
Trong quá trình phân tích hiệu năng, hiểu và nắm vững ngôn ngữ lập trình cũng như cách thiết kế của nó là rất hữu ích. Go là một trong những ngôn ngữ được sử dụng phổ biến trong các hệ thống phân tán có hiệu năng cao. Để hiểu rõ hơn cách mà Go compiler phân tích cách cấp phát bộ nhớ khi biên dịch chương trình, hãy nghe những chia sẻ của anh Cường về Escape Analysis trong Go compiler.
Về diễn giả:
Anh Lê Mạnh Cường là một kĩ sư phần mềm có 8 năm kinh nghiệm chuyên sâu trong backend và Quản trị hệ thống Linux. Là một OSS contributor tích cực, anh Cường đã có nhiều cống hiến vào cộng đồng mã nguồn mở, đặc biệt là Go và ecosystem của Go.
Pháp chứng kỹ thuật số cung cấp cho sinh viên với một cách tiếp cận có hệ thống khi tiến hành một điều tra pháp chứng máy tính (cả hai loại điều tra công quyền và điều tra công ty), các yêu cầu của một phòng thí nghiệm pháp chứng máy tính bao gồm cả thiết bị phục hồi dữ liệu, phần cứng và phần mềm cần thiết để xác nhận pháp chứng kỹ thuật số trong phòng thí nghiệm.
Similar to Thiết kế hệ thống E-Commerce yêu cầu mở rộng (12)
2. Vai trò của tích hợp
Order
Service
Catalog
Service
Warehouse
System
Front End
Application
Accounting
System
Data
warehouse
System
Search
Service
Logistic
Service
Postgresql MysqlMongoDb
Redis Kafka Rabbit
Legacy
System
Payment
Service
Elastic
3. Vai trò của tích hợp
• Có quá nhiều system cấu thành lên hệ thống
• Các system sử dụng nhiều data source khác nhau
• Business logic phức tạp, đòi hỏi cao tính chính xác
• Các system do các team khác nhau quản lý và phát triển
4. Các khó khăn chính
• Đảm bảo tính chính xác của dữ liệu
• Đảm bảo thứ tự của các message trao đổi
• Dễ dàng tích hợp giữa các hệ thống
5. Các phần tích hợp chính
• Tích hợp giữa backend và front end
• Tích hợp giữa Order và Payment
• Tích hợp giữa Order và Catalog
• Tích hợp giữa với hệ thống kho
• Tích hợp với hệ thống accounting
• Tích hợp với hệ thống data warehouse
6. Backend và Frontend
Catalog Management
System
Caching vs Searching
Traffic Cao
Các vấn đề khó khăn:
- Update realtime các thay đổi
- Cập nhật chính xác thông tin sản phẩm
- Đảm bảo hiệu năng cao cho read
- Xử lý được cấu trúc product phức tạp
7. Order và Payment
Order Service Payment Service
Make Transaction
Callback Response
Các khó khăn:
- Bảo mật
- Tính chính xác, ổn định cao
- Xử lý exact once
8. Order - Catalog
Order Service Catalog Service
Reserve Product
Place Order
Confirm
Các khó khăn:
- Đảm bảo không bán quá số lượng
- Đảm bảo việc cập nhật giá và số
lượng chính xác
- Đảm bảo hiệu năng
9. Tích hợp kho
Catalog - Order
Systems
Warehouse
System
Inbound/Outbound:
sku, quantity…
Sale Order
Các khó khăn:
- Đảm bảo sự sai lệch giữa kho và hệ
thống online là nhỏ nhất
- Đảm bảo hàng hoá cho các đơn hàng
được đặt
- Nhập xuất số lượng lớn
10. Tích hợp Accounting
Product/SKU Order
Payment/
Loyalty
Delivery Cash In
Accounting
Các khó khăn:
- Tính chính xác (tới từng đồng)
- Dữ liệu bị phân mảnh
- Nghiệp vụ tài chính phức tạp
13. Đơn giản hoá
mô hình tích hợp
• Giảm thiểu sự trùng lặp model dữ liệu và logic giữa các hệ
thống.
VD: Order service không cần full thông tin model product,
Warehouse không cần full thông tin của order
• Càng tối thiểu hoá sự trùng lặp dữ liệu, càng đơn giản hoá
quá trình tính hợp, giảm thiểu sai sót.
• Hạn chế mô hình tích hợp dạng star schema, ưu tiên mô
hình horizontal
• Ưu tiên tích hợp bất đồng bộ hơn là tích hợp đồng bộ.
15. Mô hình message bus
- Độ phức tạp các liên kết
O(n)
- Không cần các services
available tại cùng một thời
điểm
- Đơn giản khi sử dụng
16. Đồng bộ và Bất đồng bộ
• Đồng bộ: gọi api giữa các service
• Bất đồng bộ: giao tiếp qua message queue
• Xác định đòi hỏi về tính nhất quán của dữ liệu
• Tối đa hoá tích hợp bất đồng bộ
17. Eventually Consistency
• Cần đảm bảo dữ liệu được gửi đi
• Đảm bảo các dữ liệu gửi đúng thứ tự
• Đảm bảo gửi exact once nếu có thể
18. Eventually Consistency
Lỗi phổ biến:
- Ghi dữ liệu đồng thời dữ liệu
cho nhiều service. Do không
có transaction dẫn tới nguy
cơ sai lệch dữ liệu
- Sử dụng các message queue
không đảm bảo thứ tự như
Rabbit MQ.
20. Binlog - Kafka
MySql
Binlog
Append Events
Kafka
Publish Events
Publisher
- MySql ghi nhận các thay đổi đúng thứ tự
- Kafka đảm bảo delivery các message đúng thứ tự
22. Kết luận
• Tích hợp là vấn đề chính với các hệ thống lớn.
• Message queue là chìa khoá đảm bảo việc tích
hợp giữa các thành phần
• Phải đảm bảo gửi đúng thứ tự message khi tích
hợp
• Ưu tiên tích hợp bất đồng bộ hơn là đồng bộ
23. Cảm ơn
• Contact: Lê Minh Nghĩa
• Email: nghia.fit@gmail.com
• Facebook: /nghialeminh
• Slide Share: /NghiaLeMinh1