MỚI: Helius mua lại Light Protocol
Firedancer là gì? Tìm hiểu chuyên sâu về Solana 2.0
Blog/Nghiên cứu

Firedancer là gì? Tìm hiểu chuyên sâu về Solana 2.0

Developer Experience Engineer0xIchigo trên X0xIchigo trên LinkedIn0xIchigo trên GitHub
Đọc trong 46 phút

Xin chân thành cảm ơn đội ngũ Firedancer đã xem xét bài viết này.

Bài viết này nói về điều gì?

Solana là blockchain nhanh nhất. Nhưng nó vẫn có thể nhanh hơn nữa. Client trình xác thực hiện tại của Solana Labs hoạt động tốt, nhưng được tối ưu để nhanh chóng đưa sản phẩm ra thị trường. Nhờ kinh nghiệm rút ra từ quá khứ, cơ hội xây dựng lại từ đầu và hàng chục năm kinh nghiệm về điện toán hiệu năng cao, Jump quyết tâm giúp Solana nhanh và đáng tin cậy hơn nữa. Vận dụng kinh nghiệm trong giao dịch tần suất cao, Jump đang phát triển Firedancer. Đây là client trình xác thực có hiệu năng cao nhất trên mọi blockchain. Firedancer đề xuất viết lại hoàn toàn client trình xác thực hiện tại của Solana bằng ngôn ngữ lập trình C.

Bài viết này tìm hiểu về trình xác thực và tầm quan trọng của tính đa dạng client trình xác thực. Tiếp đó, chúng ta sẽ xem xét lý do Jump xây dựng một client trình xác thực mới và vì sao kinh nghiệm giao dịch tần suất cao khiến họ trở thành đội ngũ lý tưởng để phát triển Firedancer. Sau đó, chúng tôi sẽ giải thích Firedancer là gì, cách hoạt động, lý do nó nhanh, cách nó được bảo mật và trạng thái hiện tại.

Sau khi đọc xong bài viết này, bạn sẽ hiểu thấu đáo về client trình xác thực mới của Jump. Bạn sẽ nắm được những phương pháp tối ưu mang tính đột phá giúp nó trở thành client trình xác thực có hiệu năng cao nhất trên mọi blockchain. Bạn cũng sẽ hiểu vì sao Firedancer đóng vai trò thiết yếu đối với hiệu năng và độ tin cậy của mạng Solana. Đây là bài viết duy nhất bạn cần để tìm hiểu về Firedancer.

Phần Phụ lục bao gồm nội dung nhập môn hoàn toàn không bắt buộc về phần cứng máy tính và mạng. Phần này cung cấp bối cảnh cần thiết để độc giả phổ thông có thể hiểu các khái niệm nâng cao hơn về phần cứng và mạng được đề cập trong bài viết. Dù vậy, bối cảnh vẫn được bổ sung ở những nơi cần thiết. Bài viết hướng đến tính dễ tiếp cận để bất kỳ ai sử dụng Solana cũng có thể hiểu Firedancer và tầm quan trọng của nó.

Trình xác thực là gì và tính đa dạng client trình xác thực là gì?

Trình xác thực là một máy tính tham gia vào blockchain Proof of Stake. Các trình xác thực tạo nên nền tảng cốt lõi của mạng Solana. Chúng chịu trách nhiệm xử lý giao dịch và tham gia đồng thuận. Trình xác thực giúp bảo mật mạng bằng cách khóa một lượng token gốc nhất định của Solana làm cổ phần stake. Có thể coi đây là một khoản ký quỹ bảo đảm, khiến trình xác thực phải chịu rủi ro tài chính trước mạng. Ràng buộc này khuyến khích các trình xác thực thực hiện nhiệm vụ chính xác và hiệu quả vì họ nhận được phần thưởng cho đóng góp của mình. Các trình xác thực cũng bị phạt nếu có hành vi độc hại hoặc hoạt động sai lệch. Cổ phần stake của trình xác thực sẽ bị giảm nếu có hành vi không đúng chuẩn thông qua một quy trình gọi là slashing. Vì vậy, thực hiện đúng nhiệm vụ để gia tăng cổ phần stake là điều có lợi nhất cho trình xác thực.

Client trình xác thực là các ứng dụng mà trình xác thực dùng để thực hiện nhiệm vụ. Client đóng vai trò nền tảng cho trình xác thực, sử dụng danh tính mật mã duy nhất của họ để tham gia đồng thuận.

Việc có nhiều client khác biệt với nhau giúp cải thiện khả năng chịu lỗi khi một cách triển khai gặp sự cố. Chẳng hạn, nếu không client nào kiểm soát hơn 33% cổ phần stake, một sự cố hoặc lỗi ảnh hưởng đến tính hoạt động liên tục sẽ không làm sập mạng. Tương tự, nếu một client có lỗi dẫn đến chuyển đổi trạng thái không hợp lệ, mạng vẫn có thể tránh được lỗi an toàn nếu chưa đến 33% cổ phần stake sử dụng client đó. Nguyên nhân là phần lớn mạng vẫn duy trì trạng thái hợp lệ, qua đó ngăn blockchain bị phân tách hoặc phân nhánh. Vì vậy, tính đa dạng client trình xác thực giúp mạng bền bỉ hơn vì lỗi hoặc lỗ hổng trong một client sẽ không làm tê liệt toàn bộ mạng.

Tính đa dạng client được đo bằng tỷ lệ phần trăm cổ phần stake chạy qua từng client và tổng số client hiện có. Tại thời điểm viết bài, mạng Solana có 1979 trình xác thực. Hai client mà các trình xác thực này sử dụng trên mainnet do Solana Labs và Jito Labs cung cấp. Solana ra mắt vào tháng 3 năm 2020 với một client trình xác thực do Solana Labs phát triển. Tháng 8 năm 2022, Jito Labs phát hành client trình xác thực thứ hai. Client này là một fork từ mã của Solana Labs, do Jito duy trì và triển khai. Client này tối ưu hóa việc trích xuất MEV (giá trị có thể trích xuất tối đa) trong các block. Client của Jito tạo một pseudo-mempool vì Solana truyền trực tiếp các block mà không có mempool. Nói thêm, mempool hay vùng nhớ giao dịch là tập hợp tồn đọng gồm các giao dịch đang chờ xử lý và chưa được xác nhận. Pseudo-mempool cho phép các trình xác thực tìm kiếm trong những giao dịch này, kết hợp chúng thành các gói tối ưu và gửi đến Block Engine của Jito.

Tính đến tháng 10 năm 2023, client của Solana Labs nắm giữ 68,55% cổ phần stake đang hoạt động, còn Jito nắm giữ 31,45%. Số trình xác thực sử dụng client của Jito đã tăng 16% so với Báo cáo tình trạng trước đó của Solana Foundation. Việc sử dụng client của Jito ngày càng tăng cho thấy xu hướng tích cực hướng tới tính đa dạng client.

Dù tin tức tăng trưởng này rất đáng phấn khởi, tình hình vẫn chưa hoàn hảo. Cần nhấn mạnh rằng client của Jito là một fork của client Solana Labs. Điều này có nghĩa là Jito chia sẻ nhiều thành phần với cơ sở mã trình xác thực ban đầu và có khả năng chịu ảnh hưởng từ các lỗi hoặc phương thức khai thác cũng tác động đến client của Labs. Trong một tương lai lý tưởng, Solana sẽ có ít nhất bốn client trình xác thực độc lập. Các đội ngũ khác nhau sẽ xây dựng những client này bằng các ngôn ngữ lập trình khác nhau. Không cách triển khai nào nắm giữ quá 33% cổ phần stake vì mỗi client sẽ nắm khoảng ~25%. Cấu hình lý tưởng này sẽ loại bỏ điểm lỗi đơn lẻ khỏi toàn bộ ngăn xếp trình xác thực.

Phát triển client trình xác thực độc lập thứ hai là yếu tố thiết yếu để hiện thực hóa tương lai này, và Jump quyết tâm biến điều đó thành hiện thực.

Vì sao Jump xây dựng một client trình xác thực mới?

Mainnet của Solana từng bốn lần ngừng sản xuất block. Mỗi lần đều cần hàng trăm trình xác thực khắc phục thủ công. Những sự cố gián đoạn này làm nổi bật mối lo ngại về độ tin cậy của mạng Solana. Jump cho rằng giao thức vẫn vững chắc. Thay vào đó, họ quy nguyên nhân thời gian ngừng hoạt động cho các vấn đề ở mô-đun phần mềm ảnh hưởng đến đồng thuận. Vì vậy, Jump đang phát triển một client trình xác thực mới để giải quyết những vấn đề này. Mục tiêu tổng thể của client là cải thiện tính ổn định và hiệu quả của mạng Solana.

Phát triển một client trình xác thực độc lập là nhiệm vụ khó khăn. Tuy nhiên, đây không phải lần đầu Jump xây dựng một mạng toàn cầu đáng tin cậy. Trước đây, các giao dịch chứng khoán (tức mua và bán cổ phiếu) được các chuyên gia thị trường thực hiện thủ công. Khi các nền tảng giao dịch điện tử xuất hiện, các sở giao dịch chứng khoán trở nên cởi mở hơn. Sự cởi mở này làm tăng tính cạnh tranh và tự động hóa, đồng thời giảm thời gian và chi phí giao dịch cho nhà đầu tư. Từ đó, một cuộc chạy đua vũ trang về công nghệ đã diễn ra giữa các chuyên gia thị trường.

Nhà giao dịch sống để giao dịch. Trải nghiệm giao dịch tối ưu không cho phép thỏa hiệp về các giải pháp phần mềm, phần cứng và mạng. Những hệ thống này phải có trí tuệ máy cao, độ trễ thời gian thực thấp, thông lượng cao, khả năng thích ứng cao, khả năng mở rộng cao, độ tin cậy cao và trách nhiệm giải trình cao.

Các giải pháp hàng hóa phổ thông (tức phần mềm mà doanh nghiệp có thể mua ngay) không tạo ra lợi thế cạnh tranh. Gửi đúng lệnh đến sàn giao dịch mười lần nhưng luôn về nhì là một cách thua lỗ tốn kém. Cạnh tranh khốc liệt trong giao dịch tần suất cao tạo ra một chu kỳ phát triển liên tục nhằm xây dựng cơ sở hạ tầng giao dịch toàn cầu hàng đầu.

