Layering là chính là phân lớp trong kiến trúc mạng internet, nó mô phân chia chi tiết vai trò và nhiệm vụ của từng lớp qua đó giúp cho các kiến trúc sư hệ thống thiết kế mô hình mạng một cách tối ưu và bảo mật hơn. Kiến thức trong bài viết này rất cơ bản nhưng rất cần thiết đối với những bạn có mục tiêu trở thành kiến trúc sư hệ thống mạng và chuyên viên bảo mật hệ thống.

1. Layer là gì?

Đầu tiên hãy nhìn lại sự hoạt động của 7 layer ở tầng network. Các layer này có nhiệm vụ khác nhau và có liên kết với nhau một cách chặt chẽ với nhau

uc?id=1ywshz_hQE2ap_R84sUe1_bBS35xdD_qy&export=download

  • Là một trong những kỹ thuật chung nhất để giải quyết vấn đề phức tạp của hệ thống phần mềm
  • Dùng để xử lý một phần hệ thống phức tạp
  • Nguyên lý subsystem trong phần mềm được sắp xếp như trong một vài form của layer cake
  • Higher layer dùng những service khác nhau được định nghĩa bởi lower layer, nhưng không thể nào dùng service của lớp dưới lower layer của nó.
  • Phần khó nhất của một kiến trúc layer là quyết định layer nào có và trách nhiệm của mỗi layer là gì.

1.1 Lợi ích của layer

  • Có thể hiểu rõ một lớp đơn mà không cần biết nhiều về lớp khác.
  • Có thể thay thế các layer bằng việc sửa đổi những thực thi của những service cơ bản giống nhau.  Vi dụ: FTP service có thể chạy mà không cần thay đổi ethernet, PPP, hay  cable mạng.
  • Tối thiểu hóa sự phụ thuộc giữa các layers. Nếu cable mạng thay đổi hệ thống vật lý, việc cung cấp IP sẽ vẫn làm việc mà không phải thay đổi FTP service
  • Layer tạo ra một chuẩn tốt. Ví dụ: TCP và IP là chuẩn bởi vì nó định nghĩa những layer của nó nên hoặt động như thế nào.
  • Tái sử dụng:
              Xây dựng layer một lần có thể sử dụng cho nhiều service ở cập độ cao hơn.
              Thay vì TCP/IP được dùng bởi FTP, telnet, ssh, và HTTP

1.2 Hạn chế của layer

  • Layers đóng gói ở một vài chỗ nhưng không phải tất cả đều tốt. Đôi khi có một lần thay đổi thì sẽ thế nào:
               Ví dụ: Trong một layer của ứng dụng enterprise mà thêm một trường để hiển thị trên UI, phải thêm vào DB và tất cả các layer ở giữa.
  • Extra layers có thể ảnh hưởng tới performance
              Vì nó phải transform từ một cái này tới cái khác. Tuy nhiên việc đóng gói của một chức năng cơ bản thường cho hiệu quả hơn.
              Một layer đơn control một transaction thì sẽ hiệu quả và sẽ làm tất cả mọi thứ nhanh hơn

2. The Evolution of Layers in Enterprise Applications

uc?id=1trr-gmtE0xkCTC1-soobgER3gi2dl7Xq&export=download

 2.1 Ban đầu khi chạy batch system:
     No layers
 2.2 Thập kỷ 90 với sự phát triển của client-server systems:
     2-layer systems:
    + Client nắm giữ UI và application code khác
    + Server thường chỉ liên quan tới DB
    + Hạn chế:
       ++ Nhúng logic vào màn hình => dễ dupplicate code
       ++ domain logic phức tạp thì rất khó code
       ++ Thay thế domain logic xử lý ở DB như stored procedures => vẫn bị giới hạn với kiến trúc cơ học cũng như dễ xảy ra nhiều rắc rối.
  2.3 Sử dụng 3-layer system:
    + Presentation layer danh cho UI
    + Domain layer cho domain logic
    + Data source
  2.4 Cách này có thể move toàn bộ những phần phức tạp trong domain logic ra ngoài UI và chuyển nó vào một layer nơi xây dụng kiến trúc có đối tượng và các thuộc tính.

