Trình bày các khái niệm liên quan đến hệ thống khắc phục lỗi và xây dựng một hệ thống khắc phục lỗi bằng ngôn ngữ lập trình Java - Pdf 33

Tóm tắt:
Trong hệ thống phân tán việc một máy trong hệ thống vì một lí do nào
đó mà nó không thể tiếp tục công việc được nữa điều đó có thể dẫn đến hệ
thống của chúng ta sẽ bị ngừng hoạt động. Vì thế việc xây dựng một hệ
thống khắc phục lỗi cho hệ thống phân tán la rất cần thiết.
Khóa luận sẽ trình bày những khái niệm liên quan đến hệ thống khắc
phục lỗi(Fault tolerance) và xây dựng một hệ thống khắc phục lỗi bằng ngôn
ngữ lập trình Java.
1
Lời nói đầu:
Trong bối cảnh hiện nay, máy tính phát triển rất nhanh,Vì thế có rất
nhiều hệ thống ra đời và nhằm mục đích bảo đảm tính an toàn của hệ thống
chúng ta cần xây dựng cho nó khả năng khắc phục lỗi. Hệ thống đã trải qua
rất nhiều thử nghiệm và tỏ ra hiệu quả cho việc giải quyết vấn đề ổn định
trong hoạt động của hệ thống. Vì thế trong khóa luận này tôi nghiên cứu
về vấn đề trên.
Bố cục khóa luận gồm 5 chương.
Chưong 1: Giới thiệu về hệ thống phân tán và những đặc trưng của nó
mà trong đó fault tolerance là một đặc trưng không thể thiếu được.
Chương 2: Giới thiệu một số hệ thống có sẵn
Chương 3: Giới thiệu về công nghệ JXTA
Chương 4: Xây dựng hệ thống
Chương 5: Tổng kết và hướng phát triển tiếp theo
2
CHƯƠNG 1: Giới thiệu về Fault tolerance
1.1 Giới thiệu về hệ thống phân tán:
Có nhiều định nghĩa khác nhau về hệ thống phân tán (Distributed system)
tùy thuộc vào việc xem xét những khía cạnh khác nhau của hệ thống, nhưng về cơ
bản là giống nhau: Hệ thống phân tán là một tập hợp các máy tính độc lập được
kết nối và giao tiếp với nhau thông qua giao thức truyền thông mạng
(communication network), mỗi máy tính có bộ xử lý (CPU), bộ nhớ (memory), và

in rảnh rỗi. Nếu hai máy tính không được kết nối, ta phải mua một máy in mới cho
máy tính A. Còn trong hệ thống phân tán, máy tính A có thể sử dụng máy in tại
máy tính B để in. Như vậy, chúng ta đã sử dụng máy in ở máy tính B một cách
hiệu quả hơn và tiết kiệm được chi phí mua máy in cho máy A.
1.1.1.2.Concurrency
Các máy tính trong hệ thống phân tán đều có bộ xử lý và bố nhớ riêng,
nhờ vậy chúng có thể xử lý công việc. Một công việc có thể được chia nhỏ và
chuyển cho từng máy xử lý đồng thời. Vì vậy tốc độ xử lý tăng lên. Đối với những
xử lý nhỏ thì việc xử lý không mất nhiều thời gian nếu được xử lý trên một máy
độc lập. Ngược lại, những việc có lượng tính toán lớn (như việc phá mã) đòi hỏi
nhiều thời gian, có khi là không khả thi về mặt thời gian. Những công việc như vậy
có thể được thực hiện trong hệ thống phân tán bằng cách chia nhỏ công việc, rồi
chuyển giao cho từng máy tính thực hiện đồng thời.Kết quả cuối cùng được tổng
hợp dựa trên kết quả xử lý ở từng máy. Thời gian xử lý sẽ giảm đi đáng kể.
1.1.1.3.Fault-tolerance
Các hệ thống máy tính có thể xảy ra lỗi. Khi bị lỗi, kết quả của quá trình xử
lý có thể không đúng hoặc làm ngừng hoạt động của hệ thống. Trong hệ thống
phân tán, lỗi là một phần của hệ thống. Điều này có nghĩa là một số thành phần
của hệ thống bị lỗi nhưng không ảnh hưởng tới hoạt động của những thành phần
khác, đảm bảo cho hệ thống tiếp tục hoạt động. Các phương pháp khắc phục lỗi
cho hệ thống được nhà thiết kế xem xét và áp dụng ngay từ khi bắt đầu tiến hành
4
thiết kế và xây dựng hệ thống, đồng thời căn cứ vào đặc điểm và mục đích của
mỗi hệ thống sẽ áp dụng các phương pháp khác nhau. Mục đích là đảm bảo cho
hệ thống hoạt động ổn định, và duy tri f được hoạt động lâu dài
1.1.1.4.Scalability
Là khả năng mở rộng qui mô hệ thống mà không làm ảnh hưởng đến hiệu
quả hoạt động của hệ thống. Qui mô của hệ thống được mở rộng khi có các máy
tính mới hay các thành phần khác của hệ thống được thêm vào. Hệ thông phân
tán được thiết kế để đảm bảo rằng hệ thống vẫn hoạt động bình thường. Ví dụ