Kịch bản này có thể nghe quen thuộc. Yêu cầu của một hệ thống giao dịch thành công tương tự yêu cầu của một blockchain thành công. Blockchain cần là mạng có hiệu năng cao, khả năng chịu lỗi và độ trễ thấp. Blockchain chậm là một công nghệ thất bại, không thể đáp ứng yêu cầu của các ứng dụng doanh nghiệp hiện đại — nó chỉ cản trở đổi mới, khả năng mở rộng và giá trị sử dụng trong thực tế. Với hơn hai thập kỷ kinh nghiệm mở rộng mạng toàn cầu và phát triển hệ thống hiệu năng cao, Jump là đội ngũ lý tưởng để tạo ra một client trình xác thực độc lập. Kevin Bowers, Giám đốc Khoa học của Jump Trading, đang giám sát quy trình này.

Vì sao tốc độ ánh sáng vẫn quá chậm?

Kevin Bowers đã nói rất nhiều về việc tốc độ ánh sáng vẫn quá chậm. Tốc độ ánh sáng là một hằng số hữu hạn, tạo ra giới hạn tự nhiên đối với số phép tính mà một transistor có thể xử lý. Hiện nay, bit được mô hình hóa bằng các electron di chuyển qua transistor. Định lý dung lượng Shannon (tức lượng dữ liệu không lỗi tối đa có thể được truyền qua một kênh) giới hạn số bit được truyền qua transistor. Do các nguyên lý vật lý cơ bản và lý thuyết thông tin, tốc độ tính toán bị giới hạn bởi tốc độ electron có thể di chuyển qua vật chất và lượng dữ liệu có thể được truyền đi. Những hạn chế này trở nên rõ ràng khi siêu máy tính bị đẩy đến giới hạn. Do đó, tồn tại “sự chênh lệch lớn giữa khả năng xử lý số liệu và khả năng di chuyển số liệu của máy tính.”

Hãy lấy CPU Intel Core i9 13900K làm ví dụ. CPU này có 24 lõi x86, xung nhịp cơ bản 2,2 GHz và xung nhịp turbo tối đa 5,8 GHz. Trong trường hợp xấu nhất, ánh sáng sẽ phải di chuyển tổng quãng đường ~52,0 mm trên CPU này. Khoảng cách Manhattan của CPU (tức khoảng cách giữa hai điểm được đo dọc theo các trục vuông góc) là ~73,6 mm. Ở xung nhịp turbo tối đa 5,8 GHz của CPU, ánh sáng có thể di chuyển ~51,7 mm trong không khí. Điều này có nghĩa là tín hiệu gần như có thể hoàn thành một vòng đi và về giữa hai điểm bất kỳ trên CPU trong một chu kỳ xung nhịp.

Thực tế còn tệ hơn nhiều. Các phép đo này sử dụng tốc độ ánh sáng truyền qua không khí, trong khi những tín hiệu này truyền qua silicon dioxide (SiO2). Ánh sáng có thể di chuyển ~26,2 mm trong silicon dioxide trong một chu kỳ xung nhịp 5,8 GHz. Trong silicon (Si), ánh sáng chỉ có thể di chuyển ~15,0 mm trong một chu kỳ xung nhịp 5,8 GHz — nhỉnh hơn một nửa cạnh dài của CPU.

Đội ngũ Firedancer cho rằng những tiến bộ công nghệ điện toán gần đây tập trung vào việc tích hợp thêm nhiều lõi vào CPU thay vì làm cho chúng nhanh hơn. Khi cần hiệu năng cao hơn, mọi người được khuyến khích mua thêm phần cứng. Cách này tạm thời hiệu quả khi thông lượng là nút thắt cổ chai. Nút thắt thực sự là tốc độ ánh sáng. Giới hạn tự nhiên này dẫn đến tình trạng tê liệt trong quá trình ra quyết định. Việc tối ưu một thành phần riêng lẻ không mang lại lợi ích tức thì vì hệ thống có nhiều thành phần và không thành phần nào được tối ưu tốt. Những bộ phận không được tối ưu sẽ ngày càng kém đi vì chúng có ít tài nguyên tính toán hơn. Vậy giờ phải làm gì?

Trong lĩnh vực điện toán hiệu năng cao, cuối cùng mọi thứ đều phải được tối ưu. Kết quả là các hệ thống phục vụ giao dịch thực tế và nghiên cứu định lượng được xây dựng để vận hành ở giới hạn của vật lý và lý thuyết thông tin trên quy mô toàn cầu. Điều này bao gồm từ việc tạo ra công nghệ chuyển mạch mạng tùy chỉnh đến các thuật toán không khóa được thiết kế có tính đến những giới hạn vật lý này. Jump vừa là công ty công nghệ vừa là công ty giao dịch. Ở nơi giao thoa tiên phong giữa khoa học viễn tưởng và thực tế, cùng những điểm tương đồng nổi bật giữa các vấn đề mà Jump và Solana đang đối mặt, Jump đang phát triển Firedancer.

Firedancer là gì?

Firedancer là một client trình xác thực mới, hoàn toàn độc lập, do đội ngũ Firedancer phát triển bằng ngôn ngữ lập trình C. Firedancer được xây dựng với trọng tâm là độ tin cậy nhờ kiến trúc mô-đun, số lượng phần phụ thuộc tối thiểu và quy trình kiểm thử toàn diện. Nó đề xuất viết lại phần lớn ba thành phần chức năng của client Solana Labs: Mạng, Runtime và Đồng thuận. Mỗi lớp đều được tối ưu để đạt hiệu năng tối đa, nhờ đó client sẽ hoạt động ở công suất chỉ bị giới hạn bởi phần cứng của trình xác thực. Điều này khác với những giới hạn hiệu năng mà các trình xác thực hiện gặp phải do phần mềm kém hiệu quả. Với Firedancer, Solana sẽ mở rộng theo băng thông và phần cứng.

Mục tiêu của Firedancer là:

  • Lập tài liệu và chuẩn hóa giao thức Solana (cuối cùng, một người có thể tạo trình xác thực Solana chỉ bằng cách xem tài liệu mà không cần xem mã trình xác thực Rust)
  • Tăng tính đa dạng client trình xác thực
  • Cải thiện hiệu năng của hệ sinh thái

Firedancer hoạt động như thế nào?

Kiến trúc mô-đun

Firedancer khác biệt với các client trình xác thực Solana hiện tại nhờ kiến trúc mô-đun đặc trưng. Không giống client trình xác thực Rust của Solana Labs vận hành dưới dạng một tiến trình duy nhất, Firedancer bao gồm nhiều tiến trình Linux C riêng lẻ được gọi là tile. Một tile là một tiến trình cùng một phần bộ nhớ. Kiến trúc tile này là nền tảng cho triết lý vận hành và cách Firedancer tiếp cận độ bền bỉ cùng hiệu quả.

Tiến trình là một phiên bản đang chạy của chương trình. Đây là thành phần cơ bản của các hệ điều hành hiện đại và đại diện cho việc thực thi một tập hợp chỉ thị. Mỗi tiến trình có không gian bộ nhớ và tài nguyên riêng do hệ điều hành cấp phát, đồng thời hoạt động độc lập với các tiến trình khác. Có thể hình dung tiến trình như một công nhân độc lập trong nhà máy lớn, xử lý một nhiệm vụ cụ thể bằng công cụ và không gian làm việc riêng.

Trong Firedancer, mỗi tile là một tiến trình riêng lẻ có vai trò xác định. Ví dụ, tile QUIC chịu trách nhiệm xử lý lưu lượng QUIC đi vào và chuyển tiếp các giao dịch được đóng gói đến tile verify. Tile verify chịu trách nhiệm xác minh chữ ký, và mỗi tile khác cũng có nhiệm vụ tương ứng. Các tile này hoạt động độc lập và đồng thời, góp phần tạo nên chức năng tổng thể của hệ thống. Các tiến trình Linux riêng lẻ tạo ra các miền lỗi nhỏ và độc lập. Điều này có nghĩa là vấn đề trong một tile chỉ ảnh hưởng tối thiểu — hay có “bán kính ảnh hưởng” nhỏ — đến toàn bộ hệ thống. Cách tiếp cận này khác với client Rust của Solana Labs vì một điểm lỗi đơn lẻ không thể ngay lập tức làm tổn hại toàn bộ trình xác thực.

Một ưu điểm chính trong kiến trúc của Firedancer là khả năng thay thế và nâng cấp từng tile trong vài giây mà không gây thời gian ngừng hoạt động. Khả năng này hoàn toàn trái ngược với yêu cầu phải tắt toàn bộ trước khi nâng cấp của client Rust thuộc Solana Labs. Sự khác biệt bắt nguồn từ việc Rust thiếu tính ổn định ABI (Application Binary Interface). Điều này ngăn cản việc nâng cấp tức thời trong môi trường Rust thuần túy. Việc sử dụng các tiến trình C, tận dụng tính ổn định nhị phân trong mô hình runtime C, giúp giảm đáng kể thời gian ngừng hoạt động liên quan đến nâng cấp. Firedancer làm được điều này vì các tile quản lý trạng thái trình xác thực trong những không gian làm việc khác nhau. Các đối tượng bộ nhớ dùng chung này tồn tại miễn là trình xác thực còn được bật. Mỗi tile có thể tiếp tục xử lý liền mạch từ vị trí đã dừng khi khởi động lại hoặc nâng cấp.

Nhìn chung, Firedancer được xây dựng theo kiến trúc dựa trên tile và nhận biết NUMA. Chúng ta sẽ tìm hiểu ý nghĩa của điều này trong phần tiếp theo. Hiện tại, có thể hiểu kiến trúc này cung cấp tài nguyên phần cứng riêng cho mỗi luồng. Trong kiến trúc này, mỗi tile sử dụng 1 lõi CPU. Nó hỗ trợ truyền thông điệp hiệu năng cao giữa các tile, được tối ưu cho tính cục bộ bộ nhớ, cách bố trí tài nguyên và độ trễ của thành phần.

