Nguyên tắc end-to-end có thể được chính thức hóa?


10

Vào cuối những năm 1990, khi tôi học cao học, tờ báo

Máy xay muối JH; Sậy DP; DD Clark: Đối số đầu cuối trong thiết kế hệ thống . ACM Trans. Tính toán. Hệ thống. 2 (4): 277-288, 1984. DOI = 10.1145 / 357401.357402

đọc được khá nhiều yêu cầu trong mọi lớp hệ điều hành ở mỗi trường đại học, và nó dường như vẫn là một trong những nguyên tắc hướng dẫn cơ bản trong thiết kế internet. (Xem ví dụ: J Kempf, R Austein (eds), và IAB, " Sự trỗi dậy của Trung và tương lai của End-to-End: Những phản ánh về sự tiến hóa của kiến trúc Internet ," RFC 3724, tháng 3 năm 2004. )

Các nguyên tắc từ đầu đến cuối (Saltzer et al., 1984):

[Nếu] chức năng được đề cập có thể được thực hiện hoàn toàn và chính xác chỉ với kiến ​​thức và trợ giúp của ứng dụng đứng ở điểm cuối của hệ thống truyền thông, ..., cung cấp chức năng nghi vấn đó như là một tính năng của chính hệ thống truyền thông khả thi. [Mặc dù] đôi khi một phiên bản không đầy đủ của chức năng được cung cấp bởi hệ thống truyền thông có thể hữu ích như một sự nâng cao hiệu suất.

Hoặc ngắn gọn hơn (từ bản tóm tắt):

Đối số đầu cuối cho thấy rằng các hàm được đặt ở mức thấp của hệ thống có thể là dự phòng hoặc ít giá trị khi so sánh với chi phí cung cấp chúng ở mức thấp đó.

Nhưng tôi đã có một chút thành công khi áp dụng nguyên tắc đầu cuối theo kinh nghiệm của riêng tôi (đó là trong kiến ​​trúc máy tính, không phải kiến ​​trúc internet). Vì nguyên tắc này được coi là một "bài thơ" (nghĩa là trong văn xuôi tiếng Anh với một loạt các thuật ngữ không được định nghĩa về mặt toán học), khá dễ để đánh lừa bản thân rằng "chức năng trong câu hỏi chỉ có thể được thực hiện hoàn toàn và chính xác với kiến thức và sự giúp đỡ của ứng dụng. " Nhưng "chức năng trong câu hỏi" là gì, hãy để một mình "kiến thức và trợ giúp" của một ứng dụng?