chúng ta cần nắm rõ từ những khái niệm về hệ thống phân tán cho đến những
khái niệm về Fault tolerance. Sự tồn tại của Fault tolerance trong hệ thống phân
tán là cần thiết. Một hệ thống Fault tolerance cần có những tính chất sau đây:
Tính sẵn sàng(Availability).
Tính tin cậy(Reliability).
Tính an toàn(Safety).
Khả năng không gián đoạn(Maintainability).
1.2.1.1.Availability:
Được định nghĩa như là đặc tính chính của hệ thống sẵn sàng sử dụng
ngay lập tức. Nói rõ hơn là nó sẵn sàng hoạt động chính xác trong bất kì khoảng
thời gian nào và sẵn sàng thực hiện chức năng vì lợi ích sử dụng.Hơn nữa một
hệ thống có tính sẵn sàng cao sẽ chờ đợi để làm việc trong mọi thời điểm.
1.2.1.2.Reliability:
Tức là hệ thống có thể chạy liên tục mà không mắc lỗi. Một hệ thống có tính
tin cậy cao sẽ duy trì công việc không bị gian đoạn trong một khoảng thời gian khá
dài.
6
1.2.1.3.Safety:
Có nghĩa là khi hệ thống tạm thời mắc lỗi thì nó đảm bảo rằng không có gì
là nghiêm trọng xẩy ra cả. Ví dụ, nhiều quá trình điều khiển như là điều khiển năng
lượng điện hay quá trình gửi sóng trong không gian yêu cầu về độ nghiêm ngặt và
an toàn cao.Chỉ một lỗi nhỏ cũng có thể gây ra những thiệt hại rất lớn.
1.2.1.4.Maintainability:
Tức là làm thế nào để khôi phụ hệ thống lỗi một cách dễ dàng. Một hệ thống
có khả năng duy trì là mức cao của tính sẵn sàng, đặc biệt là nó có thể tìm và
khắc phục một cách tự động nếu mắc lỗi.
Thông thường thì hệ thống mang tính tin cậy yêu cầu cung cấp một mức
cao của độ an toàn.
Một hệ thống được gọi là Fail khi nó không thể hoàn thành nhiệm vụ của
mình. Nếu một hệ thống phân tán được thiểt kế để cung cấp cho chính người sử

 Lỗi lâu dài(Permanent fault) tồn tại mãi cho đến khi nó được khắc phục thì
thôi. Một số nguyên nhân của lỗi này như là: Cháy chip, rơi đầu từ đĩa, lỗi
phầm mềm.
1.2.2. Failure Models:
Một hệ thống có lỗi thì nó tất nhiên sẽ không cung cấp được những dịch vụ
mà nó muốn. Nếu chúng ta coi hệ thống phân tán như là tập hợp các server liên
kết lẫn nhau và với các client, khi đó chỉ cần một trong các server hay cả hai bị lỗi
thì rắc rối sẽ xẩy ra cho hệ thống. Trong hệ thống phân tán thì quan hệ phụ thuộc
xuất hiện rất nhiều. Một lỗi đĩa có thể làm khó cho sự sống của file server. Nếu file
server là một phần của dữ liệu phân tán thì việc này sẽ đưa đến dữ liệu sẽ có thể
bị giữ lại và chỉ có thể một phần dữ liệu truyền qua mà thôi.Như vậy lỗi sẽ gây ra
hậu quả khá là nghiêm trọng, để tìm ra lỗi một cách chính xác thì chúng ta nên
đưa ra phân loại về lỗi:
Crash failure
Một crash failure xẩy ra khi server ngừng làm việc nhưng nó vẫn làm việc
chính xác cho đến khi nó dừng. Một khía cạnh quan trọng của crash failure là mỗi
một server tạm nghỉ, không có bất cứ cái gì được nhận từ nó. Một ví dụ đặc trưng
8
của crash failure là hệ điều hành ngừng lại hẳn vaf chỉ có cách là khởi động lại
máy tính. Nhiều hệ thống PC chụi đựng crash failure và coi đó như là một lỗi
thường xuuyên.
Omission failure
Một Omission failure xẩy ra khi lỗi server để trả lời yêu cầu. Tất cả mọi thứ
là không đúng.Có hại loại Omission failure là receive Omission failure và send
Omission failure. Receive Omission failure tức là server chưa bao giờ có yêu cầu
trong công việc đầu tiên. Chú ý rằng nó có thể tốt trong hoàn cảnh là liên kết giữa
một client và một server đã được thiết lập chính xác nhưng lại không có gì lắng
nghe điều đó. Receive Omission failure ảnh hưởng không lớn đến trạng thái hiện
tại của server, server không biết có bất kì thông báo nào gửi đến cho nó.
Tương tự như vậy, send Omission failure xẩy ra khi server kết thúc công việc của

