Thử nghiệm với Liên kết và Di chuyển tài khoản

Nov 28 2022
Này các bạn. Đó là một tháng hoang dã.

Này các bạn. Đó là một tháng hoang dã. Máy chủ truyền thông xã hội nhỏ của chúng tôi đã trở thành cơ sở hạ tầng sản xuất và nó vẫn đang tiếp tục phát triển.

Cuộc di cư ồ ạt của cộng đồng công nghệ khỏi Twitter là vô cùng thực tế. Theo tôi những con số này xác thực giả thuyết rằng Thung lũng Silicon đã mất niềm tin vào khả năng lãnh đạo Twitter của Musk. Tôi cảm thấy rằng chúng ta đang tiến gần đến thời kỳ phục hưng của mạng xã hội và doanh nghiệp.

Tổng quan về sự phát triển và số lượng của Hachyderm

Từ góc độ áp dụng, sự tăng trưởng của chúng tôi là “lành mạnh” một cách phi lý nếu bạn có thể gọi nó như vậy:

Ngày 3 tháng 11 : 720 người dùng
Ngày 13 tháng 11 : 6.000 người dùng
Ngày 23 tháng 11 : 25.000 người dùng

Chúng tôi đã phát triển từ một nút duy nhất thành cơ sở hạ tầng dự phòng và phân tán trên toàn cầu trong vòng chưa đầy 30 ngày. Kho lưu trữ dữ liệu postgres nhỏ 400mb của chúng tôi hiện là 177Gb dữ liệu. Chúng tôi dự kiến ​​sẽ có hơn 30 Tb dung lượng lưu trữ trong 6 tháng tới chỉ riêng cho việc phân phối nội dung của chúng tôi.

Có lẽ điều hấp dẫn nhất khi xem dịch vụ của chúng tôi phát triển là lưu lượng truy cập. Đúng! Giao thông!

Hôm nay, chúng tôi đã sử dụng hết đường ống công cộng chính đang điều chỉnh ở tốc độ 200Mb/giây. ISP chính của chúng tôi đã phải thay đổi cách quản lý tài khoản của chúng tôi và hiện coi chúng tôi là tài khoản công ty lớn thay vì tài khoản công ty nhỏ. Do sự thay đổi này, giờ đây chúng tôi có quyền truy cập vào nhiều tính năng và dịch vụ mới mà chúng tôi đang khám phá để giải trí khi lưu trữ Hachyderm.

Chúng tôi đã xử lý tới 1Tb dữ liệu trên đường ống vào ngày bận rộn nhất của chúng tôi (21 tháng 11).

Suy nghĩ về Liên đoàn

Một ngày khác, nhóm điều hành viên của chúng tôi và bản thân tôi đã tạm dừng dịch vụ trong một số thời gian ngừng hoạt động theo lịch trình. Chúng tôi đã hơi mù quáng với bản nâng cấp của mình và đó chắc chắn không phải là công việc tốt nhất của tôi. Chúng tôi đã phát trực tiếp quá trình nâng cấp trên kênh Twitch của tôi. Video được lưu trữ có sẵn để xem .

Đối tác tuyệt vời của tôi, Quintessence đã nhìn tôi sau khi nâng cấp và hỏi tôi liệu chúng tôi có môi trường dàn dựng trực tuyến hay không. Mà, là một câu hỏi hoàn toàn hợp lệ có một câu trả lời rất tệ.

Không. Chúng tôi không có môi trường dàn dựng trực tuyến. Thành thật mà nói, tôi thậm chí không chắc môi trường dàn dựng sẽ trông như thế nào ngoài việc giả mạo dữ liệu và tạo một phiên bản nhỏ của hachyderm. Vấn đề là Mastodon, tương tự như wordpress và các ứng dụng khác, nhận thức được miền của nó. Việc tạo một phiên bản “dàn dựng” sẽ cần một chút suy nghĩ.

Tôi càng suy nghĩ về vấn đề này, nó càng tiết lộ rằng các hệ thống phi tập trung và hệ thống liên kết có một số vấn đề mới mà ngành công nghiệp của chúng tôi không có mô hình tuyệt vời nào để giải quyết. Mastodon được xây dựng với niềm tin rằng mọi người từ khắp nơi trên thế giới sẽ giao tiếp với nó cũng như thực tế là sẽ có các phiên bản trực tuyến khác để nó liên kết với.