Xử lý mạng

Khả năng xử lý mạng của Firedancer được thiết kế để đáp ứng những yêu cầu khắt khe của mạng Solana khi mở rộng lên tốc độ gigabit mỗi giây. Quy trình này được chia thành hoạt động đi vào và đi ra.

Hoạt động đi vào chủ yếu xoay quanh việc nhận giao dịch từ người dùng. Hiệu năng của Firedancer rất quan trọng vì thông điệp đồng thuận có thể bị mất nếu trình xác thực chậm trễ trong việc xử lý gói tin. Băng thông vận hành hiện tại của một node Solana là ~0,2 Gbps, trong khi mức tăng đột biến lớn nhất từng được ghi nhận trên một node của Jump là ~40 GBps. Mức tăng đột biến về băng thông này cho thấy sự cần thiết của một giải pháp xử lý dữ liệu đầu vào bền bỉ và có khả năng mở rộng.

Hoạt động đi ra bao gồm đóng gói block, tạo block và gửi shred. Mỗi bước đều rất quan trọng đối với hoạt động an toàn và hiệu quả của mạng Solana. Hiệu năng của những tác vụ này không chỉ ảnh hưởng đến thông lượng mà còn đến độ tin cậy tổng thể của mạng.

Firedancer hướng đến giải quyết những điểm yếu trước đây trong giao diện ngang hàng của Solana dùng để xử lý giao dịch. Một thiếu sót lớn trước đây của giao diện ngang hàng Solana là không có cơ chế kiểm soát tắc nghẽn đối với giao dịch đi vào. Thiếu sót này đã dẫn đến các sự cố mạng nghiêm trọng vào ngày 14 tháng 9 năm 2021 (17 giờ) và ngày 30 tháng 4 năm 2022 (7 giờ).

Để ứng phó, Solana đã thực hiện một số nâng cấp mạng nhằm xử lý đúng cách tải giao dịch lớn. Firedancer cũng làm theo bằng cách áp dụng QUIC để kiểm soát luồng. QUIC là giao thức mạng truyền tải ghép kênh, tạo nên nền tảng của HTTP/3. Giao thức này đóng vai trò quan trọng trong việc bảo vệ khỏi DDoS và quản lý lưu lượng mạng. Tuy nhiên, cần lưu ý rằng trong một số trường hợp, chi phí lớn hơn lợi ích. QUIC kết hợp với phần cứng chuyên dụng của trung tâm dữ liệu để giảm thiểu các cuộc tấn công DDoS sẽ loại bỏ động cơ gây tràn giao dịch.

Đặc tả dài 151 trang của QUIC khiến quá trình phát triển trở nên phức tạp đáng kể. Do không tìm được thư viện C hiện có đáp ứng nhu cầu về giấy phép, hiệu năng và độ tin cậy, đội ngũ Firedancer đã xây dựng cách triển khai riêng. Cách triển khai QUIC của Firedancer, có biệt danh fd_quic, sử dụng các cấu trúc dữ liệu và thuật toán được tối ưu để giảm thiểu việc cấp phát bộ nhớ và ngăn bộ nhớ bị cạn kiệt.

Ngăn xếp mạng tùy chỉnh của Firedancer là thành phần cốt lõi trong khả năng xử lý của nó. Ngăn xếp này được thiết kế từ đầu để tận dụng receive-side scaling (RSS). RSS là một hình thức cân bằng tải mạng được tăng tốc bằng phần cứng, phân phối lưu lượng mạng giữa nhiều lõi CPU để tăng khả năng xử lý mạng song song. Mỗi lõi CPU xử lý một phần lưu lượng đi vào với chi phí vận hành tối thiểu. Cách tiếp cận này vượt trội hơn phương pháp cân bằng tải dựa trên phần mềm truyền thống vì loại bỏ nhu cầu sử dụng bộ lập lịch phức tạp, khóa và thao tác nguyên tử.

Firedancer giới thiệu một framework truyền thông điệp mới để xây dựng ứng dụng từ các tile hiệu năng cao. Những tile này có thể bỏ qua cơ chế mạng của kernel vốn bị giới hạn do dựa trên socket bằng cách sử dụng AF_XDP. AF_XDP là một họ địa chỉ được tối ưu để xử lý gói tin hiệu năng cao. Việc sử dụng AF_XDP cho phép Firedancer đọc trực tiếp từ bộ đệm của giao diện mạng.

Hệ thống tile này hỗ trợ nhiều khái niệm điện toán hiệu năng cao trong ngăn xếp Firedancer. Bao gồm:

  • Nhận biết NUMA - NUMA (Truy cập bộ nhớ không đồng nhất) là thiết kế bộ nhớ máy tính trong đó bộ xử lý có thể truy cập bộ nhớ riêng nhanh hơn bộ nhớ liên kết với bộ xử lý khác. Đối với Firedancer, nhận biết NUMA có nghĩa là client có thể xử lý bộ nhớ hiệu quả trong các cấu hình đa bộ xử lý. Điều này rất quan trọng khi xử lý khối lượng giao dịch lớn vì nó tối ưu hóa việc sử dụng tài nguyên phần cứng sẵn có.
  • Tính cục bộ của bộ nhớ đệm - Tính cục bộ của bộ nhớ đệm là việc sử dụng dữ liệu đã có trong bộ nhớ đệm gần bộ xử lý. Đây thường là một dạng phức tạp của tính cục bộ theo thời gian (tức dữ liệu được truy cập gần đây). Trong Firedancer, việc tập trung vào tính cục bộ của bộ nhớ đệm có nghĩa là hệ thống được thiết kế để xử lý dữ liệu mạng đồng thời giảm thiểu độ trễ và tối đa hóa tốc độ.
  • Xử lý đồng thời không khóa - Xử lý đồng thời không khóa là việc thiết kế các thuật toán không cần cơ chế khóa (chẳng hạn như mutex) để quản lý các hoạt động đồng thời. Với Firedancer, xử lý đồng thời không khóa cho phép nhiều hoạt động mạng diễn ra song song mà không bị trì hoãn do khóa. Cơ chế này tăng cường khả năng xử lý đồng thời số lượng lớn giao dịch của Firedancer.
  • Kích thước trang lớn - Sử dụng kích thước trang lớn trong quản lý bộ nhớ giúp xử lý các tập dữ liệu bằng cách giảm số lần tra cứu bảng trang và khả năng phân mảnh bộ nhớ. Với Firedancer, điều này giúp cải thiện hiệu quả xử lý bộ nhớ, mang lại lợi ích khi xử lý khối lượng lớn dữ liệu mạng.

Hệ thống build

Hệ thống build của Firedancer được thiết kế theo một bộ nguyên tắc định hướng nhằm đảm bảo độ tin cậy và tính nhất quán. Hệ thống chú trọng giảm thiểu các phần phụ thuộc bên ngoài và coi mọi công cụ tham gia quy trình build cũng là phần phụ thuộc. Điều này bao gồm việc cố định mọi phần phụ thuộc, kể cả trình biên dịch, vào các phiên bản chính xác. Một khía cạnh quan trọng của hệ thống này là khả năng cô lập môi trường trong các bước build. Cô lập môi trường giúp tăng tính linh động vì quy trình build không bị ảnh hưởng bởi môi trường hệ thống.

Vì sao Firedancer nhanh đến vậy?

Khả năng song song hóa dữ liệu nâng cao

Cách Firedancer xử lý các tác vụ mật mã như xác minh chữ ký ED25519 tận dụng khả năng song song hóa dữ liệu nâng cao có trong các bộ xử lý hiện đại. CPU hiện đại có các lệnh Một lệnh, nhiều dữ liệu (SIMD) để xử lý đồng thời nhiều phần tử dữ liệu, cùng các cơ chế tối ưu hóa cho phép thực thi nhiều lệnh trong mỗi chu kỳ CPU. Nhìn chung, để một lệnh duy nhất thao tác song song trên một mảng hoặc vector các phần tử dữ liệu sẽ hiệu quả hơn về diện tích, thời gian và năng lượng. Xét trên phương diện này, những cải tiến trong xử lý dữ liệu song song có thể tác động đến thông lượng nhiều hơn so với việc chỉ tăng tốc độ xử lý.

Một lĩnh vực mà Firedancer áp dụng khả năng song song hóa dữ liệu là tối ưu hóa quá trình tính toán xác minh chữ ký. Phương pháp này cho phép xử lý đồng thời các mảng hoặc vector phần tử dữ liệu để tối đa hóa thông lượng và giảm thiểu độ trễ. Nền tảng của cách triển khai ED25519 này là số học Trường Galois. Dạng số học này rất phù hợp với các thuật toán mật mã và phép tính nhị phân. Trong Trường Galois, các phép toán như cộng, trừ, nhân và chia được định nghĩa theo cách phù hợp với bản chất nhị phân của hệ thống máy tính. Dưới đây là ví dụ về một Trường Galois được xác định bởi 23:

Vấn đề duy nhất là ED25519 sử dụng một Trường Galois được xác định bởi 2255-19. Có thể hình dung các phần tử của trường là những số từ 0 đến 2255-19. Các phép toán cơ bản trông như sau:

  • x + y → phép cộng kiểu phổ thông mod 2255-19
  • x - y → phép trừ kiểu phổ thông mod 2255-19
  • x * y → phép nhân kiểu phổ thông mod 2255-19
  • 1/x → x lũy thừa 2255-21 mod 2255-19

Phép cộng, trừ và nhân gần như là các phép toán uint256_t (tức là phép toán với số nguyên không dấu, trong đó giá trị lớn nhất là 2256-1). Phép chia rất khó tính toán. CPU và GPU phổ thông không thực hiện phép toán uint256_t, chưa nói đến “phép toán gần như uint256_t”, càng chưa nói đến phép chia đặc biệt khó và khác thường. Việc triển khai loại phép toán này với hiệu năng cao phụ thuộc vào khả năng mô phỏng nó hiệu quả đến đâu.

