Giaosucan's blog - Chia sẻ kiến thức theo cách bá đạo

Ticker

20/recent/ticker-posts

Kiến trúc FAANG 8 - Netflix Network observability

Tiếp phần 7

Network engineer


Khi hệ thống đã đi vào vận hành thì bao giờ cũng cần một đội vận hành bảo trì. Việc này do SRE team phụ trách, họ sử dụng những công cụ Monitoring & Logging để monitor hệ thống, gọi chung là observability. Đối với hệ thống vừa và nhỏ, SRE engineer có thể dùng công cụ open source như ELK, Prometheus & Grafana là đủ xài. Hoặc trên Cloud thì đã tích hợp sẵn như AWS Cloudwatch, Azure Monitor, Google cloud monitoring, dùng cũng khá ổn. Hệ thống do team mình quản lý dạng tầm trung build trên k8s thì chơi mấy tool commerical như DataDog, Splunk, chất lượng cũng thấy quá ngon. Datadog có thể collect nhiều thông tin về cluster, node, pod, server rồi hiển thị trên dashboard, SRE tạo các alert để cảnh báo khi các chỉ số vượt quá threshold. Splunk thì collect logs từ server đẩy về Splunk cloud để troubleshooting. Mọi thứ đều quá ổn
Tuy nhiên đối với Big Tech như Google với Netflix với hàng tỉ users thì câu chuyện không đơn giản như vậy. Vì một hệ thống nó bao gồm rất nhiều phần như networking, application, datastorage… Cần phải có những công cụ/team riêng biệt để monitor từng phần chứ không thể xài mỗi anh Datadog/Splunk với team SRE là xong. Và thế là đẻ ra 1 team Cloud network engineer, chuyên về network
Hệ thống của Netflix được build trên AWS, cloud network infra bao gồm VPC, Direct connect, VPC peering, Transist Gateway, NAT và cả những service của chính Netflix. Hệ thống do mình quản lý của có những component này, do cũng không quá lớn nên dùng AWS builtin tool như VPC flow logs/Traffic Monitoring/Reachability Analyzer để phân tích network data flow thấy cũng ok.
Nhiều tính huống về network xảy ra như sau
  • Anh oai, 2 con service Movie và Player không connect được với nhau, platform engineer réo
  • Service JAV không connect được vào database bị connection timeout ròi, ông DBA chửi

VPC flow logs

VPC Flow Logs records a sample of network flows sent from and
received by VM instances, including instances used as GKE nodes.
These logs can be used for network monitoring, forensics, real-time
security analysis, and expense optimization.

Để troubleshooting, thì phải phân tích network logs. Thực tế kĩ sư Network của Netflix cũng cũng phân tích logs trên VPC flow logs như sau
VPC flow logs đổ dữ liệu vào S3, sau đó bạn có thể dùng Cloudwatch insight tools để phân tích logs này để biết dataflow in/out từ IP nào đến IP nào, stuck ở đâu
Analyze CloudWatch Logs like a pro - marbot

version vpc-id subnet-id instance-id interface-id account-id type **srcaddr dstaddr** srcport dstport **pkt-srcadd**r **pkt-dstaddr** protocol bytes packets start end action tcp-flags log-status3 vpc-12345678 subnet-012345678 i-07890123456 eni-23456789 123456789010 IPv4 **52.213.180.42 10.0.0.62** 43416 5001 **52.213.180.42 10.0.0.62** 6 568 8 1566848875 1566848933 ACCEPT 2 OK

VPC FlowLogs

Đối với hệ thống nhỏ nhỏ vài chục vài trăm server, có thể trace IP đến từ server nào. Nhưng Netflix thì khác, hơn 150K instances nằm trên 4 regions. 1 triệu request/giây, microservice của Netflix có hàng nghìn và tăng theo từng ngày, các service communicate với nhau. Hơn nữa đống IP này là dynamic, tức là change liên tục

IP address illustration

Cùng 1 cái IP lúc thì server Foo, lúc thì server Baz
Đây là issue về Network Segmentation, ngồi truy vấn những IP này thì xcmnd
Hơn nữa, hệ thống Netflix là hệ thống phân tán, mỗi giờ có hàng trăm nghìn VPC flows logs file đẩy vào S3, khoảng 10T flow logs /giây, ngồi analyze đống log này bằng tool truyền thống thì quá challenging
Để xác định đống IP trên đến từ app/server nào, Netflix build 1 tool gọi là Sonar dùng để tracking IP, giải thích cách hoạt động của Sonar như thế nào như trên GG thì phù não, hiểu đơn giản, tool này sẽ map địa chỉ IP vào đúng tên server/application, giống như map IP vào tên website domain vậy.
Qua sonar, thì dữ liệu dc generate theo format như ở dưới rất rõ ràng
Useful details relevant to an IP address

Flow Exporter

Vấn đề là VPC flow logs không phải cái gì cũng capture được, cần 1 loại logs cần analyze là TCP logs giữa các instances. Giải pháp này được xây dựng dựa vào 1 platform gọi là eBpf bổ sung thêm cho VPC flow logs gọi là eBPF flow logs
Dynamically program the kernel for efficient networking, observability, tracing, and security
eBPF diagram

Overview

HIểu đơn giản thế này, hệ thống server phần lớn chạy trên Linux với lõi là Linux kernel, nếu bạn muốn implement monitor ở cấp độ system như networking/security/tracing thì phải động tới Kernel. Như vậy thì rất phức tạp và rủi ro impact đến server OS. eBff cho phép developer implement monitoring nhưng không phải sửa trực tiếp kernel, kiểu như nó tạo ra một mội trường kernel sandbox giả lập để developer sử dụng thoải mái
Netflix/Google phát triển 1 network observability sidecar gọi là Flow Exporter, sử dụng eBPF để capture các TCP flow gần real time. Số lượng eBpf record này cũng lên tới hàng tỉ / giờ. Do đó cũng đòi hỏi giải pháp để visualize/analyze đống record này sao cho hợp lý.
Đón đọc bài sau

Đăng nhận xét

0 Nhận xét