You are on page 1of 56

c c

Chương 1 : Tәng quan vӅ hӋ phân tán.


1.1 Đӏnh nghĩa.
Có nhiӅu đӏnh nghĩa vӅ hӋ phân tán
Đӏnh nghĩa 1: HӋ phân tán là tұp hӧp các máy tính tӵ trӏ đưӧc kӃt nӕi vӟi nhau bӣi mӝt
mҥng máy tính và đưӧc cài đһt phҫn mӅm hӋ phân tán.
Đӏnh nghĩa 2: HӋ phân tán là mӝt hӋ thӕng có chӭc năng và dӳ liӋu phân tán trên các
trҥm (máy tính) đưӧc kӃt nӕi vӟi nhau bӣi mӝt mҥng máy tính.
Đӏnh nghĩa 3: HӋ phân tán là mӝt tұp các máy tính đӝc lұp giao tiӃp vӟi ngưӡi dùng
như mӝt hӋ thӕng thӕng nhҩt, toàn vҽn.
Như vұy, có thӇ nói : HӋ phân tán = mҥng máy tính + phҫn mӅm hӋ phân tán.
Phân loҥi hӋ phân tán:
Trưӟc đây, hӋ phân tán đưӧc chia thành ba loҥi : hӋ điӅu hành hӋ phân tán, cơ sӣ dӳ
liӋu hӋ phân tán và các hӋ thӕng tính toán hӋ phân tán.
Ngày nay, hӋ phân tán đưӧc phân chia như sau:
- HӋ phân tán mang tính hӋ thӕng: hӋ điӅu hành phân tán.
- HӋ phân tán mang tính ӭng dөng: các hӋ thӕng truyӅn tin phân tán.
1.2 Mөc tiêu cӫa hӋ phân tán.
a. KӃt nӕi ngưӡi sӱ dөng và tài nguyên
Giҧi quyӃt bài toán chia sҿ tài nguyên trong hӋ thӕng (resource sharing).
b. Tính trong suӕt
Ҭn giҩu sӵ rӡi rҥc và nhӳng nhưӧc điӇm nӃu có cӫa hӋ phân tán đӕi vӟi ngưӡi sӱ dөng
(end-user ) và nhӳng nhà lұp trình ӭng dөng (application programmer).
Theo tiêu chuҭn ISO cho hӋ phân tán ISO / IS / 10746 tên là "Open distributed
processing reference model" 1995 đã cө thӇ hóa tám dҥng trong suӕt:
Trong suӕt truy cұp (Access transparency): che giҩu sӵ khác biӋt vӅ cách biӇu diӉn và
cách truy cұp tài nguyên.
Trong suӕt vӅ vӏ trí (Location transparency): che giҩu vӏ trí cӫa tài nguyên. Hai dҥng
trong suӕt vӯa trình bày đưӧc gӑi chung là trong suӕt mҥng (network transparency).
Trong suӕt di trú (Migration transparency): che giҩu khҧ năng chuyӇn vӏ trí cӫa tài
nguyên.
Trong suӕt vӅ viӋc đӏnh vӏ lҥi (Relocation transparency): che giҩu viӋc di chuyӇn cӫa
tài nguyên khi đang đưӧc sӱ dөng.
Trong suӕt nhân bҧn (Replication transparency): che giҩu tình trҥng tình trҥng sӱ dөng
bҧn sao cӫa tài nguyên.
Che giҩu sӵ che sҿ tài nguyên tương tranh (Concurency transparency).
Trong suӕt sӵ cӕ (Failure transparency): che giҩu lӛi hӋ thӕng nӃu có.
Trong suӕt khҧ năng di chuyӇn tài nguyên (Persistence transparency): che giҩu viӋc di
chuyӇn tài nguyên tӯ bӝ nhӟ ngoài vào bӝ nhӟ trong và ngưӧc lҥi.
c. Tính mӣ (Openness).

HӋ phân tán đưӧc gӑi là mӣ nӃu nó cung cҩp các dӏch vө theo các quy tҳc chuҭn mô tҧ
cú pháp và ngӳ nghĩa cӫa dӏch vө đó.

Thông thưӡng trong hӋ phân tán các dӏch vө thưӡng đһc tҧ qua các giao diӋn bҵng
ngôn ngӳ đһc tҧ giao diӋn (Interface Definition Language- IDL). Vì thӃ chӍ quan tâm
đӃn cú pháp. Nó cho phép các dӏch vө khác nhau cùng chung sӕng. NӃu các giao diӋn
cӫa hӋ phân tán đưӧc đһc tҧ đҫy đӫ và đúng đҳn.

Xét hai khái niӋm cӫa hӋ phân tán là khái niӋm liên tác (Interroperability) và khái niӋm
chuyӇn mang (portability).

Liên tác: các cài đһt cӫa các hӋ thӕng hoһc thành phҫn hӋ thӕng tӯ các nhà sҧn xuҩt
khác nhau có thӇ làm viӋc vӟi nhau thông qua liên tác.

ChuyӇn mang: nhӡ chuyӇn mang mà mӝt ӭng dөng đưӧc phát triӇn cho hӋ phân tán A
có thӇ thӵc hiӋn không cҫn thay đәi gì trên mӝt hӋ phân tán B khác, vӟi điӅu kiӋn đưӧc
cài đһ cùng giao diӋn như A

d. Tính co giãn (Scalability)

Mӝt hӋ phân tán đưӧc gӑi là có tính co giãn nӃu nó thích nghi vӟi sӵ thay đәi quy mô
cӫa hӋ thӕng. ThӇ hiӋn trên các khía cҥnh sau:

- DӉ bә sung ngưӡi sӱ dөng và tài nguyên hӋ thӕng

- Khi hӋ thӕng thay đәi quy mô vӅ mһt đӏa lý dүn đӃn sӵ thay đәi vӅ vӏ trí đӏa lý cӫa
ngưӡi sӱ dөng và các tài nguyên.

- HӋ thӕng có thay đәi quy mô vӅ quҧn trӏ.

NӃu hӋ phân tán có tính co giãn thưӡng ҧnh hưӣng đӃn hiӋu năng cӫa hӋ thӕng (hiӋu
năng cӫa hӋ thӕng là hiӋu quҧ năng lӵc hoҥt đӝng cӫa đӕi tưӧng).

Có ba giҧi pháp phә dөng đӇ giҧi quyӃt vҩn đӅ co giãn cӫa hӋ phân tán:

- Ҭn giҩu

- Phân tán: phân nhӓ thành phҫn hӋ thӕng và phân bӕ chúng trên phҥm vi cӫa hӋ thӕng
(quҧn lý phân cҩp). Ví dө DNS xác đӏnh theo cách phân cҩp miӅn lӟn thành các miӅn
con. Vӟi phương pháp này sӁ giҧi quyӃt đưӧc vүn đӅ khi thêm ngưӡi dùng hay tài
nguyên vào hӋ thӕng.

- Nhân bҧn: nhân bҧn mӝt thành phҫn nào đó cӫa hӋ thӕng. Ví dө tài nguyên dӳ liӋu
đһt tҥi các vӏ trí khác nhau trong hӋ thӕng.

1.3 Các khái niӋm phҫn cӭng.

a. Phân loҥi máy tính.

Có hai loҥi máy tính:

- Các loҥi máy tính có chia sҿ bӝ nhӟ (Shared memory): các loҥi máy đa xӱ lý
(multiproccessor).
- Các máy tính không chia sҿ bӝ nhӟ (Private memory): các hӋ thӕng multicomputors

Trong mӛi loҥi lҥi chia tiӃp theo mҥng kӃt nӕi bus - based chӍ có mӝt đưӡng kӃt nӕi và
switch - base có nhiӅu đưӡng kӃt nӕi tӯ máy này sang máy khác

Hình 1: Hai cách tә chӭc vi xӱ lý và bӝ nhӟ trong hӋ máy tính phân tán.

b. HӋ thuҫn nhҩt / hӋ không thuҫn nhҩt.

HӋ thӕng thuҫn nhҩt: mҥng máy tính cùng sӱ dөng mӝt công nghӋ, các bӝ xӱ lý là như
nhau, truy cұp đӃn cùng mӝt bӝ nhӟ giӕng nhau. Thưӡng dùng trong hӋ thӕng có tính
toán song song.

HӋ không thuҫn nhҩt: nhӳng máy tính khác nhau kӃt nӕi vӟi nhau.

1.4 Các khái niӋm phҫn mӅm.

a. DOS (distributed OS).

Là hӋ điӅu hành cho các hӋ multiproccessor và các hӋ homogenous multicomputer.

Mөc tiêu là ҭn giҩu và cung cҩp các dӏch vө quҧn trӏ tài nguyên.

Đһc điӇm là các dӏch vө có thӇ đưӧc thӵc hiӋn bӣi các lӡi triӋu gӑi tӯ xa.

Hình 2. Cҩu trúc chung cӫa DOS

b. NOS (Network OS).

Là hӋ điӅu hành cho các hӋ thӕng heterogenous multicomputer (LAN, WAN).

Mөc tiêu cӫa NOS là cung cҩp các dӏch vө tӯ xa.

Hình 3 . Cҩu trúc chung cӫa NOS

c. Middleware.

Là tҫng phө nҵm giӳa tҫng dӏch vө cӫa NOS và tҫng ӭng dөng phân tán.

Hình 4. Cҩu trúc chung cӫa mӝt hӋ middleware


1.5 Mô hình client - server

a. Tәng quan vӅ mô hình Client - server.

Mô hình client - server trong mӝt hӋ phân tán đưӧc phân chia thành hai nhóm chính là
nhóm các server và nhóm các client. Nhóm các server chӭa các dӏch vө đһc biӋt.
Nhóm các client là nhóm gӱi yêu cҫu đӃn server đӇ đưӧc sӱ dөng các dӏch vө đó trên
server.

Mô hình tương tác tәng quát giӳa client và server:

Hình 5 Mô hình tương tác chung giӳa mӝt client và mӝt server

b Phân tҫng các ӭng dөng.

ViӋc phân đӏnh rҥch ròi chӭc năng cӫa client và server đӃn giӡ cũng rҩt khác biӋt và
không thuҫn nhҩt. Do đó ngưӡi ta đưa ra ý tưӣng là chia thành ba mӭc chӭc năng:

User - interface level: bao gӗm các chương trình cung cҩp giao diӋn cho phép ngưӡi sӱ
dөng tương tác vӟi chương trình ӭng dөng.

Processing level: làm nhiӋm vө xӱ lý các tác vө cӫa ngưӡi dùng trên cơ sӣ dӳ liӋu

Data level: gӗm các chương trình duy trì các dӳ liӋu mà các chương trình ӭng dөng xӱ
lý.

Chương 2: TruyӅn thông.

(Communication)

2.1 Các giao thӭc phân tҫng (Layered protocols).

Mӝt trong nhӳng mô hình phân tҫng thông dөng nhҩt hiӋn nay là mô hình OSI 7 tҫng.
Mӛi tҫng có các giao thӭc riêng cho nó.

- Tҫng ӭng dөng.

- Tҫng trình diӉn.

- Tҫng phiên.
- Tҫng vұn chuyӇn.

- Tҫng mҥng.

- Tҫng liên kӃt dӳ liӋu.

- Tҫng vұt lý.

Mӝt cҧi tiӃn trong hӋ phân tán là gӝp tҫng trình diӉn và tҫng phiên thành mӝt tҫng mӟi
là tҫng middle ware. Do đó ta cũng phҧi xây dӵng các giao thӭc tương ӭng cho tҫng
middleware này.

Có 4 mô hình dӏch vө middleware mà ta sӁ xét lҫn lưӧt sau đây:

- Gӑi thӫ tөc tӯ xa RPC (Remote Procedure Call).

- TriӋu gӑi đӕi tưӧng tӯ xa (Remote Object Invocation)

- Middleware hưӟng thông điӋp (Message - oriented Middleware)

- Middleware hưӟng dòng (Stream - oriented Middleware)

2.2 Gӑi thӫ tөc tӯ xa (Remote procedure call - RPC).

2.2.1 Tәng quan vӅ RPC.

Khi mӝt tiӃn trình trên máy A muӕn thӵc hiӋn mӝt thӫ tөc nào đó nҵm trên mӝt máy B
khác thì nó sӁ thӵc hiӋn mӝt lӡi gӑi thӫ tөc tӯ xa tӟi máy B. Thӫ tөc đó sӁ đưӧc thӵc
hiӋn ӣ máy B dӵa trên các tham sӕ đưӧc truyӅn đӃn tӯ máy A và kӃt quҧ sӁ đưӧc
truyӅn trӣ lҥi cho máy A tương ӭng.

Trong mô hình client - server thì lӡi gӑi thӫ tөc tӯ xa đưӧc thӵc hiӋn qua các bưӟc sau:

- TiӃn trình muӕn thӵc hiӋn thӫ tөc ӣ máy client sӁ gӑi client stub.

- Client stub sӁ tҥo mӝt bҧn tin và có lӡi gӑi đӃn hӋ điӅu hành cӫa client đó.

- HӋ điӅu hành cӫa máy client sӁ gӱi bҧn tin đó tӟi hӋ điӅu hành cӫa máy server.

- HӋ điӅu hành cӫa server sӁ gӱi bҧn tin tӟi server stub.

- Server stub lҩy các thông tin cӫa gói tin và gӑi server tương ӭng.

- Server thӵc hiӋn công viӋc đưӧc yêu cҫu và trҧ kӃt quҧ vӅ cho server stub.

- Server stub đóng gói kӃt quҧ đó vào bҧn tin rӗi gӑi hӋ điӅu hành cӫa server đó.
- HӋ điӅu hành cӫa máy server này sӁ gӱi bҧn tin kӃt quҧ đó hӋ điӅu hành cӫa máy
client.

- HӋ điӅu hành cӫa máy client sӁ gӱi bҧn tin cho client stub.

- Client stub sӁ mӣ gói tin kӃt quҧ và trҧ vӅ cho client.

Trong đó, client stub và server stub ӣ máy client và server là thành phҫn nhҵm giҧm
nhҽ công viӋc cho client và server, làm cho hӋ thӕng hoҥt đӝng mӝt cách trong suӕt
hơn.

Hình 6. RPC giӳa mӝt client và server

2.2.2 Xét chi tiӃt các thao tác RPC.

Đóng gói các tham sӕ: viӋc đóng gói các tham sӕ đӇ chuҭn bӏ truyӅn đi do client stub
thӵc hiӋn. Client stub sӁ sҳp xӃp các tham sӕ và đưa vào hàng đӧi và quá trình này
đưӧc gӑi là parameter marshaling. Các tham sӕ đưӧc truyӅn đi giúp cho server hiӇu
đưӧc công viӋc mình cҫn thӵc hiӋn tương ӭng là gì đӇ xác đӏnh lӡi gӑi đӃn thӫ tөc
thích hӧp.

TruyӅn tham sӕ: ViӋc truyӅn tham sӕ tӯ client tӟi . Có hai cách truyӅn: truyӅn tham
biӃn và truyӅn tham trӏ.

- TruyӅn tham trӏ: các tham sӕ đưӧc truyӅn đi là các giá trӏ cө thӇ. Các thӫ tөc đưӧc gӑi
đӃn sӁ coi các tham biӃn đưӧc truyӅn kiӇu tham trӏ như là các biӃn đưӧc khӣi tҥo cөc
bӝ, có thӇ thay đәi giá trӏ nhưng lҥi không ҧnh hưӣng tӟi giá trӏ gӕc trong lҫn gӑi sau.
Vҩn đӅ đһt ra khi truyӅn tham trӏ là yêu cҫu giӳa các máy phҧi có sӵ đӗng nhҩt vӅ viӋc
biӇu diӃn dӳ liӋu và các kiӇu dӳ liӋu.

- TruyӅn tham biӃn: các tham sӕ đưӧc truyӅn đi là con trӓ hay biӃn chӭa đӏa chӍ cӫa
nơi chưa giá trӏ thӵc cӫa chúng. Các thӫ tөc đưӧc gӑi sӁ căn cӭ vào đӏa chӍ này đӇ
tham chiӃu đӃn giá trӏ khi tính toán. Khi giá trӏ này bӏ thay đәi trong khi thӵc hiӋn thӫ
tөc thì sӁ đưӧc thông báo cho client và các lҫn gӑi sau sӁ dùng giá trӏ mӟi đó.

2.3 Các mô hình RPC mӣ rӝng.

2.3.1 RPC dӏ bӝ (Asynchronous RPC).

Tư tưӣng thӵc hiӋn là: client gӱi tӟi server lӡi gӑi thӫ tөc và chӡ bҧn tin chҩp nhұn tӯ
server. Phía server sӁ gӱi bҧn tin chҩp nhұn vӅ cho client thông báo đã nhұn đưӧc yêu
cҫu và bҳt đҫu thӵc hiӋn yêu cҫu RPC đó. Lúc này client sӁ tӃp tөc thӵc hiӋn công viӋc
cӫa mình mà không chӡ kӃt quҧ tӯ server như ӣ RPC truyӅn thӕng.
Hình 7. RPC dӏ bӝ.

2.3.2 RPC đӗng bӝ trӉ (Deferred synchronuos RPC):

Thӵc hiӋn hai lӡi gӑi, mӝt tӯ client và mӝt tӯ server.

Client gӱi tӟi server lӡi gӑi thӫ tөc và chӡ bҧn tin chҩp nhұn tӯ server. Phía server sӁ
gӱi bҧn tin chҩp nhұn vӅ cho client thông báo đã nhұn đưӧc yêu cҫu và bҳt đҫu thӵc
hiӋn yêu cҫu RPC đó. Lúc này client sӁ tӃp tөc thӵc hiӋn công viӋc cӫa mình. Khi thӵc
hiӋn thӫ tөc xong, server sӁ thӵc hiӋn lӡi gӑi tӟi client báo nhұn lҩy kӃt quҧ. Client
thӵc hiӋn ngҳt, nhұn kӃt quҧ và gӱi lҥi cho server bҧn tin thông báo đã nhұn kӃt quҧ
thành công.

Hình 8. RPC đӗng bӝ trӉ.

2.3.3 RPC đơn tuyӃn (one- way RPC).

Sau khi thӵc hiӋn lӡi gӑi thӫ tөc tӯ xa tӟi server, client không chӡ đӧi thông báo nhұn
yêu cҫu thành công tӯ server mà tiӃp tөc thӵc hiӋn ngay các công viӋc khác cӫa mình.
Đó là RPC đơn tuyӃn.

2.4 TriӋu gӑi đӕi tưӧng tӯ xa (Remote object invocation).

2.4.1 Đӕi tưӧng phân tán (Distributed object ).

Mӝt đӕi tưӧng phân tán gӗm các thành phҫn sau:

- State: là các dӳ liӋu đã đưӧc đóng gói.

- Method: là các thao tác có thӇ thӵc hiӋn trên dӳ liӋu.

- Interface: là nơi đӇ giao tiӃp vӟi các phương thӭc cӫa đӕi tưӧng. Nói cách khác , các
phương thӭc sҹn sàng thông qua interface.

Mӝt đӕi tưӧng có thӇ thӵc thi nhiӅu interface và cũng có thӇ có nhiӅu đӕi tưӧng cùng
thӵc thi mӝt interface giӕng nhau.

Sӵ đӝc lұp giӳa các interface và các đӕi tưӧng thӵc thi interface cho phép ta có thӇ đһt
mӝt interface vào mӝt máy nào đó trong khi chính b ҧn thân đӕi tưӧng có thӇ cư trú ӣ
máy khác.

Hình 9. Đӕi tưӧng phân tán.

2.4.2 Các bưӟc thӵc hiӋn triӋu gӑi đӕi tưӧng tӯ xa.
Hình 10. TriӋu gӑi đӕi tưӧng tӯ xa.

Khi cҫn triӋu gӑi các phương thӭc tӯ xa, client sӁ gӱi yêu cҫu đӃn proxy - mӝt thӇ hiӋn
cӫa interface.

Proxy sӁ marshal (sҳp xӃp và đưa vào hàng theo thӭ tӵ) các phương thӭc đưӧc yêu cҫu
vào mӝt bҧn tin rӗi gӱi cho hӋ điӅu hành cӫa máy client.

HӋ điӅu hành cӫa client sӁ gӱi bҧn tin yêu cҫu đó đӃn hӋ điӅu hành cӫa server.

HӋ điӅu hành server nhұn bҧn tin và chuyӇn cho skeleton (giӕng server stub cӫa RPC).

Skeleton sӁ unmarshal bҧn tin nhұn đưӧc đҿ gӱi đӃn interface cӫa đӕi tưӧng có
phương thӭc tương ӭng.

Đӕi tưӧng thӵc thi phương thӭc rӗi trҧ kӃt quҧ vӅ cho skeleton.

Skeleton marshal kӃt quҧ nhұn đưӧc rӗi gӱi trҧ vӅ cho hӋ điӅu hành cӫa client.

HӋ điӅu hành cӫa client nhұn bҧn tin kӃt quҧ rӗi chuyӇn tӟi cho proxy.

Proxy unmarshal bҧn tin đó rӗi chuyӇn kӃt quҧ vӅ cho client.

Chú ý là cҧ client va server đӅu sӱ dөng interface giӕng nhau.

Mӝt sӕ các đӕi tưӧng

Compile - time object: là các đӕi tưӧng trong các ngôn ngӳ lұp trình hưӟng đӕi tưӧng.
Nó đưӧc đӏnh nghĩa như là mӝt mүu cӫa class.

Runime object

Persistent Object - đӕi tưӧng kiên trì: là đӕi tưӧng vүn tӗn tҥi ngay cҧ khi nó không tӗn
tҥi trong không gian đ ӏa chӍ cӫa tiӃn trình nào trên server.

Transient object - đӕi tưӧng tӭc thӡi: là đӕi tưӧng chӍ tӗn tҥi khi server gӑi đӃn nó, sau
khi dùng xong nó sӁ đưӧc giҧi phóng.

TriӋu gӑi phương thӭc tӯ xa (RMI - remote method invocation)