Cách triển khai của Firedancer phân rã các phép toán bằng cách nhìn nhận số một cách linh hoạt hơn. Nếu áp dụng nguyên tắc chia dài và nhân dài kiểu phổ thông, trong đó số nhớ được chuyển từ cột này sang cột tiếp theo, chúng ta có thể xử lý song song các cột này. Cách nhanh nhất để mô phỏng loại phép toán này là biểu diễn một uint256_t dưới dạng sáu chữ số 43 bit với phần “nhớ” 9 bit. Cách này cho phép sử dụng các phép toán 64 bit sẵn có trên CPU, đồng thời cung cấp đủ không gian cho các bit nhớ. Cách sắp xếp số này giảm nhu cầu lan truyền số nhớ thường xuyên và cho phép Firedancer xử lý số lớn hiệu quả hơn.

Cách triển khai này tận dụng khả năng song song hóa dữ liệu bằng cách tổ chức lại các phép tính số học thành tổng theo cột được xử lý song song. Xử lý song song các cột giúp tăng tốc toàn bộ quá trình tính toán bằng cách biến một điểm nghẽn tuần tự thành tác vụ có thể song song hóa. Firedancer cũng sử dụng các tập lệnh vector hóa như AVX512 và phần mở rộng IFMA (AVX512-IFMA). Các tập lệnh này cho phép xử lý số học Trường Galois đã giải thích ở trên, qua đó nâng cao tốc độ và hiệu quả.

Cách triển khai được tăng tốc bằng AVX512 của Firedancer rất nhanh. Trên một lõi máy chủ Icelake 2,3 GHz, hiệu năng trên mỗi xung nhịp lõi cao hơn gấp đôi so với bản trình diễn Breakpoint năm 2022 của họ. Cách triển khai này đạt mức sử dụng 100% các lane vector và khả năng song song hóa dữ liệu ở quy mô lớn. Đây là một minh chứng xuất sắc khác từ đội ngũ Firedancer rằng do độ trễ từ giới hạn tốc độ ánh sáng, thực hiện song song nhiều tác vụ độc lập dễ hơn nhiều so với thực hiện từng tác vụ một, ngay cả khi sử dụng phần cứng chuyên dụng.

Khai thác FPGA cho truyền thông mạng tốc độ cao

CPU có thể xử lý ~30.000 lượt xác minh chữ ký mỗi giây trên mỗi lõi. Dù tiết kiệm năng lượng, CPU vẫn chưa đáp ứng được các hoạt động quy mô lớn. Hạn chế này bắt nguồn từ cách xử lý tuần tự. GPU nâng khả năng xử lý lên ~1 triệu lượt xác minh mỗi giây trên mỗi lõi. Tuy nhiên, GPU bị hạn chế bởi mức tiêu thụ điện năng lớn, khoảng ~300W mỗi thiết bị, cùng độ trễ cố hữu do xử lý theo lô.

FPGA nổi lên như một lựa chọn vượt trội. Chúng có thông lượng ngang với GPU nhưng tiêu thụ ít điện năng hơn đáng kể, khoảng 50W trên mỗi FPGA. Độ trễ của FPGA cũng thấp hơn mức mười mili giây của GPU. Với độ trễ ~200 micro giây, FPGA cung cấp giải pháp phản hồi nhanh hơn nhiều cho xử lý theo thời gian thực. Không giống GPU xử lý theo lô, FPGA trong Firedancer xử lý riêng từng giao dịch theo phương thức streaming. Việc sử dụng FPGA cho phép Firedancer đạt thông lượng ấn tượng 8 triệu chữ ký mỗi giây với ngân sách điện năng dưới 400 W cho 8 FPGA.

Đội ngũ đã trình diễn quy trình xác minh chữ ký ED25519 của Firedancer tại Breakpoint 2022. Quy trình này gồm nhiều giai đoạn, trong đó có tính toán SHA-512 trong một pipeline RTL thuần túy, cùng nhiều bước kiểm tra và tính toán trong pipeline bộ xử lý ECC-CPU tùy chỉnh. Về cơ bản, đội ngũ Firedancer đã viết một trình biên dịch và trình hợp dịch cho bộ xử lý tùy chỉnh của mình, lấy mã Python từ RFC (Yêu cầu bình luận), chạy mã đó với các đối tượng nạp chồng toán tử để tạo mã máy, rồi đưa mã máy lên ECC-CPU.

Điều quan trọng cần lưu ý là Firedancer sử dụng kiểu dáng bộ tăng tốc AWS để cân bằng giữa tính bền vững và khả năng kết nối mạng. Lựa chọn này giải quyết những thách thức liên quan đến kết nối mạng trực tiếp — một tính năng thường bị các nhà cung cấp dịch vụ đám mây hạn chế. Nhờ đó, Firedancer bảo đảm các khả năng nâng cao được tích hợp liền mạch trong giới hạn của hạ tầng đám mây.

Điều cốt yếu là phải nhận ra rằng các phép toán khác nhau cần không gian vật lý hữu hình, chứ không chỉ không gian dữ liệu về mặt khái niệm. Firedancer áp dụng nhận thức này bằng cách bố trí chiến lược các thành phần vật lý ở gần nhau và có thể tái sử dụng. Cấu hình này cho phép Firedancer tối đa hóa hiệu quả của FPGA, đạt 8 triệu TPS bằng một FPGA 7 năm tuổi trên một máy 8 năm tuổi.

Tối ưu hóa mã hóa Reed-Solomon cho truyền thông mạng

Thách thức cơ bản trong truyền thông mạng là phát các giao dịch mới ra toàn thế giới. Bản chất điểm-điểm của Internet, băng thông hữu hạn và các vấn đề về độ trễ làm hạn chế việc triển khai những ý tưởng truyền thống như sử dụng mạng để phát trực tiếp. Phân phối dữ liệu theo cấu trúc vòng hoặc cây giải quyết được một phần các vấn đề này, nhưng vẫn chưa đủ vì các gói dữ liệu có thể bị thất lạc trong quá trình truyền.

Mã hóa Reed-Solomon là một giải pháp tinh tế cho những vấn đề này. Phương pháp này bổ sung dữ liệu dư thừa khi truyền (tức là thông tin chẵn lẻ) để khôi phục các gói bị mất. Khái niệm này dựa trên nguyên tắc hai điểm xác định một đường thẳng và hai điểm bất kỳ trên đường thẳng đó đều có thể tái tạo các điểm dữ liệu ban đầu. Bằng cách xây dựng một đa thức dựa trên các điểm dữ liệu và phân phối các điểm khác nhau của hàm này trong những gói riêng biệt, dữ liệu gốc có thể được tái tạo miễn là bên nhận nhận được ít nhất hai gói.

Chúng ta xây dựng đa thức vì việc sử dụng công thức truyền thống cho các điểm trên một đường thẳng (y = mx + b) có tốc độ tính toán chậm. Firedancer sử dụng Đa thức Lagrange, một phương pháp chuyên biệt để xây dựng đa thức, nhằm tăng tốc quá trình. Phương pháp này đơn giản hóa việc tạo đa thức cần thiết cho mã hóa Reed-Solomon. Đồng thời, nó biến quy trình thành một phép nhân ma trận-vector hiệu quả hơn, hoạt động được với các đa thức bậc cao hơn. Ma trận này có cấu trúc chặt chẽ, với các mẫu lặp lại theo cách đệ quy sao cho hàng đầu tiên của mẫu xác định hoàn toàn ma trận. Cấu trúc này cho phép nhân mọi thứ theo cách nhanh hơn. Firedancer sử dụng phương pháp O(n log n) được trình bày trong một bài viết năm 2016 để nhân với ma trận này. Đây là phương pháp lý thuyết nhanh nhất từng được biết đến cho mã hóa Reed-Solomon. Kết quả là thông tin chẵn lẻ được tính toán hiệu quả hơn so với các phương pháp truyền thống:

  • Mã hóa RS trên ~120 Gbps/lõi
  • Giải mã RS lên đến ~50 Gbps/lõi
  • Tất cả chỉ số này được so sánh với tốc độ mã hóa RS hiện tại là ~8 Gbps/lõi (rust-rse)

Firedancer có thể tính toán thông tin chẵn lẻ nhanh hơn 14 lần so với các phương pháp truyền thống nhờ cách tiếp cận tối ưu hóa cho mã hóa Reed-Solomon này. Kết quả là một quy trình mã hóa và giải mã dữ liệu nhanh, đáng tin cậy, điều thiết yếu để duy trì thông lượng cao và độ trễ thấp trên quy mô toàn cầu.

Firedancer được bảo mật như thế nào?

Cơ hội

Hiện tại, tất cả validator đều sử dụng phần mềm dựa trên client validator ban đầu. Firedancer có thể cải thiện tính đa dạng của client và chuỗi cung ứng Solana nếu khác biệt với client Solana Labs. Điều này bao gồm cả việc sử dụng các phần phụ thuộc tương tự và dùng Rust để phát triển client của họ.

Các client validator Solana Labs và Jito chạy dưới dạng một tiến trình duy nhất. Việc bổ sung bảo mật cho một ứng dụng nguyên khối sau khi đã vận hành trong môi trường production rất khó. Các validator chạy những client này sẽ phải tắt hệ thống để thực hiện nâng cấp bảo mật trực tiếp bằng Rust thuần túy. Với client mới, đội ngũ Firedancer có thể xây dựng kiến trúc bảo mật ngay từ đầu.

Firedancer còn có lợi thế học hỏi từ kinh nghiệm. Solana Labs đã phát triển client validator trong môi trường startup. Nhịp độ nhanh của môi trường này buộc Labs phải tiến nhanh để sớm đưa sản phẩm ra thị trường. Điều đó tạo ra nền tảng không thuận lợi cho quá trình phát triển sau này. Đội ngũ Firedancer có thể xem xét những gì Labs và các đội ngũ trên các blockchain khác đã làm, rồi đặt câu hỏi rằng họ sẽ làm gì khác đi nếu có thể phát triển một client validator từ đầu.

Thách thức

