Skip to content

Commit

Permalink
Merge pull request #510 from jiangliu/dependency
Browse files Browse the repository at this point in the history
Add documentation for overall architecture
  • Loading branch information
imeoer authored Jun 20, 2022
2 parents a5858eb + 8646415 commit 92509b9
Show file tree
Hide file tree
Showing 7 changed files with 75 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/images/crate-dependency.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2022-06-18T15:37:10.365Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36" etag="3qwgHwoM_QtgbQl-co3g" version="20.0.1" type="device"><diagram id="bhEiEhVRONMhzZeJ_wcp" name="Page-1">3VtNc6M4EP01PoZCEkLiuMlkdg67VVOVqt3NkTGKYYItl5Bje3/9wiA+BMbGxiCyviRqhBDd73W3WmKBntaH34W/Df/kAYsX0A4OC/RlASFALkz/ZJJjLiEU54KViALVqRK8RP8yJbSVdBcFLNE6Ss5jGW114ZJvNmwpNZkvBN/r3d54rD91669YS/Cy9OO29O8okKGSAterLnxj0SpUj6aQ5BfWftFZvUkS+gHf10ToeYGeBOcy/299eGJxprxCL/l9XzuulhMTbCP73ICCx4f3w7fk53L17vz18UoP79GDGuXDj3fqhTfHYJc8sFR1Qs1bHgtlCL7bBCwbDyzQ4z6MJHvZ+svs6j41fyoL5TpWl9/4Rip7AjdtqycxIdmh8xVAqZgUUYyvmRTHtIu6ATpKlwpMrq2Uva9M41LVJ6xZxVUyX6FhVQ5dKSz9R+nsCv2Rlo5YkOJHNbmQIV/xjR8/V9LHSot22qr6/MH5VunuJ5PyqJTn7yTXNcsOkfwnu93CqvVau/LloEb+1TiqRtMaqcbFMR/EpqQQvOYCUAqqwX61jvXWdyaiVItMKGEiBX8vWQJLk2caOW/wVIF8J5bsjKKVG5G+WDF5CdBtAAkW+zL60OdxCg3q1u88SmdYAg/ZOvCwR/Qh8nmpuxqYKqdxO8xgB0397Xb2JAXUbZEUwClJ6sDPwtIaKwmBd2Fl08KjshSNwj7iuJbnNjw/tWw4KQdRBwd3MoqT2bHQ9aCmMIe2QyUAU7IQIZMsBDUOVoy8yEKINRJeIOCkXHN6RsShnBzmeh2zrhfeniGNb7y7O0oX6KQv8+OJXKTTmaZEs3OQmAJNV8g74SCLYSdxkNAzyxVyS56i5ygEz8lD0p4ecigZh4VF26zVhxv9U9rcaFREwKTN/3+pUF+j5+HRmNUNL0MH5EJ1GBBQx8HDPMtFdJT8yrFdC9JGioUtj06aZdGOLEv4b/NbhyJCNH1Bx3Q1CJmt2V7hfCf1oUUt4KITHUqtYcaj8zEe6R06yXxDZ2+zm42dhdf4VBmThzS73x4qDSDi7rGTYmJRu/o1KxW9w+hvQvjHWrdt1iE592A9YkNVFKngmI941xhd0KoVpH/E/McMw7SLsaYkQE5UQ2w8ZZg2WjnUGd/f08/Y0cOejt7syhgbje/XrJG6yiFwVvWQ3mY3WgRzjJpdJzvsTXZKPN30nyK8D83jOqIs8CwCq/COGuG993bt1eEd6scNkHIh44Z32BHeE8lFdqJsbvHdaeyfo0Jrxpbh0EhGf5lqgZ+EpaH68+6ifx2Hds2DSaC545f7g/F2/AwfgPP0TavCA/danRF3cUWy1stzZ8+6XOe8CWL399jU06EDcKo+r/rRXkg6Na7lktYwV25JXx0GPLv5NuOHAcdsNcqC+RmxCv0TbeaMCPMJCpDdtX3PrRUonAaeJnasZg4DjLaSHQsMI1WriE2Nmh8bPhXgeED3LO75uDovDzHSGgdjbNFaDRM0IEJviZ93Q4zRMwW25ZZ2V4hB6CxiNNtf9h+nAHVHxIx0Hs+xzwImq3m3S+ITAQZ0nNYLWjgyvXhtflGA1cyNffWDoVmuUaDlfX2TvmHbkGZd+khfFhDHArjmsxsEdXox8sRiBJ9bAjVziZvPi6TN6vvBvHv1FSZ6/g8=</diagram></mxfile>
4 changes: 4 additions & 0 deletions docs/images/crate-dependency.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions docs/images/nydus-architecture-overview.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2022-06-19T03:04:34.793Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36" etag="7uFK3RaNVzFmNZRoGL-H" version="20.0.1" type="device"><diagram id="sYNsWVG_QY7Eb84yJVCJ" name="Page-1">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</diagram></mxfile>
4 changes: 4 additions & 0 deletions docs/images/nydus-architecture-overview.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions docs/images/nydus-storage-architecture.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
<mxfile host="app.diagrams.net" modified="2022-06-19T14:03:12.404Z" agent="5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36" etag="y2T9saWoVKafGcFmJAnK" version="20.0.1" type="device"><diagram id="ia_WN619vWnD8JbRhgEi" name="Page-1">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</diagram></mxfile>
4 changes: 4 additions & 0 deletions docs/images/nydus-storage-architecture.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
60 changes: 60 additions & 0 deletions docs/nydus-dev.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
## Architecture Overview

