24/05/2018, 20:13

Thi hành quá trình phân tán

Chiến lược chia sẻ tải tĩnh hay động đều đòi hỏi thực hiện QT trên một trạm xa. Việc tạo lập một QT từ xacó thể được thực thi bằng mô hình Client/Server), tương tự như cách thực thi của RPC . Trên hình 5.11 giả sử đã có các QT nền điểm-vào giúp cho việc ...

Chiến lược chia sẻ tải tĩnh hay động đều đòi hỏi thực hiện QT trên một trạm xa. Việc tạo lập một QT từ xacó thể được thực thi bằng mô hình Client/Server), tương tự như cách thực thi của RPC. Trên hình 5.11 giả sử đã có các QT nền điểm-vào giúp cho việc tạo lập và kết nối các QT trên các máy khác nhau được dễ dạng. Một QT cục bộ trên một máy Khách trước hết cần tạo một yêu cầu tới các QT xử lý đầu cuối, các QT này có liên hệ với những “nền”(stub) nằm trên phục vụ đại diện cho QT đó. Nếu yêu cầu này được chấp nhận và mọi tài nguyên cần thiết đều được đáp ứng, “nền” trên phục vụ. Mọi liên lạc tiếp theo giữa địa phương và QT ở xa sẽ được giúp đỡ gián tiếp thông qua các QT nền. Các QT cơ sở phục vụ như một kết nối logic, tạo lập ranh giới vật lý giữa QT địa phương và QT ở xa.

Dựa trên cách thức phiên dịch một thông điệp yêu cầu, có 3 thể loại ứng dụng chính:

Dịch vụ từ xa (remote service): Thông điệp được hiểu như một yêu cầu cho một service đã biết tại một trạm xa.

Thực hiện từ xa (Remoce execution): Thông điệp chứa đựng một chương trình sẽ được thực hiện tại một remote site.

Di trú QT: Thông điệp đại diện cho một QT đang được chuyển đến một remote site để tiếp tục thực hiện.

Mỗi ứng dụng đòi hỏi phải có các biện pháp xử lý khác nhau được trình bày dưới đây.

Remote service là một định nghĩa quen thuộc. Những ứng dụng đầu tiên của dịch vụ này là sự chia xẻ tài nguyên trong hệ thống phân tán. Với sự cho phép truy cập từ xa, nhiều Khách trên các máy khác nhau có thể cùng chia xẻ tài nguyên chung như: file hệ thống, thiết bị ngoại vi… Một thông điệp yêu cầu dịch vụ từ xa có thể được phân thành 3 mức phần mềm khác nhau:

Lời gọi thủ tục từ xa: mức ngôn ngữ.

Lệnh gọi từ xa (remote commands): mức HĐH

Thông điệp biên dịch (intepretive messages): mức trình ứng dụng.

Tại mức ngôn ngữ, RPC được coi như là mô hình thích hợp nhất cho các yêu cầu dịch vụ từ xa. Đó là loại hình hướng dịch vụ, cung cấp sự truy cập trong suốt cũng như định vị trong suốt (công việc được thực hiện trên máy chủ, người dùng không nhìn thấy).

Tại mức HĐH, có một số lệnh thường xuyên được các đối tượng từ xa sử dụng. Những lệnh này được gắn liền thành một phần của 1 lệnh khung (shell command) và được HĐH địa phương chấp nhận. Ví dụ lênh rcp trong UNIX, lệnh coppy một file từ xa, rất hay sử dụng. Điều này có thể mở rộng cho các lệnh khác bằng việc tạo một lệnh khung cho phép người dùng chạy một lệnh khung tại bất kỳ 1 hệ thống từ xa. Ví dụ lệnh rsh host-l user ls trong UNIX dùng để liệt kê các files trên trang chủ của người dùng, User, trên máy chủ, Host. Như vậy Rsh là một lệnh xa (remote command). Ta có thể phát triển bằng cách đưa rsd vào trong một file lệnh (script file), cho phép thực thi nhiều lệnh trong 1 lần gọi (giống . bat). Ngày nay remote command đơn giản có mặt hầu hết trên các máy mới nhằm phục vụ cho nối mạng.