một hệ thống chạy an toàn, ổn định và không bị ngắt quảng. Đó chính là một yêu
cầu cho mọi hệ thống.
10
1.3. Giới thiệu về Java Migration:
Sự tính toán di động là là một kiểu chương trình đầy triển vọng trên mạng -
hướng ứng dụng. Có rất nhiều loại ứng dụng được đưa ra như là: Thương mại
điện tử, đấu giá trên mạng, tự động tìm kiếm thông tin, hay quản lí công việc tự
động….
Khả năng để duy trì trạng thái thực thi trong Migration là một tiêu chí quan
trọng của phân loại ngôn ngữ lập trình cho sự tính toán di động. Migration được
gọi là trong suốt nếu một ứng dụng di động được tiếp tục lại trang thái (sau khi
dừng) một cách chính xác trạng thái trước đó. Transparent Migration thì đặc biệt là
quan trọng vì nó cho phép người lập trình viết một ứng dụng di động như là viết
một ứng dụng thông thường khác mà không là ứng dụng di động.
Hệ thống ngôn ngữ di động đầu tiên được biết đến như là Telescrip và
Aglet Tct , chúng đều mang cơ chế của Transparent Migration.Tuy
nhiên,Transparent Migration không được bổ sung trong JAVA - hệ thống ngôn ngữ
di động cơ bản dù cho JAVA là rất phổ biến cho mọi người quan tâm đến tính toán
di động. Và có một khó khăn trong việc sử dụng Transparent Migration trong Java
đó là làm sao để giữ được stack trong Migration.
Hai phương pháp đã được đưa ra để là được điều đó là:
+ Sử dụng Java virtual machine.
+ Thay đổi mã nguồn.
Tuy nhiên cả hai phương pháp trên đề có nhứng khó khăn của nó.
Phương pháp thứ nhất yêu cầu ứng dụng di động chạy lien tục trên sự thay đổi
của máy ảo, đây là mộ thuận lợi vì điều này có mặt khắp nơi trên hầu hết các máy
ảo Java. Phương pháp sau nó không thể áp dụng được khi mà mã nguồn không
sẵn sàng để dung.Trong thực tế thì mã nguồn Java thường không sẵn có.
Như vậy việc chúng ta đưa ra hai phương pháp trên và sự đối chiếu của
hai phương pháp, thì phương pháp chúng ta có thể tránh được những điều trở

hệ thống cơ bản.
2.1. Giới thiệu hệ thống Sumatra:
Sumatra là sự mở rộng của môi trường lập trình Java có khả năng thích
nghi với chương trình di động. Nền tảng độc lập chính là lí do chung ta chọn Java
cho công việc của chúng ta. Trong Sumatra chung ta không thay đổi ngôn ngữ
java. Sumatra có thể chạy trên tất cả những gì thuộc về ngôn ngữ java nếu không
có sự thay đổi. Thêm tất cả những chức năng được cung cấp bởi lớp thư viên
java đưa ra.
Thiết kế của chúng ta cho Sumatra cung cấp cơ chế thich ứng với chương
trình di động. Nét đặc trưng chính giúp ta phân biệt Sumatra với các hệ thống
truớc đó là nó hỗ trợ chương trình ứng dụng cái mà có sự liên kết với tất cả và sự
di chuyển diễn ra có sự điều khiển ứng dụng.Tuy nhiên sự kết hợp giữa mục đích
phân tán và thread migration cho phép trộn lẫn giữa di chuyển giữ liệu hay di
chuyển sự tính toán. Ở trình độ cao của điều khiển ứng dụng cho phép chúng ta
dễ dàng khỏa sát những chính sách khác nhau cho sự kiểm tra tài nguyên và làm
thích ứng với sự thay đổi của tài nguyên.
Sumatra thêm hai khaí niệm chương trình vào java đó là object-groups và
execution engines. Môt object-groups tạo nên một nhóm đối tượng động. Đối
tượng có thể thềm vào hoặc lấy ra khỏi nhóm đối tượng. Tất cả các đối tượng
trong pham vi một nhóm được đối xử như nhau. Điều nay rất giống với ngôn ngữ
java vì mỗi cấu trúc giữ liệu là một đối tượng và nó có thể di chuyển trạng thái đối
tượng trong khoảng thời gian. Một execution engines là một khái niệm trong môi
trường phân tán.Cụ thể là nó phù hợp để trình biên dịch thi hành trên một host.
Sumatra cho phép một object-groups di chuyển giữa execution engines.
Những thứ chủ yếu cung cấp bởi Sumatra gồm:
13
Object-group migration: object-groups có thể di chuyển giữa các máy
trên yêu cầu của ứng dụng. Đầu tiên tất cả các đối tượng trong một object-groups
đuợc đối xử như là khởi đầu cho tính lưu động liên quan đến quá trình hoạt động.
Đối tượng trong object-groups tự động kiểm soát sử dụng các loại thông tin lưu

