3.0

Xem bằng tiếng Anh

3.0 Giới thiệu Phần 3: Hệ thống

Kiến trúc là tập hợp các quyết định đắt đỏ để đảo ngược. Bạn chia một hệ thống thành các phần như thế nào? Các phần đó giao tiếp với nhau ra sao? Dữ liệu được mô hình hóa thế nào? Và toàn bộ hệ thống hành xử thế nào dưới tải và dưới thất bại? Phần 3 nói về việc đưa ra những quyết định đó một cách có chủ đích. Với một đội nhỏ, kiến trúc có thể sống trong vài cái đầu và tiến hóa dần theo thời gian. Trong một tổ chức lớn (hàng trăm kỹ sư, hàng chục đội, các hệ thống sẽ tồn tại lâu hơn sự nghiệp của những người xây dựng chúng), kiến trúc trở thành thứ giữ cho mọi người được điều phối. Khi nó rõ ràng, các đội di chuyển độc lập mà không va chạm. Khi nó mơ hồ, mỗi phụ thuộc liên đội biến thành một cuộc thương lượng, và mỗi sự cố biến thành một dự án khảo cổ.

Rủi ro cao nhất nằm ở doanh nghiệp và chính phủ. Một công cụ thuế, một nền tảng trợ cấp, một hồ sơ sức khỏe quốc gia, hay sổ cái lõi của một ngân hàng đều sống lâu, chịu quy định chặt chẽ, được chia sẻ giữa các bộ phận và chịu trách nhiệm trước công chúng. Những quyết định bạn đưa ra hôm nay về độ liên kết, quyền sở hữu dữ liệu và các thuộc tính chất lượng sẽ ràng buộc những gì khả thi trong một thập kỷ hoặc hơn. Cơ quan quản lý và kiểm toán viên ngày càng mong đợi kiến trúc có tài liệu, có thể bảo vệ, với bằng chứng thực rằng độ tin cậy, bảo mật, riêng tư và độ bền được thiết kế vào, không phải gắn thêm sau. Những thất bại lên tiêu đề báo là thất bại kiến trúc: cổng thông tin sụp đổ vào ngày ra mắt, hệ thống nộp hồ sơ hết thời gian chờ vào hạn chót, những cuộc di chuyển làm mất hoặc đếm đôi bản ghi.

Phần này bắt đầu với những nguyên lý cơ bản bền vững, đi qua các lựa chọn cấu trúc cụ thể, rồi vào thực tế của phân tán, dữ liệu và quy mô, và kết thúc với vấn đề khó nhất mà hầu hết các tổ chức lớn thực sự đối mặt: hiện đại hóa các hệ thống họ đang vận hành. Sợi chỉ kết nối tất cả: kiến trúc tốt là một chuỗi các đánh đổi có ý thức, không phải một mặc định hợp thời.