Sau khi đã triӋu gӑi mӝt đӕi tưӧng tӯ xa, client có thӇ triӋu gӑi tӯ xa phương thӭc cӫa
đӕi tưӧng đó.

Có hai phương pháp triӋu gӑi phương thӭc tӯ xa là: triӋu gӑi phương thӭc tӯ xa đӝng
và triӋu gӑi phương thӭc tӯ xa tĩnh.
TriӋu gӑi phương thӭc tӯ xa đӝng: khi cҫn gӑi đӃn mӝt phương thӭc mӟi xác đӏnh
interface đang dùng trong lӡi triӋu gӑi tӯ xa đó. Vì thӃ khi interface thay đәi, các
chương trình ӭng dөng không cҫn phҧi biên dӏch lҥi.

TriӋu gӑi phương thӭc tӯ xa tĩnh: các interface đưӧc xác đӏnh trưӟc. Các chương trình
ӭng dөng không thích ӭng đưӧc khi interface hiӋn hành thay đәi. NӃu interface hiӋn
tҥi có sӵ thay đәi thì các chương trình ӭng dөng phҧi đưӧc biên dӏch lҥi mӟi có thӇ
hiӇu

2.5 TruyӅn thông hưӟng thông điӋp (Message - oriented communication).

2.5.1 Các loҥi truyӅn thông cơ bҧn

TruyӅn thông kiên trì (Persistent communication): Thư điӋn tӱ là mӝt ví dө minh hӑa
rõ nét cho khái niӋm truyӅn thông kiên trì.Khi mӝt trҥm muӕn gӱi bҧn tin đi trên
mҥng, nó sӁ gӱi bҧn tin đó đӃn interface cӫa máy mình. Qua bӝ nhӟ đӋm, bҧn tin đó
đưӧc truyӅn đi trong mҥng cөc bӝ đӇ đӃn mail server cө bӝ. Mail server này tҥm thӡi
lưu trӳ bҧn tin đó vào bӝ nhӟ đӋm cӫa mình, xác đӏnh đӏa chӍ trҥm đích, rӗi gӱi tӟi
server cөc bӝ cӫa trҥm đích tương ӭng (có thӇ đi qua nhiӅu mail server trung gian
khác). Tӟi mail server cuӕi cùng, bҧn tin lúc này sӁ đưӧc lưu lҥi trưӟc khi phát cho
trҥm đích tương ӭng.

TruyӅn thông nhҩt thӡi (Transient communication): bҧn tin gӱi đi chӍ đưӧc lưu lҥi
trong phiên trao đәi đó. Khi phiên trao đәi đã hoàn thành hoһc khi kӃt nӕi bӏ hӫy bӓ thì
các bҧn tin đó cũng bӏ hӫy bӓ trên các server. Do đó, vì mӝt lý do nào đó mà mӝt
server trung gian không thӇ chuyӇn tiӃp bҧn tin đi đưӧc thì bҧn tin này sӁ bӏ hӫy bӓ.

TruyӅn thông đӗng bӝ (Synchronous communication): khi trҥm gӱi gӱi đi mӝt bҧn tin
thì nó sӁ ӣ trҥng thái khóa (blocked) cho đӃn khi nhұn đưӧc thông báo bҧn tin đó đã
đӃn đích thành công.

TruyӅn thông dӏ bӝ (Asynchronous communication): khi trҥm gӱi gӱi đi bҧn tin, nó sӁ
tiӃp tөc thӵc hiӋn công viӋc cӫa mình. ĐiӅu này cũng có nghĩa là bҧn tin đó đưӧc lưu
lҥi trên bӝ nhӟ đӋm cӫa trҥm gӱi hoһc cӫa server cөc bӝ.

2.5.2 Mӝt sӕ loҥi truyӅn thông hә hӧp.

TruyӅn thông dӏ bӝ, kiên trì: bҧn tin đưӧc lưu trӳ lâu dài hoһc là ӣ bӝ nhӟ đӋm cӫa
trҥm gӱi hoһc là trên server truyӅn thông đҫu tiên mà bҧn tin đó tӟi. Ví dө hӋ thӕng thư
điӋn tӱ.

TruyӅn thông đӗng bӝ, kiên trì: bҧn tin đưӧc lưu trӳ lâu dài ӣ trҥm nhұn, trҥm gӱi sӁ ӣ
trҥng thái blocked cho đӃn khi bҧn tin đưӧc lưu trӳ ӣ bӝ nhӟ đӋm trҥm nhұn.

TruyӅn thông dӏ bӝ, nhҩt thӡi: sau khi lưu trӳ bҧn tin cҫn gӱi ra bӝ nhӟ đӋm cӫa máy
mình, trҥm gӱi sӁ tiӃp tөc thӵc hiӋn công viӋc cӫa mình. Cùng lúc, bҧn tin sӁ đưӧc
truyӅn tӟi trҥm nhұn. Khi bҧn tin đӃn đưӧc trҥm nhұn mà trҥm nhұn đó lҥi không làm
viӋc, khi đó quá trình truyӅn thông bӏ hӫy bӓ.

TruyӅn thông đӗng bӝ, nhҩt thӡi: bҧn tin không đưӧc lưu trӳ lâu dài. Khi gӱi đi mӝt
bҧn tin, trҥm gӱi sӁ chӡ bҧn tin báo đã nhұn thành công cӫa trҥm nhұn gӱi vӅ mӟi thӵc
hiӋn tiӃp công viӋc cӫa mình.

Hình 11. Mӝt sӕ dҥng truyӅn thông.

2.6 TruyӅn thông hưӟng dòng (stream- oriented communication).

2.6.1 Mӝt sӕ khái niӋm cơ bҧn.

Medium (sӕ nhiӅu là media) : chӍ các phương tiӋn dùng đӇ truyӅn thông tin như các
thiӃt bӏ lưu trӳ, đưӡng truyӅn, các phương tiӋn hiӇn thӏ...

Continuous media: quan hӋ thӡi gian giӳa các mөc là yӃu tӕ cơ bҧn đӇ thông dӏch
đúng ngӳ nghĩa thӵc sӵ cӫa dӳ liӋu.

Discrete media: quan hӋ thӡi gian không còn là yӃu tӕ cơ bҧn đӇ thông dӏch đúng dӳ
liӋu.

Data stream: là mӝt chuӛi các đơn vӏ dӳ liӋu. Vӟi data stream thì thӡi gian là yӃu tӕ
quyӃt đӏnh. ĐӇ kiӇm soát thӡi gian ngưӡi ta đưa ra ba phương thӭc truyӅn sau:

TruyӅn dӏ bӝ (asynchronous transmission mode): các mөc dӳ liӋu truyӅn tuҫn tӵ và


không có ràng buӝc thӡi gian đӕi vӟi viӋc truyӅn.

TruyӃn đӗng bӝ (synchronous transmission mode): quy đӏnh trưӟc đӝ trӉ tӕi đa cho
mӛi đơn vӏ dӳ liӋu trong data stream.

TruyӅn đҷng thӡi (isochronous transmission mode): quy đӏnh đӝ trӉ lӟn nhҩt và nhӓ
nhҩt cho mӛi đơn vӏ dӳ liӋu trong data stream. Cách truyӅn này đóng mӝt vai trò quan
trӑng trong viӋc trình diӉn audio và video.

Dòng đơn (simple stream) là dòng chӍ gӗm mӝt chuӛi đơn vӏ dӳ liӋu.

Dòng phӭc (complex stream): bao gӗm nhiӅu chuӛi đơn vӏ dӳ liӋu khác nhau. Mӛi
chuӛi này đưӧc gӑi là mӝt dòng con (sub stream).

2.6.2 QoS - chҩt lưӧng dӏch vө.

Chҩt lưӧng dӏch vө QoS liên quan đӃn các vҩn đӅ sau:

Băng thông yêu cҫu, tӕc đӝ truyӅn, trӉ...


Loss sensitivity: kӃt hӧp cùng vӟi loss interval cho phép ta xác đӏnh đưӧc tӕc đӝ mҩt
mát thông tin có thӇ chҩp nhұn đưӧc.

Burst loss sensitivity: cho phép xác đӏnh bao nhiêu đơn vӏ dӳ liӋu liên tiӃp có thӇ bӏ
mҩt.

Minimum delay noticed: xác đӏnh giӟi hҥn thӡi gian trӉ trên đưӡng truyӅn cho phép đӇ
bên nhұn không nhұn biӃt đưӧc là có trӉ.

Maximum delay variation: xác đӏnh đӝ trӉ (jitter) rung lӟn nhҩt cho phép.

Quality of guarantee: chӍ sӕ lưӧng các dӏch vө yêu cҫu cҫn phҧi có.

2.6.3 Đӗng bӝ các dòng.

Có hai loҥi đӗng bӝ:

Đӗng bӝ đơn giҧn: thӵc hiӋn đӗng bӝ giӳa dòng trӉ và dòng liên tөc. Ví dө trong viӋc
trình diӉn slide có kèm âm thanh. Dòng hình ҧnh slide là dòng trӉ còn dòng âm thanh
là dòng liên tөc, phҧi đӗng bӝ hai dòng này đӇ thu đưӧc kӃt quҧ trình diӉn như ý
muӕn.

Đӗng bӝ phӭc tap: là viӋc đӗng bӝ giӳa các dòng dӳ liӋu liên tөc. Ví dө trong viӋc
xem phim trӵc tuyӃn, cҧ dòng âm thanh và dòng hình ҧnh đӅu là các dòng liên tөc cҫn
phҧi đưӧc đӗng bӝ.

Các kĩ thuұt đӗng bӝ: có hai kĩ thuұt đӗng bӝ

Kĩ thuұt đơn giҧn: dӵa trên viӋc đӗng bӝ các thao tác đӑc ghi trên các dòng dӳ liӋu sao
cho phù hӧp vӟi các yêu cҫu thӡi gian cho trưӟc và các ràng buӝc vӅ đӗng bӝ.

Hình 12. Đӗng bӝ đơn giҧn.

Kĩ thuұt phӭc tҥp: đӗng bӝ trên môi trưӡng mҥng dӵa trên cҧ viӋc đӗng bӝ giӳa bên
nhұn và bên gӱi.

Hình 13. Đӗng bӝ phӭc tҥp

Chương 3 : TiӃn trình

(Processes)
3.1 Luӗng (Thread).

TiӃn trình (Process) là chương trình đang đưӧc thӵc hiӋn, nó coi tính trong suӕt là
quan trӑng.

Luӗng (Thread): là mӝt hay mӝt phҫn chương trình đang thӵc hiӋn, nó coi hiӋu năng là
quan trӑng.

Lӡi gӑi hӋ thӕng (System call): là tұp lӋnh mӣ rӝng do hӋ điӅu hành cung cҩp xác đӏnh
giao diӋn giӳa hӋ điӅu hành và các chương trình ngưӡi sӱ dөng.

Blocking System call: là lӡi gӑi hӋ thӕng mà sau khi đưӧc gӑi bӣi tiӃn trình ngưӡi sӱ
dөng thì tiӃn trình này bӏ dӯng lҥi cho đӃn khi thӵc hiӋn xong lӡi gӑi hӋ thӕng.

Non - Blocking System call: sau khi gӑi, điӅu khiӇn đưӧc trҧ lҥi cho tiӃn trình gӑi và
tiӃn trình này tiӃp tөc thӵc hiӋn song song vӟi lӡi gӑi hӋ thӕng.

Đa luӗng (Multi thread): áp dөng cho mô hình client/server đưӧc gӑi là multithread
server và multithread client. Vӟi mô hình này giúp đơn giҧn hóa khi lұp trình cho
server đӗng thӡi cũng tăng khҧ năng xӱ lý song song, làm tăng hiӋu năng cӫa hӋ
thӕng.

Có ba phương pháp tiӃp cұn đӇ xây dӵng mӝt server:

Đơn luӗng (single - threaded server) : non - parallelism, blocking system call.

Đa luӗng (multi - threaded server) : parallelism, blocking system call.

Máy trҥng thái hӳu hҥn (Finite State Machine): parallelism, non - blocking system
call.

3.2 Di trú mã.

Lý do cҫn phҧi di trú mã: đӇ tăng hiӋu năng và đӝ linh hoҥt cӫa hӋ thӕng do viӋc di
chuyӇn cӫa các tiӃn trình đang thӵc hiӋn là rҩt khó khăn.

Mӝt tiӃn trình bao gӗm :

Phҫn mã (Code Segment): chӭa tұp các lӋnh cӫa tiӃn trình đang thӵc hiӋn.

Phҫn tài nguyên (Resource Segment): chӭa các tham chiӃu đӃn tҩt cҧ các tài nguyên
bên ngoài mà tiӃn trình đang cҫn

Phҫn thӵc thi (Execution segment): chӭa các trҥng thái thӵc thi hiӋn hành cӫa tiӃn
trình.

Các mô hình di trú mã:


Hình14 Các mô hình di trú mã.

Weak mobility: chӍ truyӅn phҫn mã và mӝt sӕ các dӳ liӋu khӣi đӝng cӫa tiӃn trình.
Đһc tính cӫa mô hình này là mӝt chương trình đưӧc truyӅn đi luôn đưӧc bҳt đҫu tӯ
trҥng thái khӣi đӝng, chӍ yêu cҫu máy đích có thӇ thӵc thi yêu cҫu (code) đó

Strong mobility: truyӅn cҧ phҫn mã và phҫn thӵc thi. Đһc điӇm cӫa mô hình này là
mӝt tiӃn trình đang chҥy có thӇ đưӧc dӯng lҥi rӗi chuyӇn đӃn mӝt máy khác và tiӃp tөc
thӵc hiӋn tiӃp tiӃn trình đó ĺkhó thӵc thi hơn.

Sender initiated migration (di trú đưӧc khӣi tҥo tӯ phía gӱi) : Di trú đưӧc khӣi đӝng tӯ
máy mà phҫn code cӫa tiӃn trình đưӧc lưu trӳ hoһc đang thӵc hiӋn. Di trú này hoàn
thành khi upload chương trình.

Receiver initiated migration (di trú đưӧc khӣi tҥo tӯ phía nhұn) : Di trú mã ban đҫu tӯ
máy tính.

Di trú đưӧc khӣi tҥo tӯ phía nhұn thӵc thi đơn giҧn hơn di trú đưӧc khӣi tҥo tӯ phía
gӱi.

3.3 Tác tӱ mӅm.

3.3.1 Đӏnh nghĩa và phân loҥi:

Đӏnh nghĩa: Tác tӱ là mӝt tiӃn trình tӵ trӏ có khҧ năng phҧn ӭng, trao đәi, cӝng tác vӟi
các tác tӱ khác trong môi trưӡng cӫa nó.

Phân loҥi theo khái niӋm di trú hóa:

Tác tӱ di đӝng (mobie agent): là mӝt tác tӱ đơn giҧn có khҧ năng di chuyӇn giӳa các
máy khác nhau. Trong di trú mã, các tác tӱ di đӝng thưӡng yêu cҫu hӛ trӧ cho mô hình
di đӝng mҥnh mһc dù là không cҫn thiӃt. Yêu cҫu này đӃn tӯ thӵc tӃ là các tác tӱ là tӵ
trӏ và có ҧnh hưӣng lүn nhau và vӟi môi trưӡng cӫa chúng. Sӵ di chuyӇn mӝt tác tӱ
đӃn máy khác khó có thӇ đưӧc thӵc hiӋn nӃu không xét đӃn trҥng thái thӵc thi cӫa nó.
Tính di đӝng là đһc tính chung cӫa các tác tӱ.

Tác tӱ thông minh (Intelligent agent): là tác tӱ dùng đӇ quҧn lý thông tin tӯ nhiӅu
nguӗn khác nhau. ViӋc quҧn lý thông tin bao gӗm viӋc sҳp xӃp, lӑc, thu thұp... Vì các
tác tӱ này thao tác trên thông tin tӯ nhӳng nguӗn vұt lý khác nhau nên chúng đóng vai
trò rҩt quan trӑng.

3.3.2 Công nghӋ tác tӱ.


Hình 15. Mô hình agent flatform cӫa FIPA

ACL (Agent Communication Language): TruyӅn thông giӳa các tiӃn trình tuân thӫ
theo giao thӭc truyӅn thông mӭc ӭng dөng ACL. ACL message bao gӗm phҫn header
và nӝi dung. Phҫn header chӭa trưӡng đӇ xác đӏnh mөc đích cӫa thông điӋp, cùng vӟi
trưӡng đӇ xác đӏnh ngưӡi gӱi và ngưӡi nhұn. Cũng như các giao thӭc truyӅn thông,
phҫn nӝi dung đưӧc tách riêng. ACL không qui đӏnh khuôn dҥng hay ngôn ngӳ thӇ
hiӋn nӝi dung thông điӋp.

ACC: Mӝt thành phҫn quan trӑng trong nӅn tác tӱ là kênh truyӅn thông tác tӱ - ACC.
Trong hҫu hӃt các mô hình cho hӋ thӕng đa tác tӱ, các tác tӱ truyӅn thông bҵng cách
trao đәi thông điӋp. Mô hình FIPA cũng đӇ cho mӝt ACC quҧn lý viӋc truyӅn thông
giӳa các agent flatform khác nhau. Cө thӇ, ACC là nguyên nhân cho viӋc truyӅn thông
điӇm tӟi điӇm vӟi các nӅn khác mӝt cách xác thӵc.

Chương 4: Đӏnh danh.

(Naming)

4.1 Các thӵc thӇ đӏnh danh (Naming Entities).

4.1.1 Tên, đӏnh danh và đӏa chӍ.

Tên (name): là xâu các bit hoһc kí tӵ dùng đӇ tham chiӃu đӃn mӝt thӵc thӇ trong hӋ
phân tán.

Đӏa chӍ (address): khi truy cұp đӃn thӵc thӇ ta sӱ dөng điӇm truy cұp (access point).
Các điӇm truy cұp này cũng phҧi đưӧc đһt tên và tên đó chính là đӏa chӍ cӫa nó. Như
vұy đӏa chӍ cӫa thӵc thӇ chính là tên cӫa điӇm truy cұp thӵc thӇ tương ӭng.

Đӏnh danh (Identifiers): đây cũng là mӝt kiӇu tên đһc biӋt. ViӋc đӏnh danh mӝt tên phҧi
thӓa mãn ba tính chҩt sau:

- Mӛi thӵc thӇ chӍ đưӧc tham chiӃu bӣi duy nhҩt mӝt đӏnh danh ID

- Mӛi ID tham chiӃu tӟi mӝt thӵc thӇ.

- ID đó không đưӧc gán cho mӝt thӵc thӇ khác.

Không gian tên (Name space): dùng đӇ biӇu diӉn tҩt cҧ các tên. NӃu xét vӅ mһt hình
hӑc thì đây là mӝt đӗ thӏ có hưӟng, gӗm các nút và các cung, gӑi là đӗ thӏ tên (naming
graph). Đӗ thӏ có cҩu trúc: Mӛi nút lá miêu tҧ mӝt mӝt thӵc thӇ. Mӛi nút directory gҳn
vӟi nhiӅu nút khác; lưu trӳ trong bҧng directory, bҧng này là tұp các cһp
(label,indetifier).
Tên thân thiӋn (Human-friendly name): là các tên đưӧc đһt mӝt cách dӉ hiӇu, thân
thuӝc vӟi con ngưӡi.

4.1.2 Đӝ phân giҧi tên.

Không gian tên đưa ra kĩ thuұt lưu trӳ và tìm kiӃm các tên trên nó mӝt cách dӉ dàng.
Mӝt trong nhӳng phương pháp hay dùng là s ӱ dөng đưӡng dүn tên (path name). Quá
trình tìm kiӃm tên trong không gian tên đưӧc gӑi là phân giҧi tên (name resolution).
Quá trình phân giҧi tên trҧ vӅ đӏnh danh mӝt nút.

Closure machanism: là kĩ thuұt cho ta biӃt quá trình tìm kiӃm tên đưӧc bҳt đҫu như thӃ
nào và bҳt đҫu ӣ đâu.

Linking: kĩ thuұt này sӱ dөng bí danh (alias) - tên giӕng vӟi tên cӫa thӵc thӇ. Vӟi kĩ
thuұt này cho phép nhiӅu đưӡng dүn cùng tham chiӃu đӃn cùng mӝt nút trên đӗ thӏ tên.
Mӝt cách tiӃp cұn khác là dùng mӝt nút lá không phҧi đӇ lưu trӳ đӏa chӍ hay trҥng thái
cӫa thӵc thӇ mà đӇ lưu trӳ đưӡng dүn tuyӋt đӕi tӟi thӵc thӇ đó.

Mounting: là kĩ thuұt đưӧc thӵc hiӋn khi tìm kiӃm trên hai không gian tên. Mӝt nút thư
mөc đưӧc gӑi là mӝt mount point (điӇm gҳn kӃt) lưu giӳ id (hoһc các thông tin cҫn
thiӃt cho viӋc xác đӏnh và truy nhұp) mӝt nút thư mөc bên phía không gian tên cҫn gҳn
kӃt đưӧc gӑi là mounting point.

Hình 16. Mouting mӝt không gian tên tӯ xa nhӡ mӝt giao thӭc truy cұp

Thông thưӡng, nӃu 2 không gian tên NS1, NS2 - đӇ gҳn kӃt mӝt thӵc thӇ bên ngoài
trong hӋ phân tán, chúng ta cҫn tӕi thiӇu nhӳng thông tin sau:

- Tên cӫa giao thӭc truy nhұp ( đưӧc xác đӏnh đӇ thӵc hiӋn giao thӭc truyӅn thông)

- Tên cӫa server (xá đӏnh đӏa chӍ server)

- Tên cӫa mounting point (xác đӏnh id cӫa nút trong không gian tên bên ngoài)

4.1.3 Thӵc hiӋn mӝt không gian tên.

Phân phӕi không gian tên

Trong hӋ phân tán, viӋc quҧn lý tên đưӧc thӵc hiӋn bҵng cách phân thành các mӭc:

