Chúng tôi hiện đang làm việc trên sản phẩm / dự án mới của chúng tôi, đây là một ứng dụng máy chủ-máy khách hướng đến một số doanh nghiệp công nghiệp / dịch vụ cụ thể. Chúng tôi đang xây dựng một máy chủ (Chỉ ngôn ngữ C và Linux) đang chạy một giao thức tùy chỉnh trên đầu TCP với giao diện người dùng Java. Chúng tôi có khoảng 20% trong công việc mã hóa và phải đối mặt với một tình huống phải lựa chọn giữa Kiến trúc hạt nhân Micro hoặc Monolithic.
Tôi biết rằng Micro so với Monolithic thường liên quan đến kiến trúc kernel, nhưng chúng tôi đặc biệt nói về các máy chủ.
Tại sao một máy chủ tùy chỉnh và không phải là một cái gì đó hiện có?
- Nhu cầu UI của chúng tôi rất quan trọng và rất năng động, do đó, các giải pháp dựa trên trình duyệt Web / Web là không phù hợp.
- Việc xử lý thống kê có ý nghĩa ở cuối máy khách và do đó, một lần nữa, các trình duyệt đã giúp ích rất ít. (Tất nhiên, chúng tôi có thể thực hiện xử lý ở cuối máy chủ và truyền dữ liệu đã xử lý cho máy khách nhưng điều đó sẽ ám chỉ rất nhiều tải trên máy chủ và gây lãng phí tài nguyên của máy khách).
- Ngoài ra, với ít nhất ba công nghệ (JS / HTML / CSS) để quản lý ngay cả một sự kiện duy nhất làm cho toàn bộ trải nghiệm như quét nhà giữa cơn bão sa mạc - bạn quét nó n lần, bụi tích tụ n + 1 lần.
Còn máy chủ Micro và Monolithic thì sao? Cậu đang nói gì thế?
Xem xét các yêu cầu khách hàng (giả định) sau đây:
request-id: 123
request-service: HistoricDataSets
request-message: Fetch all records upto the year 2010
Khi nhận được yêu cầu như vậy, thông thường, một máy chủ sẽ thực hiện (chúng tôi đang bỏ qua các kỹ thuật tương tranh như luồng và nhánh để đơn giản):
- Phân tích chuỗi yêu cầu
- Xác định hành động (Tìm nạp
HistoricDataSets LIMIT Year (2010)
trong trường hợp của chúng tôi) - Tương tác với lớp kiên trì (Oracle, giả sử, trong ví dụ của chúng tôi) và lấy dữ liệu.
Định dạng dữ liệu theo giao thức. Ví dụ:
answer-id: 123
thành công:
phản hồi đúng văn bản: DataSetsTrả lời khách hàng với dữ liệu được định dạng như vậy.
Đây là những gì chúng ta đang gọi là Máy chủ nguyên khối (gần giống với hạt nhân nguyên khối trong đó tất cả các hoạt động của hệ điều hành được thực hiện trong không gian hạt nhân).
Hãy xem xét lại cùng một yêu cầu, khi nhận, lần này máy chủ (chúng tôi chỉ giả sử bộ nhớ được chia sẻ là IPC, một lần nữa cho đơn giản):
- Đưa yêu cầu vào bộ nhớ dùng chung cho
Parser
quá trình - Các
Parser
phân tích cú pháp chuỗi, xác định nhiệm vụ và chỉ đạoExecutioner
quá trình để thực hiện các nhiệm vụ. - Sau
Executioner
đó chuyển dữ liệu đểFomatter
xử lý, sau khi định dạng dữ liệu thành chuỗi giao thức, sẽ trả về máy chủ. - Máy chủ gửi nó đến máy khách (phản hồi).
Tất nhiên, thay vì Parser
, Executioner
và Formatter
nó có thể là một quá trình đơn lẻ nhưng riêng biệt. Đây là những gì chúng ta đang gọi một Máy chủ Micro (gần giống với một hạt nhân siêu nhỏ chỉ cần tối thiểu là bắt buộc). Máy chủ thực sự chỉ lắng nghe và phản hồi trong khi tất cả các bước được xử lý bởi các quy trình khác nhau.
Chọn cái nào? Chúng tôi đang bối rối! Trong khi các máy chủ nguyên khối được thử và kiểm tra (hầu hết các Máy chủ HTTP-Web?) Và dễ lập trình hơn và có thể xử lý đồng thời khá tốt. Các máy chủ siêu nhỏ, prima facie, dường như nhanh chóng và phù hợp với nguyên tắc UNIX của một chương trình để thực hiện một nhiệm vụ, nhưng cũng rất phức tạp để phát triển, đặc biệt. giữ đồng thời trong tâm trí.
Câu hỏi
- (Có thể là gì) có thể là ưu và nhược điểm của từng phương pháp?
- Khi nào sử dụng? (Nó cũng có thể được hiểu là một câu hỏi chung: Khi nào nên sử dụng IPC?)
- Nếu Micro kernel được chọn, thì những chức năng nào cần phải là một phần của máy chủ lõi và những gì không?
Câu hỏi tương tự / liên quan
- Nguy hiểm của ứng dụng nguyên khối khổng lồ
- Trình duyệt nhúng ngoài Vs (Tiếp tuyến)
- Lời khuyên cho việc chuyển đổi ứng dụng nguyên khối thành đa luồng (Tiếp tuyến)
Một số thông tin có thể hữu ích:
- Khách hàng tiềm năng của chúng tôi có thể được chia thành hai loại:
- Lớn: Khoảng 1.700 - 2.000 yêu cầu mỗi phút
- Nhỏ: Khoảng 650 - 700 yêu cầu mỗi phút
- Khối lượng dữ liệu trên mỗi chu kỳ yêu cầu (yêu cầu và phản hồi tiếp theo) có thể được giả định là được phân phối bình thường với giá trị trung bình ~ 1,20 MB và trường hợp xấu hơn khoảng 250-300 MB.
- Khái niệm sản phẩm tương đối mới nhưng có khả năng tác động đến các hoạt động cốt lõi, do đó chúng tôi hy vọng ngân sách của khách hàng sẽ linh hoạt chỉ đăng một độ trễ nhất định (9-12 tháng), điều này giới hạn số lượng phần cứng mà khách hàng sẽ sẵn sàng để cam kết đặc biệt. Những cái nhỏ.
- Mỗi khách hàng sẽ có ngăn xếp máy khách-máy chủ của riêng mình. Máy chủ sẽ chạy trên phần cứng của khách hàng được quản lý bởi nhóm của khách hàng, trong khi khách hàng sẽ được triển khai trên máy của các nhân viên chức năng
- Cập nhật từ xa cho cả ứng dụng khách và máy chủ là bắt buộc
- Các
PUSH
dịch vụ thời gian thực của máy chủ có thể 'rất mong muốn' nếu sản phẩm nhấp!