Các chương trong phần này

  • 3.1 Nền tảng kiến trúc. Những công cụ bền vững sống sót qua mốt công nghệ: thuộc tính chất lượng (các “-ility”), yêu cầu có ý nghĩa kiến trúc, hàm thích nghi (các bài kiểm thử tự động bảo vệ một chất lượng kiến trúc đã chọn) và kiến trúc tiến hóa, tài liệu nhẹ với mô hình C4 (các sơ đồ kiến trúc lồng nhau ở bốn mức phóng to) và arc42 (một biểu mẫu tài liệu kiến trúc), và phân tích đánh đổi có cấu trúc.

  • 3.2 Phong cách và mẫu kiến trúc. Một khảo sát các hình dạng hệ thống chính, từ khối đơn qua vi dịch vụ, kiến trúc hướng sự kiện với CQRS (Phân tách Trách nhiệm Lệnh và Truy vấn, tách mô hình đọc khỏi mô hình ghi) và event sourcing (lưu trạng thái dưới dạng nhật ký chỉ-thêm các sự kiện), lưới dịch vụ (một tầng hạ tầng chuyên dụng cho giao tiếp dịch vụ-với-dịch vụ) và cổng, serverless, và kiến trúc lục giác và sạch, với hướng dẫn khi nào mỗi cái phù hợp, được đóng khung bởi Định luật Conway (các hệ thống có xu hướng phản chiếu cấu trúc giao tiếp của tổ chức xây dựng chúng).

  • 3.3 Hệ thống phân tán. Những sự thật khắc nghiệt xuất hiện ngay khoảnh khắc bạn vượt qua ranh giới mạng (mạng không đáng tin cậy, thất bại một phần, không có đồng hồ chung), và các biện pháp phòng thủ chuẩn: suy luận về nhất quán, tính lũy đẳng (làm cho một thao tác an toàn để lặp lại), thử lại với độ lùi, bộ ngắt mạch (dừng gọi một phụ thuộc đang thất bại), saga (chuỗi các giao dịch cục bộ với các bước hoàn tác bù trừ), và khả năng quan sát phân tán.

  • 3.4 Kiến trúc và lưu trữ dữ liệu. Dữ liệu được mô hình hóa, lưu trữ, giữ nhất quán và phục vụ nhanh ở quy mô lớn thế nào: các mô hình lưu trữ chính và khi nào dùng từng loại, lưu trữ đa ngữ (dùng nhiều kho dữ liệu chuyên biệt trong một hệ thống), tiến hóa lược đồ và di chuyển, bộ nhớ đệm và CDN (mạng phân phối nội dung), và giao dịch cùng đồng thời dưới tải.

  • 3.5 Khả năng mở rộng, hiệu năng và khả năng phục hồi. Ba chất lượng riêng biệt được thiết kế vào thay vì bổ sung sau: mở rộng theo chiều ngang và dọc, tính phi trạng thái và phân mảnh (chia dữ liệu qua các máy theo một khóa), cân bằng tải và tự động mở rộng, ngân sách hiệu năng, các mẫu chịu lỗi và kỹ thuật hỗn loạn, và khôi phục thảm họa đa vùng được đóng khung bởi RTO (mục tiêu thời gian khôi phục) và RPO (mục tiêu điểm khôi phục).

  • 3.6 Hiện đại hóa hệ thống cũ. Các mẫu tăng dần thực sự hiệu quả, cây đa bóp nghẹt (phát triển một hệ thống mới quanh hệ thống cũ cho đến khi hệ thống cũ có thể được loại bỏ) và phân nhánh bằng trừu tượng (thay thế một thành phần đằng sau một giao diện trên dòng phát triển chính), cộng với đánh giá rủi ro hệ thống cũ, quản lý máy tính lớn và COBOL (Ngôn ngữ Hướng Kinh doanh Thông dụng), di chuyển dữ liệu và chạy song song, và cách cưỡng lại cám dỗ viết lại lớn vốn tạo ra những thất bại đắt đỏ nhất của lĩnh vực.

  • 3.7 Bảo trì phần mềm. Giai đoạn chi phối của vòng đời phần mềm: bảo trì sửa lỗi, thích nghi, hoàn thiện và phòng ngừa, hiểu chương trình và tái kỹ thuật, và thiết kế cho khả năng bảo trì để các hệ thống tồn tại lâu vẫn đủ rẻ để thay đổi.

  • 3.8 Khả năng tương tác và tiêu chuẩn mở. Thiết kế các hệ thống tương tác thông qua tiêu chuẩn mở thay vì các tích hợp riêng: khả năng tương tác kỹ thuật, cú pháp và ngữ nghĩa, các tiêu chuẩn miền như FHIR trong chăm sóc sức khỏe, và chi phí của việc bị khóa chặt vào sở hữu độc quyền.

  • 3.9 Kỹ thuật hệ thống. Kỹ thuật các hệ thống phức tạp từ đầu đến cuối, thường kết hợp phần mềm, phần cứng, con người và quy trình: vòng đời, phân bổ và truy vết yêu cầu, giao diện, tích hợp, và kiểm chứng cùng xác nhận.

  • 3.10 Hệ thống nhúng và thời gian thực. Phần mềm cho các thiết bị dưới ràng buộc chặt chẽ: hành vi thời gian thực và tính xác định, một RTOS hoặc phần mềm điều khiển thuần, bộ nhớ và năng lượng hạn chế, tương tác phần cứng, và các tiêu chuẩn quan trọng về an toàn.

  • 3.11 Kiến trúc đám mây. Thiết kế cho đám mây thay vì nhấc-và-đặt một trung tâm dữ liệu: các mô hình dịch vụ và serverless, vùng và vùng sẵn sàng như các miền thất bại, mô hình trách nhiệm chia sẻ, các đánh đổi về dịch vụ được quản lý và bị khóa chặt, đa đám mây và lai khi chúng xứng đáng với độ phức tạp, và thiết kế có nhận thức về chi phí, được kiến trúc tốt.

  • 3.12 Kiến trúc hướng sự kiện và nhắn tin. Xây dựng các hệ thống giao tiếp bằng cách tạo và phản ứng với các sự kiện: hàng đợi so với luồng bền vững, biên đạo so với điều phối, event sourcing và CQRS ở nơi chúng xứng đáng, saga cho giao dịch phân tán, đảm bảo giao nhận và tính lũy đẳng, và các mẫu giữ cho luồng bất đồng bộ đáng tin cậy.

  • 3.13 Mạng và kết nối. Phần mạng mà một kỹ sư ứng dụng thực sự phải đối mặt: DNS, TCP và sự tiến hóa của HTTP, kết thúc TLS, cân bằng tải và proxy ngược, phân phối nội dung và rìa, khám phá dịch vụ và lưới dịch vụ, và các thời gian chờ, thử lại, bộ ngắt mạch khiến sự không đáng tin cậy của mạng có thể sống sót được.

  • 3.14 Đa người thuê và kiến trúc SaaS. Phục vụ nhiều khách hàng từ một thể hiện phần mềm mà không để họ thấy nhau hoặc làm đói nhau: phổ cô lập so với hiệu quả, phân vùng dữ liệu, hạn ngạch theo từng người thuê chống lại hàng xóm ồn ào, vòng đời người thuê, và phân bổ chi phí.

  • 3.15 Bộ nhớ đệm và phân phối nội dung. Đổi một chút độ cũ lấy lợi ích lớn về độ trễ, tải và chi phí qua phân cấp bộ nhớ đệm (máy khách, rìa và CDN, proxy ngược, ứng dụng và kho dữ liệu), trong khi coi vô hiệu hóa bộ nhớ đệm và bảo vệ chống giẫm đạp là thiết kế hạng nhất.

  • 3.16 Cổng API và lưới dịch vụ. Xử lý lưu lượng bắc-nam tại một cổng API (định tuyến, xác thực, giới hạn tốc độ, tổng hợp) và lưu lượng đông-tây qua một lưới dịch vụ (TLS tương hỗ, chuyển dịch lưu lượng, thử lại, khả năng quan sát), và quyết định khi nào một lưới xứng đáng với độ phức tạp của nó.

  • 3.17 Tìm kiếm và truy xuất thông tin. Coi tìm kiếm là một hệ thống hạng nhất, từ chỉ mục đảo ngược và xếp hạng độ liên quan đến hiểu truy vấn, phân diện, và truy xuất vector cùng lai, với đánh giá độ liên quan thực sự thay vì đoán mò.

