-
Notifications
You must be signed in to change notification settings - Fork 0
/
gangadoc-html.html
242 lines (166 loc) · 11.1 KB
/
gangadoc-html.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
<!DOCTYPE html>
<html lang="en">
<head>
<title>Ganga中文</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="./theme/css/main.css" type="text/css" />
<link href="zsneoks.github.com/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="木大 Atom Feed" />
<link href="zsneoks.github.com/feeds/all.rss.xml" type="application/rss+xml" rel="alternate" title="木大 RSS Feed" />
<!--[if IE]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
<!--[if lte IE 7]>
<link rel="stylesheet" type="text/css" media="all" href="./css/ie.css"/>
<script src="./js/IE8.js" type="text/javascript"></script><![endif]-->
<!--[if lt IE 7]>
<link rel="stylesheet" type="text/css" media="all" href="./css/ie6.css"/><![endif]-->
</head>
<body id="index" class="home">
<header id="banner" class="body">
<h1><a href=".">木大 </a></h1>
<nav><ul>
<li class="active"><a href="./category/Ganga.html">Ganga</a></li>
<li ><a href="./category/linux.html">linux</a></li>
<li ><a href="./category/关于.html">关于</a></li>
<li ><a href="./category/测试.html">测试</a></li>
<li ><a href="./category/物理.html">物理</a></li>
</ul></nav>
</header><!-- /#banner -->
<section id="content" class="body">
<article>
<header>
<h1 class="entry-title">
<a href="gangadoc-html.html" rel="bookmark"
title="Permalink to Ganga中文">Ganga中文</a></h1>
</header>
<div class="entry-content">
<footer class="post-info">
<abbr class="published" title="2012-06-25T00:00:00">
一 25 六月 2012
</abbr>
<address class="vcard author">
By <a class="url fn" href="./author/木大.html">木大</a>
</address>
<p>In <a href="./category/Ganga.html">Ganga</a>. </p>
<p>tags: <a href="./tag/linux.html">linux</a><a href="./tag/ganga.html">ganga</a><a href="./tag/物理.html">物理</a><a href="./tag/software.html">software</a></p>
</footer><!-- /.post-info -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link rel="Stylesheet" type="text/css" href="static/style.css">
<title>GangaDoc</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<h3 id="toc_0.0.1" class="justcenter"><a href="static/gangadoc/index.html">Ganga文档首页入口</a></h3>
<h4 id="toc_0.0.1.1">3 实现</h4>
<blockquote>
这章提供了GANGA中一些重要部分的当前实现细节。
</blockquote>
<h6 id="toc_0.0.1.1.0.1">3.1 组件</h6>
<blockquote>
作业的各个组件以插件类的形式来实现,需用户在配置文件中设为enabled,则会由GANGA在启动时导入。这表示用户仅能看到与其特定工作环境相关的组件。
</blockquote>
<blockquote>
插件维护十分简单,采用了一组内部接口和一个产生代理类的机制。组件类继承自接口类。每个插件类都定义了一个schema,用它描述插件的属性和指定类型(只读/读写/内部)、可见性以及相关的用户友好(user-convinence)的过滤器和语法快捷方式(shortcut)。
</blockquote>
<blockquote>
与用户直接进行交互的不是插件类,而是一个自动产生的代理类,代理类在GPI中可见。代理类只包含插件类中的一些在schema中定义可见的属性以及选出用于导出的方法。插件和代理的层次(level)分离十分灵活。在GPI层插件的实现细节不可见;所有代理类都遵循相同的设计逻辑(例如按值拷贝copy-by-value);持续性自动化,会话等级锁定透明。用这种方法,底层的内部的API就与用户层的GPI分离开。
</blockquote>
<blockquote>
框架不强迫开发者支持app和backend的所有组合,只要支持有意义和有趣的组合即可。为便于管理这些组合,提出了submission handler的概念。sumission handler是app和backend组件的一个连接器。在提交时间,它将app的内部表示(representation)传送给特定backend可以接受的表示(representation)。这种策略允许完全(inherently)不同的backend和app的结合,而不需要强制一个lowest-common-denominator接口。
</blockquote>
<h6 id="toc_0.0.1.1.0.2">3.2 作业保持(persistence)</h6>
<blockquote>
作业仓库在一个简单数据库中提供作业保持,以便任何之后的Ganga会话都可以访问所有之前定义的作业。每当在Ganga会话中定义一个作业,它就会被自动地存入这个数据库中。作业仓库还提供了一个bookkeeping系统用来根据metadata挑选特殊的作业。metadata包括以下一些参数如作业名称、app类型、要提交的backend类型、以及作业状态等。它可以根据需要轻松地进行扩展。
</blockquote>
<blockquote>
GANGA同时支持本地和远程的作业仓库。在本地仓库的情况下,数据库存储在本地的文件系统中,它提供一个孤立的解决方案。在远程情况下,客户端访问AMGA metadata服务器。远程服务器基于网格证书提供与可信和授权用户的加密连接。表现测试中,两种仓库在每个用户高达10000个作业,每个下都仍旧表现出了良好的scalability,单个作业的平均生成时间大约是0.2秒。。。(各种好。。。)
</blockquote>
<blockquote>
作业仓库考虑到插件组件中的schema的升级维护,还包含了一个提供schema迁移的机制。
</blockquote>
<h6 id="toc_0.0.1.1.0.3">3.3 输入输出文件</h6>
<blockquote>
Ganga在作业工作区存储作业的输入输出文件。在当前的实现中使用了本地文件系统,并且有一个简单的接口允许在Ganga构架下透明地访问作业文件。这些文件在为每个作业分别指定的目录中存储,该目录有一些子目录来存储输入输出文件或者用于子作业。
</blockquote>
<blockquote>
用户可以在文件系统中直接访问作业文件或者使用Ganga命令访问(如job.peek()).从内部来看,考虑到额外的工作区实现的琐碎的集成,Ganga通过一个简单的抽象层持有输入输出文件。测试表明。。。
</blockquote>
<blockquote>
远程工作区和远程作业仓库的结合有效地生成了一个漫游的profile,相同的Ganga会话可以在多个位置访问,这有点类似于在一个IMAP服务器上访问e-mail信息的情况。
</blockquote>
<h4 id="toc_0.0.1.2">4 监测</h4>
<blockquote>
Ganga提供了两种类型的监测:内部监测用作业进程信息来更新用户,外部监测处理来自第三方服务的信息。
</blockquote>
<h6 id="toc_0.0.1.2.0.1">4.1 内部监测</h6>
<blockquote>
Ganga使用监测程序自动保存作业状态的变更历程,这个监测程序设计用来处理变化的backend响应次数和加载功能。每个backend被poll进一个不同的从pool中取出的thread中,同时有一个有效的机制来避免响应较慢的backend造成的死锁。poll rate可以对每个backend都有单独的设定。
</blockquote>
<blockquote>
监测子系统也会保存权限证书的remaining有效性的历程,比如网格代理和Kerberos tokens.用户需要注意更新,而如果没有动作那么Ganga就会被置入状态,在该状态下操作需要有效证书会不可用。
</blockquote>
<h6 id="toc_0.0.1.2.0.2">4.2 外部监测</h6>
<p></body>
</html></p>
</div><!-- /.entry-content -->
<div class="comments">
<h2>Comments !</h2>
<div id="disqus_thread"></div>
<script type="text/javascript">
var disqus_identifier = "gangadoc-html.html";
(function() {
var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
dsq.src = 'http://zsneoks.disqus.com/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();
</script>
</div>
</article>
</section>
<section id="extras" class="body">
<div class="blogroll">
<h2>blogroll</h2>
<ul>
<li><a href="http://docs.notmyidea.org/alexis/pelican/">Pelican</a></li>
<li><a href="http://python.org">Python.org</a></li>
<li><a href="http://jinja.pocoo.org">Jinja2</a></li>
</ul>
</div><!-- /.blogroll -->
<div class="social">
<h2>social</h2>
<ul>
<li><a href="zsneoks.github.com/feeds/all.atom.xml" type="application/atom+xml" rel="alternate">atom feed</a></li>
<li><a href="zsneoks.github.com/feeds/all.rss.xml" type="application/rss+xml" rel="alternate">rss feed</a></li>
<li><a href="http://twitter.com/zsneoks">twitter</a></li>
<li><a href="http://lastfm.com/user/zsneoks">lastfm</a></li>
<li><a href="http://github.com/zsneoks">github</a></li>
</ul>
</div><!-- /.social -->
</section><!-- /#extras -->
<footer id="contentinfo" class="body">
<address id="about" class="vcard body">
Proudly powered by <a href="http://pelican.notmyidea.org/">Pelican</a>, which takes great advantage of <a href="http://python.org">Python</a>.
</address><!-- /#about -->
<p>The theme is by <a href="http://coding.smashingmagazine.com/2009/08/04/designing-a-html-5-layout-from-scratch/">Smashing Magazine</a>, thanks!</p>
</footer><!-- /#contentinfo -->
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-32881388-1");
pageTracker._trackPageview();
} catch(err) {}</script>
<script type="text/javascript">
var disqus_shortname = 'zsneoks';
(function () {
var s = document.createElement('script'); s.async = true;
s.type = 'text/javascript';
s.src = 'http://' + disqus_shortname + '.disqus.com/count.js';
(document.getElementsByTagName('HEAD')[0] || document.getElementsByTagName('BODY')[0]).appendChild(s);
}());
</script>
</body>
</html>