2016-04-18 20 views
5

Giả sử tôi đang chạy một cụm dịch vụ vải trên các máy ảo 5 D1 lớp (1 lõi, 3,5 GB RAM, 50GB SSD). và tôi đang chạy 2 dịch vụ đáng tin cậy trên cụm này, một quốc gia không quốc tịch và một tiểu bang. Giả sử rằng mục tiêu bản sao là 3.Dịch vụ Azure Vải Bộ sưu tập và bộ nhớ đáng tin cậy

  1. Cách tính số lượng bộ sưu tập đáng tin cậy của tôi có thể giữ?

  2. Giả sử tôi thêm một hoặc nhiều dịch vụ trạng thái. Vì tôi không thực sự biết cách khung phân phối dịch vụ nên tôi cần phải tiếp cận bảo thủ nhất và giả sử rằng một nút có thể chạy tất cả các dịch vụ trạng thái của tôi trên một nút duy nhất và bộ nhớ tích lũy của chúng cần phải thấp hơn RAM máy đơn?

+0

https://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-services-reliable-collections/ có một đầu mối "thực tế ngày nay bạn đang bị ràng buộc với lượng bộ nhớ trên " – mayu

+0

Câu hỏi 1 -" Số tiền tối đa mà họ có thể giữ "là gì? – masnider

+0

@ masnider Vâng, nó sẽ giảm xuống. – mayu

Trả lời

13

TLDR - Ước tính khả năng dự kiến ​​của cụm là một phần nghệ thuật, khoa học một phần. Bạn có thể nhận được một giới hạn thấp hơn mà bạn có thể đẩy cao hơn, nhưng đối với hầu hết các phần triển khai mọi thứ, chạy chúng và thu thập dữ liệu trong điều kiện khối lượng công việc của bạn là cách tốt nhất để trả lời câu hỏi này.

1) Nói chung, các bộ sưu tập trên một máy nhất định bị giới hạn bởi lượng bộ nhớ có sẵn hoặc lượng không gian đĩa sẵn có trên một nút, tùy theo mức nào thấp hơn. Hôm nay chúng tôi giữ tất cả dữ liệu trong bộ sưu tập trong bộ nhớ và cũng lưu giữ nó vào đĩa. Vì vậy, số tiền tối đa mà các bộ sưu tập của bạn trên toàn bộ cụm có thể nắm giữ nói chung (Số lượng bộ nhớ có sẵn trong cụm)/(Target Replica Set Size).

Lưu ý rằng "Bộ nhớ khả dụng" là bất kỳ thứ gì còn lại từ các mã khác chạy trên máy, bao gồm cả hệ điều hành. Trong ví dụ trên của bạn mặc dù bạn không chạy trên tất cả các nút - bạn sẽ chỉ có thể nhận được 3 trong số chúng. Vì vậy, (không thực tế) giả định 0 overhead từ các yếu tố khác, bạn có thể mong đợi để có thể đưa khoảng 3,5 GB dữ liệu vào bản sao dịch vụ trạng thái đó trước khi bạn hết bộ nhớ trên các nút mà nó đang chạy. Vẫn còn 2 nút trong cụm để trống.

Hãy lấy một ví dụ khác. Hãy nói rằng nó giống như ví dụ của bạn ở trên, ngoại trừ trong trường hợp này bạn thiết lập dịch vụ stateful để được phân vùng. Giả sử bạn đã chọn số phân vùng là 5. Vì vậy, bây giờ trên mỗi nút bạn có một bản sao chính và 2 bản sao phụ từ các phân vùng khác. Trong trường hợp này, mỗi phân vùng sẽ chỉ có thể chứa tối đa khoảng 1,16 GB trạng thái, nhưng bây giờ tổng thể bạn có thể đóng gói 5,83 GB trạng thái vào cụm (vì tất cả các nút bây giờ có thể được sử dụng đầy đủ). Ngẫu nhiên, chỉ để chứng minh các công trình toán học, đó là (3,5 GB bộ nhớ cho mỗi nút * 5 nút trong cụm) [17.5]/(kích thước thiết lập bản sao đích là 3) = 5.83.