Dù khác biệt với client Solana Labs, Firedancer vẫn phải mô phỏng chặt chẽ hành vi của client này. Nếu không làm được, đây sẽ là một rủi ro bảo mật vì sự không tương thích có thể gây ra lỗi đồng thuận. Có thể giảm thiểu rủi ro này bằng cách khuyến khích một tỷ lệ stake chạy trên cả hai client, đồng thời duy trì Firedancer dưới 33% tổng stake trong một khoảng thời gian dài. Dù thế nào, đội ngũ Firedancer vẫn cần triển khai đầy đủ bộ tính năng của giao thức, bất kể việc triển khai chính xác hoặc an toàn khó đến đâu. Mọi thứ phải tương thích với Firedancer. Vì vậy, đội ngũ không thể phát triển mã một cách biệt lập mà phải đối chiếu với chức năng của client Labs. Tình trạng thiếu đặc tả và tài liệu càng làm vấn đề trầm trọng hơn, đồng nghĩa Firedancer phải đưa vào các cấu trúc kém hiệu quả từ giao thức.

Đội ngũ Firedaner cũng phải lưu ý rằng họ đang phát triển client mới bằng C. C không có các đảm bảo an toàn bộ nhớ sẵn có như những ngôn ngữ như Rust. Một mục tiêu chính của cơ sở mã Firedancer là giảm số lần xuất hiện và mức độ ảnh hưởng của các lỗ hổng an toàn bộ nhớ. Mục tiêu này cần được đặc biệt chú trọng vì Firedancer là một dự án phát triển nhanh. Firedancer phải tìm cách duy trì tốc độ phát triển mà không gây ra các lỗi như vậy. Cô lập OS là phương pháp tách các tile khỏi OS. Tile chỉ được phép truy cập tài nguyên và thực hiện các lệnh gọi hệ thống cần thiết cho công việc. Vì mỗi tile có mục đích được xác định rõ ràng và đội ngũ Firedancer đã phát triển phần lớn mã client, quyền của tile được cắt giảm theo Nguyên tắc đặc quyền tối thiểu.

Triển khai thiết kế phòng thủ theo chiều sâu

Mọi phần mềm đều sẽ có lỗ hổng bảo mật vào một thời điểm nào đó. Xuất phát từ tiền đề rằng phần mềm sẽ có lỗi, Firedancer chọn cách hạn chế tác động tiềm tàng của từng lỗ hổng. Phương pháp này được gọi là phòng thủ theo chiều sâu. Phòng thủ theo chiều sâu là chiến lược sử dụng nhiều biện pháp bảo mật để bảo vệ một tài sản. Nếu kẻ tấn công xâm nhập một phần của hệ thống, các biện pháp bổ sung sẽ ngăn mối đe dọa ảnh hưởng đến toàn bộ stack.Firedancer được thiết kế để giảm thiểu khả năng chuyển từ giai đoạn tồn tại lỗ hổng sang khai thác. Ví dụ, kẻ tấn công sẽ khó khai thác một lỗ hổng an toàn bộ nhớ.

Lý do là việc ngăn chặn các kiểu tấn công này đã được nghiên cứu kỹ lưỡng. Các nghiên cứu sâu rộng về an toàn bộ nhớ trong C đã tạo ra một kho kỹ thuật gia cố và tính năng trình biên dịch mà đội ngũ sử dụng cho Firedancer. Ngay cả khi kẻ tấn công có thể vượt qua các phương pháp hay nhất trong ngành, lỗ hổng khai thác cũng khó xâm phạm hệ thống. Điều này có được nhờ khả năng cô lập tile và cô lập OS.

Cô lập tile là kết quả của kiến trúc song song trong Firedancer. Mỗi tile có một mục đích duy nhất, rõ ràng vì chúng chạy tiến trình Linux riêng. Ví dụ, tile QUIC chịu trách nhiệm xử lý lưu lượng QUIC đến và chuyển tiếp các giao dịch được đóng gói sang tile xác minh. Sau đó, tile xác minh chịu trách nhiệm xác minh chữ ký. Giao tiếp giữa tile QUIC và tile xác minh được thực hiện thông qua một giao diện bộ nhớ dùng chung (tức là các tiến trình Linux có thể truyền dữ liệu cho nhau). Giao diện bộ nhớ dùng chung giữa hai tile này đóng vai trò là ranh giới cô lập. Nếu tile QUIC có lỗi cho phép kẻ tấn công thực thi mã tùy ý khi xử lý một gói QUIC độc hại, lỗi đó sẽ không ảnh hưởng đến bất kỳ tile nào khác. Trong một tiến trình nguyên khối, hệ thống sẽ bị xâm phạm ngay lập tức. Kẻ tấn công có thể gây hại cho toàn bộ mạng nếu khai thác lỗ hổng này trên nhiều validator. Kẻ tấn công có thể làm suy giảm hiệu năng của tile QUIC, nhưng thiết kế của Firedancer giới hạn họ chỉ trong tile QUIC.

Cô lập OS là phương pháp tách các tile khỏi OS. Tile chỉ được phép truy cập tài nguyên và thực hiện các lệnh gọi hệ thống cần thiết cho công việc. Vì mỗi tile có mục đích được xác định rõ ràng và gần như toàn bộ mã đều do đội ngũ Firedancer phát triển, quyền của tile được cắt giảm theo Nguyên tắc đặc quyền tối thiểu. Các tile được đặt trong namespace Linux riêng, cung cấp góc nhìn hạn chế về hệ thống. Góc nhìn thu hẹp này ngăn tile truy cập phần lớn hệ thống tệp, mạng và mọi tiến trình khác đang chạy trên cùng hệ thống. Namespace cung cấp một ranh giới ưu tiên bảo mật. Tuy nhiên, ranh giới này vẫn có thể bị vượt qua nếu kẻ tấn công có phương thức khai thác kernel để nâng quyền. Giao diện lệnh gọi hệ thống là vector tấn công cuối cùng trong kernel mà tile có thể tiếp cận. Để bảo vệ trước nguy cơ này, Firedancer sử dụng seccomp-BPF để lọc các lệnh gọi hệ thống trước khi kernel xử lý. Client có thể giới hạn tile trong một nhóm lệnh gọi hệ thống được chọn. Trong một số trường hợp, có thể lọc các tham số của syscall. Điều này rất quan trọng vì Firedancer có thể bảo đảm rằng syscall đọc và ghi chỉ thao tác trên các bộ mô tả tệp cụ thể.

Triển khai chương trình bảo mật tích hợp

Firedancer được thiết kế với một chương trình bảo mật toàn diện, tích hợp sâu vào mọi giai đoạn phát triển. Chương trình bảo mật của client là quá trình cộng tác liên tục giữa đội ngũ phát triển và bảo mật, qua đó thiết lập một tiêu chuẩn mới cho công nghệ blockchain an toàn.

Quy trình bắt đầu với hạ tầng fuzzing tự phục vụ. Nói thêm, fuzzing là kỹ thuật tự động phát hiện sự cố hoặc trạng thái lỗi cho thấy có lỗ hổng. Việc này được thực hiện bằng cách kiểm thử chịu tải mọi thành phần tiếp nhận dữ liệu đầu vào không đáng tin cậy từ người dùng, bao gồm giao diện P2P (các parser) và máy ảo SBPF. OSS-Fuzz duy trì phạm vi fuzz liên tục xuyên suốt các thay đổi mã. Đội ngũ bảo mật cũng đã thiết lập một phiên bản ClusterFuzzer chuyên dụng để thực hiện fuzzing liên tục có định hướng theo độ bao phủ. Các nhà phát triển và kỹ sư bảo mật cũng đóng góp những harness fuzzing (tức là các phiên bản đặc biệt của kiểm thử đơn vị dành cho những thành phần trọng yếu về bảo mật). Nhà phát triển cũng có thể đóng góp các bài kiểm thử fuzz mới, sau đó chúng được tự động tiếp nhận và kiểm thử. Mục tiêu là mọi thành phần đều được fuzz kỹ lưỡng trước khi chuyển sang giai đoạn tiếp theo.

Các đợt đánh giá mã nội bộ giúp xác định những lỗi mà công cụ đã bỏ sót. Trọng tâm ở giai đoạn này là các thành phần có rủi ro cao và tác động lớn. Giai đoạn này là một cơ chế phản hồi cho toàn bộ phần còn lại của chương trình bảo mật. Đội ngũ áp dụng mọi bài học và sử dụng các đợt đánh giá này để cải thiện phạm vi fuzzing, bổ sung các bước kiểm tra phân tích tĩnh mới cho một số nhóm lỗi nhất định, thậm chí tái cấu trúc mã trên quy mô lớn để loại bỏ các vector tấn công phức tạp ngay từ thiết kế. Các đợt đánh giá bảo mật bên ngoài do những chuyên gia hàng đầu trong ngành thực hiện và một chương trình săn lỗi tích cực sẽ bổ trợ cho các đợt đánh giá nội bộ này, cả trước và sau khi ra mắt.

Firedancer cũng trải qua quá trình kiểm thử chịu tải toàn diện trên nhiều mạng thử nghiệm. Các mạng thử nghiệm này sẽ phải đối mặt với những cuộc tấn công và sự cố như nhân bản node, lỗi liên kết mạng, tràn gói tin và vi phạm đồng thuận. Những mạng này chịu tải cao hơn đáng kể so với mọi kịch bản thực tế trên mainnet.

Điều này đưa chúng ta đến câu hỏi: trạng thái hiện tại của Firedancer ra sao?

Trạng thái hiện tại của Firedancer ra sao và Frankendancer là gì?

Đội ngũ Firedancer đang phát triển Firedancer theo từng bước để mô-đun hóa client validator. Điều này phù hợp với mục tiêu của họ về tài liệu và tiêu chuẩn hóa. Cách tiếp cận này bảo đảm Firedancer luôn cập nhật những phát triển mới nhất của Solana. Từ đó, Frankendancer ra đời. Frankendancer là mô hình client lai, trong đó đội ngũ Firedancer tích hợp các thành phần đã phát triển vào hạ tầng client validator hiện có. Quy trình phát triển này cho phép từng bước cải thiện và kiểm thử các tính năng mới.

Frankendancer giống như đặt một chiếc xe thể thao giữa dòng giao thông. Hiệu năng sẽ tăng khi có thêm nhiều thành phần được phát triển và các điểm nghẽn được loại bỏ. Quy trình phát triển theo mô-đun này tạo ra một môi trường validator linh hoạt và có thể tùy chỉnh. Tại đây, nhà phát triển có thể sửa đổi hoặc thay thế các thành phần cụ thể trong client validator để phù hợp với nhu cầu của mình.

