Kiến trúc N-Tier là gì?


193

Gần đây tôi đã thấy một vài bài đăng công việc của nhà phát triển bao gồm một câu đọc ít nhiều như thế này: "Phải có kinh nghiệm với kiến ​​trúc N-Tier" hoặc "Phải có khả năng phát triển ứng dụng N-Tier".

Điều này dẫn tôi đến hỏi, kiến ​​trúc N-Tier là gì? Làm thế nào để một người có được kinh nghiệm với nó?


2
Điều thú vị là bài đăng khác này cũng đang hỏi kiến ​​trúc N-Tier là gì, nhưng câu trả lời hoàn toàn khác nhau. stackoverflow.com/questions/7271165/ cường . Có vẻ như có kiến ​​trúc N-Tier cho phần mềm và kiến ​​trúc N-Tier cho phần cứng.
Noremac

Câu trả lời:


247

Wikipedia :

Trong công nghệ phần mềm, kiến ​​trúc đa tầng (thường được gọi là kiến ​​trúc n tầng) là kiến ​​trúc máy chủ-máy khách, trong đó, phần trình bày, xử lý ứng dụng và quản lý dữ liệu là các quy trình riêng biệt. Ví dụ: một ứng dụng sử dụng phần mềm trung gian để yêu cầu dữ liệu dịch vụ giữa người dùng và cơ sở dữ liệu sử dụng kiến ​​trúc đa tầng. Việc sử dụng rộng rãi nhất của "kiến trúc nhiều tầng" đề cập đến kiến ​​trúc ba tầng.

Nó gây tranh cãi về những gì được coi là "tầng", nhưng theo tôi, nó ít nhất cần phải vượt qua ranh giới quá trình. Hoặc nếu không, nó được gọi là lớp. Nhưng, nó không cần phải ở trong các máy vật lý khác nhau. Mặc dù tôi không khuyên bạn nhưng bạn có thể lưu trữ lớp logic và cơ sở dữ liệu trên cùng một hộp.

văn bản thay thế

Chỉnh sửa : Một hàm ý là tầng trình bày và tầng logic (đôi khi được gọi là Lớp logic nghiệp vụ) cần phải vượt qua ranh giới máy "qua dây" đôi khi qua mạng không đáng tin cậy, chậm và / hoặc không an toàn. Điều này rất khác với ứng dụng Desktop đơn giản, nơi dữ liệu nằm trên cùng một máy như các tệp hoặc Ứng dụng web nơi bạn có thể truy cập trực tiếp vào cơ sở dữ liệu.

Đối với lập trình n-tier, bạn cần đóng gói dữ liệu theo một dạng thức có thể vận chuyển được gọi là "tập dữ liệu" và đưa chúng qua dây. Lớp Data set của .NET hoặc giao thức Dịch vụ Web như SOAP là một vài trong số những nỗ lực như vậy để di chuyển các đối tượng qua dây.


6
"3 tầng" và "N-tầng" có sự khác biệt?
chakrit

7
Nó phụ thuộc vào cách bạn đếm "tầng" (logic, vật lý, v.v.), nhưng bạn có thể dễ dàng có hơn 3 quá trình liên quan để viết một ứng dụng. Giao diện người dùng, nền tảng giao diện người dùng (như Eclipse RCP), Dịch vụ web, BLL, DAL, Cơ sở dữ liệu, Dịch vụ xác thực, Dịch vụ báo cáo, Dịch vụ phân tích ...
Eugene Yokota

6
@chakrit: Vào thời của tôi (tôi đã già) nhiều hơn rằng 2 tầng (máy khách-máy chủ) đã tự động đề cập đến n-tier.
Eduardo Molteni

@EugeneYokota - người ta nói rằng các bậc là để biểu diễn các phần vật lý trong kiến ​​trúc (có thể hoặc không thể được thêm vào, ví dụ như trong một cụm) và các lớp sẽ đề cập đến việc phân nhóm hợp lý các thành phần ứng dụng.
Eliran Malka

Tôi đã được bảo một cái gì đó trông rất giống nhau nhưng với các tầng là tầng trình bày - tầng dịch vụ - tầng tích hợp / dữ liệu. Bạn có biết nếu đây chỉ là những từ khác nhau cho cùng một thứ với kiến ​​trúc được hiển thị ở trên hoặc một cái gì đó khác nhau? Theo như kiến ​​thức của tôi, chúng có vẻ giống nhau nhưng tôi muốn chắc chắn.
KayleighArianna