Làm cách nào để chúng tôi xây dựng một môi trường dàn dựng để chúng tôi có thể kiểm tra liên kết hoặc phân tách miền? Nghĩ kĩ thì. Làm thế nào để liên đoàn làm việc anyway? mức độ ảnh hưởng của hachyderm đối với các trường hợp khác trong liên bang? Các phiên bản khác có tác động như thế nào đến hệ thống của tôi?

Tạo hachyderm.wtf

Đương nhiên, đầu óc tôi bắt đầu quay cuồng cân nhắc về những tác động bảo mật và mối lo ngại về tắc nghẽn cổ chai khi có các hệ thống liên kết và phân phối toàn cầu trực tuyến. Tôi quyết định làm theo dopamin và mua một tên miền mới.

Tôi đã mua hachyderm.wtfvà sao chép một trong các hachyderm.ionút của chúng tôi. Trễ vài phút, tên miền mới được chỉ vào một bản sao của nút cũ. Bây giờ là lúc bắt đầu thiết kế ngược các giả định mà Mastodon đưa ra và tìm hiểu về liên kết.

Mastodon sẽ bị hỏng nếu bạn cố “thay đổi” tên miền.

Một nút Mastodon duy nhất có khả năng tự nhận biết, điều mà nói chung trong các hệ thống phân tán là một “không không” lớn. Chúng tôi đã học được điều này trong Kubernetes. Cơ sở hạ tầng lớn thường không có nhận thức về tên miền riêng của mình để có thể dễ dàng sao chép và di chuyển.

Tuy nhiên, Mastodon được xây dựng “cho internet” chứ không phải “cho mạng công ty của chúng tôi”, vì vậy tên miền thực sự là ranh giới hệ thống kín đáo trong mô hình. Càng tìm hiểu nhiều, lần đầu tiên tôi bắt đầu nghĩ rằng Internet đang cảm thấy “đúng”.

Dù sao thì tôi đã không thể tạo một nút dàn với dữ liệu sản xuất do sự cố miền, vì vậy tôi chỉ thu thập cơ sở dữ liệu và bắt đầu làm mới.

Phiên bản Mastodon mới yêu cầu tài khoản quản trị viên.

Để thiết lập một phiên bản mới, bạn phải tạo một tài khoản quản trị viên, nếu không sẽ không có cách nào để truy cập hệ thống. Sẽ không có dữ liệu để liên kết với.

Tôi đã tạo một tài khoản quản trị viên mới [email protected]và bắt đầu đưa hệ thống lên mạng.

Vì hầu hết các cấu hình sản xuất của chúng tôi đã được tải trên máy chủ mới nên hầu hết các tính năng của Mastodon mới “chỉ hoạt động”. Email đã được gửi và nginx đang phản hồi lưu lượng truy cập. Sidekiq đã được cân bằng, v.v.

Hachyderm từ bên ngoài

Tôi muốn xem cảm giác như thế nào khi trở thành người ngoài cuộc đối với hachyderm. Bao nhiêu dữ liệu của chúng tôi là “độc nhất” đối với hachyderm? Bao nhiêu kinh nghiệm về voi răng mấu của tôi bị cô lập với ví dụ của chúng tôi?

Kết luận của tôi là "không phải tất cả, nhưng rất nhiều". Mastodon có một mối quan hệ hấp dẫn với “những người theo dõi” và không còn cho phép tôi xem những người theo dõi hachydermian nữa. Đây là một vấn đề lớn, đặc biệt là đối với một hệ thống tìm hiểu và tạo nội dung dựa trên những người theo dõi.

Ví dụ: tôi không còn có thể xem danh sách những người mà cô ấy theo dõi từ hachyderm.wtf của đối tác Quintessence.

Thẻ bắt đầu bằng dấu thăng

Quan sát tiếp theo của tôi là các thẻ bắt đầu bằng # được quản lý ở cấp độ phiên bản. Các trang tin tức, cộng đồng và dành cho bạn của tôi đều trống. Vì không có người nào khác trong ví dụ của tôi nên không có “nội dung cộng đồng”.