![overview](images/nydus-architecture-overview.svg)

### Crate Dependency

The dependency among Nydus crates are shown below:

![dependency](images/crate-dependency.svg)

To ease crate publishing process and avoid frequent dependency failures, please follow the rules below to specify dependencies:
- Library crates only specify major and minor version numbers, such as `nydus-error = "0.2"`.
- Binary crates specify major, minor and patch version numbers, such as `nydus-error = "0.2.1"`.


## Storage Subsystem
The storage subsystem is the core of [Nydus Image Service](https://nydus.dev/) project, which caches data fetched from storage backends and provides data services to rafs, blobfs and fscache etc.
The storage subsystem contains several sub-modules:
- API Layer: define external APIs for clients.
- [BlobFactory](https://docs.rs/nydus-storage/latest/nydus_storage/factory/struct.BlobFactory.html): create and garbage-collect cached blob objects.
- [BlobDevice](https://docs.rs/nydus-storage/latest/nydus_storage/device/struct.BlobDevice.html) and [BlobIoVec](https://docs.rs/nydus-storage/latest/nydus_storage/device/struct.BlobIoVec.html): provide data services for rafs and blobfs in unit of data chunks.
- [BlobObject](https://docs.rs/nydus-storage/latest/nydus_storage/device/trait.BlobObject.html): provide data services in unit of address ranges.
- Cache Layer: decompress, decrypt and cache blob data fetched from storage backends.
- `PrefetchWorker`: workers to prefetch blob data from storage backend in background.
- [BlobCache](https://docs.rs/nydus-storage/latest/nydus_storage/cache/trait.BlobCache.html): define the core interface to access cached blob object.
- [DummyCacheMgr](https://docs.rs/nydus-storage/latest/nydus_storage/cache/struct.DummyCacheMgr.html): a dummy cache manager to fetch data from storage backend on demand and never caches data locally.
- [FileCacheMgr](https://docs.rs/nydus-storage/latest/nydus_storage/cache/struct.FileCacheMgr.html): a generic cache manager to cache data fetched from storage backend by using local files.
- [FsCacheMgr](https://docs.rs/nydus-storage/latest/nydus_storage/cache/struct.FsCacheMgr.html): a special cache manager to cooperate Linux fscache driver to cache data from storage backend by using local files.
- [BlobMetaInfo](https://docs.rs/nydus-storage/latest/nydus_storage/meta/struct.BlobMetaInfo.html): blob metadata to support fetch, decompress and decrypt blob data on demand.
- Cache State Layer: track status of local cached blob data.
- [ChunkMap](https://docs.rs/nydus-storage/latest/nydus_storage/cache/state/trait.ChunkMap.html): maintain data cache status for data chunks.
- [RangeMap](https://docs.rs/nydus-storage/latest/nydus_storage/cache/state/trait.RangeMap.html): maintain data cache status for data ranges.
- Backend Layer: fetch blob data from storage backends.
- [BlobBackend](https://docs.rs/nydus-storage/latest/nydus_storage/backend/trait.BlobBackend.html): manager to get access to data blobs from storage backend.
- [BlobReader](https://docs.rs/nydus-storage/latest/nydus_storage/backend/trait.BlobReader.html): reader to access blob data from storage backend.
- [LocalFs](https://docs.rs/nydus-storage/latest/nydus_storage/backend/localfs/struct.LocalFs.html): storage backend to access blobs stored in local accessible filesystems, such ext4, xfs, NFS, CephFS, GlusterFS etc.
- [Oss](https://docs.rs/nydus-storage/latest/nydus_storage/backend/oss/index.html): storage backend to access blobs from object storage systems.
- [Registry](https://docs.rs/nydus-storage/latest/nydus_storage/backend/registry/index.html): storage backend to access blobs from container image registries.

![storage](images/nydus-storage-architecture.svg)

### IO Mode

When the Nydus Image Service is created in 2019, the rust async io ecosystem is still under development.
So the Nydus storage subsystem has used multi-threaded, synchronous IO mode for IO operations.
This mode has several advantages, especially easy to develop and maintain.
But it also has drawbacks too, too many worker threads under heavy loads, hard to use AIO/io uring asynchronous IO framework.

Now the rust async IO ecosystem is much more mature, and is suitable for IO intensive workloads like Nydus.
It uses the most popular tokio async io framework. Tokio supports two types of runtime engines: multi-threaded and current thread.
The tokio multi-threaded Runtime will automatically dispatch work items among worker threads.
And the tokio current thread Runtime runs pending work items by current thread, and doesn't dispatch work items to different worker threads.

On the other hand, tokio-uring to do asynchronous IO by using io-uring only supports tokio current thread Runtime engine.
Thus tokio current thread Runtime is adopted to support tokio-uring in future.
And an asynchronous Multi-Producer, Multi-Consumer channel is used to dispatch work items among different tokio current thread Runtimes.

TODO: enable io-uring for asynchronous IO. It's a challenging task due to data buffer lifetime management.

### Blob Data Format (TODO: nydus data blob, stargz data blob, compression algorithms, encryption algorithms, digest algorithms)

0 comments on commit 92509b9

Please sign in to comment.