20

Nó dựa trên cách bạn tách lớp trình bày khỏi logic truy cập dữ liệu và logic kinh doanh cốt lõi ( Wikipedia )

  • 3 tầng có nghĩa là Lớp trình bày + Lớp thành phần + Lớp truy cập dữ liệu.
  • N-tier là khi các lớp bổ sung được thêm vào ngoài các lớp này, thường là cho tính mô đun, cấu hình hoặc khả năng tương tác bổ sung với các hệ thống khác.

12
thực sự nếu một trong những tầng đó được lưu trữ bởi một bên từ xa, ví dụ như bộ xử lý thanh toán, thì tầng đó có thể không "không cần thiết"
Zak

1
Hừm. Có một sự khác biệt rất lớn giữa 'lớp' và 'dịch vụ'. N-Tier thường được sử dụng để chỉ ra rằng đối với tầng đã cho, mọi thứ ở trên nó phải đi qua nó để truy cập các dịch vụ cấp thấp hơn. Nếu chúng song song, tôi sẽ gọi chúng là dịch vụ hơn là tầng.
Dak

Khi xây dựng MCV thông thường (kiến trúc 3 tầng), người ta có thể quyết định triển khai MCV bằng giao diện hai tầng, trên thực tế, người ta có thể thay thế một tầng cụ thể mà không phải sửa đổi dù chỉ một dòng mã. Chúng ta thường thấy những lợi ích của việc này, ví dụ trong các tình huống mà bạn muốn có thể sử dụng nhiều hơn một cơ sở dữ liệu (trong trường hợp đó bạn có giao diện kép giữa lớp điều khiển và lớp dữ liệu). Khi bạn đặt nó trên lớp View (bản trình bày), sau đó bạn có thể (giữ !!) thay thế giao diện USER bằng một máy khác, từ đó tự động hóa đầu vào REAL (!!!)
David Svarrer

15

Đó là một từ thông dụng đề cập đến những thứ như kiến ​​trúc Web thông thường với ví dụ: lớp Javascript - ASP.Net - Middleware - Cơ sở dữ liệu. Mỗi thứ này là một "bậc".


4

Các ứng dụng dữ liệu N tầng là các ứng dụng dữ liệu được tách thành nhiều tầng. Cũng được gọi là "ứng dụng phân tán" và "ứng dụng đa nhiệm", các ứng dụng n tầng phân tách xử lý thành các tầng riêng biệt được phân phối giữa máy khách và máy chủ. Khi bạn phát triển các ứng dụng truy cập dữ liệu, bạn nên có sự tách biệt rõ ràng giữa các tầng khác nhau tạo nên ứng dụng.

Một ứng dụng n-tier điển hình bao gồm tầng trình bày, tầng giữa và tầng dữ liệu. Cách dễ nhất để phân tách các tầng khác nhau trong ứng dụng n tầng là tạo các dự án riêng biệt cho từng tầng mà bạn muốn đưa vào ứng dụng của mình. Ví dụ: tầng trình bày có thể là một ứng dụng Windows Forms, trong khi logic truy cập dữ liệu có thể là một thư viện lớp nằm ở tầng giữa. Ngoài ra, lớp trình bày có thể giao tiếp với logic truy cập dữ liệu ở tầng giữa thông qua một dịch vụ như dịch vụ. Việc tách các thành phần ứng dụng thành các tầng riêng biệt làm tăng khả năng bảo trì và khả năng mở rộng của ứng dụng. Nó thực hiện điều này bằng cách cho phép áp dụng dễ dàng hơn các công nghệ mới có thể được áp dụng cho một tầng duy nhất mà không yêu cầu thiết kế lại toàn bộ giải pháp. Ngoài ra,

Lấy từ trang web của Microsoft .


4

Nếu tôi hiểu câu hỏi, thì đối với tôi, người hỏi thực sự đang hỏi "OK, vì vậy 3 tầng được hiểu rõ, nhưng dường như có sự pha trộn giữa cường điệu, nhầm lẫn và không chắc chắn xung quanh 4 tầng, hoặc khái quát hóa, kiến ​​trúc N-tier có nghĩa là gì. Vậy ... định nghĩa của N-tier được hiểu và đồng ý rộng rãi là gì? "

Đây thực sự là một câu hỏi khá sâu sắc và để giải thích tại sao, tôi cần đi sâu hơn một chút. Chịu đựng tôi đi.