Trong tất cả các ví dụ này, chúng tôi cũng giả định rằng mức tiêu thụ bộ nhớ cho tất cả các phân vùng và tất cả các bản sao đều giống nhau. Rất nhiều thời gian mà hóa ra là không đúng (ít nhất là tạm thời) - một số phân vùng có thể kết thúc với nhiều hơn hoặc ít hơn làm việc để làm và do đó có tiêu thụ tài nguyên không đồng đều. Chúng tôi cũng giả định rằng những người thứ hai luôn giống như những người sơ bộ. Trong trường hợp của số lượng nhà nước nó có thể công bằng để giả định rằng những sẽ theo dõi khá đồng đều, mặc dù cho tiêu thụ tài nguyên khác nó có thể không (chỉ cần một cái gì đó để ghi nhớ). Trong trường hợp tiêu thụ không đồng đều, đây là nơi mà phần còn lại của Quản lý tài nguyên cụm của Service Fabric sẽ giúp, vì chúng ta có thể biết về việc tiêu thụ các bản sao khác nhau và đóng gói chúng một cách hiệu quả vào cụm để tận dụng không gian sẵn có. Báo cáo tự động về tiêu thụ tài nguyên liên quan đến tiểu bang trong bộ sưu tập nằm trên radar của chúng tôi và điều chúng tôi muốn làm, vì vậy trong tương lai điều này sẽ tự động nhưng hôm nay bạn phải tự mình báo cáo mức tiêu thụ này.

2) Theo mặc định, chúng tôi sẽ cân bằng dịch vụ theo các chỉ số mặc định (thêm về số liệu là here).Vì vậy, theo mặc định các bản sao khác nhau của hai dịch vụ khác nhau có thể kết thúc trên máy, nhưng trong ví dụ của bạn, bạn sẽ kết thúc với 4 nút với 1 bản sao từ một dịch vụ trên đó và sau đó 1 nút với hai bản sao từ hai dịch vụ khác nhau . Điều này có nghĩa là mỗi dịch vụ (mỗi phân vùng có 1 phân vùng theo ví dụ của bạn) sẽ chỉ có thể tiêu thụ 1,75 GB bộ nhớ trong mỗi dịch vụ với tổng số 3,5 GB trong cụm. Đây là một lần nữa ít hơn tổng số bộ nhớ có sẵn của cụm, vì có một số phần của các nút mà bạn không sử dụng.

Lưu ý rằng đây là mức tiêu thụ tối đa có thể và giả sử không có mức tiêu thụ nào ngoài dịch vụ. Thực hiện việc này vì mức tối đa của bạn không được khuyến khích. Bạn sẽ muốn giảm nó vì nhiều lý do, nhưng lý do thực tế nhất là đảm bảo rằng trong sự hiện diện của các nâng cấp và thất bại có đủ khả năng có sẵn trong cluster. Ví dụ: giả sử bạn có 5 tên miền nâng cấp và 5 miền lỗi. Bây giờ, giả sử giá trị của một lỗi miền bị lỗi trong khi bạn có nâng cấp đang diễn ra trong miền nâng cấp. Điều này có nghĩa là (ít hơn một chút) 40% dung lượng cụm của bạn có thể biến mất bất cứ lúc nào và bạn có thể muốn đủ chỗ còn lại trên các nút còn lại để tiếp tục. Điều này có nghĩa là nếu cụm của bạn trước đây có thể chứa 5.83 GB trạng thái (từ các tính toán trước đây của chúng tôi), thực tế bạn có thể không muốn đặt nhiều hơn 3,5 GB trạng thái trong đó vì dịch vụ này có thể không có khả năng để trở lại 100% khỏe mạnh (lưu ý rằng chúng tôi không xây dựng bản sao thay thế ngay lập tức để các nút sẽ phải xuống cho ReplicaRestartWaitDuration của bạn trước khi bạn chạy vào trường hợp này). Có nhiều thông tin về số liệu, dung lượng, dung lượng đệm (mà bạn có thể sử dụng để đảm bảo rằng phòng còn lại trên các nút cho các trường hợp lỗi) và các miền lỗi và nâng cấp được bao gồm trong this article.