Những gì thực sự đang chạy?

Frankendancer triển khai tất cả tính năng mạng của một validator Solana:

  • Chiều vào: QUIC, TPU, Sigverify, Dedup
  • Chiều ra: Đóng gói block, tạo/ký/gửi shred (Turbine)

Frankendancer sử dụng mã mạng C hiệu năng cao của Firedancer trên runtime và mã đồng thuận Rust của Solana Labs.

Kiến trúc Frankendancer được thiết kế hướng đến việc tối ưu hóa phần cứng cao cấp. Dù hỗ trợ các máy chủ đám mây phổ thông cấu hình thấp chạy hệ điều hành Linux tiêu chuẩn, đội ngũ Firedancer đang tối ưu hóa Frankendancer cho những máy chủ có số lượng lõi lớn. Mục tiêu dài hạn là tận dụng phần cứng đã có sẵn trên đám mây để nâng cao hiệu quả và hiệu năng. Client hỗ trợ đồng thời nhiều kết nối, tăng tốc phần cứng, điều hướng luồng ngẫu nhiên để phân phối tải (tức là bảo đảm lưu lượng mạng được phân bổ đồng đều) và nhiều ranh giới tiến trình nhằm tăng cường bảo mật giữa các thành phần.

Hiệu quả kỹ thuật là nền tảng cốt lõi của Frankendancer. Hệ thống tránh cấp phát bộ nhớ và các phép toán nguyên tử trên đường xử lý trọng yếu, đồng thời mọi thao tác cấp phát đều được tối ưu hóa cho NUMA khi khởi tạo. Thiết kế này bảo đảm hiệu quả và hiệu năng tối đa. Ngoài ra, khả năng kiểm tra các thành phần hệ thống từ xa theo cách bất đồng bộ, kết hợp với sự linh hoạt trong việc quản lý tile (khởi động, dừng và khởi động lại theo cách bất đồng bộ), giúp hệ thống thêm mạnh mẽ và thích ứng tốt hơn.

Hiệu năng thực tế ra sao?

Frankendancer có thể xử lý 1.000.000 giao dịch mỗi giây (TPS) trên mỗi tile ở phía lưu lượng mạng vào. Hiệu năng này tăng tuyến tính theo số lõi được sử dụng vì mỗi tile dùng 1 lõi CPU. Frankendancer đạt được thành tích này chỉ bằng bốn lõi, khai thác tối đa một card giao diện mạng (NIC) 25 Gbps.

Frankendancer đã cải thiện đáng kể các hoạt động mạng chiều ra nhờ tối ưu hóa Turbine. Phần cứng node tiêu chuẩn hiện nay đạt tốc độ 6 Gbps trên mỗi tile. Điều này bao gồm những cải thiện lớn về tốc độ shredding (tức là cách dữ liệu block được chia nhỏ và gửi qua mạng đến các validator). So với các node Solana tiêu chuẩn hiện nay, Frankendancer cho thấy tốc độ shredding tăng ~22% khi không có cây Merkle và gần gấp đôi khi có cây Merkle. Đây là cải tiến rất lớn đối với hiệu năng truyền block và tiếp nhận giao dịch hiện tại của các validator ngày nay.

Hiệu năng mạng của Firedancer cho thấy nó đã đạt đến giới hạn phần cứng. Firedancer đã đạt hiệu năng tối đa có thể có với phần cứng validator tiêu chuẩn hiện nay. Đây là một cột mốc kỹ thuật quan trọng, thể hiện khả năng xử lý hiệu quả những khối lượng công việc cực lớn của client.

Frankendancer đã hoạt động trên testnet

Frankendancer hiện đang được stake, bỏ phiếu và tạo block trên testnet. Nó cùng tồn tại tương thích với ~2900 validator Solana Labs và Jito khác. Việc triển khai thực tế này chứng minh hiệu năng mạnh mẽ của Firedancer trên phần cứng phổ thông. Hiện tại, nó chạy trên một máy chủ Equinix Metal m3.large.x86 sử dụng CPU AMD EPYC 7513. Nhiều validator khác sử dụng cùng loại máy chủ. Đây là giải pháp tiết kiệm chi phí với mức giá theo nhu cầu thay đổi tùy vị trí. Mức giá dao động từ $3,10 đến $4,65 mỗi giờ.

Tiến trình hướng đến việc ra mắt Firedancer trên mainnet mở ra nhiều khả năng cho phần cứng node:

  • Phần cứng validator hiện tại có thể mang lại năng lực hiệu năng cao hơn nhiều trên mỗi node
  • Hiệu quả của Firedancer cho phép validator sử dụng phần cứng có cấu hình thấp hơn và giá phải chăng hơn trong khi vẫn duy trì mức hiệu năng tương đương
  • Thiết kế của Firedancer giúp nó tận dụng những tiến bộ về phần cứng và băng thông

Những bước phát triển này, cùng các sáng kiến khác như Wiredancer (tức là các thử nghiệm tăng tốc phần cứng của đội ngũ Firedancer) và một Runtime/SVM dạng mô-đun dựa trên Rust, định vị Firedancer là một giải pháp hướng đến tương lai.

Tiến trình của Firedancer cũng mở ra các cuộc thảo luận về khả năng validator chạy client Solana Labs cùng với Firedancer trong một quy trình gọi là side-caring. Cách tiếp cận này có thể tối đa hóa khả năng duy trì hoạt động của mạng bằng cách tận dụng thế mạnh của cả hai client và giảm thiểu tác động tiềm tàng của sự cố trong một trong hai client đối với toàn mạng. Ngoài ra, điều này cũng làm nảy sinh suy đoán về việc liệu các dự án như Jito có cân nhắc fork Firedancer hay không. Việc đó có thể dẫn đến những tối ưu hóa sâu hơn về khai thác MEV và hiệu quả xử lý giao dịch. Chỉ thời gian mới có câu trả lời.

Kết luận

Các nhà phát triển thường hình dung các thao tác chiếm không gian dữ liệu thay vì không gian vật lý. Khi tốc độ ánh sáng là một giới hạn tự nhiên, giả định này dẫn đến các hệ thống chậm và không tối ưu hóa phần cứng đúng cách. Trong một môi trường cạnh tranh khốc liệt và đầy tính đối đầu, chúng ta không nên tiếp tục bổ sung phần cứng cho Solana rồi kỳ vọng hiệu năng sẽ tốt hơn. Chúng ta cần tối ưu hóa. Firedancer tạo ra cuộc cách mạng trong cách cấu trúc và vận hành các client trình xác thực. Bằng cách xây dựng một client trình xác thực đáng tin cậy, có tính mô-đun cao và hiệu năng vượt trội, đội ngũ Firedancer đang chuẩn bị cho Solana được áp dụng rộng rãi.

Dù là nhà phát triển mới vào nghề hay người dùng Solana thông thường, bạn cũng cần hiểu Firedancer và tầm quan trọng của công nghệ này. Thành tựu công nghệ này giúp blockchain nhanh nhất và có hiệu năng cao nhất trên thị trường hiện nay trở nên tốt hơn nữa. Solana được thiết kế như một máy trạng thái toàn cầu có thông lượng cao và độ trễ thấp. Firedancer là một bước tiến vượt bậc để hoàn thiện những mục tiêu đó.

Nếu đã đọc đến đây, cảm ơn bạn, anon! Hãy nhập địa chỉ email bên dưới để không bao giờ bỏ lỡ thông tin cập nhật về những điều mới trên Solana. Sẵn sàng tìm hiểu sâu hơn? Hãy tham gia Discord của chúng tôi để bắt đầu xây dựng tương lai trên blockchain có hiệu năng cao nhất ngay hôm nay.

Tài nguyên bổ sung / Đọc thêm

Phụ lục

Giới thiệu về phần cứng máy tính và mạng

Máy tính là một thiết bị có thể được lập trình để tự động thực hiện các chuỗi phép toán số học hoặc logic. Những thao tác này trải dài từ tự động hóa các phép tính cơ bản đến xử lý dữ liệu phức tạp. Về cốt lõi, máy tính kết hợp các thành phần phần cứng và phần mềm để thực thi chỉ lệnh và quản lý dữ liệu. Phần cứng gồm các thành phần vật lý, còn phần mềm gồm các chương trình và hệ điều hành hướng dẫn phần cứng cách hoạt động.

Hoạt động tính toán hữu ích thường liên quan đến bốn tài nguyên: năng lực tính toán, bộ nhớ, lưu trữ trên ổ đĩa và kết nối mạng. Khía cạnh tính toán, chủ yếu do CPU, GPU và có thể cả FPGA đảm nhiệm, có tốc độ cực nhanh, đủ khả năng thực hiện hàng tỷ phép toán mỗi giây. Việc truy cập RAM thường chậm hơn thực hiện một phép tính trong CPU. Ổ đĩa cung cấp giải pháp lưu trữ dài hạn hữu ích cho hoạt động tính toán. Tuy nhiên, truy cập dữ liệu từ ổ thể rắn (SSD) và ổ đĩa cứng (HDD) chậm hơn nhiều so với các thao tác của CPU. SSD thường chậm hơn hàng nghìn lần, còn HDD chậm hơn hàng chục nghìn lần. Hơn nữa, mạng, bao gồm Internet và mạng cục bộ, là thành phần chậm nhất. Nó có thể chậm hơn CPU tới hơn một triệu lần.

Hiểu những khác biệt về tốc độ này là điều thiết yếu để nắm bắt các nguyên tắc thiết kế và yếu tố hiệu quả trong những ứng dụng điện toán hiệu năng cao như Firedancer. Tốc độ tính toán của CPU đặt ra mốc cơ sở, còn việc truy cập bộ nhớ, ổ đĩa và mạng lần lượt bổ sung các lớp độ trễ theo thứ tự tốc độ giảm dần.

Bộ xử lý trung tâm (CPU)