Lệnh từ xa bị giới hạn ở những lệnh shell. ý tưởng trên có thể được mở rộng để xử lý các thông điệp. Một người dùng có thể gửi 1 thông điệp tới 1 máy chủ yêu cầu một số thao tác do người dùng định nghĩa trong nội dung thông điệp. Nó giống như một RPC tại mức hệ thống. Trong trường hợp này, QT nền tại nơi phục vụ phải có chức năng biên dịch các thông điệp gửi từ bộ xử lý cơ sở trên Khách và có các thao tác tương ứng với yêu cầu. Nguyên tắc quản lý việc truyền và xử lý thông điệp trở thành một giao thức truyền thông ứng dụng (Application communication protocol) giữa Khách và phục vụ. Một ví dụ điển hình là giao thức truyền Phục vụ file cho fpt. Chúng biên dịch các lệnh như get, put thành các thao tác downloading uploading tương ứng. Sử dụng quá trình daemon là một kỹ thuật phổ biến trong lập trình mạng.

Các thao tác xa được khởi xướng qua RPC, lệnh xa và thông điệp thông dịch (interpretive message) chỉ là những phục vụ mà máy chủ cung cấp. Vấn đề đầu tiên của mọi hoạt động là chuyển hướng vào/ra và an ninh. Với việc chuyển hướng, khách stb copy các dữ liệu vào chuẩn của QT người dùng cho các lệnh xa và nền phục vụ trả lại các kết quả chuẩn, các lỗi sinh ra của lệnh đó có cho chương trình người dùng.

Thực hiện từ xa khác dịch vụ từ xa ở chỗ: một thao tác từ xa (remote operation) được đề ra và kiến tạo bởi chính Khách trong khi đó tại mức dịch vụ từ xa, Khách chỉ đề ra thao tác, còn các thao tác này đã được tạo sẵn trên phục vụ. Một thông điệp gửi đi từ Khách chính là chương trình của Khách dùng để chạy trên máy chủ. Một máy chủ có thể là một hệ thống có tài nguyên đặc biệt hoặc đơn giản đó là bất kỳ một hệ thống nào dùng cho mục đích chia xẻ công việc. Hệ thống có tài nguyên đặc biệt chính là trường hợp chung của dịch vụ từ xa. Phần còn lại chính là mô hình xâu-bộ xử lý dùng cho những hoạt động phân tán (Thực hiện từ xa) hoặc định vị động các bài toán (dynamic task placement).

Sự khác biệt lớn nhất giữa dịch vụ từ xa và thực hiện từ xalà môi trường hoạt động. Do mục đích củadịch vụ từ xa là truy cập các tài nguyên ở xa, vì vậy, mọi điều cần biết về các QT xử lý từ xa đều nằm ở máy chủ. Trái lại, với thực hiện từ xa, các QT xử lý xa chứa đựng các thông tin về hệ thống gốc. Các máy chủ chỉ đơn giản làm nhiệm vụ giảm nhẹ công việc tính toán. Độ phức tạp của việc thực thi các Thực hiện từ xa tăng lên đáng kể khi nhiều QT ở xa có ảnh hưởng lẫn nhau được tạo ra đồng thời. Các vấn đề nảy sinh là:

Thuật toán phân chia công việc

Đơn vị độc lập

Tính không đồng nhất của hệ thống

Bảo mật và an toàn.

