- VisualStudio2022
- pprof-Hướng dẫn sử dụng nó trong bản mạng trực tiếp
- Triển khai C# các loại hộp chọn nhiều màu lựa chọn thả xuống, cây lựa chọn nhiều màu lựa chọn thả xuống và các nút tối đa
- [Ghi chú học tập] Cơ sở dữ liệu cấu trúc: cat tree
Để đảm bảo tính sẵn sàng cao của các dịch vụ, hệ thống không thể hoàn toàn không khả dụng do lỗi một nút. Do đó, chúng ta cần sử dụng cấu trúc dự phòng chính để đảm bảo khi nút chính bị lỗi, nút dự phòng có thể nhanh chóng đảm nhiệm và tiếp tục cung cấp dịch vụ.
Bởi vì không giống như các dịch vụ ứng dụng, loại nút này cung cấp dịch vụ lưu trữ và bảo trì dữ liệu. Để đảm bảo tính liên tục và nhất quán của dữ liệu, nó chỉ có thể được xử lý tập trung bởi một nút. Nếu nhiều nút xử lý dữ liệu cùng một lúc, dữ liệu có thể không nhất quán hoặc nhầm lẫn.
Ví dụ: Sao chép chủ-nô lệ Mysql, sao chép phân vùng Kafka, sao chép chủ-nô lệ Redis.
Cấu trúc active-standby thường bao gồm hai vai trò: Leader (nút chính) và Follower (nút dự phòng). Trong cấu trúc này, nút Leader chịu trách nhiệm xử lý tất cả các yêu cầu của khách hàng và duy trì dữ liệu. Nút Người theo dõi thường xuyên đồng bộ hóa dữ liệu từ nút Người lãnh đạo. Khi nút Người lãnh đạo bị lỗi hoặc không khả dụng, hệ thống cần thực hiện thao tác bầu chọn người lãnh đạo. Mục đích của việc bầu chọn người lãnh đạo là chọn Người lãnh đạo mới từ các nút Người theo dõi hiện có để đảm bảo hệ thống hoạt động bình thường.
Nhiệm vụ cốt lõi của việc lựa chọn người lãnh đạo có thể được tóm tắt như sau:
Thao tác lựa chọn chính thường được xử lý theo hai cách:
Điều phối viên bên thứ ba: Điều phối việc bầu chọn người lãnh đạo bằng cách giới thiệu hệ thống bên thứ ba độc lập, chẳng hạn như Zookeeper, v.v. Những công cụ này theo dõi trạng thái nút và chịu trách nhiệm lựa chọn người đứng đầu.
Nút ngang hàng: Trong trường hợp không có điều phối viên bên thứ ba, các nút trong cấu trúc hoạt động và dự phòng sẽ chọn người dẫn đầu thông qua sự phối hợp lẫn nhau. Thông thường, nút theo dõi sẽ chọn người dẫn đầu mới thông qua một thuật toán nhất định (chẳng hạn như Paxos hoặc Raft).
Zookeeper phát hiện trạng thái hoạt động của từng nút dịch vụ thông qua cơ chế nhịp tim (phát hiện thời gian chờ của phiên). Khi bắt đầu, nhiều nút dịch vụ sẽ tạo ra các nút tuần tự tạm thời theo thứ tự trên Zookeeper và nút có số thứ tự nhỏ nhất sẽ trở thành nút Thủ lĩnh. Mỗi nút sẽ theo dõi trạng thái của nút trước đó. Nếu nút trước đó bị treo (nghĩa là nút tạm thời của nó bị xóa), nút hiện tại sẽ trở thành nút Lãnh đạo và thông báo cho các nút Người theo dõi khác để đồng bộ hóa.
Sơ đồ bầu cử này không có quy trình "bỏ phiếu" theo nghĩa truyền thống. Nó chỉ tự động thực hiện thông qua các số nút liên tiếp và nút có số lượng nhỏ nhất sẽ trở thành Người dẫn đầu.
//Mô tả trang web chính thức //https://zookeeper.apache.org/doc/current/recipes.html Bầu cử lãnh đạo Cách thức thực hiện bầu cử lãnh đạo đơn giản với ZooKeeper sẽ sử dụng cờ SEQUENCE|EPHEMERAL khi tạo các znode đại diện cho "đề xuất" của khách hàng. Ý tưởng là có một znode, chẳng hạn như "/election", sao cho mỗi znode tạo ra một znode con "/election/guid-n_" với cả hai cờ SEQUENCE|EPHEMERAL. Với cờ tuần tự, ZooKeeper sẽ tự động thêm một số thứ tự lớn hơn bất kỳ số thứ tự nào được thêm trước đó vào phần tử con của "/election". với số thứ tự được thêm vào nhỏ nhất là số đứng đầu.Tuy nhiên, điều quan trọng là phải theo dõi những thất bại của người lãnh đạo để một khách hàng mới xuất hiện với tư cách là người lãnh đạo mới trong trường hợp người lãnh đạo hiện tại thất bại. znode và kiểm tra xem chúng có phải là nút dẫn đầu mới hay không khi znode nhỏ nhất biến mất (lưu ý rằng znode nhỏ nhất sẽ biến mất nếu nút dẫn đầu thất bại vì nút này chỉ tồn tại trong thời gian ngắn. Nhưng điều này gây ra hiệu ứng bầy đàn: khi nút dẫn đầu hiện tại thất bại). , tất cả các quá trình khác nhận thông báo và thực thi getChildren trên "/election" để có được danh sách con hiện tại của "/election". Nếu số lượng khách hàng lớn, số lượng hoạt động mà máy chủ ZooKeeper phải xử lý sẽ tăng đột biến. Để tránh hiệu ứng bầy đàn, chỉ cần theo dõi znode tiếp theo trong chuỗi các znode là đủ. Nếu khách hàng nhận được thông báo rằng znode mà nó đang xem đã biến mất, thì nó sẽ trở thành znode dẫn đầu mới trong trường hợp không có nút nào nhỏ hơn. znode. rằng điều này tránh được hiệu ứng bầy đàn do không có tất cả khách hàng xem cùng một znode.
Vấn đề là dữ liệu của nút kế nhiệm có thể không phải là dữ liệu mới nhất.
Một biến thể: Sử dụng Zookeeper để chọn bộ điều khiển.
Kafka sử dụng Zookeeper để chọn một bộ điều khiển (Bộ điều khiển), sau đó Bộ điều khiển sẽ kiểm soát việc bầu chọn những người lãnh đạo phân vùng. Nó có thể xác định thêm độ lệch đồng bộ hóa của bản sao phân vùng để chọn bản sao dữ liệu mới nhất làm người dẫn đầu phân vùng.
Mặc dù việc triển khai dựa trên điều phối viên bên thứ ba rất đơn giản nhưng nó có một điểm duy nhất là lỗi. Tại sao người quản lý vườn thú cúp máy và không thể chọn nút chính kịp thời?
Quá trình lựa chọn chính của giao thức Raft không dựa vào điều phối viên của bên thứ ba. Thay vào đó, các nút dịch vụ đưa ra quyết định thông qua giao tiếp lẫn nhau. Quá trình lựa chọn người lãnh đạo bè liên quan đến một số vấn đề chính:
1. Làm thế nào để nút Người theo dõi xác định xem nút Người lãnh đạo có bình thường hay không?
Giao thức Raft sử dụng cơ chế nhịp tim (thường là AppendEntries RPC) để giữ cho nút Leader tồn tại. Nút Người dẫn đầu sẽ gửi tín hiệu nhịp tim định kỳ đến các nút Người theo dõi. Nếu nút theo dõi không nhận được tín hiệu nhịp tim của nút dẫn đầu trong một khoảng thời gian nhất định, nó sẽ cho rằng nút dẫn đầu có thể đã gác máy và bắt đầu một cuộc bầu cử.
2. Làm thế nào để chọn người lãnh đạo sau khi nút Người lãnh đạo bị treo?
Khi nút Người lãnh đạo bị treo máy hoặc không thể tiếp tục cung cấp dịch vụ, các nút Người theo dõi sẽ bắt đầu bỏ phiếu để bầu ra Người lãnh đạo mới:
Cách các nút Người theo dõi bỏ phiếu: Mỗi nút Người theo dõi sẽ bỏ phiếu cho chính nó và nó sẽ yêu cầu các nút khác bỏ phiếu cho chính nó để trở thành Người lãnh đạo mới. Trong giao thức Raft, mỗi nút có một thuật ngữ và mỗi chu kỳ bầu cử sẽ có một số thuật ngữ mới. Các nút xác định xem có chấp nhận phiếu bầu của bên kia hay không bằng cách so sánh số hạng.
Quy tắc biểu quyết: Trong quá trình bầu cử, nút có nhiều phiếu bầu nhất sẽ trở thành Thủ lĩnh mới. Mỗi nút chỉ có thể bỏ một phiếu bầu và phiếu bầu này chỉ có thể được bỏ cho nút có số hạng lớn hơn số hạng hiện tại của nó. Nút nào nhận được hơn một nửa số phiếu bầu sẽ trở thành nút dẫn đầu.
Về "bỏ phiếu".
Làm thế nào để nút Người theo dõi biết có bao nhiêu nút Người theo dõi?
Các nút theo dõi có được thông tin về các nút khác trong cụm thông qua các nút Lãnh đạo. Nút Lãnh đạo thường xuyên truyền thông tin thành viên cụm đến các nút Người theo dõi thông qua nhịp tim (AppendEntries RPC). Khi không có người dẫn đầu, các nút theo dõi sẽ được bầu dựa trên thông tin cụm trước đó.
Nút Người theo dõi bỏ phiếu như thế nào?
Các nút theo dõi yêu cầu hỗ trợ từ các nút khác thông qua yêu cầu biểu quyết (RequestVote RPC). Mỗi nút Người theo dõi sẽ bắt đầu một yêu cầu bỏ phiếu trong thời hạn bầu cử của chính nó, yêu cầu các nút khác bỏ phiếu cho chính nó. Nếu thời hạn của nút yêu cầu lớn hơn và dữ liệu mới hơn thì bên được yêu cầu sẽ đồng ý với yêu cầu biểu quyết.
Làm thế nào để nút Người theo dõi xác định rằng nó có nhiều phiếu bầu nhất?
Các nút theo dõi không cần biết phiếu bầu cụ thể của các nút khác. Giao thức Raft đảm bảo rằng khi một nút nhận được sự ủng hộ của đa số (hơn một nửa) số nút, nó sẽ trở thành nút dẫn đầu. Trong quá trình bầu chọn, các nút chỉ cần đảm bảo rằng họ nhận được hơn một nửa số phiếu bầu và không cần biết số phiếu bầu cụ thể của các nút khác.
3. Tôi nên làm gì sau khi nút Leader ban đầu hoạt động trở lại? Sẽ có hai nút Lãnh đạo?
Giao thức Raft sử dụng số thuật ngữ để ngăn chặn sự xuất hiện của hai nút Lãnh đạo. Khi nút Leader ban đầu hoạt động trở lại sẽ thấy số nhiệm kỳ của nó đã hết (tức là các nút khác đã bầu ra Leader mới) nên nó sẽ tự động trở thành node Follower và chấp nhận sự kiểm soát của Leader mới.
KHÔNG. Có thể nói, tiền đề của giao thức Raft là các nút trong cụm được triển khai và kiểm soát bởi các bên đáng tin cậy và các nút này sẽ hoạt động theo quy tắc giao thức và sẽ không có hoạt động độc hại nào.
Kiến trúc dự phòng hoạt động không chỉ được sử dụng trong cơ sở dữ liệu và hệ thống bộ đệm. Nhiều kiến trúc vi dịch vụ, hàng đợi tin nhắn và hệ thống lưu trữ phân tán yêu cầu cấu trúc dự phòng hoạt động để đảm bảo tính sẵn sàng cao của hệ thống. Với sự tiến bộ của công nghệ, các cấu trúc sơ cấp và thứ cấp hiện đại đã dần dần đưa ra các cơ chế lựa chọn sơ cấp thông minh hơn để đảm bảo rằng các dịch vụ có thể được khôi phục nhanh chóng ngay cả trong những điều kiện khắc nghiệt.
Cuối cùng, bài viết này về các cấu trúc chính và dự phòng cũng như các phương pháp lựa chọn chính của [Tân linh tinh] kết thúc tại đây. Nếu bạn muốn biết thêm về các cấu trúc chính và dự phòng cũng như các phương pháp lựa chọn chính của [Tân linh tinh], vui lòng tìm kiếm các bài viết của CFSDN hoặc. tiếp tục duyệt các bài viết liên quan, tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi đang cố gắng nhúng tslib vào hệ thống ARM để sử dụng các thiết bị màn hình cảm ứng; Tôi đã cài đặt thành công nhưng rất tiếc là tôi không thể truy xuất tất cả các ghi chú để cài đặt lại. x) Tôi đã biên dịch chéo các tệp thư viện và đặt chúng vào /usr/lib;
Tôi đang cố gắng phát triển trình điều khiển thiết bị Linux, vì lần thử đầu tiên của tôi, tôi đang cố gắng phát triển trình điều khiển thiết bị ký tự với các tùy chọn tệp sau, struct file_Operations fops{ .open=open_fu
Chúng tôi đã tìm thấy lỗi trong IoT Agent Ultralight. Nếu chúng tôi cố gắng gửi số đo đến một thiết bị không tồn tại, chúng tôi sẽ nhận được lỗi 404 - DEVICE_NOT_FOUND nhưng sẽ được ghi vào cả IoTA và O
Tôi có d3dDevice: ComPtrd3dDevice; ở đây tôi đang sử dụng nó cho dxgiDevice: ComPtr dxgiDevice2;
Tôi đang cố gắng phát triển trình điều khiển thiết bị Linux, vì lần thử đầu tiên của tôi, tôi đang cố gắng phát triển trình điều khiển thiết bị ký tự với các tùy chọn tệp sau, struct file_Operations fops{ .open=open_fu
Tôi đang chạy trên Mt Lion đã cài đặt Xcode 4.5.1. khi tôi xoay thiết bị, nhưng khi tôi phát triển mở mô phỏng iOS 6 hoặc tôi chạy iOS
Tôi đã tạo một kho lưu trữ mạng trong Vagrantfile của mình bằng cách sử dụng dòng sau config.vm.network :hostonly, "10.1.1.15" Tôi có thể thấy it setting /etc/networ
Tôi đã tạo một kho lưu trữ mạng trong Vagrantfile của mình bằng cách sử dụng dòng sau config.vm.network :hostonly, "10.1.1.15" Tôi có thể thấy it setting /etc/networ
Khi tôi thêm một thiết bị vào ứng dụng của mình, tôi muốn tạo một thiết bị ở trung tâm IoT. REST cuối cùng mà tôi có thể sử dụng để thực hiện các thao tác. hiện công việc này. Câu trả lời hay nhất Xem tài liệu sau: Dịch vụ - Creat
đời tôi không thể xây dựng ứng dụng của mình cho iPad bằng xcode 4.0.1 bằng cách sử dụng "Hồ sơ cấu hình nhóm" trong xcode tổ chức "Cấu hình thiết bị tự động". build trên iPad
Tôi là một lập trình viên xuất sắc, rất xuất sắc!