Tôi đã quen với việc có một lượng lớn tin tức kỹ thuật, blog, bài đăng và bài báo được chia sẻ trên hachyderm. Bây giờ tất cả đã biến mất.

Trang chủ Dòng thời gian

Dòng thời gian quê hương của tôi là một thị trấn ma. Tôi không theo dõi bất kỳ ai và không có ai khác trên máy chủ của tôi. Về cơ bản, nó giống như fediverse thậm chí không tồn tại.

Di chuyển tài khoản của tôi

Một trong những câu hỏi nổi bật trong đầu tôi là Mastodon quản lý những người theo dõi như thế nào? Còn việc di chuyển tài khoản thì sao?

Quản lý khái niệm người theo dõi từ nhiều hệ thống là một câu hỏi thú vị về khoa học máy tính nói chung. Tôi đã sử dụng bài toán “Người theo dõi Twitter” trong các cuộc phỏng vấn mã hóa như một cách để nói về một số kiến ​​thức cơ bản về bảng băm phân tán và đồ thị có hướng và không có hướng.

Quyết định di cư

Thật trùng hợp, tôi quyết định nghỉ vài ngày khỏi công việc quản lý Hachyderm và công việc hàng ngày của mình tại GitHub để thưởng thức buổi hòa nhạc của Sigur Rós ở Iceland. Tôi biết rằng tôi sẽ “ngoại tuyến” trong khoảng 5 ngày.

Một trong những câu hỏi luôn xuất hiện trong đầu tôi là cách những người theo dõi được lưu trữ trong cơ sở dữ liệu và mỗi phiên bản liên kết có bao nhiêu quyền kiểm soát đối với một phiên bản nước ngoài khác? Mọi thứ tôi biết về các hệ thống phân tán đều cho tôi biết rằng các hệ thống phụ thuộc lẫn nhau với vũ đạo lỏng lẻo giữa chúng là một điều khó khăn và hầu như luôn là một ý tưởng tồi. Còn khi các nút trong hệ thống có chủ sở hữu khác nhau thì sao? Điều này có vẻ giống như một công thức cho thảm họa.

Tôi đã đưa ra một quyết định nhanh chóng là dùng thử tính năng di chuyển của Mastodon sang hachyderm.wtf với hy vọng tìm hiểu về mức độ kiểm soát của một phiên bản đối với phiên bản khác. Có phải máy chủ của tôi vừa yêu cầu tất cả các máy chủ khác cập nhật hồ sơ của họ không? Cái này hoạt động ra sao? Tôi hình dung rằng chúng tôi cũng có thể thử nghiệm với dữ liệu sản xuất và tôi tình cờ có một tài khoản nằm xung quanh nguyên mẫu trong kỳ nghỉ của mình.

Ảnh chụp màn hình di chuyển [email protected] sang [email protected]

Từ chối dịch vụ từ xa

Vì vậy, tôi đã làm theo tài liệu và nhấp vào nút để di chuyển tài khoản của mình. tồi tệ nhất có thể xảy ra là gì?

Tôi đã dành một chút thời gian để điều tra tài khoản mới của mình và định cấu hình tài khoản cũ của mình để trỏ đến tài khoản mới. Khái niệm giữ cả hai trường hợp trong “thỏa thuận” với nhau sẽ là một chủ đề phổ biến trong liên kết.

Vài giờ sau khi bắt đầu quá trình, tôi nhận thấy những người theo dõi mình bắt đầu “di chuyển” sang phiên bản mới. Điều quan trọng là phải hiểu rằng nó hachyderm.wtfđang chạy trên một máy chủ rất nhỏ có 2 lõi, về cơ bản là một raspberry pi hachyderm.iođang chạy trên phần cứng phục vụ doanh nghiệp được phân phối trên một số nút trong một giá đỡ với tổng số hơn 132 lõi.

Tôi đã có thể xem hachyderm.iokhởi động một move_workerquy trình được xác định trong Ruby tại đây và sẽ viết lại những người theo dõi trên phiên bản cục bộ.

Tôi gần như ngay lập tức nhận thấy một vấn đề trên hachyderm.wtf. Dịch vụ không phản hồi. Sau một vài phút, tôi đã có thể mở một bảng điều khiển đang hoạt động và quan sát thấy dòng thời gian của mình đang tự giới hạn tốc độ.