Mӭc Global: Chӭa nhӳng nút thư mөc ӣ mӭc cao ( gӕc và con cӫa nó). Trong lӟp này
các nút thư mөc ít thay đәi.Khҧ năng sҹn sàng ӣ lӟp Global đưӧc yêu cҫu cao hơn so
vӟi các lӟp còn lҥi. NӃu name server cӫa lӟp này bӏ lӛi thì viӋc phân giҧi tên không thӇ
thӵc hiӋn.
Mӭc Administrational: Chӭa nhӳng nút thư mөc ӣ mӭc trung gian, nó có thӇ đưӧc
nhóm thành các nhóm, và mӛi nhóm có thӇ đưӧc chia cho nhӳng khu vӵc quҧn trӏ
khác nhau. Các nút ӣ trong nhóm này cũng ít khi thay đ әi. Khҧ năng sҹn sàng cӫa
name server trong lӟp administrational là rҩt quan trӑng đӕi vӟi các client do name
server quҧn lí. Vì nӃu server này lӛi thì có rҩt nhiӅu các tài nguyên không thӇ truy cұp

Mӭc Managerial: Chӭa nhӳng nút thư mөc ӣ mӭc thҩp. Các nút trong mӭc này thay
đәi khá thưӡng xuyên. Ví dө như các host trong mӝt mҥng LAN. Yêu cҫu đӕi tính sҹn
sàng cӫa name server cӫa lӟp managerial ít khҳt khe hơn so vӟi 2 lӟp trên. Song vӅ
hiӋu năng thì yêu cҫu đӕi vӟi lӟp này cao hơn do phҧi thưӡng xuyên cұp nhұt các thay
đәi.

Hình17 . Phân phӕi không gian tên

Thӵc hiӋn phân giҧi tên

Cách 1: phân giҧi tên tương tác (interactive name sesolution),viӋc phân giҧi tên thӵc
hiӋn bҵng cách truyӅn và nhұn qua lҥi giӳa client và các name server ӣ các mӭc khác
nhau. Theo cách này thì các server không trao đәi trӵc tiӃp vӟi nhau, mӛi server chӍ
phân giҧi nhãn tương ӭng vӟi lӟp đӇ xác đӏnh đӏa chӍ cӫa server tiӃp theo, kӃt quҧ trҧ
lҥi cho client là đӏa chӍ cӫa name server tiӃp theo, và viӋc liên kӃt vӟi server tiӃp theo
là do client đҧm nhiӋm.

Hình 18. Phân giҧi tên tương tác

Cách 2: phân giҧi tên đӋ quy (recursive name resolution), theo cách này thì mӛi name
server sӁ gӱi kӃt quҧ đӃn name server tiӃp theo mà nó tìm thҩy. Và cӭ như vұy cho đӃn
khi hoàn thành phân giҧi toàn bӝ đưӡng dүn.

4.2 Đӏnh vӏ các thӵc thӇ di đӝng.


4.2.1 Tên và viӋc đӏnh vӏ các thӵc thӇ.

Mӛi thӵc thӇ đӅu có tên và đӏa chӍ tương ӭng, viӋc ánh xҥ tӯ tên đӃn đӏa chӍ cӫa thӵc
thӇ đưӧc thӵc hiӋn theo hai phương pháp: theo mô hình mӝt lӟp và theo mô hình hai
lӟp.

Theo mô hình mӝt lӟp: chӍ có mӝt mӭc ánh xҥ giӳa tên và thӵc thӇ. Mӛi lҫn thӵc thӇ
thay đәi vӏ trí, ánh xҥ cҫn phҧi đưӧc thay đәi theo

Theo mô hình hai lӟp: phân biӋt tên và đӏa chӍ nhӡ Entity ID. Gӗm hai quá trình: quá
trình tìm Entity ID tương ӭng tӯ tên cӫa thӵc thӇ đưӧc thӵc hiӋn bҵng dӏch vө tên
(naming service) và quá trình xác đӏnh vӏ trí cӫa thӵc thӇ tӯ ID đưӧc thӵc hiӋn bӣi dӏch
vө đӏnh vӏ (Location service).

Hình 20 (a) .Mô hình mӝt lӟp (b). Mô hình hai lӟp.

4.2.2 Các giҧi pháp đӏnh vӏ thӵc thӇ .

Broadcasting và multicasting: gӱi ID cҫn tìm tӟi tҩt cҧ các máy. Máy nào có thӵc thӇ
đó thì gӱi lҥi mӝt thông báo chӭa đӏa chӍ cӫa access point. Vӟi phương pháp này, yêu
cҫu tҩt cҧ các tiӃn trình đӅu lҳng nghe yêu cҫu gӱi đӃn.

Dùng con trӓ (forwarding pointer): vӟi mӝt thӵc thӇ di đӝng rӡi khӓi vӏ trí A cӫa nó
đӃn vӏ trí B thì nó sӁ đӇ lҥi mӝt tham chiӃu tӟi vӏ trí mӟi cӫa nó. Nhӡ đó, khi đӏnh vӏ
đưӧc thӵc thӇ, client có thӇ xác đӏnh ngay đưӧc đӏa chӍ hiӋn tҥi cӫa thӵc thӇ này nhӡ
vӃt đӏa chӍ đó.

Home-based approaches: cҩp phát cho mӛi thӵc thӇ mӝt vӏ trí gӕc (home)

Vӟi phương pháp này s Ӂ tҥo ra mӝt home location đӇ lưu giӳ đӏa chӍ hiӋn tҥi cӫa các
thӵc thӇ (thưӡng là nơi thӵc thӇ đưӧc tҥo ra ).

Đӏa chӍ cӫa home đưӧc đăng kí tҥi naming service.

Home đăng kí đӏa chӍ ngoài cӫa các thӵc thӇ

Client luôn đӃn home trưӟc tiên, và sau đó tiӃp tөc vӟi các vӏ trí bên ngoài.
Hình .

Hierarchical approaches: xây dӵng mӝt cây tìm kiӃm phân cҩp và thӵc hiӋn phân miӅn
ӣ các mӭc khác nhau. Mӛi domain hình dung như mӝt nút thư mөc riêng biӋt dir(d).
Nút gӕc biӃt tҩt cҧ các thӵc thӇ. Mӛi thӵc thӇ trong mӝt domain D tương ӭng vӟi mӝt
location record trong nút thư mөc dir(D), nó là đӏa chӍ hiӋn tҥi cӫa thӵc thӇ hoһc mӝt
con trӓ.

Hình 22 .Hierarchical approaches

Đӏa chӍ cӫa mӝt thӵc thӇ đưӧc lưu trong mӝt nút lá, hoһc mӝt nút trung gian. Nút trung
gian chӭa mӝt con trӓ đӃn mӝt nút con nӃu và chӍ nӃu cây con nҵm tҥi nút con lưu trӳ
mӝt đӏa chӍ cӫa thӵc thӇ. Mӝt thӵc thӇ có thӇ có nhiӅu đӏa chӍ (ví dө trong trưӡng hӧp
tҥo bҧn sao).

Hình 23 . Cҩu trúc nút

Nguyên lý cơ bҧn: Bҳt đҫu tìm kiӃm ӣ các nút lá cөc bӝ. NӃu nút đó biӃt thӵc thӇ, tiӃp
theo sӁ đi xuӕng phía dưӟi theo con trӓ, ngưӧc lҥi đi lên trên. Tìm kiӃm lên mӭc cao
nhҩt là root

Hình 24 .Nguyên lý tìm kiӃm

4.3 Xóa bӓ các thӵc thӇ không còn đưӧc tham chiӃu (Unreferenced Entities).

4.3.1 ĐӃm các tham chiӃu (Reference Counting).

Mӛi lҫn client tҥo(xóa) mӝt tham chiӃu đӃn mӝt đӕi tưӧng O, mӝt bӝ đӃm tham chiӃu
sӁ tăng thêm (giҧm đi).
4.3.2 Lên danh sách các tham chiӃu (Reference Listing).

Skeleton duy trì mӝt danh sách tҩt cҧ các proxy trӓ đӃn nó.

Ӣ đây đưa ra khái niӋm Idempotent operation là mӝt thao tác nó có thӇ lһp đi lһp lҥi
nhiӅu lҫn mà không ҧnh hưӣng đӃn kӃt quҧ ( ví dө 1*1=1).

Thông điӋp đӇ thêm/xóa mӝt proxy cӫa danh sách cũng gҫn giӕng như tăng/giҧm bӝ
đӃm tham chiӃu.

Các thӵc thӇ chuyӇn tham chiӃu cho các thӵc thӇ khác nhưng không thӇ lҩy đưӧc tӯ
root.

Tұp hӧp loҥi bӓ dӵa trên cơ sӣ truy nguyên: kiӇm tra nhӳng phương thӭc có thӇ lҩy
đưӧc tӯ root và remove

Chương 5 : Đӗng bӝ hóa

(Synchronization)

5.1 Đӗng bӝ hóa đӗng hӗ (Clock Synchronization).

Trong hӋ phân tán,mӛi máy tính là mӝt đӗng hӗ nên viӋc đӗng bӝ các đӗng hӗ này là
rҩt cҫn thiӃt và rҩt khó khăn.

5.1.1 Đӗng hӗ vұt lý (Physical Clock).

Chúng ta có nhiӅu cách đӇ xác đӏnh thӡi gian.Phә biӃn nhҩt là các hӋ đӃm thӡi gian
theo thiên văn và ӣ đây là mһt trӡi.Có 23h mӝt ngày và 3600 giây.Mӝt giây mһt trӡi
đưӧc tính là 1/8600 cӫa mӝt ngày mһt trӡi.Mӝt trong nhӳng mô hình đӇ tính thӡi gian
áp dөng phương pháp trên là Internatinal Atomic Time viӃt tҳt là TAI. Tuy nhiên, TAI
lҥi có mӝt vҩn đӅ là cӭ 86400TAIs sӁ có 3ms chұm hơn so vӟi đӗng hӗ mһt trӡi.

ĐӇ thӕng nhҩt thӡi gian vұt l ngưӡi ta đã đưa ra khái niӋm thӡi gian phӕi hӧp toàn cҫu
UCT (Universal Coordinate Time). ViӋn chuҭn quӕc gia Mӻ đã lұp ra trҥm phát radio
sóng ngҳn W W V đӇ gӱi UTC khi cҫn hoһc đӏnh kì.

5.1.2 Các giҧi thuұt đӗng bӝ hóa vұt lý (Clock synchronization algorithm).

NӃu tҩt cҧ các máy tính đӅu có WWV Receiver thì viӋc đӗng bӝ chúng là dӉ dàng vì
tҩt cҧ đӅu cùng đӗng bӝ vӟi giӡ chuҭn quӕc tӃ UTC.Tuy nhiên khi không có WWV thì
viӋc đӗng bӝ đưӧc thӵc hiӋn bҵng các giҧi thuұt đӗng bӝ sau.
a. Giҧi thuұt Cristian

Giҧ sӱ trong hӋ phân tán có mӝt máy có WWV (gӑi là Time server ) và chúng ta sӁ
tiӃn hành đӗng bӝ các máy khác vӟi máy này.Trong kho ҧng thӡi gian į/2p mӛi máy sӁ
gӱi mӝt thông điӋp đӃn máy chӫ hӓi thӡi gian hiӋn tҥi. Máy chӫ nhanh sӁ phҧn hӗi
bҵng mӝt thông điӋp mang giá trӏ thӡi gian C(utc).Bên gӱi nhұn đưӧc phҧn hӗi nó sӁ
thiӃt lұp lҥi clock thành C(uct).

Hình 25 . Xác đӏnh thӡi gian trong time server

Đánh giá: giҧi thuұt này có 2 vҩn đӅ :

- Mӝt là nӃu clock bên gӱi chҥy nhanh thì lúc này C(uct) sӁ nhӓ hơn thӡi gian hiên tҥi
C cӫa bên gӱi..Có thӇ giҧi quyӃt bҵng cách thay đәi nhӏp ngҳt lҥi nhanh hơn hoһc
chұm hơn cho đӃn lúc khӟp nhau.

- Hai là sӵ chênh lӋch tӯ lúc C(uct) đưӧc gӱi cho đӃn lúc nhұn đưӧc có thӇ gây lӛi.Giҧi
quyӃt bҵng cách ghi nhұn khoҧn thӡi gian giӳa lúc gӱi và nhұn

b. Giҧi thuұt Berkeley.

Tư tưӣng cӫa giҧi thuұt:

Server sӁ chӫ đӝng cho các máy khác biӃt thӡi gian chuҭn cӫa mình CUTC sau đó sӁ
yêu cҫu thông tin vӅ thӡi gian cӫa các client.

Client sӁ trҧ lӡi khoҧng thӡi gian chênh lӋch giӳa nó và server.

Server sӁ tính khoҧng thӡi gian mà các client so vӟi thӡi gian chuҭn cӫa server lúc đó
và gӱi cho các máy khách cách điӅu chӍnh thӡi gian cho phù hӧp.

Hình 26 . Đӗng bӝ theo giҧi thuұt Berkeley

c. Giҧi thuұt trung bình

Giҧi thuұt này thӵc hiӋn chia thӡi gian thành nhӳng khoҧng đӗng bӝ cӕ đӏnh. Khoҧng
thӡi gian I sӁ bҳt đҫu tӯ thӡi điӇm (To + i.R) và chҥy đӃn khi To+(i+1)R vӟi To là thӡi
điӇm xác đӏnh trưӟc và R là mӝt biӃn hӋ thӕng .

Vào thӡi điӇm bҳt đҫu cӫa mӛi lҫn đӗng bӝ tҩt cҧ các máy cӫa mҥng sӁ broadcast thӡi
gian cӫa mình .
Sau khi broadcast nó sӁ bҳt đҫu thu thұp thӡi gian mà các máy khác gӱi đӃn trong
khoҧng thӡi gian S. Sau đó bӓ đi giá trӏ lӟn nhҩt và nhӓ nhҩt rӗi tính trung bình cӫa
các giá trӏ thӡi gian còn lҥi.

5.2 Đӗng hӗ logic (Logical Clock)

Trong nhiӅu trưӡng hӧp, giӳa các tiӃn trình không nhҩt thiӃt phҧi phù hӧp theo thӡi
gian thӵc tӃ mà chӍ cҫn khӟp vӟi nhau vӅ thӡi gian. Do đó ngưӡi ta đưa ra khái niӋm
đӗng hӗ

logic.

5.2.1 Nhãn thӡi gian Lamport (Lamport timestamps).

Lamport đã đưa ra mô hình đӗng hӗ logic đҫu tiên cùng vӟi khái niӋm nhãn thӡi gian.

a. Xét đӏnh nghĩa mӕi quan hӋ "xҧy ra trưӟc" ( )

Khi có A B : A xҧy ra trưӟc B thì tҩt cҧ các tiӃn trình trong hӋ phân tán thӓa thuұn sӵ
kiӋn A xҧy ra trưӟc rӗi đӃn sӵ kiӋn B.

A và B là hai sӵ kiӋn cӫa cùng mӝt tiӃn trình. NӃu A xҧy ra trưӟc B thì A B là đúng.

NӃu A là sӵ kiӋn bҧn tin đưӧc gӱi bӣi mӝt tiӃn trình nào đó, còn B là sӵ kiӋn bҧn tin
đó đưӧc nhұn bӣi mӝt tiӃn trình khác thì quan hӋ A B là đúng.

Quan hӋ xҧy ra trưӟc có tính bҳc cҫu: A B,B C thì A C.

b. Tem thӡi gian (Time Stamps)

ĐӇ đo thӡi gian tương ӭng vӟi 4 sӵ kiӋn x thì ta gán mӝt giá trӏ C(x) cho sӵ kiӋn đó và
thӓa mãn các điӅu kiӋn sau:

NӃu A B trong cùng mӝt tiӃn trình thì C(A) < C(B).

NӃu A và B biӇu diӉn tương ӭng viӋc gӱi và nhұn mӝt thông điӋp thì ta có C(A)< C(B)

Vӟi mӑi sӵ kiӋn phân biӋt (không có liên quan) thì C(A)<>C(B)

5.2.2 Vector thӡi gian (Vector Timestamps)

Giҧi thuұt vector timestamp đưa ra mӝt vetor timestamp VT(a) gán cho sӵ kiӋn a có
thuӝc tính là nӃu Vtt(a) < VT(b) thì sӵ kiӋn là nguyên nhân cӫa b.

Trong vector thӡi gian mӛi tiӃn trình Pi lưu giӳ mӝt Vi vӟi giá trӏ N (các tiӃn trình
khác nhau thì N khác nhau)

- Vi[i] là sӕ các sӵ kiӋn đã xҧy ra tҥi Pi


- NӃu Vi[j] = k nghĩa là Pi biӃt đã có k sӵ kiӋn đã xҭy ra tҥi Pj

Yêu cҫu: mӛi khi có sӵ kiӋn mӟi xҧy ra ӣ tiӃn trình Pi thì phҧi tăng Vi[i] và phҧi đҧm
bҧo vector này đưӧc gӱi cùng thông điӋp suӕt trong quá trình.

Nhӡ đó bên nhұn sӁ biӃt đưӧc đã có bao nhiêu sӵ kiӋn xҧy ra tҥi Pi .Quan trӑng hơn
phía nhұn sӁ báo cho biӃt là đã có bao nhiӅu sӵ kiӋn ӣ các tiӃn trình khác đã xҧy ra
trưӟc khi Pi gӱi thông điӋp m.Nói cách khác timestamp VT cӫa n nói cho bên nhұn
biӃt bao nhiêu sӵ kiӋn đã xҧy ra trong các tiӃn trình khác trưӟc m.

Luұt cұp nhұt vector

- ThiӃt lұp Vi[j] =0 vӟi mӑi j,i

- Sӵ kiӋn xҧy ra ӣ Pi là nguyên nhân tăng Vi[i]

- Pi gҳn mӝt timestamp t=V[i] vào mӑi thông điӋp gӱi đi

- Khi Pi nhân đưӧc mӝt thông điӋp có t nó sӁ thiӃt lұp

Vi[j]=Max(Vi[j] ,t[j]) và tăng Vi[i]

5.3 Trҥng thái tәng thӇ (Global sate).

ViӋc xác đӏnh trҥng thái tәng thӇ cӫa hӋ thӕng rҩt có ích. Mӝt trong nhӳng phương
pháp đưӧc đưa ra là Chөp Nhanh Phân Tán (Distributed Snapshort) cùng khái niӋm lát
cҳt (cut).

Hình 28 .(a) Lát cҳt nhҩt quá. (b) Lát cҳt không nhҩt quán

Mӝt lát cҳt nhҩt quán đưӧc biӇu diӉn là đưӡng chҩm gҥch trong hình a. Lát cҳt mô tҧ
sӵ kiӋn cuӕi cùng mà sӵ kiӋn này đưӧc ghi lҥi cho mӛi tiӃn trình. Bҵng cách này nó có
thӇ kiӇm tra lҥi rҵng tҩt cҧ các thông điӋp nhұn đӅu tương ӭng vӟi các thông điӋp gӱi
đưӧc ghi lҥi trên đưӡng cҳt. Ngưӧc lҥi là lát cҳt không nhҩt quán như hình vӁ b: Thӡi
điӇm tiӃn trình P¬3 nhұn thông điӋp m2 đưӧc ghi vào lát cҳt nhưng viӋc ghi lҥi này
không tương ӭng vӟi sӵ kiӋn gӱi.

5.4 Các giҧi thuұt bҫu chӑn (Election Algorithm).

Khi tiӃn trình điӅu phӕi gһp lӛi thì sӁ phҧi có quá trình bҫu chӑn đӇ chӑn ra mӝt tiӃn
trình khác làm điӅu phӕi thay cho nó. Có hai giҧi thuұt bҫu chӑn hay đưӧc sӱ dөng là:

5.4.1 Giҧi thuұt áp đҧo (Bully Algorithm)

Vӟi giҧ thiӃt:


Mӛi mӝt tiӃn trình đӅu có mӝt ID duy nhҩt.Tҩt cҧ các tiӃn trình khác đӅu có thӇ biӃt
đưӧc sӕ ID và đӏa chӍ cӫa mӛi tiӃn trình trong hӋ thӕng.

Chӑn mӝt tiӃn trình có ID cao nhҩt làm khóa.TiӃn trình sӁ khӣi đӝng viӋc bҫu chӑn
nӃu như nó khôi phөc lҥi sau quá trình xҧy ra lӛi hoһc tiӃn trình điӅu phӕi bӏ trөc trһc.

Các bưӟc cӫa giҧi thuұt:

1.P gӱi thông điӋp ELEC đӃn tҩt cҧ các tiӃn trình có ID cao hơn

2.NӃu không có tiӃn trình nào phҧn hӗi thì P sӁ trӣ thành tiӃn trình điӅu phӕi

3.NӃu có mӝt tiӃn trình có ID cao hơn phҧn hӗi thì nó sӁ đҧm nhiӋm vai trò điӅu phӕi.

Hình 29 .Ví dө theo giҧi thuұt áp đҧo

5.4.2 Giҧi thuұt vòng (Ring Algorithm)

Vӟi giҧ thiӃt :

Các tiӃn trình có mӝt ID duy nhҩt và đưӧc sҳp xӃp trên 1 vòng tròn Logic. Mӛi mӝt
tiӃn trình có thӇ nhұn biӃt đưӧc tiӃn trình bên cҥnh mình.

Các bưӟc thuұt toán:

Mӝt tiӃn trình bҳt đҫu gӱi thông điӋp ELEC tӟi các nút còn tӗn tҥi gҫn nhҩt, quá trình
gӱi theo 1 hưӟng nhҩt đӏnh. Thăm dò liên tiӃp trên vòng cho đӃn khi tìm đưӧc 1 nút
còn tӗn tҥi.

Mӛi mӝt tiӃn trình sӁ gҳn ID cӫa mình vào thông điӋp gӱi.

