Cách chúng tôi mở rộng quy mô phát trực tuyến dữ liệu tại Coinbase bằng AWS MSK
Tiêu đề nội dung
Bởi: Dan Moore, Eric Sun, LV Lu, Xinyu Liu
Tl; dr : Coinbase đang tận dụng tính năng Phát trực tuyến được quản lý của AWS cho Kafka (MSK) để có độ trễ cực thấp, giao tiếp dịch vụ với dịch vụ liền mạch, dữ liệu ETL và cơ sở dữ liệu Thay đổi dữ liệu Capture ( CDC). Các kỹ sư từ nhóm Nền tảng dữ liệu của chúng tôi sẽ trình bày thêm về công việc này tại hội nghị Re: Invent vào tháng 11 năm 2021 của AWS.
Tại Coinbase, chúng tôi nhập hàng tỷ sự kiện hàng ngày từ người dùng, ứng dụng và các nguồn tiền điện tử trên các sản phẩm của mình. Dữ liệu clickstream được thu thập thông qua ứng dụng khách web và thiết bị di động và được nhập vào Kafka bằng cách sử dụng Ruby và Golang SDK tự phát triển. Ngoài ra, các luồng thu thập dữ liệu thay đổi (CDC) từ nhiều cơ sở dữ liệu khác nhau được cung cấp thông qua Kafka Connect. Một người tiêu dùng chính của các tin nhắn Kafka này là đường ống ETL dữ liệu của chúng tôi, truyền dữ liệu đến kho dữ liệu của chúng tôi (Snowflake) để các nhóm Khoa học dữ liệu và Nhà phân tích dữ liệu của chúng tôi phân tích thêm. Hơn nữa, các dịch vụ nội bộ trong toàn công ty (như Môi giới chính của chúng tôi và các sản phẩm Trôi hàng tồn kho theo thời gian thực) dựa vào cụm Kafka của chúng tôi để chạy các ứng dụng quan trọng, có độ trễ thấp (dưới 10 mili giây).
Với Kafka do AWS quản lý (MSK), nhóm của chúng tôi đã giảm thiểu chi phí hoạt động hàng ngày của người môi giới Kafka bảo trì và phục hồi, cho phép chúng tôi tập trung thời gian kỹ thuật của mình cho các nhu cầu kinh doanh cốt lõi. Chúng tôi nhận thấy việc mở rộng / mở rộng các cụm Kafka và nâng cấp các nhà môi giới lên phiên bản Kafka mới nhất đơn giản và an toàn với MSK. Bài đăng này phác thảo kiến trúc cốt lõi của chúng tôi và hệ sinh thái công cụ hoàn chỉnh mà chúng tôi đã phát triển xung quanh MSK.
Cấu hình:
- TLS đã xác thực cụm
- 30 nút môi giới trên nhiều AZ để bảo vệ khỏi tình trạng ngừng hoạt động toàn bộ AZ
- Hỗ trợ nhiều cụm
- ~ 17TB lưu trữ / môi giới
- 99,9% thời gian hoạt động hàng tháng SLA từ AWS
Những lợi ích :
Vì MSK được quản lý bởi AWS, một trong những lợi ích lớn nhất là chúng tôi có thể tránh việc các kỹ sư nội bộ tích cực duy trì các nút ZooKeeper / nhà môi giới. Điều này đã giúp chúng tôi tiết kiệm hơn 100 giờ làm việc kỹ thuật vì AWS xử lý tất cả các bản cập nhật bản vá bảo mật của nhà môi giới, khôi phục nút và nâng cấp phiên bản Kafka một cách liền mạch. Tất cả các cập nhật nhà môi giới đều được thực hiện theo cách luân phiên (mỗi lần một nút nhà môi giới được cập nhật), do đó, không có hoạt động đọc / ghi của người dùng nào bị ảnh hưởng.
Hơn nữa, MSK cung cấp các cấu hình mạng linh hoạt. Cụm của chúng tôi có các quy tắc xâm nhập nhóm bảo mật chặt chẽ mà các dịch vụ có thể giao tiếp trực tiếp với các cổng nút của nhà môi giới ZooKeeper hoặc MSK. Tích hợp với Terraform cho phép bổ sung môi giới liền mạch, tăng dung lượng đĩa, cập nhật cấu hình cho cụm của chúng tôi mà không có bất kỳ thời gian chết nào.
Cuối cùng, AWS đã cung cấp hỗ trợ MSK Enterprise tuyệt vời, gặp gỡ chúng tôi nhiều lần để giải đáp về mạng và cụm khó khăn câu hỏi xác thực.
Màn biểu diễn:
Chúng tôi đã giảm độ trễ từ đầu đến cuối (e2e) (thời gian cần thiết để sản xuất, lưu trữ và sử dụng một sự kiện) giảm ~ 95% khi chuyển từ Kinesis (độ trễ ~ 200 msec e2e) sang Kafka (độ trễ LinkedIn như một điểm chuẩn , công ty ban đầu đứng sau Kafka). Điều này mở ra cánh cửa cho các ứng dụng có độ trễ cực thấp như dịch vụ Môi giới chính của chúng tôi. Phân tích độ trễ đầy đủ từ các bài kiểm tra căng thẳng trên cụm sản phẩm của chúng tôi, theo kích thước tải trọng, được trình bày bên dưới:
Là gì nó?
Dịch vụ Bảo mật Kafka (KSS) của chúng tôi chứa tất cả các Danh sách Kiểm soát Truy cập (ACL) theo chủ đề. Khi triển khai, nó tự động đồng bộ hóa tất cả các thay đổi ACL đọc / ghi chủ đề với các nút ZooKeeper của MSK; một cách hiệu quả, đây là cách chúng tôi có thể kiểm soát quyền truy cập đọc / ghi vào các chủ đề Kafka riêng lẻ ở cấp độ dịch vụ.
KSS cũng ký các Yêu cầu ký chứng chỉ (CSR) bằng cách sử dụng AWS API ACM . Để làm được điều này, chúng tôi tận dụng khung xác thực Service-to-Service (S2S) nội bộ của mình, cung cấp cho chúng tôi một service_id đáng tin cậy từ khách hàng; Sau đó, chúng tôi sử dụng service_id đó và thêm nó làm Tên phân biệt trong chứng chỉ đã ký mà chúng tôi trả lại cho người dùng.
Với chứng chỉ đã ký, có Tên phân biệt khớp với service_id của một người, MSK có thể dễ dàng phát hiện thông qua xác thực TLS liệu một dịch vụ nhất định có được phép đọc / ghi từ một chủ đề cụ thể hay không. Nếu dịch vụ không được phép (theo tệp acl.yml của chúng tôi và các ACL được đặt trong ZooKeeper) thực hiện một hành động nhất định, lỗi sẽ xảy ra ở phía máy khách và không có hoạt động đọc / ghi Kafka nào xảy ra.
Cũng bắt buộc
Song song với KSS, chúng tôi đã xây dựng một vùng chứa Kafka sidecar Docker tùy chỉnh: 1) Chỉ cần cắm vào tệp soạn thảo docker hiện có của một người 2) Tự động tạo CSR khi khởi động và gọi KSS để nhận chứng chỉ đã ký và 3) Lưu trữ thông tin đăng nhập trong một ổ đĩa được chia sẻ Docker trên dịch vụ của người dùng, có thể được sử dụng khi khởi tạo nhà sản xuất Kafka / khách hàng tiêu dùng để xác thực TLS có thể xảy ra.
Chúng tôi đã mở rộng cụm Kafka cốt lõi của mình với các công cụ mạnh mẽ sau:
Kafka Co nnect
Đây là một cụm phân tán gồm các nút EC2 (nhóm tự động phân tỷ lệ AWS) thực hiện Thay đổi Dữ liệu Capture (CDC) trên nhiều hệ thống cơ sở dữ liệu. Hiện tại, chúng tôi đang tận dụng các đầu nối nguồn / bồn rửa MongoDB, Snowflake, S3 và Postgres. Nhiều trình kết nối khác có sẵn mã nguồn mở thông qua Hợp lưu tại đây
Kafdrop
Chúng tôi đang tận dụng sản phẩm Kafdrop mã nguồn mở cho chủ đề / phân vùng hạng nhất bù đắp theo dõi và kiểm tra độ trễ của người tiêu dùng: mã nguồn tại đây
Kiểm soát hành trình
Đây là một dự án mã nguồn mở khác , cung cấp khả năng cân bằng lại phân vùng tự động để giữ cho tải cụm / không gian đĩa của chúng tôi ngay cả trên tất cả các nút môi giới: mã nguồn tại đây
Hợp lưu Đăng ký lược đồ
Chúng tôi sử dụng Cơ quan đăng ký lược đồ mã nguồn mở của Confluent để lưu trữ các định nghĩa proto có phiên bản (được sử dụng rộng rãi trên Coinbase gRPC) : mã nguồn tại đây
SDK Kafka nội bộ
Quan trọng đối với ngăn xếp phát trực tuyến của chúng tôi là SDK Golang Kafka tùy chỉnh được phát triển nội bộ, dựa trên Bản phát hành segmentio / kafka . SDK nội bộ được tích hợp với Cơ quan đăng ký lược đồ của chúng tôi để các định nghĩa proto được tự động đăng ký / cập nhật trên các bản ghi của nhà sản xuất. Hơn nữa, SDK cung cấp cho người dùng những lợi ích sau:
- Người tiêu dùng có thể tự động deserialize dựa trên byte ma thuật và bản ghi SR phù hợp
- Tiêu đề xuất xứ của thông báo (chẳng hạn như service_id, event_time, event_type) giúp tiến hành đánh giá từ đầu đến cuối về tính đầy đủ của luồng sự kiện và các chỉ số về độ trễ
- Các tiêu đề này cũng đẩy nhanh quá trình lọc và định tuyến thư bằng cách tránh hình phạt giải mã hóa toàn bộ tải trọng
SDK truyền trực tuyến
Ngoài Kafka, chúng tôi có thể vẫn cần sử dụng các giải pháp phát trực tuyến khác, bao gồm Kinesis, SNS và SQS. Chúng tôi đã giới thiệu một Streaming-SDK thống nhất để giải quyết các yêu cầu sau:
- Phân phối một sự kiện đến nhiều điểm đến, thường được mô tả là ‘fanout’ hoặc ‘phản chiếu ‘. Ví dụ: gửi cùng một tin nhắn đồng thời đến một chủ đề Kafka và một hàng đợi SQS
- Nhận tin nhắn từ một chủ đề Kafka, gửi tin nhắn mới cho một chủ đề khác hoặc thậm chí là một luồng Kinesis do kết quả của xử lí dữ liệu
- Hỗ trợ định tuyến tin nhắn động, ví dụ: các tin nhắn có thể chuyển đổi dự phòng trên nhiều cụm Kafka hoặc vùng AWS
- Cung cấp cấu hình tối ưu hóa cho mỗi nền tảng phát trực tuyến để giảm thiểu sai lầm của con người, tối đa hóa thông lượng và hiệu suất, đồng thời cảnh báo cho người dùng về cấu hình sai
Sắp tới
Trên đường chân trời đang tích hợp với của chúng tôi Hồ Châu thổ sẽ cung cấp năng lượng hiệu quả hơn, kịp thời ETL dữ liệu cho nhóm phân tích dữ liệu và khoa học dữ liệu của chúng tôi. Ngoài ra, chúng tôi có khả năng tăng gấp 3 lần số lượng nút môi giới trong cụm sản phẩm của mình (30 -> 90 nút) khi nhu cầu nội bộ tăng lên – đó là giới hạn mềm có thể được tăng lên thông qua phiếu hỗ trợ AWS.
Nhìn chung, chúng tôi rất hài lòng với AWS MSK. Việc phục hồi môi giới tự động trong các bản vá bảo mật, bảo trì và nâng cấp phiên bản Kafka cùng với các chỉ số giám sát mức chủ đề / nhà môi giới nâng cao xung quanh việc sử dụng dung lượng đĩa / CPU nhà môi giới, đã giúp chúng tôi tiết kiệm hàng trăm giờ cung cấp và duy trì các nút nhà môi giới và ZooKeeper của riêng chúng tôi. Việc tích hợp với Terraform đã giúp cho việc cập nhật cấu hình, triển khai và cấu hình cụm ban đầu tương đối dễ dàng (sử dụng 3AZs cho cụm của bạn để làm cho nó linh hoạt hơn và ngăn chặn tác động từ sự cố ngừng hoạt động toàn bộ từ AZ).
Hiệu suất đã vượt quá mong đợi, với độ trễ dưới 10msec mở ra cánh cửa cực cao -tốc độ ứng dụng. Thời gian hoạt động của cụm rất tốt, vượt qua 99,9% SLA do AWS đưa ra. Hơn nữa, khi bất kỳ bản vá bảo mật nào diễn ra, nó luôn được thực hiện theo kiểu môi giới luân phiên, do đó, không có hoạt động đọc / ghi nào bị ảnh hưởng (đặt hệ số sao chép chủ đề mặc định thành 3, để bản sao đồng bộ tối thiểu là 2 ngay cả khi lỗi nút).
Chúng tôi ‘đã tìm thấy tòa nhà trên MSK có khả năng mở rộng cao nhờ tích hợp Kafka Connect, Confluent Schema Registry, Kafdrop, Cruise Control, v.v. mà không có vấn đề gì. Cuối cùng, MSK đã mang lại lợi ích cho cả các kỹ sư của chúng tôi trong việc duy trì hệ thống (các nút duy trì ít chi phí hơn) và mở khóa người dùng và dịch vụ nội bộ của chúng tôi với sức mạnh của truyền dữ liệu có độ trễ cực thấp.
- Trang chủ
- Da thuộc
- Line nịt nam
- Giày Nam
- Thời gian phụ kiện trang
- Ví da nam
- Xu hướng thời trang