Ví dụ: Mạng trên chip (không giống như internet) không được phép bỏ các gói, nhưng có bộ đệm khá hạn chế, vì vậy bạn cần có một số cách để tránh hoặc khôi phục từ bế tắc. Mặt khác, ứng dụng cũng cần làm cho nó bế tắc miễn phí, phải không? Vì vậy, tôi có thể lý do rằng tôi nên làm cho trường hợp phổ biến (không có bế tắc) nhanh chóng và tránh việc tránh bế tắc trên ứng dụng. Trên thực tế, đây là những gì chúng tôi đã thử trên Alewife và Fugu (Mackenzie, et al., Khai thác chuyển phát hai trường hợp để nhắn tin được bảo vệ nhanh , Int'l Symp High-Perf Comp Arch, (HPCA-4): 231-242, 1998. Hoặc luận án của John Kubiatowicz.) Nó "hoạt động" (bằng cách kết nối ngắt bộ xử lý khi bộ đệm được lấp đầy và có hệ điều hành tăng cường với bộ đệm phần mềm) nhưng tôi chưa thấy ai trong học viện hoặc ngành công nghiệp (kể cả bất kỳ ai trong chúng ta là tác giả về điều đó Giấy HPCA) chạy đua xung quanh cố gắng tái tạo ý tưởng. Vì vậy, rõ ràng việc tránh bế tắc trong mạng không giống như "chức năng được đề cập" như việc tránh bế tắc ở cấp ứng dụng hoặc nguyên tắc đầu cuối là sai.

Có thể biến nguyên tắc từ đầu đến cuối từ một "bài thơ" thành một định lý không? Hoặc ít nhất, nó có thể được nói theo thuật ngữ dễ hiểu đối với một kiến ​​trúc sư máy tính không?


điều này nghe có vẻ như quá mức hoặc áp đảo một giao diện trong bối cảnh truyền thông. thường trong các giao diện / API CS được tạo với các chức năng hiếm khi được sử dụng hoặc cấu trúc dự đoán không phù hợp với yêu cầu / sử dụng thực tế. lời khuyên dường như là "cảnh giác và tránh điều đó nếu có thể".
vzn

Về ví dụ của bạn; bạn đề cập: Nó "hoạt động" (bằng cách kết nối ngắt bộ xử lý khi bộ đệm được lấp đầy và có hệ điều hành tăng cường với bộ đệm phần mềm). Vì vậy, sự kết nối giữa các CPU là "đủ im lặng" để cho phép một CPU khác đệm dữ liệu trong bộ nhớ bộ xử lý thông thường? Điều đó có vẻ khá hợp lý với tôi.
Alexandros

Việc kết nối khá bận rộn. Việc ngắt và đệm phần mềm chỉ xảy ra khi bộ đệm phần cứng không đủ để ngăn chặn bế tắc. Bộ đệm phần mềm có thể là các đơn đặt hàng có cường độ lớn hơn bộ đệm phần cứng, do đó có thể phá vỡ các vòng lặp phụ thuộc gây ra bởi bộ đệm phần cứng nhỏ lấp đầy. Điều này hiếm khi xảy ra (chủ yếu chỉ khi có nhiều lưu lượng DMA cạnh tranh với lưu lượng kết hợp bộ đệm), vì vậy đối với hầu hết các chương trình, phần nhỏ các thông điệp được xử lý trong phần mềm thay vì phần cứng là không đáng kể.
Logic lang thang

Câu trả lời:


3

Tôi tin rằng có thể có hai thiếu sót trong việc áp dụng nguyên tắc end-to-end (e2e) của bạn:

Thứ nhất, theo nghĩa là bạn áp dụng nó cho hiệu suất. Đầu cuối là một nguyên tắc thiết kế như để đảm bảo tính trực giao của kiến ​​trúc, khả năng kết hợp, tính đều đặn, một hoặc tất cả, cung cấp nguyên thủy, vv Các nguyên tắc này đã được nêu trong sách giáo khoa liên quan. Hiệu suất không phải là một trong số họ. Trên thực tế, Clark và cộng sự, ngụ ý rằng đầu cuối nghiêm ngặt có thể dẫn đến hiệu suất kém hơn nên nó sử dụng như một ngoại lệ đối với nguyên tắc này.

Vì vậy, nếu bạn vẫn muốn chính thức hóa:

"Đối số đầu cuối thu hút các yêu cầu ứng dụng và cung cấp một lý do hợp lý cho chức năng di chuyển lên trên trong một hệ thống lớp", do đó bạn sẽ cần các yêu cầu ứng dụng chính thức và hệ thống lớp chính thức. Đây là một nỗ lực có thể giúp tiến thêm một bước:

Giả sử bạn có các yêu cầu Lớp (i) (Lớp (0) dành cho bộ ứng dụng bạn muốn hỗ trợ ngay bây giờ hoặc trong tương lai, lớp ứng dụng) và Giao diện vững chắc Giao diện (i, i + 1) và Giao diện (i + 1) , i) (từ Lớp i đến i + 1 giả định không có phân lớp chéo ở đây, dễ dàng thay đổi và làm cho nó trở thành một yêu cầu) và các hàm Chức năng (i, j) (Lớp i, Chỉ mục hàm j, giả sử một phần dữ liệu của hàm để đơn giản hơn)

Đầu vào: Yêu cầu lớp (0) (như chúng tôi đã nói những yêu cầu này cần được chính thức hóa)

Đầu ra: mọi thứ khác

END-TO-END Đầu ra là một Đầu ra sao cho: Với mỗi L, Layer (L) chỉ thực hiện các yêu cầu của nó bằng các chức năng Chức năng (L, j) (tức là các chức năng trong lớp) và Giao diện (L, L + 1), Giao diện (L + 1, L)

Đối với mỗi Lớp L và Hàm Chức năng (L, F) không có tập hợp Hàm S trong đầu ra sao cho Hàm (L, F) = S (= có nghĩa là đầu ra tương đương và tác dụng phụ)

Vì vậy, đi đến thiếu sót thứ hai có thể cho ứng dụng nguyên tắc e2e cụ thể (và nếu tôi đang đọc chính xác những gì đang cố gắng), người ta có thể khẳng định rằng nó hoàn toàn không tuân theo nguyên tắc e2e, hoàn toàn ngược lại. Bạn có chip của mình cung cấp "một số cách tránh bế tắc" và bạn có một Giao diện khác thường không phải là công ty thông thường và cụ thể để kích hoạt (ngắt) thêm trợ giúp từ các lớp trên. Đây được cho là một cách tiếp cận đa lớp không phải là cách tiếp cận từ đầu đến cuối. Nói cách khác, bạn có Hàm (1, x) không hoàn thành nhiệm vụ của mình một cách đầy đủ và chính xác với Bộ giao diện - nếu bạn muốn sử dụng bản thảo chính thức được cung cấp ở trên (tất nhiên chỉ là một khởi đầu hữu ích để mở rộng để trả lời đầy đủ câu hỏi của bạn nhưng có khả năng không đầy đủ trong chính nó).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.