3. The Three Principal Layers

uc?id=1u01ZzAitnB0Ie7p1wH_iztcnV8_2BeHm&export=download

  • Presentation logic: Làm thế nào để tương tác giữa người dùng và phần mềm.
       Trách nhiệm chính của presentation layer là:
         + Hiển thị thông tin tới người dùng
         + Thông dịch lệch từ người dùng bên trong actions trên domain và data source

  • Domain logic(business logic): Liên quan tới việc tính toán dựa trên những input và stores data, validation những data đên từ presentation, và tìm ra chính xác logic data source nào để dispatch, phụ thuộc vào lệnh nhận được từ presentation.

  • Data source logic: Liên kết với hệ thống khác mang các task thay cho application.

  • Thỉnh thoảng các layer được sắp xếp vì domain layer hoàn toàn ẩn data source từ presentation.
  • Tuy nhiên, Presentaion truy cập trực tiếp tới data store. Trong khi cái này kém nguyên vẹn, nó có xu hướng làm tốt hơn trong practice
           – Presentation có thể thông dịch một command từ user, dùng data source để kéo dữ liệu thích hợp ra ngoài database
           – Domain logic vận dụng dữ liệu này trước khi biểu diễn nó trên glass(kính)

Separation(sự phân chia): Phân chia sự phụ thuộc trên những ứng dụng phức tạp.

  • Một script đơn giản pull dữ liệu từ một database và hiển thị nó trong một web page có thể tất cả bằng thủ tục. Nó sẽ tốt hơn nếu tách thành 3 layer. Trong trường hợp đơn giản chúng ta có thể làm nó chỉ bằng việc đặt hành vi vào mỗi layer trong các chương trình con đã được phân chia
  • Hệ thống phức tạp sẽ sẽ chia thành 3 layer bên trong đó sẽ phân chia thành các class.
  • Sự phức tạp đã tăng khi chia các class thành các packages
  • Rule về sự phụ thuộc:
  • Domain và data source có thể chưa bao giờ bị phụ thuộc vào presentation.
          ++ Không thủ tục con nào call từ domain hay data source code bên trong presentation.
          ++  Dễ dàng thay thế các presentaion khác nhau trong tổ chức giống nhau mà không cần phân nhánh xuống sâu hơn.
  • Mối quan hệ giữa domain và data source phức tạp hơn và phụ thuộc vào architectural patterns được dùng cho data source.

4. Choosing Where to Run Your Layers

  • Data source: Hầu hết luôn luôn chạy trên server
           – Thường xảy ra exception khi bị ngắt kết nối
           – Để thay đổi data source trên client bị ngắt kết nối cần được đồng bộ với server.
  • Domain logic:
           – Có thể chạy business logic toàn bộ trên server hay toàn bộ trên client hay phân tách nó
           – Tất cả trên server là lựa chọn tốt nhất cho việc dễ dàng maintenance.
           – Nhu cầu di chuyển client có thể dùng một trong hai là đáp ứng hay ngắt kết nối
  • Presentaion: Phụ thuộc vào loại UI mình chạy
  • Chạy một rich client có nghĩa là chạy presentation trên client.
           – Chạy Web interface có nghĩa là chạy trên server.
           – Lý do chính để dùng một rich-client presentation là có một vài task phức tap cho user, có thể dùng được application, cần nhiều hơn Web GUI.
  • Nên thử giữ toàn bộ code trên một single process, hoặc là trên một node hay là copy trên một vài node trong một cluster.
           – Đừng thử phân chia layer trong process riêng biệt trừ khi tuyệt đối có. Chú ý tới cả hai việc là performance và thêm những phần phức tạp.

5. Tổng kết
Cho tới hiện tại hệ thông công nghệ thông tin đã phát triển rất nhanh các hệ thông lớn đã và đang ra đời đỏi hỏi cần phải dùng layer một cách nhuần nhuyễn hơn bao giờ hết. Qua bài viết này này hy vọng mọi người sẽ thiết kế hệ thông của mình tối ưu, dễ quản lý và bảo mật hơn.