Kiến trúc 3 tầng cổ điển: cơ sở dữ liệu, "logic kinh doanh" và trình bày, là một cách tốt để làm rõ cách tôn vinh nguyên tắc phân tách các mối quan tâm. Điều đó có nghĩa là, nếu tôi muốn thay đổi cách "doanh nghiệp" muốn phục vụ khách hàng, tôi không cần phải xem qua toàn bộ hệ thống để tìm ra cách thực hiện điều này và đặc biệt, các quyết định kinh doanh không nên phân tán willy-nilly thông qua mã.

Bây giờ, mô hình này đã phục vụ tốt trong nhiều thập kỷ và đó là mô hình 'máy khách-máy chủ' cổ điển. Chuyển nhanh tới các dịch vụ đám mây, trong đó trình duyệt web là giao diện người dùng cho một nhóm người dùng phân tán rộng rãi và vật lý, và người ta thường phải thêm các dịch vụ phân phối nội dung, không phải là một phần của kiến ​​trúc 3 tầng cổ điển (và mà cần phải được quản lý theo quyền riêng của họ).

Khái niệm này khái quát khi nói đến các dịch vụ, dịch vụ vi mô, cách thức dữ liệu và tính toán được phân phối, v.v. Có hay không một cái gì đó là một 'tầng' phần lớn tùy thuộc vào việc tầng đó có cung cấp mô hình triển khai và giao diện cho các dịch vụ nằm phía sau (hoặc bên dưới) tầng đó hay không. Vì vậy, một mạng phân phối nội dung sẽ là một tầng, nhưng một dịch vụ xác thực sẽ không như vậy.

Bây giờ, hãy đi và đọc các mô tả khác về các ví dụ về kiến ​​trúc N-tier với khái niệm này trong đầu, và bạn sẽ bắt đầu hiểu vấn đề. Các quan điểm khác bao gồm các cách tiếp cận dựa trên nhà cung cấp (ví dụ NGINX), cân bằng tải nhận thức nội dung, cách ly dữ liệu và dịch vụ bảo mật (ví dụ: Datapower của IBM), tất cả có thể hoặc không thể thêm giá trị cho một trường hợp kiến ​​trúc, triển khai và sử dụng nhất định.


3

Theo hiểu biết của tôi, N-Tier tách biệt logic kinh doanh, quyền truy cập của khách hàng và dữ liệu với nhau bằng các máy vật lý riêng biệt. Lý thuyết là một trong số chúng có thể được cập nhật độc lập với những cái khác.


3

Các ứng dụng dữ liệu N tầng là các ứng dụng dữ liệu được tách thành nhiều tầng. Cũng được gọi là "ứng dụng phân tán" và "ứng dụng đa nhiệm", các ứng dụng n tầng phân tách xử lý thành các tầng riêng biệt được phân phối giữa máy khách và máy chủ. Khi bạn phát triển các ứng dụng truy cập dữ liệu, bạn nên có sự tách biệt rõ ràng giữa các tầng khác nhau tạo nên ứng dụng.

Và cứ thế trong http://msdn.microsoft.com/en-us/l Library / bb384398.aspx


3

Khi xây dựng MCV thông thường (kiến trúc 3 tầng), người ta có thể quyết định triển khai MCV bằng giao diện hai tầng, trên thực tế, người ta có thể thay thế một tầng cụ thể mà không phải sửa đổi dù chỉ một dòng mã.

Chúng ta thường thấy những lợi ích của việc này , ví dụ trong các tình huống mà bạn muốn có thể sử dụng nhiều hơn một cơ sở dữ liệu (trong trường hợp đó bạn có giao diện kép giữa lớp điều khiển và lớp dữ liệu).

Khi bạn đặt nó trên lớp View (bản trình bày), sau đó bạn có thể (giữ !!) thay thế giao diện USER bằng một máy khác, từ đó tự động hóa đầu vào REAL (!!!) - và do đó bạn có thể chạy thử nghiệm khả năng sử dụng tẻ nhạt hàng ngàn nhiều lần mà không có bất kỳ người dùng nào phải nhấn và nhấn lại và nhấn lại nhiều lần cùng một thứ.

Một số mô tả kiến trúc 3 tầng như vậy với 1 hoặc 2 giao diện kép là kiến trúc 4 tầng hoặc 5 tầng , ngụ ý ngầm định các giao diện kép.