Cuӕi cùng sӁ chӑn ra 1 tiӃn trình có ID cao nhҩt trong sӕ các tiӃn trình còn hoҥt đӝng
và gӱi thông điӋp điӅu phӕi cho tiӃn trình đó.

5.5 Loҥi trӯ nhau (Mutual Exclusion).

Tә chӭc các "vùng tӟi hҥn" (critial section region).

Có nhiӅu giҧi thuұt đưӧc xây dӵng đӇ cài đһt cơ chӃ loҥi trӯ nhau thông qua các vùng
tӟi hҥn. Có ba giҧi thuұt phә biӃn là:

5.5.1 Giҧi thuұt tұp trung (Centralized Algorithm)


Giҧ thiӃt: mӛi tiӃn trình có mӝt sӕ ID duy nhҩt. TiӃn trình đưӧc bҫu chӑn làm điӅu
phӕi là tiӃn trình có sӕ hiӋu ID cao nhҩt.

Nӝi dung thuұt toán: Khi mӝt tiӃn trình nào đó cҫn vào vùng giӟi hҥn nó sӁ gӱi mӝt
thông điӋp xin cҩp quyӅn .NӃu không có mӝt tiӃn trình nào đang trong vùng giӟi hҥn
thì tiӃn trình điӅu phӕi sӁ gӱi phҧn hӗi cho phép. Còn nӃu có mӝt tiӃn trình khác đang
ӣ trong vùn tӟi hҥn rӗi thì tiӃn trình điӅu phӕi sӁ gӱi thông điӋp tӯ chӕi và đưa tiӃn
trình này vào hàng đӧi cho đӃn khi không có tiӃn trình nào trong vùng t ӟi hҥn nӳa.

Khi tiӃn trình mӝt tiӃn trình rӡi khӓi vùng giӟi hҥn nó sӁ gӱi mӝt thông điӋp đӃn tiӃn
trình điӅu phӕi thông báo trҧ lҥi quyӅn truy cұp.Lúc này tiӃn trình điӅu phӕi sӁ gӱi
quyӅn truy cұp cho tiӃn trình đҫu tiên trong hàng đӧi truy cұp.

Đánh giá : Thuұt toán này có đҧm bҧo sӵ tӗn tҥi duy nhҩt mӝt tiӃn trình trong vùng tӟi
hҥn và chӍ cҫn 3 thông điӋp đӇ thiӃt lұp là: Request -Grant - Release .Nhưӧc điӇm duy
nhҩt là nӃu tiӃn trình điӅu phӕi bӏ hӓng thì hӋ thӕng sӁ sөp đә .Vì nӃu mӝt tiӃn trình
đang trong trҥng thái Block nó sӁ không thӇ biӃt đưӧc tiӃn trình điӅu phӕi có bӏ DEAD
hay không .Trong mӝt hӋ thӕng lӟn nӃu chӍ có mӝt tiӃn trình điӅu phӕi sӁ xuҩt hiӋn
hiӋn tưӧng thҳt cә chai

Hình 30 .ví dө theo giҧi thuұt tұp trung

5.5.2 Giҧi thuұt phân tán (Distributed Algorithm)

Khi mӝt tiӃn trình muӕn vào vùng giӟi hҥn, trưӟc hӃt nó sӁ tҥo ra mӝt nhãn thӡi gian
và gӱi cùng vӟi mӝt thông điӋp đӃn tҩt cҧ các tiӃn trình khác. Các tiӃn trình khác sau
khi nhұn đưӧc thông điӋp này sӁ xҧy ra ba tình huӕng:

NӃu bên nhұn không ӣ trong vùng giӟi hҥn và cũng không muӕn vào vùng giӟi hҥn thì
nó sӁ gӱi thông điӋp OK cho bên gӱi

NӃu bên nhұn đang ӣ trong vùng giӟi hҥn thay vì trҧ lӡi nó sӁ cho vào hàng đӧi yêu
cҫu này.

NӃu bên nhұn cũng muӕn vào hàng đӧi thì nó sӁ so sánh timestamp ai thҩp hơn sӁ
thҳng.

Sau khi gӱi đi thông điӋp yêu cҫu vào vùng giӟi hҥn tiӃn trình sӁ đӧi cho đӃn khi có trҧ
lӡi càng sӟm càng tӕt .Khi đã vào vùng giӟi hҥn rӗi thì nó sӁ gӱi thông điӋp OK đӃn
tҩt cҧ các tiӃn trình khác và xóa các tiӃn trình trong hàng đӧi đi.

Hình 31 . Ví dө theo giҧi thuұt phân tán

5.5.3 Giҧi thuұt vòng vӟi thҿ bài (TokenRing Algorithm).


Giҧ thiӃt tҩt cҧ các tiӃn trình đưӧc sҳp xӃp trên mӝt vòng tròn logic, các tiӃn trình đӅu
đưӧc đánh sӕ và đӅu biӃt đӃn các tiӃn trình cҥnh nó.

Bҳt đҫu quá trình truyӅn, tiӃn trình 0 sӁ đưӧc trao mӝt thҿ bài. Thҿ bài này có thӇ lưu
hành xung quanh vòng tròn logic. Nó đư ӧc chuyӇn tӯ tiӃn trình k đӃn tiӃn trình (k+1)
bҵng cách truyӅn thông điӋp điӇm - điӇm. Khi mӝt tiӃn trình giành đưӧc thӇ bài tӯ tiӃn
trình bên cҥnh nó sӁ kiӇm tra xem có thӇ vào vùng tӟi hҥn hay không. NӃu không có
tiӃn trình khác trong vùng t ӟi hҥn nó sӁ vào vùng tӟi hҥn. Sau khi hoàn thành phҫn
viӋc cӫa mình nó sӁ nhҧ thҿ bài ra, thҿ bài có thӇ di chuyӇn tӵ do trong vòng tròn. NӃu
1 tiӃn trình muӕn vào vùng tӟi hҥn thì nó sӁ giӳ lҩy thҿ bài, nӃu không nó sӁ đӇ cho
thҿ bài truyӅn qua. Vҩn đӅ lӟn nhҩt trong thuұt toán truyӅn thҿ bài là thҿ bài có thҿ bӏ
mҩt, khi đó chúng ta phҧi sinh lҥi thҿ bài bӣi vì viӋc dò tìm lҥi thҿ bài là rҩt khó.

Hình 32. Ví dө theo giҧi thuұt vòng vӟi thҿ bài

5.6 Các giao tác phân tán (Distributed Transactions).

Bӕn tính chҩt cӫa giao tác đӕi vӟi thӃ giӟi bên ngoài: ACID

Tính nguyên tӱ (Atomic): mӑi giao tác diӉn ra không thӇ phân chia đưӧc.

Tính nhҩt quán (Consistent): giao tác không xâm phҥm các bҩt biӃn cӫa hӋ thӕng.

Tính cô lұp (Isolated): các giao tác đӗng thӡi không gây trӣ ngҥi cho nhau.

Tính lâu bӅn (Durable): khi giao tác đã cam kӃt thì các thay đәi đӕi vӟi nó không phҧi
là tҥm thӡi mà là kéo dài.

5.6.1 Phân loҥi các giao tác

Giao tác đưӧc chia thành các loҥi sau:

Limition of Flat Transaction.

Nested Transaction

Distributed Transaction.

5.6.2 ĐiӅu khiӇn tương tranh:

Là quá trình cho phép nhiӅu giao tác thӵc hiӋn đӗng thӡi mà không sҧy ra sӵ tranh
chҩp giӳa các giao tác. Có hai loҥi tương tranh:

Tương tranh bi quan.

Tương tranh lҥc quan.


Chương 6 : Nhҩt quán và nhân bҧn

(Consisstency & replication)

6.1 Đһt vҩn đӅ.

Có hai lý do đӇ sӱ dөng bҧn sao:

Dùng bҧn sao đӇ tăng đӝ tin cұy và tính sҹn sàng cӫa hӋ thӕng: khi dӳ liӋu bӏ lӛi hay vì
mӝt nguyên nhân nào đó mà không th Ӈ dùng đưӧc, ta có thӇ dùng ngay bҧn sao dӳ liӋu
đó đӇ hӋ thӕng không phҧi dӯng lҥi và tránh đưӧc tình trҥng sӱ dөng các dӳ liӋu không
chính xác.

Dùng bҧn sao đӇ tăng hiӋu năng cӫa hӋ thӕng: có thӇ tăng quy mô hӋ thӕng cҧ vӅ sӕ
lưӧng lүn phҥm vi đӏa lý.

Tuy nhiên viӋc sӱ dөng nhân bҧn cũng phҧi trҧ giá, đó là tính nhҩt quán dӳ liӋu cӫa hӋ
thӕng bӏ suy giҧm. Do sӱ dөng bҧn sao nên có thӇ xҧy ra trưӡng hӧp có sӵ thay đәi
trên mӝt dӳ liӋu mà không cұp nhұt trên các bҧn sao cӫa nó. ĐiӅu này sӁ gây ra các sai
sót trong hӋ thӕng. Do đó phҧi tӕn nhiӅu công sӭc đӇ xây dӵng các mô hình đҧm bҧo
tính nhҩt quán cӫa dӳ liӋu.

6.2 Các mô hình nhҩt quán lҩy dӳ liӋu làm trung tâm.

6.2.1 Mô hình nhҩt quán chһt (Strict consistency).

Là mô hình thӓa mãn điӅu kiӋn sau: Thao tác đӑc bҩt kǤ trên mөc dӳ liӋu x đӅu trҧ vӅ
mӝt giá trӏ tương ӭng vӟi kӃt quҧ cӫa thao tác ghi gҫn nhҩt trên x đó.

Sӱ dөng khái niӋm thӡi gian tuyӋt đӕi. Thӡi gian tuyӋt đӕi này là tәng thӇ cho cҧ hӋ
thӕng đӇ xác đӏnh đúng khái niӋm "gҫn nhҩt". ĐiӅu này là khó khҧ thi vӟi hӋ phân tán.

Các kí hiӋu:

- Wi(x)a: thao tác ghi đưӧc thӵc hiӋn bӣi tiӃn trình P(i) lên mөc dӳ liӋu x vӟi giá trӏ a.

- Ri(x)b: thao tác đӑc đưӧc thӵc hiӋn bӣi tiӃn trình P(i) lên mөc dӳ liӋu x cho kӃt quҧ
b.

Giҧ thiӃt x có giá trӏ ban đҫu là null.

Hình 33 (a). Mô hình nhҩt quán chһt. (b) Không phҧi là mô hình nhҩt quán chһt
Do viӋc lan truyӅn cөc bӝ cӫa P1 chưa tӟi P2 nên P2 đӑc dӳ liӋu x vүn là giá trӏ null
ban đҫu.

Mô hình này là không khҧ thi nên đưa ra mô hình giҧm nhҽ hơn.

6.2.2 Mô hình nhҩt quán tuҫn tӵ và mô hình nhҩt quán tuyӃn tính.

a. Mô hình nhҩt quán tuҫn tӵ.

Là mô hình lӓng lҿo hơn, yӃu hơn mô hình nhҩt quán chһt. Nó thӓa mãn các yêu cҫu
sau:

KӃt quҧ cӫa sӵ thӵc hiӋn bҩt kǤ là như nhau nӃu thao tác đӑc và ghi do các tiӃn trình
thӵc hiӋn trên mөc dӳ liӋu mӝt cách tuҫn tӵ và các thao tác cӫa mӛi tiӃn trình xuҩt
hiӋn trong chuӛi thao tác này chӍ ra bӣi chương trình cӫa nó.

Khi các tiӃn trình chҥy đӗng thӡi trên các máy khác nhau thì cho phép sӵ đan xen cӫa
các thao tác nhưng tҩt cҧ các tiӃn trình đӅu phҧi nhұn biӃt đưӧc sӵ đan xen cӫa các
thao tác đó là như nhau.

Hình 34 (a). Mô hình nhҩt quán tuҫn tӵ. (b) Không là mô hình nhҩt quán tuҫn tӵ.

b. Mô hình nhҩt quán tuyӃn tính.

Là mô hình yӃu hơn mô hình nhҩt quán chһt nhưng mҥnh hơn mô hình nhҩt quán tuҫn
tӵ. Mô hình này thӓa mãn điӅu kiӋn sau: "KӃt quҧ cӫa bҩt kì sӵ thӵc hiӋn nào là như
nhau nӃu các thao tác (đӑc và ghi) cӫa tҩt cҧ các tiӃn trình lên dӳ liӋu đưӧc thӵc hiӋn
môt cách tuҫn tӵ và các thao tác cӫa mӛi tiӃn trình xuҩt hiӋn trong chuӛi thao tác này
phҧi theo thӭ tӵ đã đưӧc chӍ ra trong chương trình cӫa nó. Thêm vào đó, nӃu tsop1(x)
< tsop2(y) thì thao tác op1(x) phҧi đưӧc thӵc hiӋn trưӟc op2(y) trong chuӛi thao tác"

6.2.3 Mô hình nhҩt quán nhân quҧ.

Đây là mô hình lӓng lҿo hơn mô hình nhҩt quán tuҫn tӵ. Mô hình này phân biӋt các sӵ
kiӋn có quan hӋ nhân quҧ và các sӵ kiӋn không có quan hӋ nhân quҧ.

NӃu sӵ kiӋn b đưӧc gây ra hoһc bӏ tác đӝng bӣi mӝt sӵ kiӋn a xҧy ra sӟm hơn thì tính
nhân quҧ đòi hӓi mӑi thӵc thӇ khác phҧi "nhìn" thҩy a trưӟc rӗi mӟi thҩy b sau.

Mô hình nhҩt quán nhân quҧ thӓa mãn các điӅu kiӋn sau: các thao tác ghi có quan hӋ
nhân quҧ tiӅm năng phҧi đưӧc nhұn biӃt bӣi tҩt cҧ các tiӃn trình khác trong cùng mӝt
thӭ tӵ. Các thao tác ghi đӗng thӡi có thӇ nhұn biӃt đưӧc theo thӭ tӵ khác nhau trên các
máy khác nhau.
Hình 35 Mô hình nhҩt quán nhân quҧ.

6.2.4 Mô hình nhҩt quán FIFO .

Nhҩt quán FIFO còn đưӧc gӑi là nhҩt quán PRAM. Đây là mô hình yӃu nhҩt vì mô
hình này bӓ qua giӟi hҥn vӅ trұt tӵ cӫa bҩt kì thao tác đӗng thӡi nào. Nhҩt quán FIFO
thӓa mãn : "Các thao tác ghi bӣi mӝt tiӃn trình đơn phҧi đưӧc tҩt cҧ các tiӃn trình khác
nhìn thҩy theo cùng mӝt trұt tӵ mà chúng đӅ ra. Nhưng thao tác ghi bӣi nhiӅu tiӃn trình
khác nhau có thӇ đưӧc thҩy theo nhӳng trұt tӵ khác nhau bӣi các tiӃn trình khác nhau".

Hình 36 Mô hình nhҩt quán FIFO.

6.2.5 Mô hình nhҩt quán yӃu (Weak consistency).

Mô hình nhҩt quán yӃu không tұp trung vào các thao tác trên dӳ liӋu như các mô hình
trên mà chúng quan tâm đӃn trұt tӵ các nhóm lӋnh bҵng viӋc sӱ dөng các biӃn đưӧc
đӗng bӝ.

Mô hình nhҩt quán yӃu có ba đһc tính sau:

‡ ViӋc truy cұp đӃn mӝt biӃn đӗng bӝ hóa đưӧc kӃt hӧp vӟi kho dӳ liӋu là mӝt nhҩt
quán tuҫn tӵ.

‡ Không có thao tác nào lên các biӃn đӗng bӝ hóa đưӧc phép thӵc hiӋn cho đӃn khi tҩt
cҧ các thao tác ghi trưӟc đó đưӧc hoàn thành ӣ mӑi nơi.

‡ Không có thao tác đӑc hay ghi dӳ liӋu lên các mөc dӳ liӋu nào đưӧc phép thӵc hiӋn
cho đӃn khi tҩt cҧ các thao tác trưӟc đó lên các biӃn đӗng bӝ hóa đưӧc thӵc hiӋn.

Hình 37 (a) Mô hình nhҩt quán yӃu. (b) Không là mô hình nhҩt quán yӃu

6.2.6 Mô hình nhҩt quán đi ra (Release consistency).

Sӱ dөng thêm hai lӋnh: lӋnh acquired đӇ báo muӕn vào vùng tӟi hҥn (critial region) và
lӋnh release đӇ báo giҧi phóng vùng tӟi hҥn. Hai lӋnh này cũng có hai cách thӵc thi
khác nhau như: bҵng mӝt biӃn hoһc bҵng mӝt lӋnh đһc biӋt. Hai thao tác này chӍ thӵc
hiӋn vӟi các dӳ liӋu dùng chung chӭ không áp dөng cho tҩt cҧ các dӳ liӋu.

Mô hình nhҩt quán đi ra thӓa mãn các điӅu kiӋn sau:

- Trưӟc khi thӵc hiӋn mӝt thao tác đӑc hay ghi lên dӳ liӋu chia sҿ thì tҩt cҧ các thao tác
acquire do tiӃn trình này thӵc hiӋn trưӟc đó phҧi hoàn tҩt.

- Trưӟc khi mӝt thao tác release đưӧc phép thӵc hiӋn thì tҩt cҧ các thao tác đӑc và ghi
do tiӃn trình này thӵc hiӋn trưӟc đó phҧi đưӧc hoàn tҩt.
- Truy cұp vào các biӃn đӗng bӝ hóa là nhҩt quán FIFO (Không yêu cҫu nhҩt quán
tuҫn tӵ).

Hình 38 Trình tӵ sӵ kiӋn theo mô hình nhҩt quán đi ra

6.2.7 Mô hình nhҩt quán đi vào (Entry consistency).

Cũng giӕng mô hình nhҩt quán đi ra, mô hình nhҩt quán đi vào cũng sӱ dөng hai lӋnh
acquired và release khi muӕn sӱ dөng vào vùng tӟi hҥn. Nhưng các lӋnh này thao tác
trên tӯng mөc dӳ liӋu cӫa vùng dӳ liӋu chia sҿ. TiӃn trình nào muӕn sӱ dөng mөc dӳ
liӋu thì phҧi đӧi cho tҩt cҧ các tiӃn trình khác giҧi phóng mөc dӳ liӋu đó.

Hình 39 .Trình tӵ sӵ kiӋn theo mô hình nhҩt quán đi vào.

ĐӇ ghi lên mӝt mөc dӳ liӋu, client phҧi có đưӧc biӃn đӗng bӝ hoá cӫa mөc đó trong
chӃ đӝ dành riêng. ĐiӅu đó có nghĩa là không client nào khác có thӇ sӱ dөng biӃn đó.
Khi client cұp nhұt xong mөc dӳ liӋu, thì nó giҧi phóng biӃn đó .

Khi client muӕn đӑc mӝt mөc dӳ liӋu nào đó, nó phҧi có đưӧc biӃn đӗng bӝ hóa kӃt
hӧp ӣ chӃ đӝ không dành riêng. NhiӅu client có thӇ giӳ mӝt biӃn đӗng bӝ hóa ӣ chӃ đӝ
không dành riêng.

Khi thӵc hiӋn mӝt thao tác acquire, client lҩy vӅ phiên bҧn mӟi nhҩt cӫa mөc dӳ liӋu
tӯ tiӃn trình cuӕi cùng thӵc hiӋn thao tác acquire trên biӃn đó.

Nhҩt quán đi vào phҧi thӓa mãn các điӅu kiӋn sau:

- Mӝt thao tác acquire đӇ truy cұp vào mӝt biӃn đӗng bӝ hóa không đưӧc phép thӵc
hiӋn trong mӝt tiӃn trình cho đӃn khi tҩt cҧ các cұp nhұt lên mөc dӳ liӋu trong tiӃn
trình đó đưӧc thӵc hiӋn.

- Trưӟc khi mӝt truy cұp trong chӃ đӝ dành riêng cӫa mӝt tiӃn trình tӟi mӝt biӃn đӗng
bӝ hóa đưӧc phép thӵc hiӋn thì không tiӃn trình nào khác còn đưӧc giӳ các biӃn đӗng
bӝ hóa, trong chӃ đӝ không dành riêng thì không c ҫn yêu cҫu như vұy.

- Sau khi mӝt truy cұp trong chӃ đӝ dành riêng lên mӝt biӃn đӗng bӝ hóa đưӧc thӵc
hiӋn thì bҩt kì sӵ truy cұp cӫa tiӃn trình nào khác trong chӃ đӝ không dành riêng lên
biӃn đó cũng không đưӧc thӵc hiӋn cho đӃn khi chӫ nhân cӫa biӃn đӗng bӝ thӵc hiӋn
xong viӋc truy cұp cӫa mình.

6.3 Các mô hình nhҩt quán lҩy client làm trung tâm.

6.3.1 Nhҩt quán cuӕi cùng (eventual consistency).


Khi mӝt dӳ liӋu có nhiӅu bҧn sao thì yêu cҫu đưa ra là sau các thao tác cұp nhұt thì tҩt
cҧ các bҧn sao cuӕi cùng là phҧi bҵng nhau. Yêu cҫu này sӁ đưӧc thӵc hiӋn tӕt nӃu mӛi
client luôn chӏu khó cұp nhұt cho các bҧn sao.

NӃu các client là di đӝng thì viӋc thӵc hiӋn yêu cҫu trên gһp khó khăn hơn. Phҧi luôn
đҧm bҧo rҵng ngay cҧ khi client thay đәi vӅ vӏ trí vұt lý thì viӋc sӱ dөng các bҧn sao
cũng phҧi chính xác. Tӭc là các bҧn sao luôn luôn là nhҩt quán.

6.3.2 Nhҩt quán đӑc đӅu (monotonic - write consistency).

Mô hình nhҩt quán đӑc đӅu phҧi đҧm bҧo điӅu kiӋn sau:

