Концепция интеллектуальной системы использования вычислительных мощностей Internet
С.Крылов, Нижегородский Технический Университет
В настоящее время существует тенденция использования Internet в основном лишь в качестве информационной системы. Поэтому закономерно, что почти все современные сервисы Internet нацелены на работу исключительно с документами и файлами. Электронная почта, телеконференции, ftp - вот далеко неполный перечень популярнейших сервисов, основное предназначение которых поставка пользователю информации от удаленных источников. World Wide Web сейчас также, главным образом, служит для обращения к информационным ресурсам, и подавляющее большинство из 30000 известных Web-серверов не может предложить ничего иного, кроме гипермедийной Home Page, по сути являющейся интерактивной книгой.
В тоже время фактически неиспользуемыми остаются вычислительные мощности Internet. Только немногие, посвященные в адреса, пароли, методы доступа, имеют возможность соединяться с высокопроизводительными суперкомпьютерами и решать на них свои задачи. При этом говорить о каком-либо интуитивном пользовательском интерфейсе - бесполезно: каждый сервер живет по своим собственным законам. Кроме того, суперкомпьютеры чаще всего и не подозревают о существовании друг друга, а потому одни из них денно и нощно заняты работой, другие же простаивают часами в дежурном режиме, хотя могли бы, взяв часть задач на себя, способствовать скорейшему удовлетворению пользователей.
В такой ситуации появление некоторой интеллектуальной системы использования вычислительных мощностей Internet просто необходимо. Но что она должна из себя представлять? Каковы основные критерии ее построения? Как пользователь будет c ней работать? Ответы на эти вопросы не могут быть однозначными. Поэтому не претендуя на истину, свой подход к решению проблемы я постараюсь изложить ниже.
Прежде всего, следует отметить, что предлагаемая система не может представлять из себя монокомпьютерного ПО. В любом случае будет как минимум две принципиально различных части: программа-клиент и программа-сервер. Возможно, обе части окажутся установлены на один компьютер, но это лишь означает, что данную машину станет возможно использовать и как терминал, и как суперкомпьютер. В принципе реально создание ПО, выполняющего одновременно функции клиента и сервера. Однако, мне кажется, такой подход не рационален и все равно произведет на свет некий симбиоз тех же клиента и сервера под одной крышкой. Таким образом, первый критерий построения интеллектуальной системы использования вычислительных мощностей сформулирован: работа по технологии клиент-сервер.
Основной задачей клиента будет являться взаимодействие с пользователем, выяснение его потребностей и желаний, а затем поиск в Internet ресурсов для решения поставленной задачи. При этом программа-клиент должна иметь возможность взаимодействия с наиболее популярными в настоящее время броузерами WWW (например, Netscape Navigator, Mosaic). Это принципиально важно, поскольку необходимость сделать некоторые вычисления на удаленном компьютере, не должна принуждать пользователя к отказу от привычного средства навигации в Internet. По моему мнению, только единообразие сетевых операций способно сделать работу в Internet легкой и вседоступной.
Главными обязанностями программы-сервера станут расшифровка запроса клиента, оценка трудоемкости работы, а затем выполнение ее или переадресовка соседу, способному справится с задачей в более короткий промежуток времени. Плюс к этому, возможно, сервер должен будет содержать справочную систему по всем доступным вычис-лительным мощностям Internet, чтобы в момент определения места для размещения заказа, клиент мог обратиться к ближайшему суперкомпьютеру и получить всю интересующую информацию.
Второй критерий построения описываемой системы заключается, с моей точки зрения, в применении объектно-ориентированного подхода. О преимуществах такого подхода долго распространятся не буду, скажу лишь, что объектно-ориентированные системы в настоящее время стали de facto стандартом в области проектирования сложных систем. Более подробно на эту тему можно прочитать в классическом труде Гради Буча "Объектно-ориентированное проектирование".
Относительно же того, как данный подход может быть применен в нашем конкретном случае, пока реально сказать лишь несколько общих слов. Во-первых, я уверен, что обмен информацией между клиентской и серверной частями будет представлять собой обмен объектами. Вопрос о структуре таких объектов, вероятно, еще долго останется открытым, но то, что клиент станет генерировать объекты-запросы, а сервер с ними работать и потом возвращать объекты-ответы - несомненно. Во-вторых, скорее всего, при создании системы будет использован некоторый специализированный язык для написания сетевых приложений Internet, скажем Java. А он полностью объектно-ориентированный. Поэтому конструкции программы-клиента и программы-сервера тоже будут полностью объектно-ориентированными.
В качестве третьего критерия, мне видится требование максимально возможной простоты пользовательского интерфейса. То есть интерфейс должен быть интуитивным и если ожидать изучения со стороны пользователя, то минимального и , главное, нетрудоемкого. Как же я представляю себе такой интерфейс?
Прежде всего, он должен иметь двоякую суть, т.е. предоставлять пользователю два способа работы с системой. Первый интерфейс - скрытый, фактически ничего кроме панелей настройки визуально не представляющий. Основная его задача обеспечивать по запросу пользователя обработку данных для локальных приложений на удаленных серверах. На практике это означает, что если оказывается быстрее и экономичнее воспользоваться вычислительными мощностями Internet, то так и происходит. Скажем, рендирование некоторого сложного 3D изображения проводится не на PC за сутки, а на Selicon Graphics за несколько минут. Первый интерфейс не заставляет пользователя изучать какие-либо новые способы ввода данных, взаимодействия с сетью и т.п. Он чрезвычайно прост в освоении, хотя и накладывает определенные ограничения на формулировку заданий, поскольку те плотно связаны с конкретными приложениями.
Второй интерфейс должен служить для расширения возможностей применения вычислительных мощностей Internet. С его помощью пользователь сможет запросить проведение сколь угодно изощренных расчетов и получить ответ в удобной для себя форме. Здесь я позволю себе высказать одно предложение по организации такого интерфейса.
Известно, что для проведения вычислений нужны данные и оператор(или функция), который требуется к ним применить, а результат появляется в виде некоторого множества значений, т.е. опять же данных. Отсюда вытекает, что для упрощения процедур работы с вычислительными задачами, требуется визуализировать эти две основные составляющие: данные и оператор. Исходный объект данных вполне можно представить на экране компьютера иконкой, оператор - стрелкой ведущей к другой иконке, представляющей собой результат. Ничто не мешает применить на результат другой оператор-стрелку, получив в конце концов следующий результат. Этот процесс можно продолжать, строя таким образом граф, узлами которого являются данные (исходные, промежуточные, результирующие), а ребрами - операторы. При этом из каждого узла может исходить не единственное ребро, что означает, применение на одни и те же данные нескольких операторов. В этом случае количество результирующих множеств равно количеству ветвлений +1. Поставка исходных данных лежит исключительно на пользователе, программа-клиент лишь должна оказать посильную помощь при помещении их в объект-данные. Операторы большей частью будут входить в библиотеку программы-клиента и представлять собой стандартные математические функции. С другой стороны не обойтись без специального конструктора операторов, позволяющего пользователю изготавливать какие-угодно функции. Результирующее множество будет храниться в некотором универсальном формате, из которого оно сможет быть легко преобразовано для каких-либо утилитарных нужд. Так, например, в систему должно быть встроено устройство визуализации результата, поскольку построение графика, чаще всего то, что может дать лучшее представление о полученном решении.
Таким образом, вот три основных критерия построения интеллектуальной системы использования вычислительных мощностей: работа по технологии клиент/сервер, объектно-ориентированный подход к проектированию и требование интуитивности интерфейса. Возможно, при последующей более глубокой разработке темы, удастся сформулировать еще несколько критериев, а пока я хочу перейти к другому важному аспекту разработки системы, к оценке уровня необходимой интеллектуальности данного ПО.
Что должна уметь делать программа-клиент? Прежде всего понимать, чего хочет пользователь и помогать ему формулировать свои требования. Для этого ей необходимо располагать аппаратом проверки корректности постановки задачи и средством информирования об ошибках и неоднозначностях. Возможно, программа-клиент должна самостоятельно исправлять наиболее типичные ошибки и давать пользователю ненавязчивые советы по ходу работы. Во-вторых, у программы-клиента необходимо наличие системы оценки трудоемкости выполнения вычислений. Ведь, может быть, вовсе и не нужно подключение удаленных суперкомпьютеров, а задача прекрасно решается и локальными средствами. В-третьих, программа-клиент должна уметь ориентироваться в Internet и понимать куда и с какой задачей обращаться. Скажем, не пытаться разместить комплекс вычислений с плавающей точкой на компьютере, который не оптимизирован для выполнения именно такого рода расчетов.
Программа-сервер тоже должна быть достаточно интеллектуальной. И поскольку одной из ее задач является проблема распределенных вычислений, то именно она обязана принимать решение о переадресации объекта-запроса. Что при этом будет учитываться, сейчас сказать сложно, но вероятнее всего значительное влияние окажут длина очереди запросов, пропускная способность каналов связи, наличие свободных от работы суперкомпьютеров и т.п. Вторая грань интеллекта программы-сервера касается расчета оптимальности загрузки. Необходимость этого продиктована требованием по расстановки приоритетов в решении задач. Например, если вычисление 1 может быть сделано за 20 минут, а вычисление 2 за минуту, то может быть временно прервать обработку вычисления 1, провести вычисление 2, а потом закончить первое?
В заключение хочется сказать несколько слов о перспективах использования вычислительных мощностей Internet. На мой взгляд они огромные. Прежде всего это связано с наметившейся в настоящее время тенденцией создания портативных дешевых сетевых компьютеров. Ведь сейчас все возвращаются к идее централизованных данных и приложений, исполняемых дистанционно машинами, гораздо больше похожими на интеллектуальные терминалы. То есть появление механизма взаимодействия между суперкомпьютером и удаленным пользователем просто необходимо. Моя концепция как раз касается основных принципов такого взаимодействия, а потому может быть использована и при создании ПО для интеллектуальных терминалов будущего.