CPU, hay bộ xử lý trung tâm, là nền tảng cho chức năng của máy tính — chính là bộ não của máy. CPU thực thi các chỉ lệnh phần mềm, thực hiện phép tính và đưa ra quyết định dựa trên dữ liệu đầu vào nhận được. Nó hoạt động bằng cách xử lý các tín hiệu nhị phân, tức các chuỗi số 0 và 1. Mỗi chuỗi mã nhị phân riêng biệt tương ứng với một chỉ lệnh cụ thể mà CPU diễn giải và thực thi. Các chỉ lệnh này được xử lý tuần tự, trong đó CPU hoàn thành một thao tác trước khi chuyển sang thao tác tiếp theo. Quá trình xử lý chỉ lệnh tuần tự này là nền tảng cho vai trò của CPU, quyết định cách CPU thực hiện các phép tính phức tạp và đưa ra quyết định dựa trên dữ liệu đầu vào nhận được.

CPU hiện đại thường có nhiều lõi. Điều này nghĩa là chúng chứa nhiều đơn vị xử lý trong một chip duy nhất, được gọi là các lõi. Mỗi lõi có thể thực thi chỉ lệnh độc lập, cho phép xử lý tác vụ song song. Kiến trúc đa lõi tăng cường khả năng xử lý đồng thời nhiều thao tác của CPU, qua đó cải thiện đáng kể hiệu năng tổng thể. Tuy nhiên, cần lưu ý rằng các thao tác trong từng lõi vẫn được xử lý tuần tự. Vì vậy, CPU rất phù hợp với các tác vụ phức tạp, tuần tự nhưng kém hiệu quả đối với khối lượng lớn tác vụ song song đơn giản hơn.

CPU cũng có bộ nhớ đệm — các đơn vị bộ nhớ nhỏ, tốc độ cao bên trong CPU. Những bộ nhớ đệm này lưu dữ liệu và chỉ lệnh được truy cập thường xuyên, giúp truy xuất nhanh hơn so với lấy dữ liệu từ RAM. Thông thường có nhiều cấp bộ nhớ đệm (L1, L2, L3 và đôi khi là L4), mỗi cấp có dung lượng và tốc độ khác nhau. Bộ nhớ đệm L1 nhỏ nhất và nhanh nhất nên được truy cập đầu tiên. Nếu không tìm thấy dữ liệu cần thiết ở đó, CPU sẽ kiểm tra bộ nhớ đệm L2 lớn hơn nhưng chậm hơn một chút, rồi tiếp tục tương tự. Hệ thống bộ nhớ đệm phân cấp này làm giảm thời gian CPU phải chờ dữ liệu từ RAM và tăng tốc độ xử lý tổng thể. Việc sử dụng bộ nhớ đệm hiệu quả có ý nghĩa rất lớn đối với một ứng dụng như Firedancer, nơi khoảng cách từ CPU đến RAM có thể cản trở hiệu năng. Điều này đặc biệt liên quan đến phần thảo luận về tốc độ ánh sáng và việc sử dụng FPGA.

Ngoài lề một chút, thuật ngữ “x86” đề cập đến một họ CPU tuân theo kiến trúc cụ thể do Intel phát triển ban đầu. Kiến trúc này nổi tiếng nhờ khả năng tương thích với nhiều loại phần mềm, vì hầu hết máy tính để bàn và máy tính xách tay được bán ra đều dựa trên họ kiến trúc x86.

Bộ xử lý đồ họa (GPU)

GPU là bộ xử lý chuyên dụng ban đầu được phát triển để tăng tốc quá trình kết xuất hình ảnh và video cho đồ họa máy tính. Chức năng chính của GPU là quản lý và nâng cao hiệu năng đồ họa, đặc biệt trong các tác vụ cần hình ảnh độ phân giải cao và phép tính đồ họa phức tạp như trò chơi điện tử hoặc mô hình hóa 3D.

Theo thời gian, GPU đã phát triển vượt ra ngoài mục đích ban đầu. Nhờ kiến trúc của mình, GPU trở nên vô cùng hữu ích trong nhiều tác vụ xử lý dữ liệu hơn. Khả năng xử lý song song hiệu quả khiến GPU phù hợp với các ứng dụng cần xử lý đồng thời tập dữ liệu lớn. Trong công nghệ blockchain, GPU được sử dụng rộng rãi để khai thác tiền mã hóa. GPU vượt trội trong vai trò này vì có thể xử lý song song khối lượng phép tính mật mã hiệu quả hơn CPU.

Bộ nhớ truy cập ngẫu nhiên (RAM)

RAM là bộ nhớ ngắn hạn của máy tính, lưu trữ dữ liệu đang được sử dụng hoặc xử lý. Đây là nơi CPU “ghi nhớ” công việc hiện tại và giữ thông tin liên quan để truy cập cũng như xử lý nhanh chóng.

RAM có mã sửa lỗi (ECC) có khả năng phát hiện và sửa các loại lỗi hỏng dữ liệu nội bộ phổ biến. Tính năng này rất quan trọng trong những môi trường yêu cầu độ chính xác dữ liệu, chẳng hạn như điện toán khoa học, giao dịch tài chính hoặc node blockchain. RAM ECC có thể tự động xác định và sửa các lỗi nhỏ trong dữ liệu được lưu trữ. Quá trình sửa lỗi này được thực hiện thông qua phần cứng bổ sung trong các mô-đun RAM để kiểm tra dữ liệu đã lưu.

RAM Non-ECC là loại bộ nhớ được sử dụng phổ biến hơn trong máy tính tiêu chuẩn và thiết bị tiêu dùng. Dù không có khả năng sửa lỗi như RAM ECC, loại RAM này thường nhanh hơn và rẻ hơn. RAM Non-ECC được ưu tiên cho mục đích sử dụng thông thường nhờ hiệu quả chi phí và nguy cơ lỗi dữ liệu tương đối thấp trong môi trường điện toán để bàn tiêu chuẩn.

Lưu trữ trên ổ đĩa

Ổ đĩa chịu trách nhiệm lưu giữ dữ liệu dài hạn, ngay cả khi máy tính đã tắt. Có hai loại ổ đĩa chính: ổ đĩa cứng (HDD) và ổ thể rắn (SSD).

HDD là loại ổ đĩa cũ hơn, lưu dữ liệu trên các đĩa từ được gọi là phiến đĩa. Các phiến đĩa đi kèm đầu từ, thường được gắn vào một cánh tay truyền động chuyển động. Đầu đọc/ghi trên cánh tay này truy cập dữ liệu trong khi đĩa quay. Cơ chế cơ học của HDD — đĩa quay và đầu từ chuyển động — khiến chúng tương đối chậm hơn SSD. Tuy nhiên, HDD cung cấp dung lượng lưu trữ lớn hơn với mức giá thấp hơn. Điều này khiến chúng trở thành lựa chọn tiết kiệm chi phí cho lưu trữ khối lượng lớn.

Ngược lại, SSD sử dụng bộ nhớ flash để lưu trữ dữ liệu. Bộ nhớ flash là giải pháp lưu trữ điện tử, không khả biến, có thể xóa và lập trình lại. Việc sử dụng bộ nhớ flash đồng nghĩa rằng, không giống HDD, SSD không có bộ phận chuyển động. Thay vào đó, các chip bộ nhớ flash kết nối với nhau sẽ lưu trữ dữ liệu. SSD nhanh hơn HDD vì có thể truy cập dữ liệu tức thì mà không cần chờ đĩa quay hoặc đầu đọc/ghi tìm dữ liệu. Tốc độ này khiến SSD trở thành lựa chọn tuyệt vời cho các ứng dụng cần truy xuất dữ liệu nhanh. Tuy nhiên, tốc độ này đi kèm chi phí trên mỗi gigabyte cao hơn HDD.

Ngoài ra còn có SSD NVMe (Non-Volatile Memory Express). Các SSD này được thiết kế để khai thác tiềm năng tốc độ cao thông qua bus Peripheral Component Interconnect Express (PCIe) của máy tính. Ổ NVMe mang lại tốc độ cao hơn đáng kể và độ trễ thấp hơn so với SSD truyền thống. Chúng lý tưởng cho khối lượng công việc chuyên sâu, chẳng hạn như giao dịch tần suất cao và các ứng dụng blockchain, nơi việc xử lý và truy xuất dữ liệu nhanh chóng đóng vai trò thiết yếu. Dù NVMe có mức giá cao hơn, chúng đang dần trở thành tiêu chuẩn cho điện toán hiệu năng cao.

Bo mạch chủ

Nguồn: Sơ đồ Gigabyte X570 Elite từ một bài đăng trên r/buildapc của Reddit

Bo mạch chủ của máy tính là một bảng mạch lớn kết nối và hỗ trợ giao tiếp giữa các bộ phận của máy tính. Những bộ phận này gồm CPU, GPU, RAM, thiết bị lưu trữ và thiết bị ngoại vi như bàn phím và chuột.

Bo mạch chủ là trung tâm của mọi hoạt động. Nó đảm bảo từng thành phần có thể giao tiếp hiệu quả với nhau. Bo mạch chủ cũng đóng vai trò thiết yếu trong việc phân phối điện năng, truyền điện từ bộ nguồn đến từng bộ phận chính. Nó đảm bảo mỗi thành phần nhận đủ năng lượng cần thiết để hoạt động.

Bo mạch chủ chịu trách nhiệm quản lý luồng dữ liệu trong hệ thống. Nó giám sát việc định tuyến dữ liệu từ CPU đến RAM để xử lý, từ RAM đến thiết bị lưu trữ để lưu lại và từ GPU đến đầu ra màn hình để kết xuất hình ảnh. Ngoài ra, bo mạch chủ còn chứa BIOS (Hệ thống đầu vào/đầu ra cơ bản) của hệ thống. BIOS là thành phần không thể thiếu trong việc kiểm soát và giám sát hệ thống. BIOS khởi tạo và kiểm tra phần cứng của máy tính trong quá trình khởi động. Nó cũng theo dõi tình trạng hệ thống, giám sát các yếu tố như nhiệt độ, điện áp và tốc độ quạt.

