2. Проектирование архитектуры
2
Варианты использования системы
Требования по доступности
Требования по производительности
Требования по модифицируемости
Требования по безопасности
Требования по удобству тестирования
Требования по usability
Разделение системы на модули
Потоки данных между модулями
Интерфейсы между модулями
Требования к оборудованию
Размещение модулей на оборудовании
Требования к модулям
Проектирование
архитектуры
13. Пример на C++: Object
void Object::do_something()
{
mt19937 generator((unsigned int)std::chrono::system_clock::now().time_since_epoch().count());
long a = generator() % 10;
cout << "Now:" << a << endl;
if(a==5) throw new exception();
this_thread::sleep_for(chrono::seconds(1));
}
14. Пример на C++: Observer
void Observer::work(Object *obj){
try{
while(true) obj->do_something();
}catch(...) {}
}
int main(int argc, char *argv[]){
Object obj;
Observer observer;
observer.work(&obj);
return 0;
}
19. Восстановление работы компонент
после сбоя
Теневые операции
Некоторое время сервера работают параллельно, для проверки работоспособности.
Синхронизация состояния
Полностью восстанавливаются данные «упавшего сервера» на момент сбоя (если есть
возможность).
Откат к чекпоинам
Восстанавливаются данные на определенный момент «чекпоинт», про который известно
что данные были гарантированно целые.
19
20. 20
Предотвращение сбоя
Прекращение обслуживания
Вывод из строя компонента до того как он может сбоить. Например,
перезагрузка для того что бы не было утечки памяти.
Транзакции
Процесс-монитор.
Процесс-монитор наблюдает рабочие процессы, и в случае обнаружения
сбоя перезапускает сбойные процессы.