429 yêu cầu giới hạn tốc độ
Giới hạn tỷ lệ và bảng điều khiển không phản hồi

Tôi đã thay đổi kích thước hachyderm.wtfvà cung cấp cho nó nhiều tính toán hơn và dịch vụ đã phản hồi nhanh trở lại.

Theo dõi người theo dõi Theo dõi

Khi mọi thứ ổn định, tôi nhận thấy rằng tôi chỉ giữ lại khoảng 10% số người theo dõi của mình? Có gì đó không ổn?

Tôi đã xem qua nhật ký hachyderm.wtfvà nhanh chóng phát hiện ra rằng có điều gì đó rõ ràng đang xảy ra trong “các đợt” và các đợt được nhóm theo máy chủ.

Nói cách khác, tôi có thể xem hachyderm.wtfbị tấn công bởi hàng nghìn yêu cầu từ mastodon.socialmastodon.sdf.orgvà các trường hợp khác trong một khoảnh khắc. Rõ ràng là các máy chủ từ xa cần thực hiện một số loại thương lượng hachyderm.wtfđể di chuyển những người theo dõi.

Đây là một khám phá thú vị và giải thích cách tôi có thể tự mình DDoS khi di chuyển.

Vectơ cụ thể có thể khiến máy chủ tự gỡ xuống là người dùng mở dòng thời gian của họ trong trình duyệt có tải tính năng websocket 4.0.2 mới. Trong quá trình di chuyển, những người theo dõi sẽ xuất hiện trong thời gian thực khiến một phần khác của bảng điều khiển truy vấn /accountsđiểm cuối nhanh hơn mức có thể theo kịp. Tôi đã liên hệ với nhóm bảo mật Mastodon về khả năng mở CVE cho việc này.

Nhưng những gì đang xảy ra đã gây ra quá nhiều chi phí giữa hachyderm.wtfvà các máy chủ từ xa đang cố gắng di chuyển những người theo dõi.

Mối quan hệ người theo dõi Mastodon

Vì vậy, một tính năng rất thú vị của liên kết trong Mastodon là cách nó quản lý và xác thực mối quan hệ người theo dõi/người theo dõi.

Tôi đã tìm thấy mã FollowRequest hiển thị điểm bắt đầu cho công việc đang diễn ra hachyderm.wtfngoại tuyến. Mastodon sử dụng các khóa mật mã công khai để xác thực các yêu cầu và tính năng khác nhau của hệ thống. Mastodon dựa trên ActivityPub sử dụng chữ ký HTTP để xác thực giữa hai phiên bản. Đây là cách một thực thể chắc chắn rằng thực tế khác thực tế là người mà thực thể đó nói.

Khi bạn di chuyển tài khoản, tất cả dữ liệu chính cần phải được xây dựng lại vì niềm tin giữa các hệ thống bị phá vỡ. Tính năng DDoSing hachyderm.wtflà hàng nghìn người theo dõi của tôi phải thương lượng và xác thực lại tương ứng với từng máy chủ lưu trữ của họ.

Có những điều tốt và những điều xấu về mô hình này. Miễn là liên kết có liên quan, đây là quyết định kiến ​​trúc đúng đắn để thực hiện liên quan đến xác thực. Tôi rất hào hứng muốn biết liệu có những cách khác để di chuyển dữ liệu một cách liền mạch trong tương lai hay không!

Hậu quả ngoài ý muốn khác

Nhìn chung, thử nghiệm đã thành công và đã tiết lộ rất nhiều điều về quyền lực mà tôi có với tư cách là quản trị viên Mastodon, cũng như quyền lực của các quản trị viên khác đối với hệ thống của tôi. Chứng kiến ​​sự tin tưởng lẫn nhau giữa các hệ thống xảy ra với chữ ký HTTP thật tuyệt!

Quá trình chuyển đổi hachyderm.iothành hachyderm.wtfcông. Tôi biết rằng chúng tôi sẽ tiếp tục tận dụng hachyderm.wtflàm phiên bản phòng thí nghiệm của mình để chúng tôi có thể làm việc trên RustyPub, việc triển khai ActivityPub trên Rust của chúng tôi mà chúng tôi dự định xây dựng để hiểu cách thức hoạt động của rơle.