Mӝt tiӃn trình thӵc hiӋn thao tác đӑc trên mӝt mөc dӳ liӋu thì phҧi đҧm bҧo bҩt kì thao
tác đӑc nào cũng đӅu cho cùng mӝt kӃt quҧ hay kӃt quҧ gҫn đây nhҩt.

Mô hình nhҩt quán đӑc đӅu đҧm bҧo rҵng mӝt client sӁ luôn nhìn thҩy nhӳng dӳ liӋu
mӟi hơn và không bao giӡ phҧi nhìn thҩy nhӳng dӳ liӋu cũ hơn nhӳng gì mà mình đã
đӑc trưӟc đó. ĐiӅu đó có nghĩa là khi mӝt client thӵc hiӋn mӝt thao tác đӑc trên mӝt
bҧn sao rӗi tiӃp theo lҥi đӑc trên mӝt bҧn sao khác thì bҧn sao thӭ hai kia ít nhҩt cũng
phҧi đưӧc ghi giӕng vӟi bҧn sao đҫu tiên.

Hình 41 (a) Kho dӳ liӋu theo mô hình nhҩt quán đӑc đӅu (b) Kho dӳ liӋu không theo
mô hình nhҩt quán đӑc đӅu

VӅ bҧn chҩt thì mô hình này là phiên bҧn hưӟng ngưӡi dùng cӫa mô hình nhҩt quán
FIFO (điӇm khác biӋt ӣ chӛ nó chӍ áp dөng đӕi vӟi mӝt client).

6.3.3 Nhҩt quán ghi đӅu (monotonic - read consistency).

Mô hình nhҩt quán đӑc đӅu phҧi đҧm bҧo điӅu kiӋn sau:

Thao tác ghi trên mөc dӳ liӋu x cӫa mӝt tiӃn trình phҧi đưӧc hoàn thành trưӟc bҩt kǤ
mӝt thao tác ghi nào khác trên x bӣi cùng mӝt tiӃn trình.

Nói cách khác thì các thao tác ghi lên mӝt mөc dӳ liӋu sӁ đưӧc sҳp xӃp mӝt cách có
trұt tӵ.

Hình 42 (a) Kho dӳ liӋu theo mô hình nhҩt quán ghi đӅu (b) Kho dӳ liӋu không theo
mô hình nhҩt quán ghi đӅu.

6.3.4 Nhҩt quán đӑc kӃt quҧ ghi (Read - your - write consistency)
Trong mô hình nhҩt quán này, ngưӡi dùng đưӧc đҧm bҧo rҵng sӁ luôn đưӧc nhìn thҩy
nhӳng kӃt quҧ ghi mӟi nhҩt.

"Tác đӝng cӫa mӝt thao tác ghi cӫa mӝt tiӃn trình lên mөc dӳ liӋu x sӁ luôn đưӧc nhìn
thҩy bӣi mӝt thao tác đӑc lҫn lưӧt trên x cӫa cùng tiӃn trình đó".

Hình 43 (a) Kho dӳ liӋu theo mô hình nhҩt quán đӑc kӃt quҧ ghi (b) Kho dӳ liӋu không
theo mô hình đӑc kӃt quҧ ghi

6.3.5 Nhҩt quán ghi theo sau đӑc (write - follow - read consistency).

Mô hình nhҩt quán này ngưӧc vӟi nhҩt quán đӑc kӃt quҧ ghi, nó đҧm bҧo rҵng mӝt
ngưӡi dùng sӁ luôn thӵc hiӋn thao tác ghi lên mӝt phiên bҧn dӳ liӋu mà ít nhҩt cũng
phҧi mӟi bҵng phiên bҧn cuӕi cùng cӫa nó.

"Tác đӝng bӣi mӝt thao tác ghi cӫa mӝt tiӃn trình lên mөc dӳ liӋu x sӁ luôn đưӧc nhìn
thҩy bӣi mӝt thao tác đӑc liên tiӃp lên x cӫa cùng tiӃn trình đó".

Hình 44 (a) Kho dӳ liӋu theo mô hình nhҩt quán ghi theo sau đӑc (b) Kho dӳ liӋu
không theo mô hình ghi theo sau đ ӑc.

6.4 Các giao thӭc phân phӕi (distribution protocols).

6.4.1 XӃp đһt các bҧn sao (replica placement).

Có 3 kiӇu bҧn sao:

Các bҧn sao thưӡng trӵc: trong tiӃn trình hay trên máy luôn có mӝt bҧn sao. Sӕ lưӧng
các bҧn sao thưӡng xuyên này rҩt ít, thưӡng đưӧc tұp hӧp lҥi thành nhóm các máy
trҥm (COWs) hoһc trong các hӋ thӕng phҧn chiӃu (mirrored), thưӡng là các Web
server hay là các server có chӭa cơ sӣ dӳ liӋu dӵ phòng.

Bҧn sao khӣi đҫu tӯ server: Các bҧn sao này đưӧc sӱ dөng đӇ làm tăng hiӋu năng. Các
bҧn sao này đưӧc xӃp đһt đӝng dӵa vào yêu cҫu cӫa server khác. Mӝt ví dө điӇn hình
là chúng đưӧc các công ty web hosting sӱ dөng đӇ đӏnh vӏ vӏ trí đӏa lý cӫa các bҧn sao
gҫn nhҩt khi hӑ cҫn.

Các bҧn sao khӣi đҫu tӯ client: Các bҧn sao này đưӧc tҥo ra tӯ yêu cҫu cӫa client,
chҷng hҥn như viӋc cache dӳ liӋu cӫa mӝt trình duyӋt. Chúng đưӧc xӃp đһt đӝng dӵa
vào yêu cҫu cӫa client.
Hình 45 Tә chӭc logic cӫa các loҥi bҧn sao.

6.4.2 Lan truyӅn các cұp nhұt

Có 3 khҧ năng lan truyӅn các cұp nhұt

ChӍ thông báo là có cұp nhұt: Thưӡng dùng trong viӋc cache dӳ liӋu.Thông báo vӅ
viӋc mҩt hiӋu lӵc cӫa mӝt giao thӭc.Phương pháp này tӕt khi tӍ lӋ các thao tác đӑc so
vӟi thao tác ghi nhӓ.

TruyӅn dӳ liӋu cұp nhұt tӯ bҧn sao này tӟi mӝt bҧn sao khác.Thӵc hiӋn tӕt khi có
nhiӅu thao tác đӑc. Ghi lҥi các thay đәi và tұp hӧp các cұp nhұt lҥi đӇ truyӅn đi (chӍ
truyӅn đi các thay đәi chӭ không truyӅn cҧ dӳ liӋu đã bӏ thay đәi, vì thӃ tiӃt kiӋm đưӧc
băng thông).

Lan truyӅn các thao tác cұp nhұt tӟi các bҧn sao khác (nhân bҧn chӫ đӝng). Tӕn ít băng
thông nhưng đòi hӓi năng lӵc xӱ lý cao vì trong nhiӅu trưӡng hӧp thì các thao tác là
rҩt phӭc tҥp.

Các giao thӭc kéo và đҭy

Đҭy cұp nhұt: là giao thӭc do server khӣi tҥo, trong giao thӭc này các cұp nhұt đưӧc
lan truyӅn mӛi khi có mӝt server khác yêu cҫu.

Kéo cұp nhұt: là giao thӭc do client khӣi tҥo khi client muӕn đưӧc cұp nhұt.

6.4.3 Các giao thӭc bӋnh dӏch (epidemic protocol).

Đây là mӝt giao thӭc có thӇ dùng đӇ thӵc hiӋn mô hình nhҩt quán sau cùng.

Ý tưӣng cơ bҧn cӫa thuұt toán bӋnh dӏch là:

- Giҧ sӱ rҵng không xҧy ra xung đӝt giӳa các thao tác ghi - ghi.

- Các thao tác cұp nhұt ban đҫu đưӧc thӵc hiӋn chӍ trên mӝt hay mӝt vài bҧn sao (càng
ít càng tӕt).

- Mӝt bҧn sao chӍ gӱi các cұp nhұt cӫa nó tӟi mӝt sӕ hӳu hҥn các hàng xóm.

- ViӋc lan truyӅn các cұp nhұt xҧy ra chұm chҥp và không phҧi ngay lұp tӭc.

- Cuӕi cùng thì mӛi cұp nhұt cũng đӃn đưӧc tӯng bҧn sao.

Dӵa trên thuұt toán bӋnh dӏch mà có các mô hình lan truyӅn cұp nhұt. ĐiӅu đáng lưu
tâm trong mô hình này là các cұp nhұt đưӧc lan truyӅn tӟi các bҧn sao vӟi càng ít
thông điӋp càng tӕt và càng nhiӅu bҧn sao bӏ "nhiӉm" các lan truyӅn càng nhanh thì
càng tӕt. ĐӃn cuӕi cùng nӃu bҧn sao nào mà không lan truyӅn đưӧc cұp nhұt cӫa mình
thì nó sӁ bӏ loҥi bӓ. Tuy nhiên viӋc loҥi bӓ có thӇ sӁ không dӉ dàng.
Mӝt trong nhӳng mô hình lan truyӅn cұp nhұt đưӧc gӑi là: anti entropy. Trong mô hình
này, mӛi bҧn sao cӭ đӏnh kì lҥi chӑn ngүu nhiên mӝt bҧn sao khác và trao đәi nhӳng
trҥng thái khác nhau cӫa mình, sau mӝt thӡi gian thì cҧ 2 phía sӁ có nhӳng trҥng thái
giӕng hӋt nhau.

Mӝt mô hình khác là gossiping. Trong mô hình này mӝt bҧn sao đã đưӧc cұp nhұt sӁ
"kӇ" cho mӝt sӕ bҧn sao khác vӅ nhӳng cұp nhұt cӫa mình vì thӃ sӁ làm cho nhӳng bҧn
sao đó bӏ nhiӉm nhӳng cұp nhұt cӫa mình.

6.5 Các giao thӭc nhҩt quán.

6.5.1 Giao thӭc Primary-based

a. Các giao thӭc ghi tӯ xa

Vӟi giao thӭc này, tҩt cҧ các thao tác ghi đưӧc thӵc hiӋn chӍ trên mӝt server tӯ xa.
Giao thӭc này thưӡng đưӧc kӃt hӧp vӟi các hӋ thӕng chӫ khách truyӅn thӕng.

Mӝt dҥng giao thӭc ghi tӯ xa là giao thӭc Primary-Backup.

Nhưӧc điӇm cӫa giao thӭc này là vҩn đӅ hiӋu năng. Tҩt cҧ các thao tác ghi trong giao
thӭc đӅu chiӃm khá nhiӅu thӡi gian, đһc biӋt là khi có giao thêm giao thӭc ghi theo
khӕi đưӧc sӱ dөng.

Ưu điӇm cӫa giao thӭc này là

- Sӱ dөng giao thӭc ghi không theo khӕi đӇ xӱ lý các cұp nhұt.

- Tҩt cҧ các thao tác ghi có thӇ đưӧc gӱi đӃn các bҧn sao dӵ phòng theo cùng mӝt thӭ
tӵ, điӅu này tҥo điӅu kiӋn thuұn lӧi khi thӵc thi mô hình nhҩt quán tuҫn tӵ.

b. Các giao thӭc ghi cөc bӝ

Trong giao thӭc này mӝt bҧn sao cӫa mөc dӳ liӋu đưӧc duy trì. Khi có yêu cҫu thao
tác ghi, mөc dӳ liӋu đưӧc nhân bҧn tӯ server ӣ xa chuyӇn đӃn server cөc bӝ. ViӋc này
đưӧc gӑi là tiӃp cұn theo kiӇu di trú hoàn toàn.

Mӝt vҩn đӅ đưӧc đһt ra cho các tiӃn trình sӱ dөng giao thӭc này đӇ đӑc hoһc ghi lên
các mөc dӳ liӋu là: thӡi gian đӇ thұt sӵ đӏnh vӏ đưӧc mӝt mөc dӳ liӋu có thӇ còn lӟn
hơn cҧ thӡi gian tiӃn trình sӱ dөng nó.

Mӝt dҥng cӫa giao thӭc ghi cөc bӝ là là giao thӭc Primary-backup. Trong giao thӭc
này bҧn chính đưӧc di trú đӃn tiӃn trình đang muӕn thӵc hiӋn viӋc cұp nhұt, rӗi sau đó
bҧn dӵ phòng sӁ đưӧc cұp nhұt.

6.5. 2. Các giao thӭc Replicated-write.


Trong các giao thӭc này, thao tác ghi có thӇ đưӧc tiӃn hành tҥi bҩt kì bҧn sao nào.

Ví dө:

Mӝt tiӃn trình đһc biӋt sӁ mang các thao tác cұp nhұt tӟi tӯng bҧn sao. Mӝt tem thӡi
gian Lamport có thӇ đưӧc sӱ dөng đӇ lҩy các thao tác vӅ, tuy nhiên phương pháp này
không đưӧc linh hoҥt cho các hӋ phân tán.

Mӝt phương pháp khác là sӱ dөng mӝt bӝ sҳp xӃp dãy, là mӝt tiӃn trình đӇ gán các sӕ
ID duy nhҩt cho mӛi cұp nhұt, sau đó truyӅn các cұp nhұt tӟi tҩt cҧ các bҧn sao.

Giao thӭc nhân bҧn chӫ đӝng

Trong giao thӭc này, các thao tác ghi đưӧc truyӅn đӃn tҩt cҧ các bҧn sao, trong khi các
thao tác đӑc đưӧc thӵc hiӋn cөc bӝ. Giao thӭc ghi có thӇ đưӧc truyӅn sӱ dөng giao tiӃp
point-to-point hay multicast. Ưu điӇm cӫa giao thӭc này là tҩt cҧ các bҧn sao đӅu nhұn
đưӧc các thao tác cùng lúc và theo cùng mӝt trұt tӵ, và nó cũng không cҫn đánh dҩu
mӝt bҧn chính hay phҧi gӱi tҩt cҧ các thao tác tӟi mӝt server.

Tuy nhiên giao thӭc này lҥi đòi hӓi phҧi truyӅn theo kiӇu multicast đӝng hoһc phҧi có
mӝt bӝ sҳp xӃp dãy tұp trung mà cҧ 2 phương pháp này đ Ӆu khó có thӇ tiӃp cұn mӝt
cách linh hoҥt.

Trong giao thӭc này có mӝt vҩn đӅ cҫn quan tâm là "triӋu gӑi bҧn sao". ĐӇ tránh cho
mӝt bҧn sao bӏ gӑi quán nhiӅu lҫn, mӝt bӝ điӅu phӕi đưӧc gҳn ӣ mӛi bên (client và
server), điӅu này đҧm bҧo cho viӋc chӍ có mӝt lӡi gӑi và mӝt lӡi đáp đưӧc gӱi đi.

Giao thӭc Quorumbased

Vӟi giao thӭc này, các thao tác ghi đưӧc thӵc hiӋn trên mӝt tұp nhӓ nhҩt các bҧn sao.
Khi thӵc hiӋn mӝt thao tác đӑc, ngưӡi dùng cũng phҧi liên hӋ vӟi mӝt tұp các bҧn sao
đӇ tìm ra phiên bҧn mӟi nhҩt cӫa dӳ liӋu.

Trong giao thӭc này tҩt cҧ các mөc dӳ liӋu đưӧc kӃt hӧp vӟi mӝt sӕ phiên bҧn (version
number). Mӛi lҫn mӝt mөc bӏ sӱa đәi thì sӕ phiên bҧn cӫa nó cũng đưӧc tăng lên.

Giao thӭc này đӏnh nghĩa ra sӕ đҥi biӇu đӑc và sӕ đҥi biӇu ghi, hai đҥi biӇu này sӁ xác
đӏnh sӕ bҧn sao phҧi đưӧc liên hӋ trưӟc khi thӵc hiӋn thao tác đӑc và ghi. Sӕ đҥi biӇu
đӑc phҧi lӟn hơn ½ tәng sӕ bҧn sao, vì thӃ tәng cӫa sӕ đҥi biӇu đӑc và ghi phҧi lӟn
hơn tәng sӕ bҧn sao. Bҵng cách này, mӝt ngưӡi muӕn thӵc hiӋn mӝt thao tác đӑc thì
phҧi đҧm bҧo viӋc liên hӋ vӟi ít nhҩt mӝt bҧn sao có chӭa phiên bҧn mӟi nhҩt cӫa mөc
dӳ liӋu. ViӋc lӵa chӑn sӕ lưӧng đҥi biӇu dӵa vào tӍ lӋ giӳa thao tác đӑc và ghi cùng vӟi
cost (bandwidth...) khi thӵc hiӋn phương pháp giao tiӃp giӳa các nhóm.

Cache-coherence protocols

Cache là mӝt dҥng đһc biӋt cӫa nhân bҧn, nó đưӧc điӅu khiӇn bӣi client thay vì đưӧc
điӅu khiӇn bӣi server. Có nhiӅu giҧi pháp cho viӋc cache dӳ liӋu.
Vӟi chiӃn lưӧc phát hiӋn sӵ cӕ kӃt, là chiӃn lưӧc đӇ xác đӏnh khi nào thì sӵ không nhҩt
quán thұt sӵ bӏ phát hiӋn và tӯ đó loҥi bӓ nhӳng dӳ liӋu gây ra sӵ không nhҩt quán, thì
có 2 giҧi pháp khác nhau.

- Vӟi giҧi pháp tĩnh, tҥi thӡi điӇm biên dӏch chương trình thì nhӳng chӍ thӏ phө sӁ đưӧc
thêm vào đӇ phát hiӋn nhӳng dӳ liӋu không nhҩt quán.

- Vӟi giҧi pháp đӝng thì tҥi thӡi điӇm chҥy chương trình thì có nhӳng đoҥn mã đӇ kiӇm
tra tính không nhҩt quán cӫa dӳ liӋu cache vӟi dӳ liӋu cӫa server.

Vӟi chiӃn lưӧc ép buӝc sӵ cӕ kӃt, là chiӃn lưӧc đӇ xác đӏnh xem dӳ liӋu cache đưӧc
giӳ nhҩt quán vӟi dӳ liӋu lưu trên server như thӃ nào, thì có 2 cách đӇ buӝc giӳ liӋu
phҧi cӕ kӃt vӟi nhau. Đó là:

- ĐӇ cho server gӱi đi mӝt thông điӋp vӅ sӵ không hӧp lӋ mӛi khi dӳ liӋu bӏ thay đәi.

- Cұp nhұt các kĩ thuұt lan truyӅn.

Các thao tác ghi dӳ liӋu vào cache đưӧc tiӃn hành như sau:

- Vӟi cache chӍ đӑc ra (Read-only Cache) thì các cұp nhұt đưӧc thӵc hiӋn bӣi server
(bҵng giao thӭc đҭy) hoһc bӣi client (bҵng giao thӭc kéo mӛi khi client nhұn thҩy dӳ
liӋu cache đã cũ).

- Vӟi cache ghi thҷng (Write-Through Cache) thì client sӁ thay đәi nӝi dung cӫa
cache, sau đó sӁ gӱi các cұp nhұt đӃn cho server.

- Vӟi cache ghi lҥi (Write-Back Cache) thì client trì hoãn sӵ lan truyӅn các cұp nhұt,
cho phép nhiӅu cұp nhұt đưӧc tҥo ra cөc bӝ sau đó gӱi nhӳng cұp nhұt mӟi nhҩt cho
server (viӋc này có khҧ năng ҧnh hưӣng mҥnh đӃn hiӋu năng).

Chương 7: Chӏu lӛi

(Fault Tolerance)

7.1 Chӏu lӛi và mӝt sӕ khái niӋm liên quan

7.1.1 Mӝt sӕ khái niӋm cơ bҧn.

a. Các khái niӋm.

Tính chӏu lӛi liên quan nhiӅu tӟi khái niӋm hӋ có thӇ tin cұy đưӧc (dependable
system). Thuұt ngӳ "có thӇ tin cұy đưӧc" bao gӗm các thuӝc tính sau:
Tính sҹn sàng (availability): hӋ thӕng có tính sҹn sàng là hӋ thӕng luôn sҹn sàng hoҥt
đӝng tӕt ӣ mӑi thӡi điӇm.

Tính tin cұy (Reliability): mӝt hӋ thӕng có tính tin cұy là hӋ thӕng có khҧ năng hoҥt
đӝng trong mӝt thӡi gian dài mà không bӏ gián đoҥn, không xҧy ra lӛi.

Tính an toàn (Safety): hӋ thӕng có tính an toàn là hӋ thӕng mà khi xҧy ra lӛi cũng
không dүn tӟi thҧm hӑa. Các hӋ thӕng cҫn phҧi có đӝ an toàn cao là các hӋ thӕng điӅu
khiӇn.

Khҧ năng bҧo trì (Maintainability):hӋ thӕng có khҧ năng bҧo trì là hӋ thӕng có khҧ
năng phөc hӗi lҥi đưӧc sau khi có lӛi. NӃu sӵ phөc hӗi này diӉn ra tӵ đӝng thì có thӇ
nói hӋ thӕng này cũng có tính s ҹn sàng cao.

Tính chӏu lӛi còn có liên quan tӟi khái niӋm điӅu khiӇn lӛi (Fault control). ĐiӅu khiӇn
lӛi bao gӗm ngăn ngӯa lӛi, loҥi bӓ lӛi và dӵ báo lӛi vӟi mөc tiêu xây dӵng thành công
khҧ năng chӏu lӛi cho hӋ thӕng.

b. Phân loҥi lӛi.

Lӛi đưӧc phân chia thành các loҥi sau:

Lӛi nhҩt thӡi (Transient faults): Là loҥi lӛi xuҩt hiӋn mӝt lҫn rӗi biӃn mҩt. Cách khҳc
phөc: thӵc hiӋn lҥi hoҥt đӝng có lӛi này

Lӛi lһp (Intermittent faults): Là loҥi lӛi mà chúng xuҩt hiӋn, rӗi biӃn mҩt, sau đó lҥi
xuҩt hiӋn lҥi và cӭ tiӃp tөc như thӃ. Lӛi này thưӡng gây ra các hұu quҧ trҫm trӑng vì
chúng rҩt khó xác đӏnh đưӧc.