Để đơn giản hoá, ta giả sử rằng một dịch vụ QT tồn tại trên mọi máy. Dịch vụ QT có trách nhiệm lưu giữ những thông tin về công việc, thoả thuận với máy chủ, gọi các thao tác từ xa, tạo lập các QT nền để kết nối Khách và phục vụ. Thực hiện từ xa có thể được khởi xướng một cách rõ ràng bởi một QT (có thể hoàn toàn từ một QT xử lý trên phục vụ QT địa phương. Vì vậy, mối liên hệ giữa các QT có thể là quan hệ cha – con hoặc quan hệ không liên kết (disjont relation ship or noninteracting). Trong cả 2 trường hợp, công việc đầu tiên vẫn là chọn máy chủ ở xa. Tuỳ theo các QT trên máy chủ mà thuật toán tạo lập từ trạm gửi hoặc thuật toán tạo lập từ trạm nhận sẽ được áp dụng. Trong thực tế, mỗi QT xử lý lưu giữ một danh sách các máy chủ đã đăng ký và đang sẵn sàng đảm nhận một thực hiện từ xa. QT đăng ký/huỷ bỏ thực hiện thông qua việc quảng bá. QT lựa chọn phục vụ được thực hiện thông qua một QT môi giới tập trung. Sau khi chọn trạm xa, QT thương lượng bắt đầu. Phục vụ QT Khách thông báo cho phục vụ QT tại trạm xa yêu cầu về các tài nguyên. Nếu các tài nguyên yêu cầu chấp nhận và Khách được xác nhận, phục vụ sẽ cho phép thực thi Thực hiện từ xa. Việc truyền mã chương trình được thực hiện, sau đó phục vụ tạo lập các QT từ xa và tạo lập nền. Cuối cùng, Khách khởi động QT đã được phân chia cho trạm xa đó.

Tính độc lập định vị trong thực hiện từ xa có đòi hỏi cao hơn so với định hướng lại vào/ra trong dịch vụ từ xa. Các QT tạo lập bởi Thực hiện từ xa đòi hỏi sự phối hợp để hoàn thành công việc chung. Vì thế càn cung cấp cho mỗi QT một thông tin tổng thể cho dù chúng đều đang chạy trên các máy đơn. Mỗi QT xa có một đại diện nằm trên máy chủ đầu tiên. Quan hệ cha/con được thiết lập. Mọi kỹ thuật giao tiếp đa xử lý được thực hiện trong suốt đinh vị. Các file hệ thống của máy chủ đầu tiên thường xuyên cung cấp thông tin tổng thể cho các QT.

Thông thường, thực hiện từ xa thực hiện trên một môi trường đồng nhất trong đó các máy tính tương thích cả về phần cứng cũng như phần mềm. Khi một Thực hiện từ xa được gọi trên một máy chủ không tương thích, chương trình cần phản linh dịch lại, và phí tổn nhiều khi là quá cao. Một giải pháp cho vấn đề này là sử dụng ngôn ngữ trung gian độc lập (canonical machine-independent intermediate language) để lập trình từ xa, ví dụ như Java. Chương trình ghi trên Java được linh dịch thành bộ mã độc lập. Bộ mã này có thể linh dịch trên mọi máy chủ có trang bị bộ dịch mã bytecodes. Các đối tượng trên mạng được đánh địa chỉ duy nhất trong chương trình Java thông qua bộ định vị tài nguyên tổng thể. Cùng với vấn đề mã tương thích, việc trao đổi dữ liệu giữa các vùng không đồng nhất cũng cần phải giải quyết, thông tin cần được chuyển đổi. Một lần nữa, việc sử dụng dữ liệu tổng thể (ví dụ, XDR_external data representation) cần được tích hợp vào các phương tiện cơ bản của Thực hiện từ xa.

Tuy nhiên, Thực hiện từ xa có hai mặt của nó. Nó có đầy đủ sức mạnh nhưng lại đem lại sự lạm dụng hệ thống. Một mã chương trình lạ có thể làm hại chính người dùng. Vì thế, trên quan điểm về bảo mật và an toàn, sẽ là đáng tin cậy hơn khi chỉ chấp nhận duy nhất các thực hiện từ xa có mã gốc hoặc bộ mã trung gian. Ngôn ngữ dùng để lập trình một thực hiện từ xa nên được giới hạn để loại trừ các khả năng xấu có thể xảy ra (ví dụ: con trỏ và đa thừa kế (pointer & multiple inheritance). Trong trường hợp một bộ mã trung gian được sử dụng, ta bắt buộc phải kiểm tra để đảm bảo chắc chắn mã này được sinh ra từ một chương trình nguồn thực sự. Kiểm tra tham số trong khi chạy, kiểm tra tràn Stack cũng rất cần thiết để bảo vệ sự toàn vẹn của các trạm xa. Do đó, vấn đề bảo mật và an toàn cho các Thực hiện từ xa của hệ thống phân tán vẫn là chủ đề đang được nghiên cứu.

Trong vấn đề thực hiện từ xa nêu ở trên, một thao tác khi đã bắt đầu sẽ tồn tại trên trạm cho đến khi hoàn thành. Chúng ta có thể mở rộng mô hình chia xẻ tải cho phép một Thực hiện từ xa có thể giành quyền chuyển sang một trạm khác. Như vậy, một QT có thể di chuyển linh hoạt từ trạm này tới trạm khác. Sự di chuyển các QT là một chủ đề rất hấp dẫn. Một hệ thống với năng lực trong suốt di trú là thành quả cuối cùng của xử lý phân tán.

Cũng giống như Thực hiện từ xa, một chức năng di chuyển QT đòi hỏi phải định vị và thương lượng được với 1 trạm xa, chuyển nhượng mã, khởi động hoạt động. Và khi một QT được di chuyển, các trạng thái của nó cũng phải chuyển kem theo. Trạng thái của một QT trong hệ phân tán bao gồm 2 phần: trạng thái tính toán và trạng thái truyền thông. Trạng thái tính toán là những thông tin cần thiết để lưu và thiết lập lại một QT trên một trạm xa. Trạng thái truyền thônglà tình trạng của các mối liên kết và các thông điệp quá cảnh (các thông điệp đang tạm thời lưu giữ chờ chuyển tiếp). Việc chuyển nhượng trạng thái kết nối là một vấn đề mới trong thực thi việc di chuyển QT.

Định hướng lại liên kết và chuyển phát thông điệp

Các QT dùng các liên kết truyền thông cho mục đích liên lạc giữa các QT. Chúng được thực hiện thông qua bảng liên kết (link table) chứa trong nhân. Bảng liên kết chứa các con trỏ trỏ tới điểm kết nối cuối (communication endpoints) của các QT xử lý khác liên quan đến nó. Khi di chuyển một QT, bảng liên kết (của QT có mối liên hệ với QT được di chuyển) cần được cập nhật lại để giữ nguyên được các mối liên kết đã có. Rất nhiều giải pháp cho máy tính được tìm thấy trong đời sống hàng ngày. Việc chuyển hướng liên kết cũng giống như việc chuyển địa chỉ khi ta thay đổi nơi sinh sống. Thông thường, ta sẽ thông báo địa chỉ mới cho các bạn thân trước khi di chuyển và cho những người còn lại sau khi chuyển. Cũng với phương thức như vậy, việc chuyển hướng liên kết được thực hiện như 1 trong những công đoạn của việc di chuyển QT, trước hoặc sau khi chuyển các ngữ cảnh, như được trình bày trên hình 5.12. Đầu tiên QT di chuyển sẽ ngưng lại (subpended or frozen) ngay sau khi lựa chọn và thương lượng được với một trạm xa. Và khi trạm xa đã sẵn sàng, công việc chính tiếp theo là chuyển giao hiện trạng và ngữ cảnh của chương trình (chuyển bản mã chương trình) tới trạm xa trước khi công việc được thực hiện lại tại đây. Việc chuyển hướng liên kết có thể được thực hiện bằng cách gửi một yêu cầu cập nhật liên kết cho các QT có liên quan. Thời gian cho cập nhật liên kết ảnh hưởng đến việc các thông điệp gửi đến trong QT di chuyển được chuyển tiếp như thế nào. Những thông điệp gửi đến trước khi cập nhật liên kết được lưu giữ, có thể được chuyển đồng thời với mã nguồn (hoặc chuyển muộn hơn thông qua nhân nguồn (source kernel)-phần chương trình cốt yếu còn lại ở trạm cũ. Sau khi cập nhật liên kết, các thông điệp phải đếm trước khi chương trình hoạt động trở lại trên trạm mới. Chúng được chứa trong bufers bởi nhân đích (destintation kernel)–phần chương trình cốt yếu nằm trên trạm mới. Thực hiện cập nhật liên kết sớm sẽ giảm bớt công việc thừa do phải lưu thông điệp tại nhân nguồn. Một cách lý tưởng, mọi thứ còn lại tại trạm gốc sau QT di chuyển là nhỏ nhất và được dọn gọn nhanh nhất có thể. Ngược lại, nó sẽ làm hỏng mục đích giảm nhẹ công việc.

Tuy nhiên, ngay cả khi việc cập nhật diễn ra nhanh chóng, sau khi QT được di chuyển, các thông điệp vẫn có thể đến trạm cũ do sự trễ trên mạng hoặc do nơi gửi không biết gì về việc di chuyển. Để không mất thông tin, nhân nguồn cần phải tiếp tục chuyển những thông điệp tới QT đã được di chuyển. Theo lý thuyết, quãng thời gian này là không xác định. Trên thực tế, ta cần đặt ra một giới hạn giống như hạn gửi thư trên bưu điện. Trong khi chưa hết hạn, các thông điệp được chuyển giao cho nhân đích. Để giảm bớt sự truyền không trực tiếp, nhân nguồn sẽ thông tin cho nơi gửi vị trí mới của QT. Nhưng việc thông báo này chỉ thực hiện được khi nhân nguồn biết được thông tin về nơi gửi. Những thông điệp đến sau thời gian cho phép sẽ bị bỏ qua và coi như thất lạc. Vì vậy, chương trình ứng dụng phải có trách nhiệm xử lý thông tin bị thất lạc.

Chuyển giao ngữ cảnh và trạng thái

Thời gian từ khi dừng chương trình đến khi tái hoạt động của một QT gọi là thời gian đông cứng. Đó là cái giá phải trả cho việc di chuyển các QT. Để giảm bớt phí tổn, các QT chuyển ngữ cảnh (context transfer), chuyển hướng liên kết (link redirection), chuyển phát thông điệp cần phải xử lý đồng thời. Trong thực tế, việc chuyển hướng liên kết và chuyển phát thông điệp có thể đợi khi QT được tái hoạt động ở địa điểm mới. Điều kiện duy nhất cần thiết cho một QT có thể định danh hoạt động ở địa điểm mới là sự giao giao tình trạng hoạt động và một vài mã khởi tạo. Như vậy, để giảm bớt thời gian đông cứng, điểm tái hoạt động (resume execution) của QT trên hình 5.12 cần được đẩy lùi và gối lên QT chuyển ngữ cảnh. Nếu bản mã lớn, QT chuyển có thể được thực hiện theo gói các khối hoặc theo trang. Mã khởi tạo được chuyển tới, thậm chí trước khi QT di chuyển được hoàn thành. Những khối mã khác có thể được copy theo chỉ dẫn: giống như hệ thống đòi hỏi trang. Mặc dù giảm được đáng kể thời gian đông cứng, nhưng phương pháp lại phụ thuộc vào việc tính toán trên trạm nguồn. Tuy nhiên, phương pháp này tỏ ra rất phù hợp với hệ thống chia xẻ bộ nhớ phân tán được nói tới ở chương 7. Một hệ thống chia xẻ bộ nhớ phân tán giả lập một bộ nhớ logic chung dựa trên các modul bộ nhớ vật lý phân tán. Vị trí của các khối bộ nhớ vật lý, được bản đồ hoá thành không gian địa chỉ nhớ logic của các QT, là trong suốt đối với các QT. Trong hệ thống như vậy, chỉ có thông tin trạng thái là cần chuyển giao. Việc chuyển giao ngữ cảnh là không cần thiết. Nó được ẩn giấu trong các kỹ thuật cơ sở làm nhiệm vụ chia sẻ bộ nhớ phân tán. Việc quyết định khi nào các khối, do QT đòi hỏi, được copy (thậm chí định danh lại) là trong suốt đối với QT. Những phụ thuộc vô ích không còn nữa. Vì vậy, nó nâng cao tốc độ truyền thông tin dẫn tới đẩy mạnh tốc độ chương trình.

0