Aktualnie pracujemy nad naszym nowym produktem / projektem, jest to aplikacja klient-serwer skierowana do określonych przedsiębiorstw przemysłowych / usługowych. Budujemy serwer (tylko język C i Linux) z niestandardowym protokołem nad TCP z interfejsem Java. Jesteśmy zaangażowani w około 20% prac związanych z kodowaniem i mamy do czynienia z sytuacją, w której musimy wybierać pomiędzy Micro lub Monolityczną architekturą jądra.
Wiem, że Micro vs. Monolithic ma zwykle związek z architekturą jądra, ale mówimy konkretnie o serwerach.
Dlaczego serwer niestandardowy, a nie coś istniejącego?
- Nasze potrzeby dotyczące interfejsu użytkownika są znaczące i bardzo dynamiczne, dlatego rozwiązania oparte na przeglądarce internetowej / przeglądarce internetowej nie były odpowiednie.
- Przetwarzanie danych statystycznych jest znaczące po stronie klienta, dlatego też przeglądarki niewiele pomogły. (Oczywiście moglibyśmy przetwarzać dane po stronie serwera i przekazywać przetworzone dane klientowi, ale oznaczałoby to duże obciążenie serwera i marnowanie zasobów klienta).
- Co więcej, dzięki co najmniej trzem technologiom (JS / HTML / CSS) do zarządzania nawet pojedynczym wydarzeniem sprawia, że całe doświadczenie jak zamiatanie domu w środku burzy pustynnej - zamiatasz go n-razy, kurz gromadzi się n + 1 razy.
Co z serwerem Micro i Monolithic? Co ty mówisz?
Rozważ następujące (hipotetyczne) żądanie klienta:
request-id: 123
request-service: HistoricDataSets
request-message: Fetch all records upto the year 2010
Po otrzymaniu takiego żądania serwer zazwyczaj to robi (ignorujemy techniki współbieżności, takie jak wątek i widelce dla uproszczenia):
- Analizuj ciąg żądania
- Zidentyfikuj akcję (pobierz
HistoricDataSets LIMIT Year (2010)
w naszym przypadku) - Wejdź w interakcję z warstwą utrwalającą (np. Oracle, powiedzmy w naszym przykładzie) i pobierz dane.
Sformatuj dane zgodnie z protokołem. Dawny:
id odpowiedzi: 123
sukces: prawda
tekst odpowiedzi: DataSetsOdpowiedz klientowi z tak sformatowanymi danymi.
Nazywamy to Monolitycznym Serwerem (podobnie jak monolityczne jądro, w którym wszystkie działania systemu operacyjnego są wykonywane w przestrzeni jądra).
Ponownie rozważ to samo żądanie, tym razem po otrzymaniu serwera (przyjęliśmy tylko pamięć współdzieloną jako IPC, ponownie dla uproszczenia):
- Umieszcza żądanie w pamięci współużytkowanej dla
Parser
procesu Parser
Analizuje ciąg, określa zadania i kierujeExecutioner
proces do wykonania zadania.Executioner
Następnie przekazuje dane doFomatter
procesu, który po formatowania danych w ciąg protokół wraca do serwera.- Serwer wysyła go do klienta (odpowiedź).
Oczywiście, zamiast Parser
, Executioner
i Formatter
to mogło być jedno ale odrębny proces. Nazywamy to Micro Server (podobnie jak mikro-jądro, które wymaga minimalnego minimum). Serwer skutecznie nasłuchuje i odpowiada, podczas gdy wszystkie kroki są wykonywane przez różne procesy.
Który wybrać? Jesteśmy zmieszani! Podczas gdy serwery monolityczne są wypróbowywane i testowane (większość serwerów HTTP?) I są łatwiejsze do zaprogramowania i całkiem dobrze radzą sobie z współbieżnością. Mikro serwery, na pierwszy rzut oka, wydają się szybkie i zgodne z zasadą UNIX jednego programu do wykonywania jednego zadania, ale są również skomplikowane w rozwoju, szczególnie. mając na uwadze współbieżność.
Pytanie (pytania)
- Jakie są (być może) zalety i wady każdego podejścia?
- Kiedy użyć którego? (Można to również zinterpretować jako ogólne pytanie: kiedy używać IPC?)
- Jeśli wybierzesz Mikro-jądro, jakie funkcje muszą być częścią rdzenia-serwera, a co nie?
Podobne / pokrewne pytania
- Niebezpieczeństwa związane z ogromnym monolitycznym zastosowaniem
- Zewnętrzna wbudowana przeglądarka Vs (styczna)
- Porady dotyczące konwertowania aplikacji monolitycznej na wielowątkową (styczną)
Niektóre informacje, które mogą być pomocne:
- Nasi potencjalni klienci można podzielić na dwie kategorie:
- Duże: około 1700 - 2000 żądań na minutę
- Mały: około 650 - 700 żądań na minutę
- Można założyć, że objętość danych na cykl żądań (żądanie i kolejna odpowiedź) jest normalnie dystrybuowana ze średnią ~ 1,20 MB, a co gorsza około 250-300 MB.
- Koncepcja produktu jest stosunkowo nowa, ale może wpływać na podstawowe operacje, dlatego oczekujemy, że budżety klientów będą elastyczne dopiero po pewnym opóźnieniu (9-12 miesięcy) po wdrożeniu, co ogranicza ilość sprzętu, na którą klient będzie skłonny popełnić esp. te małe.
- Każdy klient będzie miał swój własny stos klient-serwer. Serwer będzie działał na sprzęcie klienta zarządzanym przez zespół klienta, a klienci będą wdrażani na komputerach funkcjonalnych pracowników
- Zdalne aktualizacje aplikacji klienckich i serwerowych są koniecznością
PUSH
Usługi serwera w czasie rzeczywistym mogą być „wysoce” pożądane, jeśli produkt kliknie!