Cách khҳc phөc: sӱ dөng bӝ sӱa lӛi cho hӋ thӕng (fault doctor) đӇ khҳc phөc lӛi.

Lӛi lâu dài (Permanent faults):Là loҥi lӛi vүn tӗn tҥi ngay cҧ khi thành phҫn gây lӛi đó
đã đưӧc sӱa chӳa.

7.1.2 Các mô hình lӛi.

Lӛi sөp đә (crash failure): khi server gһp lӛi này thì nó sӁ bӏ treo, trưӟc đó server vүn
hoҥt đӝng tӕt cho đӃn khi ngӯng hoҥt đӝng. Khi server gһp lӛi này, nó sӁ không thӇ
làm gì đưӧc nӳa. Mӝt ví dө hay gһp lӛi này là hӋ điӅu hành cӫa các máy cá nhân. Khi
hӋ điӅu hành ngӯng hoҥt đӝng thì chӍ còn cách duy nhҩt là khӣi đӝng lҥi.

Lӛi bӓ sót (omission failure): là lӛi mà mӝt server không thӇ đáp ӭng đưӧc yêu cҫu gӱi
tӟi nó. Ngưӡi ta chia nó thành hai loҥi:

Lӛi khi nhұn thông điӋp gӱi tӟi: gһp lӛi này, server không nhұn đưӧc yêu cҫu ngay cҧ
tӯ client gҫn nó nhҩt và mһc dù kӃt nӕi giӳa server vӟi client đã đưӧc thiӃt lұp. Lӛi khi
nhұn thông điӋp chӍ làm cho server không nhұn biӃt đưӧc các thông điӋp gӱi tӟi nó mà
không hӅ ҧnh hưӣng đӃn trҥng thái cӫa server.
Lӛi khi gӱi thông điӋp: server vүn nhұn đưӧc các yêu cҫu, vүn hoàn thành yêu cҫu đó
nhưng vì mӝt lý do nào đó lҥi không thӇ gӱi kӃt quҧ tӟi máy đã yêu cҫu. Mӝt trong
nhӳng lý do thưӡng gһp là do bӝ nhӟ đӋm gӱi đҫy. Trong trưӡng hӧp gһp lӛi này,
server cҫn chuҭn bӏ tình huӕng clien sӁ gӱi lҥi yêu cҫu đã gӱi đó .

Lӛi thӡi gian (timing failure): là lӛi xҧy ra khi server phҧn ӭng lҥi quá chұm, sau cҧ
thӡi gian cho phép. Trong mӝt hӋ thӕng luôn có các ràng buӝc vӅ mһt thӡi gian. NӃu
bên gӱi gӱi đӃn bên nhұn nhanh quá, bӝ nhӟ đӋm cӫa bên nhұn không đӫ đӇ chӭa thì
sӁ gây ra lӛi. Tương tӵ, server phҧn ӭng lҥi chұm quá, vưӧt quá khoҧng timeout quy
đӏnh sҹn cũng sӁ gây ra lӛi, ҧnh hưӣng đӃn hiӋu năng chung cӫa hӋ thӕng.

Lӛi đáp ӭng (Response failure): là lӛi khi server trҧ lӡi không đúng. Đây là mӝt kiӇu
lӛi rҩt ngiêm trӑng và đưӧc phân chia thành hai loҥi:

Lӛi vӅ mһt giá trӏ: là lӛi khi server trҧ lӡi lҥi yêu cҫu cӫa client vӟi giá trӏ không chính
xác. Ví dө khi sӱ dөng các máy tìm kiӃm, kӃt quҧ trҧ vӅ không hӅ liên quan gì tӟi yêu
cҫu cӫa ngưӡi sӱ dөng.

Lӛi vӅ chuyӇn trҥng thái: là lӛi khi server hoҥt đӝng trӋch hưӟng khӓi luӗng điӅu
khiӇn. Có nghĩa là server trҧ lӡi các yêu cҫu đưӧc gӱi tӟi mӝt cách không theo như
mong đӧi.

Lӛi bҩt kì (Arbitrary failure): mӝt server có thӇ tҥo ra mӝt lӛi bҩt kì ӣ bҩt kì thӡi gian
nào. Đây là loҥi lӛi nguy hiӇm nhҩt. Có thӇ có hai khҧ năng xҧy ra:

Thӭ nhҩt: mӝt server tҥo ra mӝt kӃt quҧ sai mà không thӇ phát hiӋn ra đưӧc.

Thӭ hai: server bӏ lӛi có liên kӃt vӟi các server khác tҥo ra mӝt kӃt quҧ sai.

Ta có thӇ xét mӝt vào lӛi bҩt kì hay gһp sau : lӛi fail-stop, lӛi fail-silent và lӛi fail-safe.
Vӟi fail-stop, server bӏ treo, ngӯng hoҥt đӝng và có thông báo tӟi các tiӃn trình khác.
Vӟi fail-silent, server đӝt ngӝt hoҥt đӝng chұm lҥi vì thӃ làm cho các tiӃn trình không
thӇ kӃt thúc đưӧc, ҧnh hưӣng đӃn hiӋu năng cӫa hӋ thӕng. Lӛi fail-safe là lӛi mà khi
server tҥo ra kӃt quҧ ngүu nhiên nhưng các tiӃn trình nhұn dҥng các kӃt quҧ này là
không có giá trӏ.

7.2 Các phương pháp che giҩu lӛi.

7.2.1 Che giҩu lӛi bҵng dư thӯa.

Có ba loҥi dư thӯa: dư thӯa thông tin, dư thӯa thӡi gian và dư thӯa vұt lý.

Dư thӯa thông tin : bә sung thêm các bit dư thӯa đӇ phát hiӋn lӛi và phөc hӗi lӛi. Ví dө
trong viӋc truyӅn dӳ liӋu thưӡng thêm vào các bit kiӇm tra chҹn lҿ, mã Haming,
CRC... đӇ phát hiӋn lӛi và khôi phөc lӛi.
Dư thӯa thӡi gian: khi mӝt hoҥt đӝng đã đưӧc thӵc hiӋn, nӃu dư thӯa thӡi gian nó có
thӇ đưӧc thӵc hiӋn lҥi. Kĩ thuұt dư thӯa thӡi gian phù hӧp khi lӛi là ngҳn và không liên
tөc. Ví dө: khi mӝt giao tác bӏ hӫy giӳa chӯng, nó có thӇ đưӧc thӵc hiӋn lҥi mà không
gây nguy hҥi gì.

Dư thӯa vұt lý: bә sung thêm tài nguyên

7.2.2 Khôi phөc tiӃn trình.

a. Các vҩn đӅ khi thiӃt kӃ.

Nguyên tҳc: tә chӭc các tiӃn trình giӕng nhau vào cùng mӝt nhóm.

Hoҥt đӝng: khi nhóm nhұn đưӧc thông báo thì thông báo này s Ӂ đưӧc gӱi tӟi tҩt cҧ các
thành viên trong nhóm. NӃu có tiӃn trình nào trong nhóm bӏ lӛi thì sӁ có tiӃn trình khác
thay thӇ .

Đһc điӇm: các nhóm này có thӇ là đӝng. Tính đӝng thӇ hiӋn ӣ các mһt sau:

Sӕ lưӧng các nhóm là không cӕ đӏnh: có thӇ tҥo thêm hay hӫy bӓ mӝt nhóm.

Sӕ lưӧng các tiӃn trình trong cùng mӝt nhóm là không cӕ đӏnh: mӝt tiӃn trình có thӇ
gia nhұp hay rӡi khӓi nhóm.

Mӝt tiӃn trình có thӇ là thành viên cӫa nhiӅu nhóm trong cùng thӡi điӇm.

Do tính đӝng đó mà cҫn phҧi đưa ra các cơ chӃ quҧn lý nhóm: quҧn lý mӕi quan hӋ
giӳa các nhóm và quҧn lý thành viên trong mӝt nhóm.

Phân loҥi nhóm: dӵa trên cҩu trúc bên trong thì nhóm đưӧc phân thành hai loҥi:

Nhóm ngang hàng:

- Tҩt cҧ các tiӃn trình trong nhóm là ngang hàng nhau.

- Khi thӵc hiӋn mӝt công viӋc nào đó sӁ phҧi có mӝt quá trình bҫu cӱ (vote) đӇ xác
đӏnh xem tiӃn trình nào phù hӧp đӇ thӵc hiӋn công viӋc đó.

- Ưu điӇm: khi mӝt tiӃn trình bӏ lӛi thì chӍ làm cho kích thưӟc cӫa nhóm giҧm đi chӭ
không ҧnh hưӣng đӃn hoҥt đӝng cӫa cҧ nhóm.

- Nhưӧc điӇm: do phҧi có quá trình bҫu cӱ nên tӕn thӡi gian (delay &overhead).

Hình 46. Nhóm ngang hàng.

Nhóm phân cҩp:


- Trong mӛi nhóm sӁ có mӝt tiӃn trình giӳ vai trò quҧn lý gӑi là coordinator, còn các
tiӃn trình khác đóng vai trò thӵc hiӋn (worker). Các tiӃn trình thӵc hiӋn chӏu sӵ điӅu
khiӇn cӫa coordinator.

- Khi có yêu cҫu gӱi đӃn nhóm, yêu cҫu này sӁ đưӧc gӱi tӟi coordinator. Coordinator
sӁ quyӃt đӏnh xem tiӃn trình nào trong nhóm đ ҧm nhiӋm công viӋc đó mӝt cách phù
hӧp nhҩt và chuyӇn yêu cҫu nhұn đưӧc đӃn tiӃn trình đó.

- Ưu điӇm: không bӏ trӉ như kiӃn trúc ngang hàng.

- Nhưӧc điӇm: khi coordinator gһp sӵ cӕ thì toàn bӝ hoҥt đӝng cӫa nhóm sӁ bӏ dӯng
lҥi.

Hình 47. Nhóm ngang hàng

Các phương pháp quҧn lý thành viên trong nhóm:

Phương pháp 1: dùng mӝt server gӑi là group server

Server này chӭa tҩt cҧ các thông tin vӅ các nhóm và các thành viên cӫa tӯng nhóm.

Ưu điӇm: hiӋu quҧ, dӉ sӱ dөng

Nhưӧc điӇm: nӃu server bӏ lӛi thì không thӇ quҧn lý đưӧc toàn bӝ hӋ thӕng và các
nhóm có thӇ phҧi xây dӵng lҥi tӯ đҫu các công viӋc mình đã thӵc hiӋn.

Phương pháp 2: phương pháp phân tán.

Khi tiӃn trình muӕn gia nhұp hay rӡi khӓi nhóm thì nó phҧi gӱi bҧn tin thông báo tӟi
tҩt cҧ các tiӃn trình khác.

Phương pháp 3: yêu cҫu viӋc gia nhұp/ rӡi khӓi nhóm phҧi đӗng bӝ vӟi bҧn tin gӱi hay
nhұn.

Khi mӝt tiӃn trình gia nhұp nhóm nó sӁ nhұn tҩt cҧ các bҧn tin tӯ nhóm đó.

Khi mӝt tiӃn trình rӡi khӓi nhóm thì nó sӁ không đưӧc nhұn bҩt kì bҧn tin nào tӯ nhóm
đó nӳa và không mӝt thành viên nào cӫa nhóm cũ nhұn đưӧc các bҧn tin tӯ nó

b. Che giҩu lӛi và nhân bҧn.

Có hai phương pháp nhân bҧn : bҵng giao thӭc primary-based và bҵng giao thӭc
replicated-write
Bҵng giao thӭc primary-based: Các tiӃn trình trong nhóm tә chӭc theo mô hình phân
cҩp. NӃu coordinator cӫa nhóm chính dӯng hoҥt đӝng thì coordinator cӫa các nhóm
sao lưu sӁ thӵc hiӋn các giҧi thuұt đӇ lӵa chӝn nhóm chính mӟi (mһc dù nó có thӇ đҧm
nhiӋm công viӋc đó).

Bҵng giao thӭc replicated-write : Các tiӃn trình trong nhóm tә chӭc theo mô hình
nhóm ngang hàng.Vҩn đӅ là cҫn nhân bҧn vӟi sӕ lưӧng là bao nhiêu

7.2.3 Che giҩu lӛi trong truyӅn thông client/server tin cұy.

ViӋc che giҩu lӛi trong hӋ phân tán tұp trung vào trưӡng hӧp có tiӃn trình bӏ lӛi.
Nhưng ta cũng phҧi xét đӃn trưӡng hӧp các giao tiӃp bӏ lӛi. Thông thưӡng, mӝt kênh
giao tiӃp có thӇ gһp các lӛi: lӛi sөp đә, lӛi bӓ sót, lӛi thӡi gian và lӛi tùy ý. ViӋc xây
dӵng mӝt kênh truyӅn thông tұp trung vào che giҩu lӛi sөp đә và lӛi tùy ý.

a. TruyӅn thông điӇm - điӇm .

Trong hӋ phân tán, truyӅn thông điӇm - điӇm tin cұy đưӧc thiӃt lұp bҵng cách sӱ dөng
các giao thӭc truyӅn tin cұy như TCP. TCP che giҩu đưӧc lӛi bӓ sót bҵng cách dùng cơ
chӃ thông báo ACK/NACK và viӋc thӵc hiӋn truyӅn lҥi. TCP không che giҩu đưӧc lӛi
sөp đә. Khi xҧy ra lӛi sөp đә thì kӃt nӕi TCP sӁ bӏ hӫy. ChӍ có mӝt cách đӇ che giҩu
lӛi sөp đә là hӋ thӕng phҧi có khҧ năng tӵ đӝng tҥo mӝt kӃt nӕi mӟi.

b. RPC khi xҧy ra lӛi và cách khҳc phөc

Vӟi hӋ thӕng RPC, năm lӟp lӛi có thӇ xҧy ra là:

- Client không thӇ đӏnh vӏ đưӧc server: Nguyên nhân gây lӛi là do server và client
dùng các phiên bҧn khác nhau hoһc do chính server bӏ lӛi. Khҳc phөc bҵng cách sӱ
dөng các ngoҥi lӋ (exception) đӇ bҳt lӛi như ӣ ngôn ngӳ java và điӅu khiӇn tín hiӋu
(signal handle) như ӣ ngôn ngӳ C. Hҥn chӃ cӫa phương pháp này là không ph ҧi ngôn
ngӳ nào cũng hӛ trӧ ngoҥi lӋ hay điӅu khiӇn tín hiӋu. NӃu tӵ viӃt mӝt ngoҥi lӋ hay điӅu
khiӇn tín hiӋu thì sӁ phá hӫy tính trong suӕt.

- Bӏ mҩt bҧn tin yêu cҫu tӯ client gӱi đӃn server: Đây là loҥi lӛi dӉ xӱ lý nhҩt: hӋ điӅu
hành hay client stub kích ho ҥt mӝt bӝ đӃm thӡi gian (timer) khi gӱi đi mӝt yêu cҫu.
Khi timer đã trӣ vӅ giá trӏ 0 mà không nhұn đưӧc bҧn tin phҧn hӗi tӯ server thì nó sӁ
gӱi lҥi yêu cҫu đó. NӃu bên client nhұn thҩy có quá nhiӅu yêu cҫu phҧi gӱi lҥi thì nó sӁ
xác nhұn rҵng server không hoҥt đӝng và sӁ quay lҥi thành kiӇu lӛi "không đӏnh vӏ
đưӧc server"

- Server bӏ lӛi ngay sau khi nhұn đưӧc yêu cҫu tӯ client: Lúc này lҥi phân chia thành
hai loҥi:

Loҥi 1: Sau khi thӵc hiӋn xong yêu cҫu nhұn đưӧc thì server bӏ lӛi. Phương pháp khҳc
phөc: sau đó server sӁ gӱi thông báo hӓng cho client
Loҥi 2: Vӯa nhұn đưӧc yêu cҫu tӯ client server đã bӏ lӛi ngay. Phương pháp khҳc
phөc: client chӍ cҫn truyӅn lҥi yêu cҫu cho. Vҩn đӅ đһt ra lúc này là client không thӇ
nói cho server biӃt yêu cҫu nào là yêu cҫu đưӧc gӱi lҥi.

Khi gһp lӛi kiӇu này, ӣ phía máy server sӁ thӵc hiӋn theo 3 kĩ thuұt sau:

Kĩ thuұt 1: đӧi đӃn khi nào server hoҥt đӝng trӣ lҥi, nó sӁ cӕ thӵc hiӋn yêu cҫu đã nhұn
đưӧc trưӟc khi lӛi đó. Như thӃ RPC thӵc hiӋn ít nhҩt mӝt lҫn.

Kĩ thuұt 2: server sau khi đưӧc khôi phөc nó sӁ không thӵc hiӋn yêu cҫu nhұn đưӧc
trưӟc khi bӏ lӛi mà sӁ gӱi lҥi thông báo hӓng cho client biӃt đӇ client gӱi lҥi yêu cҫu.
Vӟi kĩ thuұt này thì RPC thӵc hiӋn nhiӅu lҫn nhҩt.

Kĩ thuұt 3: không thӵc hiӋn gì đӇ đҧm bҧo cҧ. Khi server bӏ lӛi, client không hӅ hay
biӃt gì cҧ. KiӇu này, RPC có thӇ đưӧc thӵc hiӋn nhiӅu lҫn cũng có thӇ không thӵc hiӋn
lҫn nào.

Còn ӣ client thì có thӇ thӵc hiӋn theo 4 chiӃn lưӧc sau:

Mӝt là: Client không thӵc hiӋn gӱi lҥi các yêu cҫu. Vì thӃ không biӃt bao giӡ yêu cҫu
đó mӟi thӵc hiӋn đưӧc hoһc có thӇ không bao giӡ đưӧc thӵc hiӋn.

Hai là: Client liên tөc gӱi lҥi yêu cҫu: có thӇ dүn tӟi trưӡng hӧp mӝt yêu cҫu đưӧc thӵc
hiӋn nhiӅu lҫn.

Ba là: Client chӍ gӱi lҥi yêu cҫu nào đó khi không nh ұn đưӧc bҧn tin ACK phҧn hӗi tӯ
server thông báo đã nhұn thành công. Trưӡng hӧp này, server dùng bӝ đӃm thӡi gian.
Sau mӝt khoҧng thӡi gian xác đӏnh trưӟc mà không nhұn đưӧc ACK thì client sӁ gӱi
lҥi yêu cҫu đó.

Bӕn là: Client gӱi lҥi yêu cҫu nӃu nhұn đưӧc thông báo hӓng tӯ server.

- Mҩt bҧn tin phҧn hӗi tӯ server gӱi trҧ vӅ client: Phương pháp khҳc phөc: thiӃt kӃ các
yêu cҫu có đһc tính không thay đәi giá trӏ (idempotent). Client đánh sӕ thӭ tӵ cho các
yêu cҫu, server sӁ nhұn ra đưӧc đâu là yêu cҫu đã đưӧc gӱi lҥi nhӡ các sӕ tӭ tӵ này.
Do đó server sӁ không thӵc hiӋn lһp lҥi các yêu cҫu. Tuy nhiên server vүn phҧi gӱi trҧ
vӅ bҧn tin thông báo yêu cҫu nào bӏ thҩt lҥc. Hoһc ta có thӇ sӱ dөng mӝt bit ӣ phҫn
header cӫa yêu cҫu đӇ phân biӋt yêu cҫu nào là yêu cҫu đã đưӧc gӱi lҥi.

- Client bӏ lӛi ngay sau khi gӱi yêu cҫu tӟi server: Client gӱi yêu cҫu tӟi server rӗi bӏ
lӛi trưӟc khi nhұn đưӧc trҧ lӟi tӯ server gӱi vӅ. Công viӋc mà server thӵc hiӋn nhưng
không có đích nào đӧi đӇ nhұn đưӧc gӑi là mӝt "orphan". Như thӃ sӁ gây lãng phí chu
kì CPU.
Có 4 giҧi pháp đưӧc đưa ra trong trưӡng hӧp này là:

Mӝt là: trưӟc khi gӱi đi yêu cҫu nào đó, client stub sӁ tҥo ra mӝt bҧn ghi xác đӏnh công
viӋc cҫn thӵc hiӋn này và lưu lҥi. Như thӃ, khi đưӧc phөc hӗi sau khi lӛi, client sӁ lҩy
lҥi bҧn ghi đó và và viӋc thӵc hiӋn các orphan đang diӉn ra sӁ dӯng lҥi. Phương pháp
này có nhiӇu nhưӧc điӇm: Chi phí đӇ trang bӏ đĩa đӇ lưu lҥi mӛi bҧn ghi cho mӛi RPC.
Orphan có thӇ tӵ mình thӵc hiӋn RPC tҥo ra mӝt grandorphan nên rҩt khó xác đӏnh.

Hai là: chia thӡi gian hoҥt đӝng liên tөc cӫa client thành các sӕ liên tөc gӑi là các thӡi
kì. Mӛi khi các clietn khôi phөc trӣ lҥi thì sӕ chӍ thӡi kì này lҥi tăng lên mӝt đơn vӏ.
Lúc này clietn sӁ gӱi thông báo đӃn tҩt cҧ các máy khác thông báo sӕ thӡi kì mӟi cӫa
mình. Khi nhұn dưӧc thông báo này thì các orphan sӁ dӯng lҥi

Ba là: khi nhұn đưӧc bҧn tin thông báo thӡi kì mӟi, mӛi máy sӁ kiӇm tra xem mình có
đang thӵc hiӋn mӝt tính toán tӯ xa nào đó không. NӃu có, máy đó sӁ cӕ xác đӏnh xem
client nào đã gӱi yêu cҫu này. NӃu không xác đӏnh đưӧc thì quá trình tính toán này s Ӂ
bӏ hӫy bӓ.

