-
Notifications
You must be signed in to change notification settings - Fork 5
/
faq.html
245 lines (220 loc) · 12.1 KB
/
faq.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
243
244
245
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,
initial-scale=1,
minimum-scale=1,
maximum-scale=1,
user-scalable=no,
minimal-ui">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<title>FAQ - Vanadium</title>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300italic,400,400italic,500,500italic,700,700italic|Source+Code+Pro">
<link rel="stylesheet" href="/css/github.css">
<link rel="stylesheet" href="/css/material.min.css">
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
<script src="/js/react-0.14.3.min.js"></script>
<script src="/js/react-dom-0.14.3.min.js"></script>
<link rel="apple-touch-icon" sizes="57x57" href="/favicons/apple-touch-icon-57x57.png">
<link rel="apple-touch-icon" sizes="114x114" href="/favicons/apple-touch-icon-114x114.png">
<link rel="apple-touch-icon" sizes="72x72" href="/favicons/apple-touch-icon-72x72.png">
<link rel="apple-touch-icon" sizes="144x144" href="/favicons/apple-touch-icon-144x144.png">
<link rel="apple-touch-icon" sizes="60x60" href="/favicons/apple-touch-icon-60x60.png">
<link rel="apple-touch-icon" sizes="120x120" href="/favicons/apple-touch-icon-120x120.png">
<link rel="apple-touch-icon" sizes="76x76" href="/favicons/apple-touch-icon-76x76.png">
<link rel="apple-touch-icon" sizes="152x152" href="/favicons/apple-touch-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/favicons/apple-touch-icon-180x180.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicons/favicon-16x16.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/favicons/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="160x160" href="/favicons/favicon-160x160.png">
<link rel="icon" type="image/png" sizes="192x192" href="/favicons/favicon-192x192.png">
<meta name="msapplication-TileColor" content="#00acc1">
<meta name="msapplication-TileImage" content="/favicons/mstile-144x144.png">
<link rel="stylesheet" href="/css/bundle.cyan.css">
<script src="/js/bundle.js"></script>
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-59720824-6', 'auto');
ga('send', 'pageview');
</script>
</head>
<body>
<header class="mdl-shadow--2dp">
<div class="row">
<div class="icon menu"><i class="material-icons">menu</i></div>
<div class="icon v-icon"><a href="/"><img src="/images/v-icon-white.svg"></a></div>
<div class="logo"><a href="/core.html">Vanadium Core</a></div>
<div class="spacer"></div>
<nav>
<a href="/core.html">Overview</a>
<a href="/installation/">Installation</a>
<a href="/tutorials/hello-world.html">Tutorials</a>
</nav>
</div>
</header>
<div data-subsite="core" class="sidebar"></div>
<div class="sidebar-data">
<a href="/core.html">Overview</a>
<a href="/installation/">Installation</a>
<a href="#" class="nav">Tutorials</a>
<nav>
<a href="/tutorials/hello-world.html">Hello World</a>
<a href="/tutorials/basics.html">Client/Server Basics</a>
<a href="#" class="nav">Security</a>
<nav>
<a href="/tutorials/security/">Overview</a>
<a href="/tutorials/security/principals-and-blessings.html">Principals and Blessings</a>
<a href="/tutorials/security/permissions-authorizer.html">Permissions Authorizer</a>
<a href="/tutorials/security/first-party-caveats.html">Caveats</a>
<a href="/tutorials/security/third-party-caveats.html">Third-party Caveats</a>
<a href="/tutorials/security/agent.html">The Agent</a>
<a href="/tutorials/security/custom-authorizer.html">Custom Authorizer</a>
</nav>
<a href="#" class="nav">Naming</a>
<nav>
<a href="/tutorials/naming/">Overview</a>
<a href="/tutorials/naming/mount-table.html">The Mount Table</a>
<a href="/tutorials/naming/namespace.html">Namespaces</a>
<a href="/tutorials/naming/suffix-part1.html">The Suffix - Part I</a>
<a href="/tutorials/naming/suffix-part2.html">The Suffix - Part II</a>
<a href="/tutorials/naming/globber.html">Globber</a>
</nav>
<a href="#" class="nav">Syncbase</a>
<nav>
<a href="/tutorials/syncbase/">Overview</a>
<a href="/tutorials/syncbase/localPersist.html">Local Persistence</a>
<a href="/tutorials/syncbase/sync.html">Syncing</a>
</nav>
<a href="#" class="nav">Java</a>
<nav>
<a href="/tutorials/java/">Overview</a>
<a href="/tutorials/java/fortune.html">Fortune in Java</a>
<a href="/tutorials/java/android.html">Location Service in Android</a>
</nav>
<a href="/tutorials/faq.html">Tutorial FAQ</a>
</nav>
<a href="#" class="nav">Concepts</a>
<nav>
<a href="/concepts/rpc.html">RPC System</a>
<a href="/concepts/naming.html">Naming</a>
<a href="/concepts/security.html">Security</a>
<a href="/concepts/device-management.html">Device Management</a>
</nav>
<a href="/example-apps.html">Example Apps</a>
<a href="/api-reference.html">API Reference</a>
<a href="#" class="nav">Community</a>
<nav>
<a href="/community/coding-guidelines.html">Coding Guidelines</a>
<a href="/community/contributing.html">Contributing</a>
<a href="/community/mailing-lists.html">Mailing List</a>
<a href="/community/roadmap.html">Roadmap</a>
</nav>
<a href="#" class="nav">Tools</a>
<nav>
<a href="/tools/identity-service-faq.html">Vanadium Identity Service</a>
<a href="/tools/jiri.html">Jiri</a>
<a href="/tools/namespace-browser.html">Namespace Browser</a>
<a href="/tools/services.html">Vanadium Cloud Services</a>
</nav>
<a href="#" class="nav">Design Docs</a>
<nav>
<a href="/designdocs/authentication.html">Authentication Protocol</a>
<a href="/designdocs/identity-service.html">Identity Service</a>
<a href="/designdocs/vdl-spec.html">VDL Specification</a>
<a href="/designdocs/vom-spec.html">VOM Specification</a>
</nav>
<a href="/glossary.html">Glossary</a>
<a href="/faq.html">FAQ</a>
<a href="/tos.html">Terms of Service</a>
</div>
<main>
<h1 class="title">
FAQ
</h1>
<div class="toc"></div>
<h1 id="who-should-consider-using-this-vanadium-pre-release-">Who should consider using this Vanadium pre-release?</h1>
<p>Anyone who's interested in learning what the system can do, or is excited about
the prospect of being an early adopter or contributor of what we hope will
become a comprehensive framework for building distributed applications and
multi-device UIs.</p>
<h1 id="who-should-not-consider-using-this-vanadium-pre-release-">Who should not consider using this Vanadium pre-release?</h1>
<p>Anyone who needs to build a production quality system or application over the
next few months — although we believe our code is well tested, we expect
to continue to make changes to the core APIs and services as we learn from our
early adopters. Keeping up with such changes in a production environment is
likely to be problematic.</p>
<h1 id="why-did-you-choose-the-go-language-">Why did you choose the Go language?</h1>
<p>We anticipated that we would be more productive using Go than one of the other
systems programming languages available to us.</p>
<h1 id="how-does-vanadium-relate-to-other-google-open-source-projects-">How does Vanadium relate to other Google open source projects?</h1>
<p>Vanadium is an ongoing project, with a clear and ambitious long-term goal of
making it easier to build distributed multi-device apps and UIs. We'll use
whatever technology helps us meet those goals and design new technology whenever
we need to. We'll use whatever open source projects makes sense for us to use,
whether they originate from Google or anywhere else. We recognize that there is
overlap with many existing projects, but there is no single project that meets
our requirements or goals.</p>
<h1 id="why-did-you-build-your-own-rpc-system-">Why did you build your own RPC system?</h1>
<p>One of our design principles is to <strong>put security first</strong> and we wanted an RPC
protocol that has symmetrical end-to-end authentication, encryption, and the
ability to run through proxies without compromising that security. No existing
protocol that we are aware of meets these requirements, so we designed one. As
an example, our protocol allows a client and proxy to authenticate with each
other and for the client to authenticate with the server directly and
independently of the proxy. This allows an independent company to run a proxy
service for paying clients and service providers without having to implement its
own authentication scheme. All clients still authenticate directly with the
services they interact with and do not have to rely on the proxy service for the
validity of that authentication.</p>
<h1 id="why-did-you-build-your-own-encoding-format-">Why did you build your own encoding format?</h1>
<p>We wanted an encoding that can be used when the producer and consumer don't
necessarily share a common code base or 'stub library'. This loose coupling can
be in terms of space (e.g. a client and server implemented by two different code
bases and/or organizations) and time (e.g. a log file is written today, but read
10 years from now without access to the original code). This implies an encoding
that is language independent and self-describing; given a log file written using
our encoding, it should be possible to algorithmically construct the data types
needed to read that log file by examining that log file alone. Naturally we'd
like the encoding to be as efficient as possible, both in terms of space and
computational cost. We are not aware of any modern encoding format that meets
these requirements.</p>
<h1 id="are-there-benchmarks-for-the-vanadium-rpc-system-">Are there benchmarks for the Vanadium RPC system?</h1>
<p>Benchmark code used to measure the performance of the Vanadium RPC stack is
<a href="https://github.com/vanadium/go.ref/blob/master/runtime/internal/rpc/benchmark/benchmark_test.go">available on GitHub</a>. Results from the latest version of the
codebase are regularly measured and archived. Numbers from March, 2016 are
summarized in this table, but for the latest numbers <a href="/performance.html">see this
page</a>.</p>
<table>
<thead>
<tr>
<th>Benchmark</th>
<th style="text-align:center">Linux Desktop</th>
<th style="text-align:center">Raspberry Pi 2</th>
<th style="text-align:center">Nexus 5X Phone</th>
</tr>
</thead>
<tbody>
<tr>
<td><a href="https://benchmarks.v.io/?q=v.io%2Fx%2Fref%2Fruntime%2Finternal%2Frpc%2Fbenchmark.BenchmarkConnectionEstablishment+uploader%3Adev.v.io%3Arole%3Avlab%3Aapp%3Abenchmarks%3A20160218">Connection</a></td>
<td style="text-align:center">4 ms</td>
<td style="text-align:center">130 ms</td>
<td style="text-align:center">90 ms</td>
</tr>
<tr>
<td><a href="https://benchmarks.v.io/?q=v.io%2Fx%2Fref%2Fruntime%2Finternal%2Frpc%2Fbenchmark.Benchmark____1B+uploader%3Adev.v.io%3Arole%3Avlab%3Aapp%3Abenchmarks%3A20160218">RPC (echo 1B)</a></td>
<td style="text-align:center">0.4 ms/rpc</td>
<td style="text-align:center">5 ms/rpc</td>
<td style="text-align:center">4 ms/rpc</td>
</tr>
</tbody>
</table>
</main>
</body>
</html>