Table of Contents
Vai trò của gương mẫu độc nhất trong việc giúp cho dữ liệu trung kiên được phổ biến trong hệ thống kỹ thuật
Mô hình Singleton là một trong những nguyên tắc thiết kế được công nhận nhiều nhất trong kỹ thuật phần mềm. Mục đích cốt lõi của nó là đảm bảo rằng một lớp học có chính xác một ví dụ và cung cấp một điểm toàn cầu để tiếp cận với ví dụ đó. trong bối cảnh của hệ thống kỹ thuật phân phối, nơi mà nhiều thành phần hoạt động trên nhiều địa điểm, dịch vụ, hoặc chỉ, giữ nguyên dữ liệu trở thành một thách thức ghê gớm. Các mẫu đơn vị giải quyết khó khăn này bằng cách kiểm soát để chia sẻ tài nguyên, thống nhất và ngăn chặn các bang mâu thuẫn nhau. bài này kiểm tra làm thế nào mô hình đơn vị giúp bảo tồn dữ liệu trong môi trường phân phối, khám phá chiến lược, và thảo các kỹ thuật mà các kỹ sư phải xem xét.
Hiểu gương mẫu độc thân
Mẫu đơn giới hạn đối tượng ngay lập tức trong một ví dụ. Thông thường, điều này được thực hiện bằng cách làm cho các nhà xây dựng lớp riêng tư và cung cấp một phương pháp tĩnh mà trả lại các ví dụ một và duy nhất. cuộc gọi đầu tiên để phương pháp đó tạo ra ví dụ; sau đó gọi trở lại các thể hiện có. Điều này đảm bảo rằng trong hệ thống, chỉ có một đối tượng của lớp đó tồn tại, cung cấp một điểm trung tâm điều khiển cho trạng thái hoặc tài nguyên chia sẻ.
Trong khi đơn giản trong khái niệm, thực hiện đúng đòi hỏi phải xử lý cẩn thận sự đồng thuận, đặc biệt là trong nhiều ngữ cảnh được đọc hoặc phân phối. một sự thực hiện ngây thơ có thể phá vỡ sự bảo đảm, dẫn đến nhiều trường hợp và đánh bại mục đích của nó.
Sự thách đố về tính trung kiên trong việc phân phối hệ thống
Hệ thống kỹ thuật phân phối thường gồm nhiều nút, dịch vụ vi mạch, hoặc chỉ cần truy cập dữ liệu hoặc cấu hình chia sẻ. Không có sự đồng bộ hóa đúng, đọc và ghi có thể tạo điều kiện đua, xem không thống nhất. Lấy thí dụ, hai dịch vụ cập nhật cùng một mục ghi chú có thể ghi đè lên các thay đổi của nhau. Tương tự, thiết lập cấu hình phân phối qua nút có thể gây ra hành vi không dự đoán.
Tính toàn vẹn của hệ thống phân phối đòi hỏi tất cả các thành phần hoạt động trên một quan điểm nhất quán và chính xác về trạng thái chung. Điều này không có tính chất khi các thành phần chạy trên các máy khác nhau hoặc trong các tiến trình riêng biệt. mẫu đơn có thể giúp đỡ bằng cách đảm bảo rằng một ví dụ duy nhất, có thẩm quyền quản lý truy cập đến các nguồn tài nguyên chỉ trích. Tuy nhiên, nó không phải là một viên đạn bạc; nó phải được kết hợp với các kỹ thuật khác như khóa, phiên bản, hoặc phân phối.
Tại sao chỉ một mình người sống độc thân không đủ để phân phát hệ thống
Một ví dụ đơn giản tồn tại trong một tiến trình hay một miền ứng dụng. Trong một hệ thống phân phối thật sự bao gồm nhiều máy phục vụ vật lý, mỗi nút có thể có một Singleton riêng lẻ. Vì vậy, chỉ có mô hình này không thể bảo đảm sự độc đáo toàn cầu qua nút. Thay vào đó, mẫu đơn là có giá trị nhất tại cấp xử lý [FLT: 0], nơi mà nó truy cập trong một hệ thống JVM, cLR đơn, hoặc chạy. Để tìm độ nhất quán tính năng, các kỹ sư phải sử dụng khoá, cơ sở dữ liệu, giao dịch, hoặc lãnh đạo bầu cử.
Tuy nhiên, trong mỗi nút, một cửa hàng lưu trữ hay cấu hình địa phương có thể cung cấp một cửa hàng lưu tạm địa phương để giảm các cuộc gọi và cải thiện hiệu suất trong khi duy trì sự nhất quán nội bộ. Chẳng hạn, một đơnton có tham khảo đến một hồ kết nối đảm bảo tất cả các sợi chia sẻ cùng một hồ, ngăn chặn sự kiệt quệ tài nguyên và việc truy cập cơ sở dữ liệu nhất định.
Ngăn chặn các cuộc đua với đơn độc được an toàn
Điều kiện chạy đua xảy ra khi nhiều luồng truy cập dữ liệu chia sẻ không có khả năng đồng bộ chính xác. Trong một Singleton quản lý trạng thái đột biến (v. d., một máy thu, một bộ nhớ tạm cấu hình, một danh sách dịch vụ, truy cập dịch vụ không có tính năng riêng có thể tạo kết quả không đúng. Việc tạo ra một mô hình an toàn sợi là thiết yếu để bảo tồn dữ liệu.
Sự khởi đầu chậm chạp và an toàn
Sự khởi đầu lười biếng chỉ khi cần thiết- là một hiệu suất tối ưu phổ biến. Tuy nhiên, không có đồng bộ hóa, hai sợi có thể kiểm tra cùng một lúc [FLT: 0] và cả hai tiến hành tạo ra các trường hợp, vi phạm các hợp, vi phạm các hợp đồng Singleton. Để ngăn chặn điều này, các nhà phát triển sử dụng một trong nhiều cách tiếp cận an toàn chỉ:
- Khởi tạo:) tiến trình này được tạo ra vào giờ tải trọng, vốn dĩ là an toàn sợi (tải được đồng bộ hóa bởi JVM hay CLR). Tính năng này hoạt động tốt nếu đơn vị Singleton là nhẹ và luôn luôn cần thiết.
- Phương pháp máy móc:) Ngắt kết thúc sự sáng tạo trong một khối bảo đảm chỉ một sợi thực hiện nó. Phương pháp này đơn giản nhưng có thể gây ra hiệu suất trên đầu vì việc truy cập, ngay cả sau khi khởi tạo.
- Khóa đã kiểm tra: [FLT: 1] Một mô hình hiệu quả hơn để ngăn chặn sự sắp xếp lại được nhập chỉ khi nào tiến hành . Trong ngôn ngữ như Java, điều này đòi hỏi từ khoá để ngăn cản sự chỉ dẫn sắp xếp lại.
- Bill Pugh ampton (người giữ tên người chủ theo nghi thức: [FLT: 1) Dùng một hạng tĩnh trong có thể giữ thể hiện đơn lẻ. Hạng nội bộ không được nạp cho đến lần đầu tiên truy cập, cung cấp sự khởi tạo lười biếng mà không cần đồng bộ hóa trên. Tính năng này được xem là cách tiếp cận tốt nhất trong Java.
Mỗi cách tiếp cận có sự đánh đổi, cho các hệ thống kỹ thuật phân phối nơi hiệu suất và sự đáng tin cậy là quan trọng, chọn ra cách thực hiện an toàn sợi tơ đúng là một quyết định nền tảng.
Bảo vệ sự ổn định dữ liệu qua thành phần
Khi một máy tính đơn giản quản lý cấu hình hay trạng thái chỉ trích, nó đảm bảo rằng tất cả các thành phần trong cùng tiến trình này hoạt động với cùng một thông tin. Hãy xem một hệ thống phân phối nơi mỗi dịch vụ dịch vụ nhỏ một tập hợp cờ riêng. Nếu mỗi dịch vụ sử dụng một bộ nhớ tạm riêng, cờ có thể trở nên cũ không nhất quán. Một máy phục vụ đơn có thể kiểm tra cơ sở dữ liệu chia sẻ hoặc cấu hình trong khoảng thời gian có khả năng nạp lại các bộ nhớ tạm, bảo đảm mọi phần của dịch vụ đều thấy cùng một giá trị cờ.
Tương tự, một người đơn lẻ chịu trách nhiệm về việc tạo ra những bộ nhận diện độc đáo (v. d., ID của tuyết) có thể phối hợp thế hệ ID trong một tiến trình, ngăn chặn sự sao chép.
Suy xét kỹ thuật phân phối
Ngoài sự an toàn của sợi, các kỹ sư xây dựng hệ thống phân phối phải cân nhắc các yếu tố khác khi thực hiện mô hình đơn vị:
- Sự khởi đầu chậm chạp chống lại những người nóng lòng tải: ) Sự khởi đầu lười biếng có thể giảm thời gian và dấu chân bộ nhớ khởi chạy, nhưng trong môi trường phân phát, sự khởi đầu mong muốn có thể được tránh những sự chậm trễ bất ngờ khi đơn vị được truy cập lần đầu tiên.
- Nếu lớp người đơn lẻ thực hiện (hoặc tương đương), sự mạo hiểm có thể tạo ra một ví dụ mới.
- Đang làm: Ghi đè để ném một ngoại lệ hoặc trở lại cùng một thể hiện.
- [FLT: 0] Đang thử nghiệm: Sliletons nổi tiếng là khó thử nghiệm đơn vị vì nó giới thiệu trạng thái toàn cầu. Hãy dùng hình ảnh của máy in hoặc hình mẫu của máy tính phụ thuộc để làm cho các máy tính có thể chế giễu trong các cuộc thử nghiệm. Hãy xem xét việc sử dụng một kiểu đăng nhập hoặc thay thế trong môi trường thử nghiệm.
- Thiết kế dạng: quá trình đồng bộ có thể trở thành cổ chai. Hãy dùng thiết kế không khóa hoặc không có hiệu lực thấp khi có thể. Hồ sơ để đảm bảo rằng máy tính chạy độc quyền không làm giảm hệ thống thông qua.
Khi nào nên tránh gương độc thân
Mặc dù lợi ích của nó, mẫu Singleton không thích hợp với mọi tình huống. Nó giới thiệu trạng thái toàn cầu, có thể che đậy các vấn đề thiết kế và làm cho mã khó lý luận hơn. Trong các hệ thống được phân phối, sự quá đáng trên Singleton có thể dẫn tới phụ thuộc bị ẩn mà phức tạp hoá và bị lỗi. Hãy xem xét sử dụng khung hình tiêm phụ thuộc (như Spring or Guice) để quản lý và ví dụ xử lý giảm cân. A singleton nên được dành riêng cho trường hợp cần thiết cho một điểm điều khiển thực sự cần thiết cho một giao diện phần cứng, một giao diện, một quản lý hay một cửa hàng cấu hình nơi giao diện cấu được hiểu rõ ràng.
Những ví dụ thực tế về mô hình đơn vị trong kỹ thuật phân phối
Nhiều hệ thống được phân phối hiện đại làm tăng mức độ mô hình Singleton. Chẳng hạn, đặc vụ Consul [FLT: 0] [FLT: 1] trên mỗi nút đóng vai trò là một máy tính đơn, quản lý việc đăng ký dịch vụ địa phương và kiểm tra sức khỏe. Trong khi tổng hợp viên hội thẩm sự có nhiều nút, đại diện địa phương cung cấp một điểm tập trung cho các tiến trình địa phương.
Trong dịch vụ vi mô Java, [FLT: 0] [FLT: 0] đặc điểm ứng dụng [FLT: 1] [FLT: 1] về cơ bản là một bảng tính đơn hoá cho đậu. Mặc định, hạt mùa xuân là đơn trong văn cảnh ứng dụng, đảm bảo rằng tất cả các thành phần phụ thuộc vào một ví dụ dịch vụ. Tính năng mô phỏng nhất quán [FLT: 1] này giúp quản lý quan hệ phụ thuộc và giảm dấu chân bộ nhớ.
Các hồ chứa dữ liệu, khung đăng nhập và các tác nhân giám sát thường được thực hiện như Singleton để tránh các tình trạng phức tạp tài nguyên. Chẳng hạn, hồ [FLT: 0] [FLT:] Hồ sơ kết nối [FLT: 1] [FLT: 1] thường được dùng làm đơn trong ứng dụng, cung cấp một tập hợp cơ sở dữ liệu duy nhất kết nối mà tất cả các sợi chia sẻ, ngăn chặn sự rò rỉ và truy cập công bằng.
Kết luận
Mô hình Singleton vẫn là một công cụ mạnh mẽ để bảo đảm sự toàn vẹn của dữ liệu trong hệ thống phân phối tại cấp độ kỹ thuật. bằng cách cung cấp một điểm truy cập nhất định để chia sẻ tài nguyên, nó giúp duy trì chính xác dữ liệu, ngăn chặn điều kiện cuộc đua, và đơn giản hóa hệ thống. tuy nhiên, hiệu quả của nó phụ thuộc vào việc thực hiện cẩn thận - kiểm tra an toàn, sự bắt đầu lười biếng, quản lý hàng loạt, và các chiến lược thử nghiệm phải được xem xét tất cả các phương pháp phải nhận ra giới hạn của các mẫu trong môi trường phân phối thực và kết hợp với các cơ chế khác để có tính thống nhất định toàn cầu.
Khi áp dụng một cách hợp pháp, mô hình Singleton góp phần tạo nên những hệ thống phân phối mạnh mẽ, đáng tin cậy. nó không phải là một loại thuốc chữa bệnh, mà là một nguyên tắc thiết kế có khả năng chống lại được, kết hợp với các thực hành hiện đại, hỗ trợ dữ liệu toàn vẹn trong môi trường kỹ thuật phức tạp.
Liên kết thực tế:)