Các trường hợp khác bao gồm (nhưng không giới hạn) thực tế là bạn - trong trường hợp hệ thống cơ sở dữ liệu được nhân rộng bán hoặc hoàn toàn thực tế có thể coi một trong các cơ sở dữ liệu là "chính", và do đó bạn sẽ có một lớp bao gồm chủ và một cơ sở dữ liệu nô lệ khác.

Ví dụ di động

Do đó, nhiều tầng - hoặc N-tier - thực sự có một vài cách hiểu, trong khi tôi chắc chắn sẽ sử dụng các tầng 3 + tầng bổ sung bao gồm các đĩa giao diện mỏng được đặt ở giữa để cho phép hoán đổi tầng và nói về thử nghiệm (đặc biệt được sử dụng trên thiết bị di động), giờ đây bạn có thể chạy thử nghiệm người dùng trên phần mềm thực, bằng cách mô phỏng người dùng khai thác theo cách mà logic điều khiển không thể phân biệt với khai thác người dùng thực. Điều này gần như là tối quan trọng trong việc mô phỏng các thử nghiệm người dùng thực , trong đó bạn có thể ghi lại tất cả các đầu vào từ OTA của người dùng và sau đó sử dụng lại đầu vào tương tự khi thực hiện các thử nghiệm hồi quy.


2

Khi chúng ta nói về Tiers, chúng ta thường nói về các Quá trình vật lý (có không gian bộ nhớ khác nhau).

Do đó, trong trường hợp, các lớp của một ứng dụng được triển khai trong các quy trình khác nhau, các quy trình khác nhau đó sẽ là các tầng khác nhau.

Ví dụ: Trong ứng dụng 3 tầng, tầng doanh nghiệp nói chuyện với Mainframes (quy trình riêng) và nói chuyện với Dịch vụ báo cáo (quy trình riêng), thì ứng dụng đó sẽ là 5 tầng.

Do đó, tên chung là n-tier.


2

từ https://docs.microsoft.com/en-us/azure/arch architecture / guide / arch architecture-styles / n-tier

Một kiến ​​trúc N-tier chia lốp xe ứng dụng thành lốp hợp lýcác tầng vật lý là chủ yếu và chúng được chia thành các phần phụ. nhập mô tả hình ảnh ở đây

Các lớp là một cách để phân tách trách nhiệm và quản lý các phụ thuộc. Mỗi lớp có một trách nhiệm cụ thể. Một lớp cao hơn có thể sử dụng các dịch vụ ở lớp thấp hơn, nhưng không phải là cách khác.

Các bậc được tách biệt về mặt vật lý, chạy trên các máy riêng biệt. Một lớp có thể gọi trực tiếp đến tầng khác hoặc sử dụng tin nhắn không đồng bộ (hàng đợi tin nhắn). Mặc dù mỗi lớp có thể được lưu trữ trong tầng riêng của nó, nhưng điều đó không bắt buộc. Một số lớp có thể được lưu trữ trên cùng một tầng. Vật lý tách các tầng giúp cải thiện khả năng mở rộng và khả năng phục hồi, nhưng cũng thêm độ trễ từ giao tiếp mạng bổ sung.

Một ứng dụng ba tầng truyền thống có tầng trình bày, tầng giữa và tầng cơ sở dữ liệu. Tầng giữa là tùy chọn. Các ứng dụng phức tạp hơn có thể có nhiều hơn ba tầng. Biểu đồ trên cho thấy một ứng dụng có hai tầng ở giữa, gói gọn các khu vực chức năng khác nhau.

Một ứng dụng N tầng có thể có kiến ​​trúc lớp kín hoặc kiến ​​trúc lớp mở:

In a closed layer architecture, a layer can only call the next layer immediately down.
In an open layer architecture, a layer can call any of the layers below it.

Một kiến ​​trúc lớp kín giới hạn sự phụ thuộc giữa các lớp. Tuy nhiên, nó có thể tạo ra lưu lượng mạng không cần thiết, nếu một lớp chỉ chuyển các yêu cầu sang lớp tiếp theo.


1

Ứng dụng N-tier là một ứng dụng có nhiều hơn ba thành phần liên quan. Những thành phần đó là gì?

  • Bộ nhớ cache
  • Hàng đợi tin nhắn cho hành vi không đồng bộ
  • Cân bằng tải
  • Tìm kiếm máy chủ để tìm kiếm thông qua số lượng lớn dữ liệu
  • Các thành phần tham gia xử lý lượng dữ liệu khổng lồ
  • Các thành phần chạy công nghệ không đồng nhất thường được gọi là dịch vụ web, v.v.