Trong bối cảnh thiết kế của Firedancer, kiến trúc bo mạch chủ đóng vai trò then chốt. Khoảng cách giữa CPU và RAM ảnh hưởng đáng kể đến hiệu năng, vì khoảng cách ngắn hơn giúp tăng tốc độ truyền dữ liệu. Khoảng cách này rất quan trọng đối với các ứng dụng như Firedancer vốn yêu cầu thông lượng cao và độ trễ thấp. Đây là lý do kiến trúc nhận biết NUMA và khả năng sử dụng FPGA phù hợp với nhu cầu tối ưu hóa việc phân bổ bộ nhớ và hiệu quả xử lý của Firedancer. Chúng tôi sẽ giải thích ý nghĩa của việc nhận biết NUMA và FPGA là gì ở phần sau của bài viết.

Hệ điều hành, máy ảo và các tối ưu hóa cấp kernel

Hệ điều hành (OS) là phần mềm cốt lõi quản lý phần cứng và phần mềm trong máy tính. Nó đóng vai trò trung gian, hỗ trợ tương tác giữa người dùng và phần cứng máy tính. Hệ điều hành cung cấp giao diện để người dùng tương tác với hệ thống, đồng thời phân bổ và quản lý tài nguyên cho nhiều ứng dụng. Các ví dụ phổ biến gồm Windows, macOS và Linux.

Kernel nằm ở trung tâm của mọi hệ điều hành. Đây là thành phần thiết yếu tương tác trực tiếp với phần cứng của hệ thống. Kernel có toàn quyền kiểm soát mọi thứ trong hệ thống. Nó quản lý việc phân bổ bộ nhớ, lập lịch tiến trình và các yêu cầu đầu vào/đầu ra. Bằng cách hoạt động ở cấp thấp này, kernel đóng vai trò quan trọng đối với hiệu năng và độ ổn định của hệ thống.

Lời gọi hệ thống (syscall) tạo giao diện giữa ứng dụng người dùng và kernel. Khi một ứng dụng cần thực hiện thao tác đòi hỏi quyền truy cập vào tài nguyên hệ thống (ví dụ: đọc tệp hoặc gửi dữ liệu mạng), ứng dụng sẽ thực hiện một syscall. Sau đó, kernel thay mặt ứng dụng thực hiện thao tác được yêu cầu. Cơ chế này đảm bảo quyền truy cập có kiểm soát vào tài nguyên hệ thống nhằm duy trì tính bảo mật và ổn định của hệ thống.

Máy ảo (VM) là phần mềm mô phỏng máy tính vật lý. Chúng tái tạo đầy đủ chức năng của một máy tính vật lý trong môi trường cô lập, đồng thời hoạt động trên một hypervisor (tức một loại phần mềm tạo và quản lý các môi trường ảo trên máy chủ). VM mang lại lợi ích về bảo mật nhờ khả năng cô lập, hiệu quả tài nguyên và tính linh hoạt cho hoạt động kiểm thử cũng như phát triển.

Hiểu các khái niệm này là điều thiết yếu trong bối cảnh Firedancer. Firedancer áp dụng một số biện pháp tối ưu hóa cấp kernel để nâng cao hiệu năng:

  • Phân bổ tĩnh quy mô lớn: Firedancer giảm thiểu việc phân bổ bộ nhớ động bằng cách sử dụng các vùng phân bổ tĩnh lớn (tức các vùng phân bổ bộ nhớ dùng chung mà những tiến trình khác có thể chia sẻ). Theo đó, bộ nhớ được phân bổ một lần rồi tái sử dụng, giúp giảm chi phí phát sinh từ việc phân bổ và giải phóng thường xuyên.
  • Bỏ qua thư viện tiêu chuẩn: Các hàm thư viện tiêu chuẩn thường bổ sung nhiều lớp trừu tượng và có thể kém hiệu quả hơn đối với một số thao tác nhất định. Firedancer bỏ qua các thư viện tiêu chuẩn này và trực tiếp thực hiện syscall. Chúng tôi sẽ trình bày sâu hơn khi thảo luận về kiến trúc tile của Firedancer và cách kiến trúc này tối ưu hóa hiệu năng mạng.

Firedancer cố gắng tránh syscall và hạn chế tương tác với OS nhiều nhất có thể, vì những thao tác này làm chậm đáng kể các tác vụ.

Dữ liệu vào và dữ liệu ra

Dữ liệu vào và dữ liệu ra là các thuật ngữ dùng để mô tả luồng dữ liệu đi vào và đi ra khỏi một hệ thống máy tính hoặc mạng.

Dữ liệu vào đề cập đến dữ liệu đi vào một hệ thống. Đây là thuật ngữ chung có thể bao gồm nhiều hoạt động, chẳng hạn như nhận dữ liệu từ Internet, tiếp nhận dữ liệu đầu vào của người dùng hoặc thu thập thông tin từ cảm biến trong các thiết bị IoT (Internet vạn vật). Với các hệ thống mạng như máy chủ hoặc blockchain, dữ liệu vào liên quan đến những tác vụ quan trọng như tiếp nhận yêu cầu giao dịch, truy vấn của người dùng hoặc luồng dữ liệu đến cần được xử lý hay lưu trữ. Xử lý dữ liệu vào hiệu quả là điều thiết yếu đối với khả năng phản hồi và chức năng của hệ thống.

Dữ liệu ra đề cập đến dữ liệu được gửi ra khỏi hệ thống. Điều này bao gồm gửi thông tin trực tuyến, tạo phản hồi cho yêu cầu của người dùng hoặc truyền dữ liệu đã xử lý đến các hệ thống khác. Đối với hệ thống kết nối mạng, dữ liệu ra bao gồm việc gửi các giao dịch đã xác thực, phát thông tin cập nhật của blockchain hoặc gửi dữ liệu đến các vị trí lưu trữ bên ngoài. Quản lý dữ liệu ra đúng cách là điều cần thiết để phân phối thông tin chính xác và đảm bảo hệ thống giao tiếp hiệu quả với các phần khác của mạng.

Pipeline và tính song song dữ liệu

Hãy hình dung pipeline như một dây chuyền lắp ráp trong nhà máy. Nó chia một quy trình phức tạp thành các giai đoạn tuần tự nhỏ hơn. Mỗi giai đoạn trong pipeline thực hiện một thao tác cụ thể. Cách tiếp cận này rất hiệu quả với các tác vụ xử lý lặp lại hoặc liên tục, tương tự cách blockchain liên tục xử lý giao dịch.

Tính song song dữ liệu sử dụng cách tiếp cận khác: xử lý đồng thời nhưng độc lập nhiều phần tử. Điều này giống như nhà máy có nhiều dây chuyền lắp ráp để xử lý dữ liệu. Cách này hiệu quả đối với các tác vụ có thể chia thành những tác vụ con nhỏ hơn. Đối với blockchain, cụ thể là trong các hệ thống như Firedancer, tính song song dữ liệu đóng vai trò thiết yếu để xử lý đồng thời các giao dịch hoặc tác vụ xử lý dữ liệu. Khả năng xử lý song song của Firedancer tối đa hóa thông lượng tính toán và giảm thời gian xử lý.

Hãy hình dung mỗi giai đoạn của pipeline như một trạm làm việc riêng trong nhà máy. Mỗi trạm có thể hoạt động độc lập và đồng thời. Điều này có nghĩa là trong khi một giai đoạn xử lý một phần dữ liệu, giai đoạn tiếp theo có thể đồng thời xử lý một phần khác. Cách tiếp cận này cho phép nhiều giai đoạn của pipeline hoạt động cùng lúc, giúp tăng đáng kể thông lượng. Firedancer kết hợp hiệu quả tuần tự của pipeline với sức mạnh xử lý đồng thời của tính song song để xử lý khối lượng giao dịch lớn.

Mảng cổng lập trình được dạng trường (FPGA)

Mảng cổng lập trình được dạng trường (FPGA) là các mạch tích hợp đa năng có thể được lập trình hoặc cấu hình lại sau khi sản xuất. Những mạch này cung cấp mức độ thích ứng không có ở các thành phần phần cứng truyền thống. Chúng gồm một mạng lưới khổng lồ các khối logic có thể lập trình và kết nối với nhau, mỗi khối có khả năng thực hiện nhiều chức năng kỹ thuật số. Thiết kế này giúp FPGA có tính linh hoạt và hiệu quả cao trong những ứng dụng ưu tiên tốc độ, xử lý song song và khả năng thích ứng.

Một FPGA điển hình gồm các phần tử lập trình nhỏ, tất cả được kết nối bằng các dây dẫn có thể lập trình. Mạng lưới bộ phận và kết nối phức tạp này cho phép người dùng lập trình các vùng khác nhau của chip để thực hiện những tác vụ cụ thể. Qua đó, nó tạo ra một môi trường xử lý được tùy chỉnh hoàn toàn.

FPGA vượt trội trong xử lý song song nhờ sử dụng đồng thời các phần tử lập trình nhỏ này. Cấu trúc của chúng hỗ trợ pipeline hiệu quả, trong đó dữ liệu được liên tục đưa qua các giai đoạn xử lý. Một pipeline được thiết kế tốt sẽ tách biệt thông lượng của hệ thống khỏi độ trễ. Mặc dù pipeline này có thể mất nhiều thời gian hơn CPU thông thường để tạo đầu ra, hệ thống có thể đồng thời xử lý nhiều luồng dữ liệu đầu vào. Độ trễ của từng thao tác hầu như không ảnh hưởng đến luồng dữ liệu tổng thể, giống như nước chảy qua vòi.

Trong bối cảnh Firedancer, FPGA mang lại lợi thế đáng kể. Chúng có thể kết nối trực tiếp các pipeline dữ liệu với mạng. FPGA xử lý lưu lượng mạng hiệu quả hơn các thiết lập truyền thống, nơi GPU phải phụ thuộc vào CPU để di chuyển dữ liệu. Khả năng kết nối trực tiếp và tạo ra các giải pháp xử lý tùy chỉnh, chẳng hạn như xây dựng bộ xử lý mềm trên fabric FPGA, khiến chúng trở nên vô cùng giá trị trong quá trình phát triển một client trình xác thực hiệu năng cao.

‍

Đăng ký nhận tin từ Helius

Luôn cập nhật những thông tin mới nhất về phát triển Solana và nhận thông báo khi chúng tôi đăng bài

Hình ảnh phóng to