Niềm tin của cộng đồng

Tôi đã bị đối tác Quintessence trách mắng khá nặng nề vì bất ngờ rời bỏ hachyderm.io. Tôi nghĩ rằng cô ấy đã nêu ra một điểm tốt là những người khác sẽ coi sự thay đổi là một điều gì đó chưa biết và suy đoán điều tồi tệ nhất. Hóa ra cô ấy - như mọi khi - đã đúng.

Dù tôi hy vọng rằng fediverse ít được xây dựng dựa trên danh tiếng và hình ảnh, nhưng tôi tin rằng không phải ai cũng hiểu hệ thống như tôi và sẽ xem điều gì đó như thay đổi miền là một rủi ro chứ không phải là một thử nghiệm.

Yếu tố hạn chế: Thời gian

Tôi nghĩ rằng một hậu quả không mong muốn khác là những người theo dõi của tôi hiện đang tùy ý sử dụng bất kỳ chủ sở hữu cá thể mastodon nào ban đầu đã theo dõi tài khoản của tôi theo nghĩa là công việc thương lượng lại chữ ký HTTP của họ có thể bị trì hoãn rất nhiều.

Tôi không nghĩ rằng bất kỳ ai sẽ mất người theo dõi trong quá trình di chuyển trừ khi máy chủ từ xa theo dõi bạn đã bị phá hủy vĩnh viễn.

Tuy nhiên, tôi nghĩ rằng có thể mất vài ngày, vài tuần hoặc thậm chí lâu hơn đối với các trường hợp khác để thương lượng lại ở mặt sau. Việc theo dõi một lần rất nhanh chóng và dễ dàng vì hầu hết quá trình thương lượng có thể được thực hiện trong trình duyệt, tuy nhiên, việc thực hiện theo lô ở mặt sau khiến nhiều người tin rằng các phiên bản khác đã định cấu hình sidekiq đúng cách và không có độ trễ trong hàng đợi của chúng .

Trở về nhà trên Hachyderm.io

Một vài phút trước, tôi đã khởi động quá trình di chuyển trở lại phiên bản hachyderm.wtfnhà của mình hachyderm.io. Tôi nghi ngờ rằng sẽ mất vài ngày trước khi phần lớn những người theo dõi tôi thương lượng lại.

Quay trở lại hachyderm.iokhiến tôi nhận ra tại sao mọi thứ đối với tôi gần đây quá yên ắng.

Tôi nhận thấy rằng tất cả các thông báo làm nổ tung điện thoại của tôi đột nhiên im lặng.

Hiểu dữ liệu của bạn

Vì vậy, dữ liệu khiến bạn trở thành “bạn” trên Mastodon chủ yếu tồn tại trên phiên bản của bạn. Hầu hết.

Trong trường hợp các phiên bản đang di chuyển, tôi nhận thấy rằng tất cả các thông báo của tôi đột nhiên dừng lại. Tôi đã dành một chút thời gian để hiểu rằng việc di chuyển có nghĩa là tài khoản của tôi bị đóng băng sau khi di chuyển, điều đó có nghĩa là các thông báo được gửi đến tài khoản cũ sau khi di chuyển sẽ bị mất vĩnh viễn.

Khi tôi bắt đầu đăng nhiều hơn trên tài khoản mới, tôi nghi ngờ luồng thông báo của mình sẽ tiếp tục khi các thông báo mới được tạo cho nội dung mới của tôi. Tuy nhiên, các câu trả lời cũ, lượt thích, v.v. hiện đã biến mất.

Ngay sau khi chúng tôi xóa hachyderm.wtf, tôi rất tò mò muốn hiểu điều gì sẽ xảy ra với các tin nhắn trên các máy chủ khác? Liệu những bài đăng này có thể tồn tại ngay cả khi máy chủ ban đầu của chúng đã biến mất vĩnh viễn không?

Cảm ơn vì đã đọc

Tôi biết điều này là rất nhiều! Đây chủ yếu là một dòng ý thức và ghi chú tại hiện trường của tôi khi tôi chuẩn bị sẵn sàng cho buổi hòa nhạc của mình tối nay.

Theo dõi tôi trên Mastodon [email protected] để biết thêm!