Các chương này liên hệ với nhau như thế nào

Các chương xây dựng lên nhau theo thứ tự. Chương 3.1 cho bạn từ vựng (thuộc tính chất lượng và phân tích đánh đổi) mà mọi chương sau đều dùng; các “-ility” nó gọi tên chính xác là những gì các chương 3.4 và 3.5 làm cho cụ thể. Chương 3.2 biến những nguyên lý cơ bản đó thành các lựa chọn cấu trúc, và các phong cách phân tán hơn mà nó ủng hộ (vi dịch vụ, hướng sự kiện, lưới dịch vụ) mang theo các chi phí mà chương 3.3 dạy bạn quản lý. Các chương 3.3, 3.4 và 3.5 dựa nặng vào nhau: phân tán buộc phải có các quyết định về nhất quán và độ bền của kiến trúc dữ liệu, và cùng nhau phân tán và dữ liệu định hình khả năng mở rộng và phục hồi bạn thực sự có thể đạt tới. Chương 3.6 khép vòng, vì hầu hết các tổ chức lớn không xây trên một trang giấy trắng: họ đang tiến hóa các hệ thống ghi nhận ràng buộc mọi lựa chọn mà các chương trước mô tả.

Phần 3 cũng với ra bên ngoài. Chương 3.2 dựa vào các nguyên tắc thiết kế và Thiết kế hướng miền của chương 2.2 để tìm ranh giới dịch vụ tốt. Các kỷ luật vận hành giữ cho những hệ thống này chạy nằm trong Phần 9: kỹ thuật độ tin cậy hệ thống (chương 9.1) và khả năng quan sát (chương 9.2) là nơi khả năng chịu lỗi của kiến trúc được chứng minh trên môi trường thực. Các thuộc tính bảo mật và riêng tư mà cơ quan quản lý đòi hỏi được thiết kế ở đây nhưng chi tiết trong Phần 4, và các thực hành nền tảng cùng phân phối trong Phần 8 quyết định liệu một kiến trúc có thực sự được nhiều đội phát hành và vận hành cùng lúc hay không.