Tất cả các ứng dụng xã hội như Instagram, Facebook, các dịch vụ công nghiệp quy mô lớn như Uber, Airbnb, các trò chơi nhiều người chơi trực tuyến khổng lồ như Pokemon Go, các ứng dụng có tính năng lạ mắt là các ứng dụng n-tier.


0

Martin Fowler trình diễn rõ ràng:

Phân lớp là một trong những kỹ thuật phổ biến nhất mà các nhà thiết kế phần mềm sử dụng để phá vỡ một hệ thống phần mềm phức tạp. Bạn thấy nó trong các kiến ​​trúc máy, trong đó các lớp xuất phát từ ngôn ngữ lập trình với các cuộc gọi hệ điều hành vào trình điều khiển thiết bị và bộ hướng dẫn CPU, và vào các cổng logic bên trong chip. Mạng có lớp FTP nằm trên đầu TCP, nằm trên đỉnh IP, nằm trên đỉnh ethernet.

Khi nghĩ về một hệ thống theo các lớp, bạn tưởng tượng các hệ thống con chính trong phần mềm được sắp xếp theo một dạng bánh lớp nào đó, trong đó mỗi lớp nằm trên một lớp thấp hơn. Trong sơ đồ này, lớp cao hơn sử dụng các dịch vụ khác nhau được xác định bởi lớp thấp hơn, nhưng lớp thấp hơn không biết về lớp cao hơn. Hơn nữa, mỗi lớp thường che giấu các lớp thấp hơn của nó khỏi các lớp ở trên, vì vậy lớp 4 sử dụng các dịch vụ của lớp 3, sử dụng các dịch vụ của lớp 2, nhưng lớp 4 không biết đến lớp 2. (Không phải tất cả các kiến ​​trúc phân lớp đều mờ như thế này , nhưng hầu hết là người hay nói đúng hơn là hầu hết mờ đục.)

Chia hệ thống thành các lớp có một số lợi ích quan trọng.

• Bạn có thể hiểu một lớp duy nhất là một tổng thể mạch lạc mà không biết nhiều về các lớp khác. Bạn có thể hiểu cách xây dựng dịch vụ FTP trên TCP mà không cần biết chi tiết về cách thức hoạt động của ethernet.

• Bạn có thể thay thế các lớp bằng các triển khai thay thế của cùng các dịch vụ cơ bản. Dịch vụ FTP có thể chạy mà không thay đổi qua ethernet, PPP hoặc bất kỳ công ty cáp nào sử dụng.

• Bạn giảm thiểu sự phụ thuộc giữa các lớp. Nếu công ty cáp thay đổi hệ thống truyền vật lý của mình, miễn là họ làm cho IP hoạt động, chúng tôi không phải thay đổi dịch vụ FTP của mình.

• Các lớp tạo ra những nơi tốt để tiêu chuẩn hóa. TCP và IP là các tiêu chuẩn vì chúng xác định cách các lớp của chúng sẽ hoạt động.

• Khi bạn đã tạo một lớp, bạn có thể sử dụng nó cho nhiều dịch vụ cấp cao hơn. Do đó, TCP / IP được sử dụng bởi FTP, telnet, SSH và HTTP. Mặt khác, tất cả các giao thức cấp cao hơn này sẽ phải viết các giao thức cấp thấp hơn của riêng chúng. Từ thư viện của Kyle Geoffrey Passarelli

Layering là một kỹ thuật quan trọng, nhưng có những nhược điểm.

• Các lớp gói gọn một số, nhưng không phải tất cả, mọi thứ đều tốt. Kết quả là đôi khi bạn nhận được thay đổi tầng. Ví dụ kinh điển về điều này trong một ứng dụng doanh nghiệp được xếp lớp là thêm một trường cần hiển thị trên UI, phải có trong cơ sở dữ liệu và do đó phải được thêm vào mỗi lớp ở giữa.

• Các lớp bổ sung có thể gây hại cho hiệu suất. Ở mỗi lớp, mọi thứ thường cần phải được chuyển đổi từ đại diện này sang đại diện khác. Tuy nhiên, việc đóng gói một hàm cơ bản thường mang lại cho bạn hiệu quả đạt được nhiều hơn mức bù. Một lớp kiểm soát các giao dịch có thể được tối ưu hóa và sau đó sẽ làm mọi thứ nhanh hơn. Nhưng phần khó nhất của kiến ​​trúc lớp là quyết định lớp nào sẽ có và trách nhiệm của mỗi lớp là gì.

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.