Дипломная работа студента 5 курса
Вид материала | Диплом |
Содержание3.2.2 Серверная часть Оптимизация очереди выполнения задач Выполнение задач на сервере Список использованных источников Серверная часть Клиентская часть |
- Дипломная работа студента 5 курса, 2911.84kb.
- Дипломная работа студента, 93.71kb.
- Дипломная работа студента, 1858.08kb.
- Дипломная работа студента 544 группы, 632.07kb.
- Дипломная работа студента 545 группы, 514.7kb.
- Требования к курсовой и выпускной квалификационной (дипломной) работе по специализации, 180.91kb.
- Дипломная работа по истории, 400.74kb.
- Методические указания по выполнению выпускных квалификационных (дипломных), 2098.87kb.
- Дипломная работа мгоу 2001 Арапов, 688.73kb.
- Курсовая работа студента 3 курса стационара, 9.34kb.
3.2.2 Серверная часть
Серверная часть отвечает за выполнением задач на кластере. Она была реализована в виде исполняемого файла и написана на Visual Basic .Net с использованием технологий MySQL. Программа имеет возможности: опроса состояния кластера с внесением этой информации в базу данных, оптимизации очереди выполнения задач и непосредственно выполнение программ на вычислительной кластерной системе.
Оптимизация очереди выполнения задач:
Public Sub Optimizer()
Dim myConnString As String = "Database=information;Data Source=localhost;User Id=tol;Password=tol"
Dim mySelectQuery As String = "SELECT MIN(ID), MAX(ID) FROM files"
Dim myConnection As New MySqlConnection(myConnString)
Dim myCommand As New MySqlCommand(mySelectQuery, myConnection)
myConnection.Open()
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
While myReader.Read()
MinID = myReader.GetInt32(0)
MaxID = myReader.GetInt32(1)
End While
myReader.Close()
Dim id As Integer = MinID
Dim Queue, FierstID, SecondID, Comp1, Comp2 As Integer
Comp1 = 0
Queue = 1
For i As Integer = MinID To MaxID
mySelectQuery = "SELECT Comp FROM files WHEREUPDATE files SET Queue =" & Queue & " WHEREUPDATE files SET Queue =" & Queue & " WHEREDatabase=information;Data Source=localhost;User Id=tol;Password=tol"
While True
For i As Integer = MinID To MaxID
Dim mySelectQuery As String = "SELECT Comp, Process, directory, FileName, Parametrs, Time FROM files WHERE Queue =" & Queue
Dim myConnection As New MySqlConnection(myConnString)
Dim myCommand As New MySqlCommand(mySelectQuery, myConnection)
myConnection.Open()
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
Dim j As Integer = 0
While myReader.Read()
datarecordsint(j, 0) = myReader.GetInt32(0)
datarecordsint(j, 1) = myReader.GetInt32(1)
datarecordsstr(j, 0) = myReader.GetString(2)
datarecordsstr(j, 1) = myReader.GetString(3)
datarecordsstr(j, 2) = myReader.GetString(4)
datarecordsint(j, 2) = myReader.GetInt32(5)
j = j + 1
End While
myReader.Close()
myConnection.Close()
Dim MaxTime As Integer = 0
For k As Integer = 0 To j - 1
MaxTime = Math.Max(MaxTime, datarecordsint(k, 2))
Next k
Dim message As String = ""
For k As Integer = 1 To j
Dim str As String = " -np 2 icpi.exe"
Dim _pi As New ProcessStartInfo("mpiexec", str)
_pi.UseShellExecute = False
_pi.RedirectStandardInput = True
_pi.RedirectStandardOutput = True
_pi.WorkingDirectory = "C:\Inetpub\wwwroot\cluster\usersdirectory\" & datarecordsstr(k - 1, 0) & "\"
Dim _pr As Process = Process.Start(_pi)
Thread.Sleep(MaxTime * 1)
message = _pr.StandardOutput.ReadToEnd
Dim path As String = "C:\Inetpub\wwwroot\cluster\usersdirectory\" & datarecordsstr(k - 1, 0) & "\" & datarecordsstr(k - 1, 1) & ".txt"
Dim fi As FileInfo = New FileInfo(path)
If fi.Exists = False Then
'Create a file to write to.
Dim sw As StreamWriter = fi.CreateText()
sw.WriteLine(message)
sw.Flush()
sw.Close()
End If
Next
Dim myDeleteQuery As String = "DELETE FROM files WHERE Queue =" & Queue
Dim myCommand1 As New MySqlCommand(myDeleteQuery, myConnection)
myConnection.Open()
myCommand1.ExecuteNonQuery()
myConnection.Close()
Queue = Queue + 1
Next
Optimizer()
End While
End Sub
ЗАКЛЮЧЕНИЕ
В ходе проделанной работы были изучены системы удалённого управления кластеров (МВС-1000 (российской разработки) и СКИФ (совместной белорусско-российской разработки)).
Была разработана и реализована система удалённого управления на базе существующего вычислительного кластера. В разработке были задействованы такие технологии как: ASP.Net, Microsoft .Net Framework 1.1, MySQL.
Для самой системы было реализовано безопасность соединения (аутентификация); скачивание, удаление и закачивание файлов на сервер; компилирование исходных кодов, постановка задач на выполнение в очередь, оптимизация очереди и непосредственно запуск задач на существующем кластере.
Данная работа может использоваться в дальнейшем совместно с другими обучающими системами, а так же на других более сложных вычислительных системах.
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
- Современные суперкомпьютеры: состояние и перспективы: ссылка скрыта
- O'Reilly - Programming Visual Basic .NET, Second Edition. ISBN: : 0-596-00438-9, 800 Pages, April 2003
- O'Reilly - Programming Visual Basic .NET, Second Edition. ISBN: : 0-596-00438-9, 800 Pages, April 2003
Приложение А
Исходные коды программ
Серверная часть:
Imports MySql.Data.MySqlClient
Imports System.IO
Imports System.Threading
Public Class Form1
Inherits System.Windows.Forms.Form
Dim MinID, MaxID As Integer
#Region " Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
'Add any initialization after the InitializeComponent() call
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
Friend WithEvents Button1 As System.Windows.Forms.Button
Friend WithEvents Button2 As System.Windows.Forms.Button
Friend WithEvents MainMenu1 As System.Windows.Forms.MainMenu
Friend WithEvents MenuItem1 As System.Windows.Forms.MenuItem
Friend WithEvents MenuItem2 As System.Windows.Forms.MenuItem
Friend WithEvents ContextMenu1 As System.Windows.Forms.ContextMenu
Friend WithEvents MenuItem3 As System.Windows.Forms.MenuItem
Friend WithEvents NotifyIcon1 As System.Windows.Forms.NotifyIcon
Friend WithEvents MenuItem4 As System.Windows.Forms.MenuItem
Friend WithEvents MenuItem5 As System.Windows.Forms.MenuItem
Friend WithEvents Timer1 As System.Windows.Forms.Timer
Me.components = New System.ComponentModel.Container
Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(Form1))
Me.Button1 = New System.Windows.Forms.Button
Me.Button2 = New System.Windows.Forms.Button
Me.MainMenu1 = New System.Windows.Forms.MainMenu
Me.MenuItem1 = New System.Windows.Forms.MenuItem
Me.MenuItem2 = New System.Windows.Forms.MenuItem
Me.ContextMenu1 = New System.Windows.Forms.ContextMenu
Me.MenuItem4 = New System.Windows.Forms.MenuItem
Me.MenuItem5 = New System.Windows.Forms.MenuItem
Me.MenuItem3 = New System.Windows.Forms.MenuItem
Me.NotifyIcon1 = New System.Windows.Forms.NotifyIcon(Me.components)
Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
Me.SuspendLayout()
'
'Button1
'
Me.Button1.Location = New System.Drawing.Point(24, 8)
Me.Button1.Name = "Button1"
Me.Button1.Size = New System.Drawing.Size(80, 24)
Me.Button1.TabIndex = 0
Me.Button1.Text = "Старт"
'
'Button2
'
Me.Button2.Location = New System.Drawing.Point(144, 8)
Me.Button2.Name = "Button2"
Me.Button2.Size = New System.Drawing.Size(80, 24)
Me.Button2.TabIndex = 1
Me.Button2.Text = "Стоп"
'
'MainMenu1
'
Me.MainMenu1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.MenuItem1})
'
'MenuItem1
'
Me.MenuItem1.Index = 0
Me.MenuItem1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.MenuItem2})
Me.MenuItem1.Text = "Файл"
'
'MenuItem2
'
Me.MenuItem2.Index = 0
Me.MenuItem2.Shortcut = System.Windows.Forms.Shortcut.CtrlE
Me.MenuItem2.Text = "Выход"
'
'ContextMenu1
'
Me.ContextMenu1.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.MenuItem4, Me.MenuItem5, Me.MenuItem3})
'
'MenuItem4
'
Me.MenuItem4.Index = 0
Me.MenuItem4.Text = "Старт"
'
'MenuItem5
'
Me.MenuItem5.Index = 1
Me.MenuItem5.Text = "Стоп"
'
'MenuItem3
'
Me.MenuItem3.Index = 2
Me.MenuItem3.Shortcut = System.Windows.Forms.Shortcut.CtrlE
Me.MenuItem3.Text = "Выход"
'
'NotifyIcon1
'
Me.NotifyIcon1.ContextMenu = Me.ContextMenu1
Me.NotifyIcon1.Icon = CType(resources.GetObject("NotifyIcon1.Icon"), System.Drawing.Icon)
Me.NotifyIcon1.Text = "NotifyIcon1"
Me.NotifyIcon1.Visible = True
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(248, 42)
Me.ContextMenu = Me.ContextMenu1
Me.Controls.Add(Me.Button2)
Me.Controls.Add(Me.Button1)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.MaximizeBox = False
Me.Menu = Me.MainMenu1
Me.MinimizeBox = False
Me.Name = "Form1"
Me.Text = "Cluster"
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Optimizer()
GoJobs()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
End Sub
Private Sub MenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem3.Click
Close()
End Sub
Private Sub MenuItem2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem2.Click
Close()
End Sub
Public Sub Optimizer()
Dim myConnString As String = "Database=information;Data Source=localhost;User Id=tol;Password=tol"
Dim mySelectQuery As String = "SELECT MIN(ID), MAX(ID) FROM files"
Dim myConnection As New MySqlConnection(myConnString)
Dim myCommand As New MySqlCommand(mySelectQuery, myConnection)
myConnection.Open()
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
While myReader.Read()
MinID = myReader.GetInt32(0)
MaxID = myReader.GetInt32(1)
End While
myReader.Close()
Dim id As Integer = MinID
Dim Queue, FierstID, SecondID, Comp1, Comp2 As Integer
Comp1 = 0
Queue = 1
For i As Integer = MinID To MaxID
mySelectQuery = "SELECT Comp FROM files WHEREUPDATE files SET Queue =" & Queue & " WHEREUPDATE files SET Queue =" & Queue & " WHEREDatabase=information;Data Source=localhost;User Id=tol;Password=tol"
While True
For i As Integer = MinID To MaxID
Dim mySelectQuery As String = "SELECT Comp, Process, directory, FileName, Parametrs, Time FROM files WHERE Queue =" & Queue
Dim myConnection As New MySqlConnection(myConnString)
Dim myCommand As New MySqlCommand(mySelectQuery, myConnection)
myConnection.Open()
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
Dim j As Integer = 0
While myReader.Read()
datarecordsint(j, 0) = myReader.GetInt32(0)
datarecordsint(j, 1) = myReader.GetInt32(1)
datarecordsstr(j, 0) = myReader.GetString(2)
datarecordsstr(j, 1) = myReader.GetString(3)
datarecordsstr(j, 2) = myReader.GetString(4)
datarecordsint(j, 2) = myReader.GetInt32(5)
j = j + 1
End While
myReader.Close()
myConnection.Close()
Dim MaxTime As Integer = 0
For k As Integer = 0 To j - 1
MaxTime = Math.Max(MaxTime, datarecordsint(k, 2))
Next k
Dim message As String = ""
For k As Integer = 1 To j
Dim str As String = " -np 2 icpi.exe"
Dim _pi As New ProcessStartInfo("mpiexec", str)
_pi.UseShellExecute = False
_pi.RedirectStandardInput = True
_pi.RedirectStandardOutput = True
_pi.WorkingDirectory = "C:\Inetpub\wwwroot\cluster\usersdirectory\" & datarecordsstr(k - 1, 0) & "\"
Dim _pr As Process = Process.Start(_pi)
Thread.Sleep(MaxTime * 1)
message = _pr.StandardOutput.ReadToEnd
Dim path As String = "C:\Inetpub\wwwroot\cluster\usersdirectory\" & datarecordsstr(k - 1, 0) & "\" & datarecordsstr(k - 1, 1) & ".txt"
Dim fi As FileInfo = New FileInfo(path)
If fi.Exists = False Then
'Create a file to write to.
Dim sw As StreamWriter = fi.CreateText()
sw.WriteLine(message)
sw.Flush()
sw.Close()
End If
Next
Dim myDeleteQuery As String = "DELETE FROM files WHERE Queue =" & Queue
Dim myCommand1 As New MySqlCommand(myDeleteQuery, myConnection)
myConnection.Open()
myCommand1.ExecuteNonQuery()
myConnection.Close()
Queue = Queue + 1
Next
Optimizer()
End While
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim Reply As ICMP_ECHO_REPLY
Dim lngSuccess As Long
Dim strIPAddress As String
'Get the sockets ready.
If SocketsInitialize() Then
'Address to ping
strIPAddress = "10.144.50.60"
'Ping the IP that is passing the address and get a reply.
lngSuccess = ping(strIPAddress, Reply)
'Display the results.
Debug.Write("Address to Ping: " & strIPAddress)
Debug.Write("Raw ICMP code: " & lngSuccess)
Debug.Write("Ping Response Message : " & EvaluatePingResponse(lngSuccess))
Debug.Write("Time : " & Reply.RoundTripTime & " ms")
'Clean up the sockets.
SocketsCleanup()
Else
'Winsock error failure, initializing the sockets.
Debug.Write(WINSOCK_ERROR)
End If
End Sub
End Class
Клиентская часть:
SessionSequencer.vb
Imports System.Web
Public Class SessionSequencer
Private expectedPage As String
Private requestedPage As String
Private sequenceIndex As Integer
Private sequence() As String = {"login.aspx", "general.aspx"}
Private Request As HttpRequest
Private Response As HttpResponse
Private Session As SessionState.HttpSessionState
Public Sub New()
Request = HttpContext.Current.Request
Response = HttpContext.Current.Response
Session = HttpContext.Current.Session
If Session("sequenceIndex") Is Nothing Then
Session("sequenceIndex") = 0
End If
sequenceIndex = Session("sequenceIndex")
requestedPage = Request.ServerVariables("SCRIPT_NAME").ToLower
requestedPage = requestedPage.Substring(requestedPage.LastIndexOf("/") + 1)
If sequenceIndex < 0 Or sequenceIndex > sequence.GetUpperBound(0) Then
sequenceIndex = 0
End If
expectedPage = sequence(sequenceIndex)
If requestedPage <> expectedPage Then
Response.Redirect(expectedPage)
End If
End Sub
Public Sub showSessionVars()
Dim aKey As String
For Each aKey In Session.Keys
Response.Write(aKey & "=" & Session.Item(aKey) & "
")
Next
End Sub
Public Sub NextPage()
If sequenceIndex + 1 < sequence.GetLength(0) Then
sequenceIndex += 1
Else
sequenceIndex = sequence(sequence.GetUpperBound(0))
End If
Session("sequenceIndex") = sequenceIndex
Session("sequence") = sequence(sequenceIndex)
Response.Redirect(sequence(sequenceIndex))
End Sub
End Class
Login.vb
Public Class WebForm6
Inherits System.Web.UI.Page
#Region " Web Form Designer Generated Code "
'This call is required by the Web Form Designer.
End Sub
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents TxtUserName As System.Web.UI.WebControls.TextBox
Protected WithEvents UsernameValidator As System.Web.UI.WebControls.RegularExpressionValidator
Protected WithEvents Label2 As System.Web.UI.WebControls.Label
Protected WithEvents TxtPassword As System.Web.UI.WebControls.TextBox
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Protected WithEvents PasswordValidator As System.Web.UI.WebControls.RegularExpressionValidator
Protected WithEvents HyperLink1 As System.Web.UI.WebControls.HyperLink
Protected WithEvents HyperLink2 As System.Web.UI.WebControls.HyperLink
Protected WithEvents loginFieldValidator1 As System.Web.UI.WebControls.RequiredFieldValidator
Protected WithEvents passFieldValidator As System.Web.UI.WebControls.RequiredFieldValidator
Protected WithEvents label3 As System.Web.UI.WebControls.Label
Protected WithEvents HyperLink3 As System.Web.UI.WebControls.HyperLink
'NOTE: The following placeholder declaration is required by the Web Form Designer.
'Do not delete or move it.
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN: This method call is required by the Web Form Designer
'Do not modify it using the code editor.
InitializeComponent()
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Put user code to initialize the page here
Dim SessionSequencer As New SessionSequencer
label3.Text = ""
If IsPostBack Then
Page.Validate()
If Page.IsValid Then
Dim str As String
Dim myConnString As String = "Database=information;Data Source=localhost;User Id=tol;Password=tol"
Dim mySelectQuery As String = "SELECT password, directory FROM usersinfo WHERE login ='" & TxtUserName.Text & "'"
Dim myConnection As New MySqlConnection(myConnString)
Dim myCommand As New MySqlCommand(mySelectQuery, myConnection)
myConnection.Open()
Dim myReader As MySqlDataReader
myReader = myCommand.ExecuteReader()
Dim filedir As String
While (myReader.Read())
str = myReader.GetString(0)
filedir = myReader.GetString(1)
End While
myReader.Close()
myConnection.Close()
Session("directory") = filedir
If str = TxtPassword.Text Then
Session("username") = Me.TxtUserName.Text
Session("password") = Me.TxtPassword.Text
Call SessionSequencer.NextPage()
Else : label3.Text = "Неправильные Имя пользователя или Пароль. Введите пожалуйста данные заново."
End If
End If
End If
End Sub
' Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' Page.Validate()
' If Page.IsValid Then
'End Sub