Hệ thống truy vết phân tán trong kiến trúc hàng trăm dịch vụ MSA được chia sẻ bởi người phỏng vấn Kakao
Học tập quá trình xây dựng Observability thiết yếu trong môi trường kiến trúc Microservices (MSA) từ cơ bản đến thực tiễn. Bạn sẽ được học thông qua các bài thực hành từng bước về thu thập dữ liệu tiêu chuẩn hóa bằng OpenTelemetry, lưu trữ và tìm kiếm trace thông qua Grafana Tempo, và trực quan hóa bằng TraceQL. Bạn có thể học quy trình theo dõi luồng dịch vụ, xác định điểm nghẽn và phân tích nguyên nhân sự cố thông qua Distributed Tracing.
Rất tốt để nắm bắt nhanh những điều cốt lõi, cảm ơn bạn.
5.0
두두
100% đã tham gia
Khóa học đáng tin cậy
Bạn sẽ nhận được điều này sau khi học.
Kỹ thuật truy vết yêu cầu và phân tích hiệu năng giữa các microservices sử dụng OpenTelemetry và Grafana Tempo
Phân tách dịch vụ theo từng domain, giao tiếp HTTP giữa các dịch vụ, thiết kế hệ thống
Cấu hình môi trường đa container, quản lý mạng và khám phá dịch vụ (service discovery) thông qua Docker Compose
Vận hành dựa trên truy vết và giám sát hệ thống thông qua Grafana, Tempo, otel-collector
Quản lý cấu hình dựa trên YAML, cấu trúc dịch vụ thông qua biến môi trường và phương thức định nghĩa hạ tầng theo kiểu khai báo.
TRACE 7f3a0c91e8b24d55 · 6 phân đoạn · 1 lỗi
Nếu bạn đang mở nhật ký ở ba nơi cùng một lúc
Một yêu cầu đi qua nhiều dịch vụ khác nhau. Tuy nhiên, log lại được lưu trữ riêng biệt ở mỗi dịch vụ. Nếu bạn đang phải mở nhiều cửa sổ cùng lúc và cố gắng khớp thời gian để tìm xem lỗi hay sự chậm trễ xảy ra ở đâu, thì đã có công cụ thay bạn làm việc đó.
Cấp độ Nhập môn
Thực hành Docker
OpenTelemetry
Grafana · Tempo
Thời hạn khóa học vô hạn
0ms100200300400
checkout-api POST /orders412ms
order-svc createOrder306ms
payment-svc authorize92ms
inventory-svc reserve188ms
postgres SELECT stock156ms
notify-svc sendPush54ms
Mỗi dòng là một dịch vụ. Khoảng cách thụt lề biểu thị độ sâu của lệnh gọi, vị trí bắt đầu của thanh biểu thị thời điểm bắt đầu và chiều dài biểu thị thời gian thực hiện. Phần hiển thị màu đỏ trong inventory-svc chính là lý do khiến yêu cầu này bị chậm.
Mục tiêu của bài giảng này là tạo ra một màn hình duy nhất như thế này. Nếu nhật ký (log) là các điểm thì truy vết (trace) là các đường kẻ.
SPAN 01 · Định nghĩa vấn đề
Khi chia nhỏ các dịch vụ, việc tìm nguyên nhân gây ra lỗi trở nên khó khăn hơn
BÂY GIỜ
Lục tìm log
Mở nhật ký của từng dịch vụ và đối chiếu thời gian. Nếu có ba dịch vụ thì sẽ có ba cửa sổ, và nếu không có ID yêu cầu thì cũng không thể biết được dòng nào thuộc về cùng một yêu cầu.
VỚI TRACING
Lộ trình được hiển thị trên một dòng duy nhất
Một ID được gắn vào mỗi yêu cầu để kết nối các lộ trình di chuyển qua các dịch vụ thành một đường duy nhất. Thời gian phản hồi (mili giây) ở mỗi phân đoạn và vị trí bị ngắt quãng đều được ghi lại trên cùng một màn hình.
Ưu điểm của MSA được nhắc đến rất nhiều, nhưng cái giá phải trả cho nó thì ít khi được đề cập. Phải bổ sung khả năng quan sát tương ứng với mức độ chia nhỏ dịch vụ thì mới có thể khôi phục lại khả năng gỡ lỗi ban đầu.
SPAN 02 · Bắt đầu
Đây là cuộc đối thoại đã diễn ra trên thực tế
Mọi chuyện bắt đầu từ lời than vãn với một người quen đang làm nhà phát triển tại Kakao.
HHongĐiều mình đang lo lắng dạo gần đây là, vì sự liên kết giữa các dịch vụ trong MSA quá lớn nên việc gỡ lỗi (debugging) rất khó khăn. Như vậy có bình thường không?
KNhà phát triển KakaoMọi người thường xem log và các chỉ số metric, nếu môi trường được thiết lập tốt thì họ cũng kiểm tra cả tracing nữa. Tôi thường vừa xem tracing vừa gỡ lỗi.
HHongGhen tị thật đấy. Nếu bên mình cũng có hệ thống như vậy thì tốt biết mấy. Cứ ngồi xem log mãi chắc lòi mắt ra mất.
KNhà phát triển KakaoThường thì có nhiều người chỉ xem log, nhưng nếu biết và áp dụng khái niệm tracing thì thực sự rất tốt. Nó giúp dễ dàng quan sát mối quan hệ giữa các dịch vụ và theo dõi toàn bộ luồng dữ liệu.
KNhà phát triển KakaoVà nếu áp dụng tracing này, bạn có thể giải quyết được nhiều vấn đề phát sinh trong MSA. Mọi người cứ bảo MSA tốt này tốt nọ, nhưng đa số lại không nhìn vào nhược điểm của nó.
HHongVậy thì chỉ cho mình với. Mình cũng đã từng dùng thử đơn giản bằng các ngôn ngữ khác rồi, nhưng chưa thử liên kết với Grafana bao giờ.
KNhà phát triển KakaoVậy thì mình sẽ nhanh chóng thiết lập môi trường MSA và Grafana bằng Docker và docker-compose rồi hướng dẫn cho bạn nhé.
SPAN 03 · Cấu trúc
Con đường dữ liệu đi qua
Dữ liệu truy vết được tạo ra từ dịch vụ, đi qua bộ thu thập để lưu trữ vào kho lưu trữ, và cuối cùng được truy vấn trên màn hình. Khóa học này sẽ lần lượt đề cập đến từng vị trí trong bốn vị trí này.
STAGE 1
Dịch vụ
Tạo và gửi Span cho mỗi yêu cầu. Các Span từ nhiều dịch vụ khác nhau được nhóm lại thành một Trace duy nhất.
STAGE 2
OTel Collector
Nhận bằng Receiver, xử lý bằng Processor và chuyển tiếp bằng Exporter. Đây là trọng tâm của bài giảng này.
STAGE 3
Tempo
Lưu trữ theo đơn vị khối. Chúng ta sẽ cùng tìm cách tích lũy và cách tìm kiếm nhanh chóng.
STAGE 4
Grafana
Truy vấn bằng TraceQL. Màn hình trên cùng xuất hiện từ đây.
Collector ở giữa là cốt lõi. Dịch vụ chỉ cần biết đến Collector, và ngay cả khi thay đổi kho lưu trữ, mã dịch vụ vẫn được giữ nguyên. Toàn bộ phần 4 sẽ nói về Collector.
SPAN 04 · Chương trình học
Chúng ta sẽ tìm hiểu nội dung gì và theo thứ tự nào
Nắm vững khái niệm và cấu trúc lưu trữ, đi sâu vào bộ thu thập (collector), sau đó cuối cùng là kết nối tất cả lại và vận hành.
01
Giới thiệu khóa học và tài liệu
Giới thiệu khóa học
Source Code [ 빌드 포함 ]
Tài liệu tóm tắt bài giảng
Tài liệu OpenTelemetry chính thức
02
Lý do tại sao cần hệ thống truy vết phân tán và dữ liệu truy vết phân tán
Grafana là gì & Kiến trúc dự định triển khai
Nguyên lý liên kết kiến trúc Grafana & Tempo
Cấu trúc dữ liệu truy vết phân tán và nguyên lý trực quan hóa
Mối tương quan gỡ lỗi trong môi trường Distributed Tracing
Trắc nghiệm Phần 2
03
Tempo, hệ thống truy vết phân tán của Grafana
Tổng quan về Grafana Tempo và triết lý thiết kế
Grafana Tempo kiến trúc microservices
Cơ chế lưu trữ dựa trên khối (block) của Tempo
Xử lý truy vấn Tempo và tối ưu hóa hiệu suất
Câu đố phần 3
04
Mối quan hệ giữa các dịch vụ trong kiến trúc MSA và tất cả về OpenTelemetry Collector
Khái niệm và vai trò của OpenTelemetry Collector
Kiến trúc và các thành phần của OpenTelemetry Collector
Phân tích chuyên sâu về OpenTelemetry Receiver
Phân tích chuyên sâu về OpenTelemetry Processor
Phân tích chuyên sâu về OpenTelemetry Exporter
Tối ưu hóa hiệu suất và khả năng mở rộng của OpenTelemetry Collector
Trắc nghiệm Phần 4
05
Xây dựng môi trường tinh gọn và tiến hành thực hành cuối cùng
Cấu hình các tệp thiết lập cho các thành phần đã học trước đó: Grafana, Otel, Tempo
Xây dựng môi trường tinh gọn sử dụng Docker và Volume Mount
3 máy chủ cho kiến trúc MSA đơn giản hóa
Dữ liệu truy vết phân tán được kiểm tra trong khi viết Grafana & TraceQL
Trắc nghiệm Phần 5
SPAN 05 · Thành phần cấu tạo
Tự mình kết nối những thứ mà trước đây chỉ mới nghe qua tên gọi.
Viết từng tệp cấu hình một và kiểm tra xem mỗi yếu tố thực hiện nhiệm vụ gì.
OpenTelemetry Collector
Grafana Tempo
TraceQL
Receiver
Processor
Exporter
Trace & Span
Docker Compose
Volume Mount
Cấu hình YAML
Không chỉ dừng lại ở việc đọc. Trong phần cuối cùng, bạn sẽ trực tiếp thiết lập môi trường và tận mắt kiểm tra dữ liệu truy vết.
Nhà phát triển backend không biết phải bắt đầu xem từ đâu khi xảy ra sự cố trong hệ thống đã được chia nhỏ thành các dịch vụ.
CASE 2
Chỉ đang xem log
Những người dành hết thời gian để tìm nguyên nhân, và cuối cùng chỉ thu hẹp phạm vi dựa trên cảm tính.
CASE 3
Tò mò về góc nhìn
Những ai muốn biết các nhà phát triển tài năng quan sát hệ thống ở những tầng mức nào.
CASE 4
Nhóm đang chuẩn bị mở rộng
Nhà phát triển muốn thiết lập trước hệ thống quan sát (observability) vì dịch vụ đang ngày càng mở rộng.
SPAN 07 · Thị trường hiện nay
Câu chuyện về việc AI thay thế lập trình viên
Tuyển dụng mới đang giảm dần, và các doanh nghiệp chỉ muốn chọn những người đã được kiểm chứng. Đây là những bài báo đã xuất hiện trong vài tháng gần đây.
2025Krafton, công ty vừa đạt được kết quả kinh doanh cao kỷ lục, đã bắt đầu cắt giảm nhân sự. Lý do được đưa ra là để chuyển đổi thành một doanh nghiệp 'AI First'.
2025Các doanh nghiệp chuyên về phần mềm đang tạm ngừng tuyển dụng lập trình viên mới. Cũng có dự báo cho rằng việc tuyển dụng lập trình viên cấp độ sơ cấp sẽ giảm mạnh 77%.
2025 có 53% nhà thiết kế trò chơi đã trả lời rằng "AI sẽ thay thế công việc của tôi". Các trường hợp thôi việc theo đề nghị cũng đã được báo cáo.
Doanh nghiệp càng bất an thì phía người được tuyển chọn càng phải thể hiện sự khác biệt rõ ràng hơn. Dù sử dụng cùng một lượng thời gian, nhưng tùy vào việc bạn nhìn nhận cái gì và dưới góc độ nào mà chiều sâu của sự giải thích sẽ khác nhau.
SPAN 08 · Đánh giá khóa học
Chia sẻ từ những người đã học trước đó
Tôi đã sao chép nguyên văn từ đánh giá khóa học trên Inflearn.
Tôi nghĩ đây là một bài giảng giúp bạn trưởng thành hơn trong kỳ nghỉ Chuseok dài ngày. Dù thời lượng bài giảng ngắn nhưng thực tế nó lại chứa đựng những chủ đề cực kỳ hay và súc tích. Chính vì thế, nó mang lại hiệu quả rất cao so với thời gian bỏ ra.
Thích số 8 · Viết sau khi hoàn thành 86% khóa học
Đây có lẽ là bài giảng khiến tôi cảm thấy xấu hổ về bản thân khi trước đây chưa từng suy nghĩ đến những khía cạnh này mà chỉ đơn thuần tập trung vào việc lập trình, và nhờ đó tôi cũng đã học hỏi được rất nhiều điều. Tôi đang theo dõi tất cả các bài giảng từ những ngày đầu cho đến những khóa mới mở gần đây, và có cảm giác như người chia sẻ đang dần trở thành một "kho báu" mà tôi chỉ muốn giữ cho riêng mình biết thôi.
Jlos Ho · Viết sau khi hoàn thành 95% khóa học
Khóa học rất tuyệt vời để nắm bắt các nội dung cốt lõi một cách nhanh chóng. Xin cảm ơn.
Tommy · Viết sau khi hoàn thành 100% khóa học
SPAN 09 · Người tạo
Được thực hiện bởi hai nhà phát triển đang làm việc thực tế
KAKAO · BACKEND & DATA ENGINEER · Người phỏng vấn
Choi
Từng làm việc tại các ngân hàng lớn (nhóm 1) và hiện đang đảm nhận vai trò kỹ sư Backend và Data tại Kakao. Tôi cũng đang hoạt động với tư cách là người phỏng vấn, vì vậy những gì được chú trọng trong các buổi phỏng vấn đều được đưa trực tiếp vào cấu trúc của bài giảng này.
"Một khi đã gắn tracing vào rồi, bạn sẽ không thể quay lại thời kỳ chỉ biết nhìn vào log nữa."
Người chia sẻ kiến thức · Phát triển server nền tảng tại Pangyo
Hong
Bắt đầu là một người không chuyên về ngành, hiện tại tôi đang phát triển backend nền tảng tại Pangyo. Tôi lấy nguyên tắc là cùng với những người quen có năng lực trong ngành tạo ra các bài giảng.
"Cái giá của việc chia nhỏ dịch vụ sẽ quay lại ở giai đoạn gỡ lỗi. Đây là cách để trả cái giá đó."
SPAN 10 · Câu hỏi
Câu hỏi thường gặp về khóa học Truy vết phân tán (Distributed Tracing)
Q.Tôi chưa từng có kinh nghiệm về giám sát (monitoring) thì có được không?
⌄
Mức độ khó được thiết lập ở cấp độ nhập môn. Bắt đầu từ Phần 2, chúng ta sẽ tìm hiểu Grafana là gì và dữ liệu truy vết phân tán trông như thế nào. Nội dung được cấu trúc để ngay cả những người chưa có kinh nghiệm thu thập số liệu (metrics) hay nhật ký (logs) cũng có thể theo kịp.
Q.Nó khác gì so với log hay metric?
⌄
Log ghi lại những gì đã xảy ra trong một dịch vụ dưới dạng các điểm, còn truy vết (trace) nối các đường dẫn mà một yêu cầu đi qua các dịch vụ thành một đường thẳng. Nó lưu lại trên cùng một màn hình việc độ trễ xảy ra ở đoạn nào, và dịch vụ nào đã gọi dịch vụ nào. Phần 2 sẽ đề cập đến mối tương quan này.
Q.Tại sao cần OpenTelemetry Collector?
⌄
Đây là một lớp trung gian giúp các dịch vụ không cần phải biết trực tiếp về kho lưu trữ. Do các bộ phận nhận (Receiver), xử lý (Processor) và xuất (Exporter) được tách biệt, nên ngay cả khi thay đổi kho lưu trữ, mã nguồn của dịch vụ vẫn được giữ nguyên. Toàn bộ Phần 4 sẽ đề cập đến ba trụ cột này và việc tối ưu hóa hiệu suất.
Hỏi: Chúng ta sẽ làm gì trong phần thực hành?
⌄
Cấu hình Grafana·Tempo·Collector bằng Docker và volume mount, sau đó khởi chạy ba máy chủ mô phỏng kiến trúc MSA đơn giản hóa. Tiếp theo, bạn sẽ trực tiếp viết TraceQL để truy vấn dữ liệu truy vết (trace data).
Hỏi: Tôi có thể sử dụng công cụ khác thay vì Tempo không?
⌄
Khóa học này được tiến hành với sự kết hợp giữa Grafana và Tempo. Tuy nhiên, vì tiêu chuẩn xuất dữ liệu từ dịch vụ là OpenTelemetry và có Collector ở giữa, nên ngay cả khi bạn thay đổi kho lưu trữ sang loại khác, cấu trúc ở phía trước vẫn có thể được tái sử dụng nguyên vẹn. Đó cũng là lý do tại sao chúng ta sẽ tìm hiểu sâu về Collector.
Không nhìn theo từng điểm mà nhìn theo đường nối
Càng chia nhỏ dịch vụ, bạn càng phải bổ sung thêm khả năng quan sát (observability) thì mới có thể khôi phục lại khả năng gỡ lỗi (debugging) như ban đầu.
Có một không gian riêng để chia sẻ về những phần bạn còn vướng mắc khi nghe bài giảng, những câu hỏi nảy sinh khi áp dụng vào dịch vụ của chính mình, hay thậm chí là cả những câu chuyện về sự nghiệp. Những chỗ bạn gặp khó khăn thường cũng là nơi mà người khác cũng mắc phải.
Tôi bắt đầu học lập trình sau một thời gian dài lười biếng ở nhà và cảm thấy hứng thú với nó, hiện tại tôi đang đảm nhận việc phát triển máy chủ nền tảng (platform server) tại Pangyo. Tôi tiếp tục hoạt động với tư cách là người chia sẻ kiến thức vì muốn cung cấp cho các bạn phương pháp tôi đã học cũng như những vấn đề và giải pháp khác nhau mà các bạn có thể gặp phải trong thực tế.
Bài giảng không chỉ được tạo ra từ kiến thức của riêng tôi. Mọi bài giảng đều có sự đồng hành của những người cộng sự.
Xin chào Tommy, tôi đã cố gắng truyền đạt những điểm cốt lõi đến các bạn trong thời gian ngắn nhất có thể. Vì thời gian của các bạn quá quý giá hehe. Hãy để lại đánh giá tốt nhé, tôi sẽ cung cấp những khóa học bổ ích hơn nữa trong tương lai. Cảm ơn bạn.