Bӕn là: quy đӏnh mӛi RPC chӍ có mӝt khoҧng thӡi gian xác đӏnh T đӇ thӵc hiӋn, sau
khi gһp lӛi, clietn sӁ phҧo đӧi thêm mӝt khoҧng thӡi gian T trưӟc khi khӣi đӝng lҥi đӇ
nhұn các orphan. Vҩn đӃ đһt ra là phҧi lӵa chӑn giá trӏ T như thӃ nào cho hӧp lý.

7.2.4 Che giҩu lӛi trong truyӅn thông nhóm tin cұy (dùng multicasting)

a. Multicasting tin cұy cơ bҧn (Basic Reliable-multicasting).

Sau khi các tiӃn trình đã đưӧc phân nhóm thì mӝt tiӃn trình khác muӕn thӵc hiӋn
multicast tӭc là sӁ gӱi bҧn tin tӟi tҩt cҧ các tiӃn trình trong nhóm đó. Multicast tin c ұy
là phҧi có cơ chӃ đӇ đҧm bҧo bҧn tin đó đӃn đưӧc tҩt cҧ các thành viên trong nhóm.
Khi xҧy ra lӛi thì sӁ áp dөng phương pháp sau đӇ che giҩu lӛi:

Phương pháp: đánh sӕ các bҧn tin cҫn gӱi. Các bҧn tin đưӧc lưu tҥi mӝt buffer cӫa bên
gӱi và vүn lưu ӣ đó cho đӃn khi nhұn đưӧc bҧn tin ACK báo vӅ tӯ bên nhұn. NӃu bên
nhұn xác đӏnh là bӏ mҩt mӝt bҧn tin nào đó thì nó sӁ gӱi vӅ mӝt bҧn tin NACK đӇ yêu
cҫu gӱi lҥi. Và thông thưӡng, bên gӱi sӁ tӵ đӝng gӱi lҥi bҧn tin sau trong khoҧng thӡi
gian xác đӏnh nào đó mà nó không nhұn đưӧc bҧn tin ACK báo vӅ.

Hình 48. (a). TruyӅn bҧn tin (b). Bҧn tin phҧn hӗi

b. Multicast tin cұy mӣ rӝng.

ĐӇ tăng hiӋu quҧ công vӋc khi làm viӋc vӟi mӝt sӕ lưӧng lӟn các tiӃn trình thì đưa ra
mô hình multicast tin cұy mӣ rӝng. Vӟi mô hình này sӁ không gӱi trҧ vӅ bҧn tin ACK
báo nhұn thành công mà chӍ gӱi trҧ vӅ cho tiӃn trình nhұn bҧn tin NACK thông báo
khi có lӛi truyӅn.ViӋc này đưӧc thӵc hiӋn bҵng giao thӭc SRM (Scalable Reliable
Multicasting).

ĐӇ có thӇ thӵc hiӋn multicast tin cұy cho mӝt nhóm lӟn các tiӃn trình thì thӵc hiӋn tә
chӭc các nhóm theo cҩu trúc dҥng cây. Cҩu trúc cӫa cây :

- Gӕc là nhóm chӭa tiӃn trình gӱi.

- Các nút là các nhóm có chӭa tiӃn trình nhұn.

Hình 49. Multicast tin cұy dҥng cây

ViӋc thӵc hiӋn multicast đưӧc thӵc hiӋn cho các nhóm nhӓ đó. ViӋc chia thành các
nhóm nhӓ hơn này cho phép sӱ dөng các kӏch bҧn multicast tin cұy cho tӯng nhóm
nhӓ đó.

Trong mӛi nhóm nhӓ sӁ đӅ cӱ mӝt tiӃn trình làm coordinator. Coodinator có khҧ năng
điӅu khiӇn viӋc truyӅn lҥi khi nhұn đưӧc thông báo truyӅn lӛi. Coodinator cӫa mӛi
nhóm sӁ có bӝ đӋm (history buffer) riêng.

- NӃu Coordinator cӫa mӛi nhóm không nhұn đưӧc bҧn tin m thì nó sӁ gӱi yêu cҫu
truyӅn lҥi tӟi coordinator cӫa nút cha nó.

- Trong kӏch bҧn truyӅn tin cұy sӱ dөng bҧn tin ACK thì khi coordinator nhұn thành
công mӝt bҧn tin m nó sӁ gӱi bҧn tin ACK tӟi coordinator cӫa nút cha nó.

- NӃu coordinator cӫa mӝt nhóm nhұn đưӧc bҧn tin ACK báo nhұn thành công bҧn tin
m cӫa tҩt cҧ các tiӃn trình trong nhóm gӱi vӅ thì nó sӁ xóa bҧn tin m khӓi bӝ đӋm cӫa
nó.

Đánh giá: vӟi phương pháp phân cáp này thì x ҧy ra vҩn đӅ vӅ cҩu trúc cây. Rҩt nhiӅu
trưӡng hӧp yêu cҫu cây phҧi có cҩu trúc đӝng nên phҧi có mӝt cơ chӃ tìm đưӡng cho
cây này

c. Multicast nguyên tӱ (Atomic multicast ).

Tư tưӣng chính: khi mӝt tiӃn trình muӕn gӱi bҧn tin cho mӝt tұp các tiӃn trình khác
theo kiӇu multicast, nó sӁ không gӱi bҧn tin tӟi tҩt cҧ các tiӃn trình cӫa nhóm chӭa các
tiӃn trình nhұn mà chӍ gӱi đӃn mӝt nhóm nhӓ các tiӃn trình cҫn nhұn bҧn tin đó.

Vҩn đӃ đһt ra: phҧi đҧm bҧo gӱi đưӧc bҧn tin tӟi tҩt cҧ các tiӃn trình trong nhóm ho һc
không đưӧc gӱi tӟi bҩt kì tiӃn trình nào nӃu mӝt tiӃn trình trong nhóm bӏ lӛi sөp đә.

Mӝt sӕ thuұt ngӳ:


Group view (khung nhìn nhóm): ý tưӣng chính cӫa atomic multicast là mӝt tiӃn trình
thӵc hiӋn multicast bҧn tin m thì chӍ thӵc hiӋn liên kӃt tӟi mӝt danh sách các tiӃn trình
cҫn nhұn bҧn tin m đó chӭ không phҧi toàn bӝ nhóm. Danh sách các tiӃn trình này
tương ӭng vӟi mӝt khung nhìn nhóm (group view)- mӝt tұp nhӓ các tiӃn trình cӫa mӝt
nhóm lӟn.

View change (thay đәi khung nhìn): khi đang thӵc hiӋn multicast tӟi mӝt group view
G mà có mӝt tiӃn trình xin gia nhұp nhóm hay xin ra khӓi nhóm thì sӵ thay đәi vc này
sӁ đưӧc gӱi tӟi tҩt cҧ các thành viên còn lҥi trong nhóm. Do đó, các tiӃn trình còn lҥi
trong G sӁ nhұn đưӧc hai bҧn tin:

m: bҧn tin cҫn nhұn

vc: bҧn tin thông báo có thay đәi trong G.

NӃu tҩt cҧ các tiӃn trình trong G đӅu chưa nhұn đưӧc vc thì thao tác multicast bҧn tin
m đưӧc thӵc hiӋn.

NӃu mӝt trong sӕ các tiӃn trình trong G đã nhұn đưӧc vc thì phҧo đҧm bҧo rҵng không
mӝt tiӃn trình nào khác trong G đưӧc nhұn m nӳa

Đӗng bӝ ҧo (Virtual sychronous).

Tư tưӣng chính: đҧm bҧo bҧn tin chӍ đưӧc multicast tӟi tҩt cҧ các tiӃn trình không có
lӛi. NӃu tiӃn trình gӱi bӏ sөp đә trong quá trình multicast thì quá trình này b ӏ hӫy ngay
dù bҧn tin đó đã đưӧc gӱi tӟi mӝt vài tiӃn trình khác trong nhóm rӗi.

Hình 50 Nguyên lý đӗng bӝ ҧo

1: P1 tham gia vào nhóm đã có sҹn ba thành viên: P2,P3, P4.

2: P2 thӵc hiӋn multicast bҧn tin tӟi tҩt cҧ các tiӃn trình còn lҥi.

3: P1 thӵc hiӋn multicast bҧn tin tӟi tҩt cҧ các tiӃn trình còn lҥi.

4: P3 multicast tӟi tiӃn trình P2 , P4 thành công nhưng P1 chưa nh ұn đưӧc thì P3 bӏ
sөp đә. Lúc này đӗng bӝ ҧo sӁ hӫy tҩt cҧ các bҧn tin đã đưӧc gӱi trưӟc đó cho P2, P4,
thiӃt lұp trҥng thái trưӟc khi sөp đә cӫa P3 là chưa gӱi bҧn tin dó.

5: nhóm lúc này chӍ còn P1, P2, P4 và P4 thӵc hiӋn multicast bҧn tin,

6: P3 đưӧc khôi phөc và xin gia nhұp lҥi nhóm.

7: P3 gia nhұp nhóm thành công.

7.3 Cam kӃt phân tán.


Mô hình thiӃt lұp cam kӃt phҧi là mô hình phân cҩp và coordinator lãnh trách nhiӋm
thiӃt lұp cam kӃt phân tán. Ӣ cam kӃt mӝt pha đơn giҧn, coordinator thông báo vӟi tҩt
cҧ các thành viên còn lҥi hoһc là thӵc hiӋn hoһc là không thӵc hiӋn mӝt thao tác nào
đó. NӃu thành viên nào đó không thӵc hiӋn đưӧc cũng không thӇ báo lҥi cho
coordinator biӃt. Do đó ngưӡi ta đưa mô hình mӟi đó là cam kӃt hai pha và cam kӃt ba
pha

7.3.1 Cam kӃt hai pha.

Xét mӝt giao dӏch phân tán vӟi các thành viên là mӝt tұp các tiӃn trình chҥy ӣ mӝt máy
khác vӟi giҧ thiӃt không có lӛi xҧy ra.

Cam kӃt hai pha gӗm hai: Pha bҫu cӱ (voting phase )và pha quyӃt đӏnh (Decision
phase).

Vӟi pha bҫu cӱ: bao gӗm hai bưӟc thӵc hiӋn:

- Coordinator gӱi mӝt bҧn tin thông báo yêu cҫu bҫu cӱ VOTE_REQUEST tӟi tҩt cҧ
các thành viên trong nhóm.

- Sau khi nhұn đưӧc bҧn tin VOTE_REQUEST cӫa coordinator, nӃu có thӇ thӵc hiӋn
đưӧc thì thành viên đó sӁ gӱi lҥi cho coordinator thông báo chҩp nhұn bҫu cӱ
VOTE_COMMIT, nӃu không, sӁ gӱi lҥi cho coordinator thông báo tӯ chӕi
VOTE_ABORT.

Pha quyӃt đӏnh: gӗm hai bưӟc thӵc hiӋn:

- Coordinator tұp hӧp tҩt cҧ các bҫu cӱ cӫa các thành viên. NӃu tҩt cҧ đӅu đӗngý chҩp
nhұn giao dӏch thì coordinator sӁ gӱi mӝt bҧn tin GLOBAL_COMMIT tӟi tҩt cҧ các
thành viên. Tuy nhiên, chӍ cҫn mӝt thành viên gӱi thông báo tӯ chӕi thì
coordinatorquyӃt đӏnh hӫy giao dӏch trên và sӁ gӱi mӝt bҧn tin GLOBAL_ABORT
cho tҩt cҧ các thành viên trong nhóm.

- Các thành viên sau khi đã gӱi thông báo chҩp nhұn tӟi coordinator sӁ đӧi phҧn hӗi tӯ
coordinator. NӃu nó nhұn vӅ thông báo GLOBAL_COMMIT thì giao dӏch sӁ đưӧc
chҩp thuұn, còn nӃu nhұn đưӧc GLOBAL_ABORT thì giao dӏch sӁ bӏ hӫy.

Cam kӃt hai pha đưa ra mӝt sơ đӗ các trҥng thái hӳu hҥn như hình 7.17 a, b (394).

Các trҥng thái cӫa mӝt coordinator là: INIT, WAIT, ABORT, COMMIT. Còn các
trҥng thái cӫa mӝt thành viên bҩt kì là : INIT, READY, ABORT, COMMIT.

Hình 51 (a) Máy trҥng thái hӳu hҥn cho coordinator trong cam kӃt 2 pha (b). Máy
trҥng thái hӳu hҥn cho thành viên
Nhưӧc điӇm cӫa cam kӃt hai pha: Nhưӧc điӇm chính cӫa cam kӃt hai pha là tӕn nhiӅu
thӡi gian chӡ đӧi. Cҧ coordinator và các thành viên còn lҥi đӅu phҧi chӡ mӝt bҧn tin
nào đó đưӧc gӱi đӃn cho mình.

Nhưӧc điӇm thӭ hai là nӃu coordinator bӏ lӛi thì hoҥt đӝng cӫa cҧ hӋ thӕng sӁ bӏ ҧnh
hưӣng.

7.3.2 Cam kӃt 3 pha

ĐӇ khҳc phөc nhưӧc điӇm cӫa cam kӃt hai pha trong trưӡng hӧp coordinator bӏ lӛi,
ngưӡi ta đưa ra mô hình cam kӃt ba pha. Các trҥng thái khá giӕng hai pha nhưng thêm
mӝt trҥng thái PRECOMMIT.

Hình 52 (a) Máy trҥng thái hӳu hҥn cho coordinator trong cam kӃt 2 pha (b). Máy
trҥng thái hӳu hҥn cho thành viên

7.4 Phөc hӗi.

Phөc hӗi là các phương pháp đưa trҥng thái bӏ lӛi sang trҥng thái lành (fault free). Có
hai cách tiӃp cұn cho phөc hӗi lӛi: phөc hӗi lùi (back forward) và phөc hӗi tiӃn
(forward recovery).

Phөc hӗi lùi: khi thӵc hiӋn phөc hӗi lùi sӁ thӵc hiӋn phөc hӗi trҥng thái lành cӫa hӋ
thӕng trưӟc khi có lӛi và cho hӋ thӕng chҥy lҥi tӯ điӇm đó. ĐӇ có thӇ thӵc hiӋn đưӧc
điӅu này phҧi sӱ dөng các điӇm checkpoint. Tҥi các điӇm này sӁ sao lưu trҥng thái
hiӋn hành cӫa hӋ thӕng đӇ khi khôi phөc sӁ cho chҥy ӣ điӇm checkpoint gҫn nhҩt. ViӋc
thӵc hiӋn theo phương pháp này là r ҩt tӕn kém.

Phөc hӗi tiӃn: chuyӇn hӋ thӕng tӯ trҥng thái lӛi sang trҥng thái mӟi vӟi các thông tin
đӇ tiӃp tөc thӵc hiӋn

Chương 8: An toàn - An ninh.

(Security)

8.1 Đһt vҩn đӅ.

8.1.1 Các mӕi đe dӑa, chính sách và cơ chӃ an toàn , an ninh.

a. Các mӕi đe dӑa.

HӋ thӕng máy tính luôn bӏ đe dӑa bӣi các nguy cơ mҩt an toàn. Mӝt trong nhӳng công
viӋc đӇ bҧo vӋ hӋ thӕng là làm sao giúp hӋ thӕng tránh khӓi các nguy cơ đó. Có 4 loҥi
các mӕi đe dӑa an toàn:
Interception (chһn bҳt): chӍ thành phҫn không đưӧc phép cũng có thӇ truy cұp đӃn các
dӏch vө hay các dӳ liӋu, "nghe trӝm" thông tin đang đưӧc truyӅn đi.

Interruption (đӭt đoҥn): là mӕi đe dӑa mà làm cho dӏch vө hay dӳ liӋu bӏ mҩt mát, bӏ
hӓng, không thӇ dùng đưӧc nӳa...

Modification (thay đәi): là hiӋn tưӧng thay đәi dӳ liӋu hay can thiӋp vào các dӏch vө
làm cho chúng không còn giӳ đưӧc các đһc tính ban đҫu.

Fabrication (giҧ mҥo): là hiӋn tưӧng thêm vào dӳ liӋu ban đҫu các dӳ liӋu hay hoҥt
đӝng đһc biӋt mà không thӇ nhұn biӃt đưӧc đӇ ăn cҳp dӳ liӋu cӫa hӋ thӕng.

b. Các cơ chӃ an toàn, an ninh.

Có 4 cơ chӃ an toàn, an ninh đưӧc đưa ra:

Mұt mã (Cryptography): là viӋc thӵc hiӋn chuyӇn đәi dӳ liӋu theo mӝt quy tҳc nào đó
thành dҥng mӟi mà kҿ tҩn công không nhұn biӃt đưӧc.

Xác thӵc (Authentication): là các thao tác đӇ nhұn dҥng ngưӡi dùng, nhұn dҥng client
hay server...

Ӫy quyӅn (Authorization).: chính là viӋc phân đӏnh quyӅn hҥn cho mӛi thành phҫn đã
đăng nhұp thành công vào hӋ thӕng. QuyӅn hҥn này là các quyӅn sӱ dөng dӏch vӏ, truy
cұp dӳ liӋu...

KiӇm toán (Auditing): là các phương pháp đӇ xác đinh đưӧc client đã truy cұp đӃn dӳ
liӋu nào và bҵng cách nào.

8.1.2 Các vҩn đӅ khi thiӃt kӃ.

a. ĐiӅu khiӇn (focus of control).

Có ba cách tiӃp cұn:

Chӕng các thao tác bҩt hӧp lӋ: viӋc này thӵc hiӋn bҵng cách bҧo đҧm toàn vҽn chính
các dӳ liӋu đó mà không quan tâm đӃn viӋc phân tích sӵ hӧp lӋ cӫa thao tác.

Hình 53 Chӕng các thao tác bҩt hӧp lӋ

Chӕng các triӋu gӑi thao tác không đưӧc ӫy quyӅn.: không bҧo đҧm toàn vҽn dӳ liӋu
mà tұp trung vào các thao tác. Thao tác nào là bҩt hӧp lӋ sӁ bӏ hӫy bӓ ngay.
Hình 54. Chӕng các triӋu gӑi thao tác không đưӧc ӫy quyӅn

Chӕng ngưӡi sӱ dөng không đưӧc ӫy quyӅn: ӣ cách tiӃp cұn này lҥi tұp trung vào quҧn
lý ngưӡi dùng. Xác đӏnh ngưӡi dùng và các vai trò cӫa hӑ trong hӋ thӕng cӭ không
quan tâm đӃn đҧm bҧo dӳ liӋu hay quҧn lý các thao tác cӫa ngưӡi dùng.

Hình 55. Chӕng ngưӡi sӱ dөng không đưӧc ӫy quyӅn

b. Phân tҫng các cơ chӃ an toàn (Layer of security mechanism)

Mӝt vҩn đӅ quan trӑng trong viӋc thiӃt kӃ mӝt hӋ thӕng an toàn là quyӃt đӏnh xem cơ
chӃ an toàn an ninh đưӧc đһt ӣ tҫng nào. ViӋc xác đӏnh vӏ trí đһt đó phө thuӝc rҩt
nhiӅu vào yêu cҫu cӫa client vӅ các dӏch vө an toàn, an ninh cӫa tӯng tҫng.

Trong mӝt hӋ phân tán, cơ chӃ an toàn, an ninh đưӧc đһt ӣ tҫng middleware.

c. Phân tán các cơ chӃ an toàn (Distribution of security mechanism)

Xét khái niӋm TCB (Trusted Computing Base): là tұp hӧp tҩt cҧ các cơ chӃ an toàn, an
ninh trong hӋ phân tán, các cơ chӃ này phҧi tuân theo mӝt ràng buӝc an toàn nào đó.

8.1.3 Mұt mã (Cryptography)

Mӝt cơ chӃ an toàn, an ninh cơ bҧn trong hӋ phân tán đó là mã mұt. Tư tưӣng cơ bҧn
là: bên gӱi mã hóa bҧn tin cҫn truyӅn, truyӅn bҧn tin đã mã hóa đi, bên nhұn sӁ giҧi mã
bҧn tin nhұn đưӧc thành bҧn tin ban đҫu.

Gӑi:

Bҧn tin ban đҫu là P.

Khóa mã hóa là Ek.

Bҧn tin đưӧc mã hóa theo khóa Ek là C: C=Ek(P).

Khóa giҧi mã là Dk.

Bҧn tin đưӧc giҧi mã theo khóa giҧi mã: P=Dk(C).

Có hai loҥi hӋ thӕng mұt mã: mұt mã đӕi xӭng (symmetric cryptosystem) và mұt mã
bҩt đӕi xӭng (asymmetric cryptosystem).

a. Mұt mã đӕi xӭng: dùng khóa bí mұt..

Vӟi mұt mã đӕi xӭng: khóa mã hóa và khóa giҧi mã là giӕng nhau. Ta có:
P=Dk(Ek( P ) ) . Cҧ bên nhұn và bên gӱi đӅu phҧi có khóa trên, khóa phҧi đưӧc giӳ bí
mұt.

Nguyên lý chung cӫa giҧi thuұt DES (Data Encryption Standard):

Hình 56 nguyên lý chung cӫa DES

Thӵc hiӋn trên các khӕi dӳ liӋu 64 bit. Mӛi khӕi này đưӧc mã hóa qua 16 vòng lһp,
mӛi vòng có mӝt khóa mã hóa 48 bit riêng. 16 khóa này đư ӧc sinh ra tӯ 56 bit khóa
chính.

Đҫu vào cӫa vòng lһp mã hóa thӭ i là dӳ liӋu đã đưӧc mã hóa cӫa vòng lһp thӭ (i-1).
64 bit dӳ liӋu qua mӛi vòng lһp đưӧc chia thành hai phҫn bҵng nhau: Li-1 và Ri-1,
cùng bҵng 32 bit . Phҫn dӳ liӋu bên phҧi Ri-1 đưӧc lҩy làm phҫn bên trái cӫa dӳ liӋu
cho vòng sau: Ri-1= Li. Hàm f vӟi đҫu vào là Ri-1 và khóa Ki sinh ra khӕi 32 bit đưӧc
XOR vӟi