myengine = System.rpc.myEngine();
//Createaengineatthexraydatabasesite.
remote_engine = new Engine("xrays.gov");
// Sendthelung filter classtotheremoteengine
remote_engine.downloadClass("Lung filter");
// Createanewobjectgroup.
objgroup = new ObjGroup("lung filter group");
// Addthelung filter objectto theobjectgroup
objgroup.checkIn(filter object);
// Movetheobjectgrouptothedatabasesite
objgroup.moveTo(remote_engine);
//aremotemethodcall selectsinterestingxrays
size = filter_object.query(db,"DarkLungs");
// Aretheretoomanyimagestobring over?
if ( size > too_many_images )
// Migratethread,processimagesandreturn.
Remote_engine.go();
result = cancer object.detect cancer();
myengine.go();
else
// thereareonlyafew interestingxrays. Fetchthem
// andprocesslocally.
objgroup.moveTo(myengine);
15
result = cancer object.detect cancer();
// displayresult locally
System.display(result);
2.2. Giới thiệu hệ thống TACOMA:
2.2.1. Dự án TACOMA:Mô hình tác nhân hiện nay nhận đựợc nhiều sự chú ý.
Một tác nhân phổ biến nhất là phần mềm thay thế người dùng. Và con

nó quyết định khi nào cần di chuyển và di chuyển đến đâu. Đây chính là sự khác
biệt so với Migration.
2.2.2.2. Folfders, Briefcases và Cabinets – Duy trì trạng thái.
Một agent phải có thể nắm bắt được dữ liệu.Có hai hướng:
Nó có thể để lại dữ liệu tại vị trí chính xác và nó phải có thể mang theo dữ liệu khi
nó di chuyển. Chúng ta đưa ra khái niệm folders vì mục đích đó. Folder là nơi
chứa dũ liệu có thể sử dụng bởi agent.Mỗi folder là một tên ASCII.Mỗi Agent có
thể cất hoặc lấy dữ liệu từ folder này. Có nhiều loại folder. CODE folder là nơi
chứa mã nguồn của một agent, DATA folder là nơi chứa dữ liệu, cái có thể hỗ trợ
cho CODE folder.
Tập hợp các folders là một Briefcases. Briefcases di chuyển khi các agent
di chuyển.
Nhưng folders được sử dụng lâu dài được lưu lại một nơi gọi là File
Cabinet. Không giống như Briefcases mà File Cabinet không di chuyển khi agent di
chuyển mà nó đứng yên. Cụ thể về Folder, Briefcases và Cabinet có thể được
miêu tả bởi hình sau:
18
Hình 2.5: Briefcases(with folder) và file Cabinet(with folder)
2.2.2.3 Meet – the Base Abstraction
Một agent có thể Meet . Đây là khái niệm sử dụng cho việc giao tiếp và
đồng bộ giữa các agents.Để thi hành nó ta gọi như sau:
Meet another_agent Briefcases
Agent không giao tiếp bởi sự trao đổi mail.Một meet đơn giản giống như là
xác định và thay đổi một Briefcases .Một agent Client có thể yêu cầu một dịch
vụ từ agent hệ thống. Agent hệ thống có thể trả lại folder kết quả nếu nó cần.
Hình 2.6:Meeting giữa hai agent
Nơi để meet
Agent phải có khả năng di chuyển,Có nghĩa là nó có khả năng di chuyển tự
nhiên từ máy này đến máy khác trên mạng.
Chúng ta làm một sự di chuyển trong suốt với người lập trình ứng dụng.


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status