mirror of
https://github.com/taigrr/nats.docs
synced 2025-01-18 04:03:23 -08:00
Updates based on comments
Signed-off-by: Colin Sullivan <colin@synadia.com>
This commit is contained in:
parent
fcf5c61997
commit
38c105ebf3
28
README.md
28
README.md
@ -1,12 +1,21 @@
|
||||
# Introduction
|
||||
|
||||
## Why Messaging is Important
|
||||
## The Importance of Messaging
|
||||
|
||||
Developing and deploying applications that communicate in distributed systems is complex and difficult. A communication infrastructure should provide features to make this easier, including multiple messaging patterns bundled into one technology, location transparency, the decoupling of data producers and consumers, and asynchronous communications to build event driven applications.
|
||||
Developing and deploying applications that communicate in distributed systems
|
||||
can be complex and difficult. A communication infrastructure should provide
|
||||
features to make this easier, including multiple messaging patterns bundled
|
||||
into one technology, location transparency, the decoupling of data producers
|
||||
and consumers, and asynchronous communications to build event driven
|
||||
applications. This can drive services/micro-services based workloads and take
|
||||
the place of things like a service mesh, and also drive observability, all
|
||||
from the same technology.
|
||||
|
||||
### Distributed Computing Needs of Today
|
||||
|
||||
A modern messaging system needs to support multiple communication patterns, be secure by default, support multiple qualities of service, and provide secure multi-tenancy for shared infrastructure. A modern system needs to include:
|
||||
A modern messaging system needs to support multiple communication patterns, be
|
||||
secure by default, support multiple qualities of service, and provide secure
|
||||
multi-tenancy for a truly shared infrastructure. A modern system needs to include:
|
||||
|
||||
* Secure by default communications for microservices, edge platforms and devices
|
||||
* Secure multi-tenancy in a single distributed communication technology
|
||||
@ -18,23 +27,24 @@ A modern messaging system needs to support multiple communication patterns, be s
|
||||
|
||||
## NATS
|
||||
|
||||
NATS was built to meet the distributed computing needs of today. NATS is
|
||||
simple and secure messaging made for developers and operators who want to
|
||||
spend more time developing modern applications than worrying about a
|
||||
distributed communication system.
|
||||
NATS was built to meet the distributed computing needs of today and tomorrow.
|
||||
NATS is simple and secure messaging made for developers and operators who want
|
||||
to spend more time developing modern applications and services than worrying
|
||||
about a distributed communication system.
|
||||
|
||||
* Easy to use for developers and operators
|
||||
* High-Performance
|
||||
* Always on and available
|
||||
* Extremely lightweight
|
||||
* At Most Once (NATS) or At Least Once Delivery (NATS Streaming)
|
||||
* Common Messaging Pattern Support (Services, Streams, Load Balancing)
|
||||
* Common Messaging Pattern Support (Scalable Services, Event/Data Streams)
|
||||
* Client support for over 30 different programming languages
|
||||
* Cloud Native, a CNCF project with Kubernetes and Prometheus integrations
|
||||
|
||||
### Use Cases
|
||||
|
||||
NATS can run anywhere, from devices, to edge computers, to cloud. Use cases NATS include:
|
||||
NATS can run anywhere, from large servers and cloud instances, through edge
|
||||
gateways and even IoT devices. Use cases NATS include:
|
||||
|
||||
* Cloud Messaging
|
||||
* Services (microservices, service mesh)
|
||||
|
@ -16,9 +16,9 @@ as they scale upward. Problems arise around service discovery, connectivity,
|
||||
scaling for volume, and application onboarding and updates.
|
||||
Disaster recovery is difficult, especially as systems have evolved to
|
||||
operate in silos defined by technology rather than business needs.
|
||||
As complexity increases, systems become expensive to operate. The become
|
||||
fragile making it difficult to deploy services and applications hindering
|
||||
innovation.
|
||||
As complexity increases, systems become expensive to operate in terms of time
|
||||
and money. They become fragile making it difficult to deploy services and
|
||||
applications hindering innovation, time to value, and total cost of ownership.
|
||||
|
||||
We decided to:
|
||||
|
||||
@ -28,7 +28,7 @@ can operate at global scale with simple configuration and a resilient
|
||||
and cloud-native architecture.
|
||||
* __Decrease Time to Value__: As systems scale, _time to value_ increases.
|
||||
Operations resist change due to risk in touching a complex and fragile
|
||||
system. Providing isolation contexts can mitigate this.
|
||||
system. Providing isolation contexts can help mitigate this.
|
||||
* __Support manageable large scale deployments__: No data silos defined by
|
||||
software, instead easily managed though software to provide exactly what the
|
||||
business needs. We wanted to provide easy to configure disaster recovery.
|
||||
@ -47,9 +47,10 @@ business driven use cases, where data silos are created by design, not software
|
||||
limitations. When a client connects, it specifies an account or will default
|
||||
to authentication with a global account.
|
||||
|
||||
At least some applications need to share data outside of their account.
|
||||
At least some services need to share data outside of their account.
|
||||
Data can be securely shared between accounts with secure services and
|
||||
streams, where only mutual agreement between account owners permit data flow.
|
||||
streams. Only mutual agreement between account owners permit data flow,
|
||||
and the import account has complete control over its own subject space.
|
||||
|
||||
This means within an account, limitations may be set and subjects can be used
|
||||
without worry of collisions with other groups or organizations. Development
|
||||
@ -62,16 +63,16 @@ autonomy reducing time to value with faster, more agile development practices.
|
||||
|
||||
### Service and Streams
|
||||
|
||||
Services and streams are mechanisms to share data between accounts.
|
||||
Services and streams are mechanisms to share messages between accounts.
|
||||
|
||||
Think of a service as a RPC endpoint into an account. Behind that account
|
||||
Think of a service as an RPC endpoint into an account. Behind that account
|
||||
there might be many microservices working in concert to handle requests, but
|
||||
from outside the account there simply one subject exposed.
|
||||
|
||||
__Services__ definition to share an endpoint:
|
||||
|
||||
* Export a service to allow other accounts to import
|
||||
* Import a service to allow requests to be sent and securely and seamlessly to
|
||||
* Import a service to allow requests to be sent securely and seamlessly to
|
||||
another account
|
||||
|
||||
Use cases include most applications - anything that accepts a request and returns
|
||||
@ -132,9 +133,9 @@ for seamless rolling upgrades and scaling up or down.
|
||||
|
||||
### Superclusters
|
||||
|
||||
Conceptually, superclusters are clusters of NATS server clusters. Create
|
||||
Conceptually, superclusters are clusters of NATS clusters. Create
|
||||
superclusters to deploy a truly global NATS network. Superclusters use
|
||||
a novel spline based technology with a unique apporoach to toplology, keeping
|
||||
a novel spline based technology with a unique apporoach to topology, keeping
|
||||
one hop semantics and optimizing WAN traffic through optimistic sends with
|
||||
interest graph pruning. Superclusters provide transparent, intelligent support
|
||||
for geo-distributed queue subscribers.
|
||||
@ -157,7 +158,7 @@ clients in US-EAST will begin using services in EU-WEST.
|
||||
|
||||
Once the Eastern US services have reconnected to US-EAST, those services
|
||||
will immediately begin servicing the Eastern US clients since they're local to
|
||||
the NATS cluster. This is automatic and entirely transparent to the client.
|
||||
the NATS cluster. This is automatic and entirely transparent to the client.
|
||||
There is no extra configuration in NATS servers.
|
||||
|
||||
This is __zero configuration disaster recovery__.
|
||||
@ -167,9 +168,11 @@ This is __zero configuration disaster recovery__.
|
||||
Leaf nodes are a NATS servers running in a special configuration, allowing
|
||||
hub and spoke topologies to extend superclusters.
|
||||
|
||||
Leaf can bridge separate security domains. e.g. IoT, mobile, web. They are
|
||||
ideal for edge computing, IoT hubs, or data centers that need to be connected
|
||||
to a global NATS deployment.
|
||||
Leaf nodes can also bridge separate security domains. e.g. IoT, mobile, web.
|
||||
They are ideal for edge computing, IoT hubs, or data centers that need to be
|
||||
connected to a global NATS deployment. Local applications that communicate
|
||||
using the loopback interface with physical VM or Container security can
|
||||
leverage leaf nodes as well.
|
||||
|
||||
Leaf nodes:
|
||||
|
||||
@ -189,9 +192,10 @@ within a NATS deployment.
|
||||
* An __Operator__ provides the root of trust for the system, may represent
|
||||
a company or enterprise
|
||||
* Creates __Accounts__ for account administrators. An account represents
|
||||
an organization with a secure context within the NATS deployment, for example
|
||||
an IT system monitoring group, a set of microservices, a regional IoT
|
||||
deployment. Account creation would likely be managed by a central group.
|
||||
an organization, business unit, or service offering with a secure context
|
||||
within the NATS deployment, for example an IT system monitoring group, a
|
||||
set of microservices, or a regional IoT deployment. Account creation
|
||||
would likely be managed by a central group.
|
||||
* __Accounts__ define limits and may securely expose services and streams.
|
||||
* Account managers create __Users__ with permissions
|
||||
* __Users__ have specific credentials and permissions.
|
||||
@ -203,7 +207,9 @@ create a hierarchy of Operators, Accounts, and Users creating a scalable
|
||||
and flexible distributed security mechanism.
|
||||
|
||||
* __Operators__ are represented by a self signed JWT and is the only thing that
|
||||
is required to be configured in the server.
|
||||
is required to be configured in the server. This JWT is usually signed by a
|
||||
master key that is kept offline. The JWT will contain valid signing keys that
|
||||
can be revoked with the master updating this JWT.
|
||||
* Operators will sign __Account__ JWTs with various signing keys.
|
||||
* __Accounts__ sign __User__ JWTs, again with various signing keys.
|
||||
* Clients or leaf nodes present __User__ credentials and a signed nonce when connecting.
|
||||
|
Loading…
x
Reference in New Issue
Block a user