Li-1 đӇ sinh ra Ri.

Hình 57 .Mӝt vòng mã hóa

Phương pháp sinh khó a cӫa giҧi thuұt DES:

Hình 58. Sinh khóa theo giҧi thuұt DES

Mӛi khóa 48 bit cho mӛi vòng lһp đưӧc sinh ra tӯ khóa chính 56 bit như sau: hoán v ӏ
khóa chính, chia đôi thành hai phҫn 28 bit. Tҥi mӛi vòng, mӛi mӝt nӱa đó sӁ quay trái
mӝt hoһc hai bit, sau đó lҩy ra 24 bit kӃt hӧp vӟi 24 bit cӫa nӱa còn lҥi tҥo ra khóa.

b. Mұt mã bҩt đӕi xӭng: dùng khóa công khai.

Mұt mã bҩt đӕi xӭng: khóa mã hóa và khóa giҧi mã là khác nhau. Ta có:

P=DkD(EkD ( P )). Trong hӋ thӕng này, mӝt khóa sӁ đưӧc giӳ bí mұt còn mӝt khóa sӁ
đưӧc công khai.

Xét giҧi thuұt RAS (đưӧc đһt theo tên cӫa các nhà phát minh ra nó:Rivest, Shamir,
Adleman) :

Cách sinh khóa cӫa giҧ thuұt RAS: thӵc hiӋn theo 4 bưӟc:

- Chӑn 2 sӕ chính lӟn: p,q


- Tính n = p.q và z = (p-1).(q-1)

- Chӑn mӝt sӕ d liên quan đӃn z

- Tính toán e sao cho e.d =1 mod z.

Như thӃ d có thӇ dùng đӇ giҧi mã còn e dùng đӇ mã hóa. Ta có thӇ công khai mӝt trong
hai sӕ này, tùy thuұt toán.

Nguyên lý chung cӫa giҧi thuұt RAS:

Coi bҧn tin đưӧc truyӅn đi là mӝt dãy các sӕ nhӏ phân. Chia bҧn tin m đó thành các
khӕi có kích thưӟc cӕ đӏnh mi sao cho 0<= mi <=m. Ӣ bên gӱi, vӟi mӛi khӕi mi sӁ
tính mӝt giá trӏ ci = mei (mod n) rӗi gӱi đi.Bên nhұn sӁ giҧi mã bҵng cách tính: mi =
cdi (mod n) .

Như vұy, đӇ mã hóa cҫn biӃt e và n còn đӇ giҧi mã thì cҫn biӃt d và n.

8.2 Kênh an toàn (Secure channels).

8.2.1 Xác thӵc (Authentification).

a. Xác thӵc dӵa trên khóa bí mұt.

Nguyên lý chung: bên gӱi muӕn giao tiӃp vӟi bên nhұn sӁ gӱi mӝt yêu cҫu A tӟi bên
nhұn. Bên nhұn trҧ lӡi bҵng mӝt yêu cҫu RB . Bên gӱi sӁ mã hóa yêu cҫu RB bҵng
khóa bí mұt KA,B và gӱi vӅ cho bên nhұn. Bên nhұn xác thӵc đưӧc bên gӱi nhӡ nhұn
biӃt đưӧc yêu cҫu RB mình đã gӱi trong gói tin vӯa nhұn. Lúc này bên gӱi muӕn xác
thӵc bên nhұn sӁ tiӃp tөc gӱi yêu cҫu RA tӟi bên nhұn. Bên nhұn sӁ lҥi mã hóa RA
bҵng khóa bí mұt KA,B đó và gӱi vӅ cho bên nhұn. Và như thӃ bên nhұn đã xác đӏnh
đưӧc bên gӱi, sau đó quá trình trao đәi sӁ đưӧc thӵc hiӋn.

Hình 59 Xác thӵc dӵa trên khóa bí mұt

Mӝt mô hình cҧi tiӃn hơn là thu gӑn sӕ lưӧng bҧn tin chӍ còn lҥi 3 bҧn tin giӳa bên
nhұn và bên gӱi.

Hình 60. Xác thӵc dӵa trên khóa bí mұt nhưng dùng 3 bҧn tin

Nhưng hiӋn nay, giao thӭc hay đưӧc dùng là "reflection attack" như đưӧc mô tҧ trong
hình vӁ sau:
Hình 61. Reflection Attack

b. Xác thӵc dӵa trên trung tâm phân phӕi khóa.

NӃu hӋ thӕng gӗm N host, mӛi host phҧi chia sҿ mӝt khóa mұt vӟi N-1 host khác thì
hӋ thӕng cҫn quҧn lý N.(N-1)/2 khóa, và mӛi host phҧi quҧn lý N-1 khóa. Như vұy nӃu
N lӟn sӁ rҩt khó khăn trong viӋc quҧn lý. Do đó, đӇ khҳc phөc hiӋn tưӧng trên ta sӱ
dөng trung tâm phân phӕi khóa KDC (Key Distribution Center).

Tư tưӣng chính: bên gӱi sӁ gӱi bҧn tin tӟi trung tâm phân phӕi khóa thông báo mình
muӕn giao tiӃp vӟi bên nhұn. KDC sӁ gӱi cho cҧ bên gӱi và bên nhұn mӝt bҧn tin có
chӭa khóa bí mұt KA,B . Bҧn tin gӱi cho bên nhұn sӁ đưӧc mã hóa bҵng KA,KDC .
Bҧn tin gӱi cho bên gӱi sӁ đưӧc mã hóa bҵng KB,KDC .

Hình 62 Nguyên lý cӫa KDC

Cách tiӃp cұn thӭ hai là KDC sӁ gӱi cҧ hai bҧn tin chӭa khóa bí mұt KA,KDC (KA,B )
và KB,KDC (KA,B ) cho bên gӱi và bên gӱi có nhiӋm vө gӱi cho bên nhұn khóa đã
đưӧc KDC mã hóa KB,KDC (KA,B ) đó.

Hình 63 Dùng ticket

c. Xác thӵc dӵa trên khóa công khai.

Hình 64. Xác thӵc dӵa trên khóa công khai.

Bên gӱi mã hóa yêu cҫu bҵng khóa công khai K+B cӫa bên nhұn. Bên nhұn này là nơi
duy nhҩt có thӇ giҧi mã bҧn tin đó bҵng K-B. Bên nhұn sӁ mã hóa yêu cҫu cӫa bên gӱi
cùng vӟi yêu cҫu cӫa chính mình và khóa KA,B vӯa tҥo ra bҵng khóa công khai K+A
cӫa bên gӱi nhҵm xác thӵc bên gӱi. Cuӕi cùng, bên gӱi sӁ gӱi lҥi cho bên nhұn yêu
cҫu RB cӫa bên nhұn đã gӱi đi đӇ xác thӵc.

8.2.2 Tính toàn vҽn và tính mұt cӫa thông điӋp.

a. Chӳ kí sӕ.

Chӳ kí sӕ đӇ đҧm bҧo tính toàn vҽn cӫa thông điӋp.

Có nhiӅu cách thiӃt lұp chӳ kí sӕ cho thông điӋp:

Cách 1: dùng hӋ mұt mã khóa công khai là RSA.


Hình 65 Chӳ kí sӕ cho mӝt bҧn tin dùng khóa công khai

Bên gӱi sӁ mã hóa bҧn tin bҵng khóa riêng K-A cӫa mình, sau đó sӁ mã hóa tiӃp nӝi
dung bҧn tin và phiên bҧn chӳ kí bҵng khóa công khai K+B cӫa bên nhұn. Bҧn tin
đưӧc mã hóa này sӁ đưӧc truyӅn đi cùng bҧn tin m. Bên nhұn sau khi nhұn đưӧc bҧn
tin sӁ giҧi mã gói tin, lҩy phiên bҧn chӳ kí cӫa m và so sánh vӟi m đӇ xác thӵc rҵng
bҧn tin này đưӧc gӱi tӯ bên gӱi đó và cũng đӇ kiӇm tra xem có thay đәi trên đưӡng
truyӅn hay không.

Cách 2: dùng hàm băm.

Hàm băm H dùng đӇ tính toán mӝt bҧn tin có đӝ dài cӕ đӏnh là mӝt chuӛi bit h tӯ mӝt
bҧn tin có đӝ dài tùy ý m. NӃu giá trӏ m thay bҵng giá trӏ m' thì H(m') cũng có giá trӏ
khác giá trӏ h = H(m), do đó ta có thӇ dӉ dàng xác đӏnh đưӧc nhӳng thay đәi trên bҧn
tin m trên đưӡng truyӅn.

Hình 66. Chӳ kí sӕ cho mӝt bҧn tin dùng message digest

Bên gӱi sӁ tính toán các bҧn tin có đӝ dài cӕ đӏnh tӯ bҧn tin m và mã hóa bҵng khóa
riêng cӫa mình. Bҧn tin đưӧc mã hóa này sӁ đưӧc truyӅn đi cùng bҧn tin m. Khi nhұn,
bên nhұn giҧi mã bҧn tin và thӵc hiӋn so sánh vӟi bҧn tin m đã đưӧc truyӅn đi đӇ xác
đӏnh đưӧc rҵng bҧn tin này gӱi tӯ bên gӱi đó và đã đưӧc kí bҵng chӳ kí sӕ.

b. Khóa phiên

Trong mӝt kênh trao đәi an toàn, sau pha xác thӵc sӁ tiӃn hành truyӅn thông. Mӛi kênh
truyӅn thông đó đưӧc xác đӏnh bӣi mӝt khóa phiên tương ӭng. Khi phiên truyӅn kӃt
thúc thì khóa phiên tương ӭng cũng bӏ hӫy bӓ.

8.2.3 TruyӅn thông nhóm an toàn

a. TruyӅn thông nhóm bí mұt

Mô hình đơn giҧn là tҩt cҧ các thành viên trong nhóm sӁ cùng có mӝt khóa bí mұt đӇ
mã hóa và giҧi mã các bҧn tin. ĐiӅu kiӋn tiên quyӃt cho mô hình này là phҧi đҧm bҧo
rҵng tҩt cҧ các thành viên trong nhóm phӍa giӳ bia mұt khóa đó.

Mô hình thӭ hai là dùng mӝt khóa bí mұt cho tӯng cһp thành viên trong nhóm. Khi
mӝt trong hai thành viên kӃt thúc phiên truyӅn thì thành viên còn lҥi vүn sӁ dùng khóa
đó đӇ giao tiӃp vӟi thành viên khác trong nhóm. Vӟi mô hình này phҧi duy trì tӟi N
(N-1)/2 khóa.
Mô hình thӭ ba là dùng khóa công khai. Mӛi mӝt thành viên trong nhóm sӁ phҧi duy
trì mӝt cһp khóa công khai và khóa riêng, trong đó khóa công khai đư ӧc dùng bӣi tҩt
cҧ thành viên trong nhóm.

b. Server nhân bҧn an toàn

ViӋc nhân bҧn các server thưӡng dùng trong viӋc chӏu lӛi cho hӋ phân tán nhưng đôi
khi cũng đưӧc dùng đӇ đҧm bҧo tính tin cұy cho hӋ thӕng.

8.3 KiӇm soát truy nhұp (Access Control).

8.3.1 Các khía cҥnh tәng quát trong kiӇm soát truy cұp.

a. Ma trұn kiӇm soát truy cұp (Access Control Matrix).

Trong ma trұn điӅu khiӇn truy cұp, mӝt hàng biӇu diӉn cho mӝt chӫ thӇ (subject), mӝt
cӝt biӇu diӉn cho mӝt đӕi tưӧng (object). Gӑi ma trұn kiӇm soát truy nhұp là M.
M[s,o]: đưa ra danh sách các phép toán mà chӫ thӇ s có thӇ yêu cҫu trên đӕi tưӧng o.
Khi mӝt chӫ thӇ s gӑi mӝt phương thӭc m cӫa đӕi tưӧng o thì monitor sӁ kiӇm tra
trong danh sách M[s,o], nӃu m không có trong danh sách này thì lӡi triӋu gӑi bӏ hӫy
bӓ.

Thông thưӡng hӋ thӕng phҧi làm viӋc vӟi rҩt nhiӅu user nên có hàng nghìn chӫ thӇ cҫn
quҧn lý. Do đó xây dӵng mӝt ma trұn thӵc như trên là không hӧp lý. Giҧi pháp đӅ ra là
sӱ dөng danh sách kiӇm soát truy cұp.

b. Danh sách kiӇm soát truy cұp (Access Control List).

Mӛi mӝt đӕi tưӧng sӁ duy trì mӝt danh sách các truy cұp hӧp lӋ cӫa các chӫ thӇ muӕn
truy cұp nó gӑi là ACL nhӡ đó tránh đưӧc sӵ tӗn tҥi cӫa các entry rӛng như ӣ ma trұn
kiӇm soát truy nhұp.

Hình 67 sӱ dөng ACL

c. MiӅn bҧo vӋ (Protection Domains).

Vӟi viӋc sӱ dөng ACL, tuy đã khҳc phөc đưӧc nhưӧc điӇm cӫa ma trұn kiӇm soát truy
nhұp nhưng vүn có kích thưӟc lӟn nên đã đưa ra cách sӱ dөng miӅn bҧo vӋ. MiӅn bҧo
vӋ là mӝt tұp các cһp (đӕi tưӧng, truy cұp hӧp lӋ), mӛi cһp này sӁ cho ta mӝt đӕi tưӧng
và các thao tác hӧp lӋ trên nó. Mӛi mӝt yêu cҫu đӅu thuӝc mӝt miӅn bҧo vӋ nào đó.
Khi mӝt yêu cҫu gӱi đӃn, monitor sӁ tìm trong miӅn bҧo vӋ tương ӭng yêu cҫu này.

ĐӇ đҥt hiӋu quҧ cao hơn, ngưӡi ta dùng kӃt hӧp miӅn bҧo vӋ vӟi viӋc phân nhóm các
đӕi tưӧng.

8.3.2 Tưӡng lӱa (Firewall).


Firewall dùng đӇ ngăn chһn các luӗng không đưӧc phép. Firewall có hai loҥi chính là:

Packet - filtering gateway: loҥi này hoҥt đӝng như mӝt router cho phép hoһc không
cho phép gói tin chuyӇn qua mҥng dӵa trên đӏa chӍ nguӗn và đӏa chӍ đích ӣ phҫn
header cӫa gói tin. Loҥi này thưӡng dùng đӇ ngăn chһn các gói tin tӯ ngoài đi vào
trong mҥng.

Appllication - level gateway: loҥi firewall này không chӍ kiӇm tra header cӫa gói tin
gӱi đӃn hay gӱi đi mà còn kiӇm tra nӝi dung cӫa gói tin đó. Mӝt ví dө đһc biӋt cho loҥi
này là proxygateway.

8.4 Quҧn trӏ an toàn - an ninh (Security management ).

8.4.1 Quҧn trӏ khóa.

a. ThiӃt lұp khóa.

ViӋc tҥo ra khóa bí mұt giӳa bên truyӅn và bên nhұn đưӧc thӵc hiӋn như sau:

Bên A và bên B đӅu tҥo ra hai sӕ lӟn là n và g - hai sӕ này có thӇ đưӧc công khai. Bên
A sӁ tҥo ra mӝt sӕ lӟn khác là x, bên B tҥo ra sӕ lӟn y và giӳ bí mұt chúng. Bên A sӁ
gӱi cho bên B: n, g và (gx mod n). Bên B sӁ thӵc hiӋn tính (gx mod n)y= gxy mod n.
do đó sӁ xác đӏnh đưӧc khóa bí mұt x cӫa bên A. Đӗng thӡi, bên B cũng gӱi cho bên A
(gy mod n). Bên A thӵc hiӋn tính toán (gy mod n)x= gxy mod n nh ӡ đó cũng xác đӏnh
đưӧc khóa bí mұt y cӫa bên B.

Hình 68 Nguyên lý cӫa Diffie - Hellman key exchange

b. Phân phát khóa.

Trong hӋ mã mұt đӕi xӭng, khóa bí mұt tҥo ra phҧi đưӧc truyӅn đi trên kênh mұt riêng
.

Hình 69 Phân phát khóa theo kênh riêng.

Trong hӋ mұt mã dùng khóa công khai, khóa công khai ph ҧi đҧm bҧo cùng mӝt cһp
vӟi mӝt khóa bí mұt. Khóa công khai đưӧc truyӅn đi như mӝt bҧn rõ trên đưӡng truyӅn
và phҧi có hӛ trӧ xác thӵc. Khóa bí mұt đưӧc truyӅn đi trên mӝt kênh riêng và cũng
phҧi đưӧc xác thӵc.
Thông thưӡng, khóa công khai thưӡng đưӧcthay bҵng mӝt chӭng chӍ khóa công khai
(public - key certificate). Chӭng chӍ này bao gӗm mӝt khóa công khai và mӝt xâu đӏnh
danh đӇ xác đӏnh đưӧc khóa mұt liên kӃt vӟi nó.

b. Thӡi gian tӗn tҥi cӫa chӭng chӍ.

Khi cҫn hӫy bӓ mӝt chӭng chӍ ta có thӇ thӵc hiӋn theo nhiӅu phương pháp:

Cách 1: sӱ dөng danh sách các chӭng chӍ bӏ hӫy bӓ CRL (certification revocation list).
Khi cllient kiӇm tra mӝt chӭng chӍ thì nó cũng kiӇm tra trong danh sách CRL đӇ kiӇm
tra xem chӭng chӍ này đã bӏ hӫy hay không. Như thӃ mӛi client phҧi đưӧc cұp nhұt
danh sách này thưӡng xuyên.

Cách 2: mӛi chӭng chӍ tӵ đӝng hӃt hiӋu lӵc sau mӝt thӡi gian xác đӏnh nào đó. Nhưng
nӃu muӕn hӫy chӭng chӍ trưӟc thӡi gian đó thì vүn phҧi dùng đӃn danh sách CRL như
trên.

Cách 3: giҧm thӡi gian tӗn tҥi có hiӋu lӵc cӫa mӝt chӭng chӍ xuӕng gҫn bҵng 0. Khi đó
client phҧi thưӡng xuyên kiӇm tra chӭng chӍ đӇ xác đinh thӡi gian có hiӋu lӵc cӫa
khóa công khai.

8.4.2 Quҧn trӏ nhóm an toàn.

Xét nhóm G, khóa mұt CKG¬ đưӧc chia sҿ vӟi tҩt cҧ các thành viên cӫa nhóm đӇ mã
hóa thông điӋp cӫa nhóm. Nhóm còn có thêm 1 cһp khóa công khai/riêng (KG+, KG-)
đӇ giao tiӃp vӟi các thành viên cӫa nhóm khác.

TiӃn trình P muӕn tham gia vào nhóm G sӁ gӱi yêu cҫu tham gia JR. RP (Reply pad)
và khóa bí mұt KP,G đưӧc mã hóa sӱ dөng khóa công khai KG+ cӫa nhóm. JR đưӧc
gán bӣi P và nó đưӧc gӱi đi cùng vӟi chӭng chӍ chӭa khóa công khai cӫa P.

Khi mӝt thành viên nhó m Q nhұn mӝt yêu cҫu tӯ P, nó sӁ xác thӵc P, xác đӏnh tem
thӡi gian T đӇ đҧm bҧo rҵng P vүn còn giá trӏ tҥi thӡi điӇm gӱi. Sau đó lҩy ra khóa
công khai cӫa P đӇ kiӇm tra tính hӧp lӋ cӫa JR.

NӃu P đưӧc chҩp nhұn vào nhóm, Q trҧ lҥi thông điӋp GA nhұn dҥng P và chӭa N
(nonce). RP đưӧc sӱ dөng đӇ mã hóa khóa giao tiӃp cӫa nhóm CKG. P sӱ dөng khóa
KG- đӇ mã hóa cùng vӟi CKG. Sau đó thông điӋp GA đưӧc gán cho Q sӱ dөng khóa
KP,G.

8.4.3 Quҧn trӏ ӫy quyӅn (Authorization management )

Sӱ dөng capability đӇ xác đӏnh quyӅn truy cұp tài nguyên cӫa tiӃn trình chiӃm giӳ nó.
Mӝt capability là mӝt tӯ đӏnh danh 128 bit, cҩu trúc bên trong đưӧc mô tҧ như sau:
48 bit đҫu tiên đưӧc khӣi tҥo khi đӕi tưӧng đưӧc tҥo ra bӣi server cӫa đӕi tưӧng. 48 bít
này đưӧc gӑi là server port.

24 bit tiӃp theo đưӧc sӱ dөng đӇ xác đӏnh đӕi tưӧng tҥi server đã đӏnh sҹn.

8 bit tiӃp theo xác đӏnh quyӅn truy cұp cӫa holder cӫa capability

Trưӡng check (48bit cuӕi) đưӧc dùng đӇ tҥo ra mӝt capability thұt (không thӇ giҧ mҥo
đưӧc).

Khi mӝt đӕi tưӧng đưӧc khӣi tҥo, server cӫa đӕi tưӧng đó chӑn lҩy mӝt trưӡng check
ngүu nhiên và lưu trӳ nó trong cҧ capability và trong cҧ table riêng cӫa server

Sӵ ӫy quyӅn(delegation)

Sӵ ӫy thác quyӅn truy nhұp là mӝt kӻ thuұt quan trӑng đӇ thӵc thi sӵ bҧo vӋ trong hӋ
thӕng máy tính và đһc biӋt hơn là trong hӋ phân tán. Ý tưӣng cơ bҧn rҩt đơn giҧn: bҵng
viӋc chuyӇn quyӅn truy nhұp tӯ tiӃn trình này sang tiӃn trình khác, nó sӁ trӣ nên dӉ
dàng hơn đӇ phân tán công viӋc giӳa các tiӃn trình mà không làm ҧnh hưӣng tӟi viӋc
bҧo vӋ tài nguyên.

Có vài cách đӇ thӵc thi sӵ ӫy quyӅn, mӝt cách là sӱ dөng proxy.

You might also like