Hi Matt,
To a large extent this depends on usage, so I'll try to give you some
insight rather than quote a number: As you may imagine since I'm doing
dev work I'm not usually running Vault at super high scale, and while
HC has a production Vault instance it doesn't require super high
throughput compared to some customers that I've talked to. I've done
some artificial benchmarking of the transit backend at high scale
(between two AWS c3.8xlarge instances) and didn't get anywhere
remotely close to exhausting resources, but it was artificial so some
of the points I list below didn't apply. Hopefully others can give you
a better idea of exactly how it scales for their workloads.
* Vault will take advantage of multiple CPU cores; connections are
handled in their own goroutines so Go will scale up and down
automatically when it schedules.
* As you might expect, you'll get a lot of mileage from keeping alive
connections and pipelining requests to avoid TLS handshaking. Whether
that makes sense for your workload depends on whether it's (for
instance) credential-generating-heavy vs.
transit-encrypting/decrypting heavy, and how often you're actually
using these functions (once an hour per machine, once a second per
machine...). The difference in my benchmarking was very significant
(which mostly made it clear to me that Vault itself is quite fast and
network conditions and connections, both for its data storage backend
and resources it needs to contact to generate credentials, are the
bottleneck in almost all cases).
* Vault holds lease information in memory to manage expirations, so if
you are generating a very large number of leases/tokens RAM needs will
increase. In practice, this still tends to not actually be super high,
unless you are doing something like having servers authenticate
(generating a new token) every time they want to read or write a
value, instead of storing a token for its lifetime. (Or, worse,
authenticate, then grab a fresh set of leased credentials for various
resources instead of re-using still-valid credentials, creating
multiple expiration entries at a time.) When you get to millions of
tracked leases, the RAM needs go up significantly to. Which also leads
to my next point...
* In terms of allocation, pay attention to your data store too;
consul/etcd/zk especially are not really designed to hold huge amounts
of data at once and can start to have issues (depending, often, on
RAM) when the number of entries gets super high (millions to many
millions, again depending highly on RAM) -- and this includes tokens,
token expirations, and credential leases, not just e.g. items in
'generic' backend mounts. In general, if you are finding that you need
huge amounts of data stored in Vault, you may want to think about
whether it makes sense to use transit instead to encrypt/decrypt the
data but store the encrypted data in a different data store; or, use
transit with a data key to do the encryption/decryption locally but
not store the data key in memory.
Hope this helps -- feel free to ask more specifics if you like.
Hopefully others will chime in too!
--Jeff
> --
> This mailing list is governed under the HashiCorp Community Guidelines -
>
https://www.hashicorp.com/community-guidelines.html. Behavior in violation
> of those guidelines may result in your removal from this mailing list.
>
> GitHub Issues:
https://github.com/hashicorp/vault/issues
> IRC: #vault-tool on Freenode
> ---
> You received this message because you are subscribed to the Google Groups
> "Vault" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to
vault-tool+...@googlegroups.com.
> To view this discussion on the web visit
>
https://groups.google.com/d/msgid/vault-tool/995cc434-c283-4622-a6c2-1016883c31ab%40googlegroups.com.
> For more options, visit
https://groups.google.com/d/optout.