Có một số thứ khác thực tế sẽ giới hạn số lượng trạng thái bạn có thể lưu trữ. Bạn sẽ muốn thực hiện một số việc:

  • Ước tính kích thước dữ liệu của bạn. Bạn có thể thực hiện ước tính hợp lý trước dữ liệu của bạn lớn như thế nào bằng cách tính toán kích thước của từng trường mà đối tượng của bạn nắm giữ. Hãy chắc chắn để đi vào xem xét tài liệu tham khảo 64-bit. Điều này sẽ cho bạn một điểm bắt đầu thấp hơn.
  • Phí lưu trữ. Mỗi đối tượng bạn lưu trữ trong một bộ sưu tập sẽ có một số chi phí để lưu trữ đối tượng đó. Trong các bộ sưu tập đáng tin cậy tùy thuộc vào bộ sưu tập và các hoạt động hiện đang bay (bản sao, liệt kê, cập nhật, v.v.), chi phí này có thể dao động từ 100 đến khoảng 700 byte cho mỗi mục (hàng) được lưu trữ trong bộ sưu tập. Cũng nên biết rằng chúng tôi luôn tìm cách để giảm lượng chi phí mà chúng tôi giới thiệu.

Chúng tôi cũng khuyên bạn nên chạy dịch vụ của mình trong một khoảng thời gian và đo lường mức tiêu thụ tài nguyên thực tế thông qua bộ đếm hiệu suất. Mô phỏng một số loại tải công việc thực tế và sau đó đo việc sử dụng thực tế các số liệu bạn quan tâm sẽ phục vụ bạn khá tốt. Lý do chúng tôi đề nghị cụ thể là bạn sẽ có thể thấy mức tiêu thụ từ những thứ như đối tượng CLR mà các đối tượng của bạn kết thúc được đặt vào, tần suất GC đang chạy, nếu có rò rỉ hoặc những thứ khác như thế sẽ ảnh hưởng đến số lượng bộ nhớ bạn thực sự có thể sử dụng.

Tôi biết rằng đây là câu trả lời dài nhưng tôi hy vọng bạn thấy nó hữu ích và đầy đủ.

+0

Cảm ơn bạn đã trả lời kỹ lưỡng. Bạn đề nghị làm gì để xóa dữ liệu cũ khỏi từ điển? –

+1

Bạn phải tìm ra những gì "cũ" có nghĩa là trong bối cảnh của dữ liệu đó và dịch vụ, và sau đó loại bỏ nó (thường cũng lưu trữ nó ở một nơi khác như DocDB).Thông thường, đây là một số từ điển khác giữ dấu thời gian (khi dữ liệu được sửa đổi) làm khóa và khóa của dữ liệu trong từ điển dưới dạng giá trị. Sau đó, một tác vụ chạy thường xuyên và lưu dữ liệu vào kho lạnh, sau đó xóa dữ liệu trong từ điển gốc. Đánh dấu và quét là một mô hình tốt cho việc này. Hãy cẩn thận xung quanh điều kiện chủng tộc xung quanh quyết định một cái gì đó cần được loại bỏ và có nó trở nên tươi sống một lần nữa. HTH – masnider

+0

@masnider Liệu TrustedQueue và ReliableConcurrentQueue có sử dụng RAM và đĩa giống như cách các Bộ sưu tập đáng tin cậy khác không? Tôi hy vọng rằng khi TrustedConcurrentQueue phát triển (vì nó không thể tiêu thụ đủ nhanh) StateManager bỏ qua ghi vào RAM và đi thẳng vào đĩa? Nếu đây không phải là trường hợp, tôi đoán nó lên đến tôi để thủ công các 'đánh dấu và quét' nhưng đối với hàng đợi chứ không phải là bộ sưu tập, và sau đó esentially đảo ngược những tin nhắn trở lại vào hàng đợi khi chiều sâu hàng đợi giảm? –

Các vấn đề liên quan