# Part kinds

> Every kind of part, the key that adds it, what it's for and what usually comes after it.

Flozu has 28 kinds of part. A kind says what a part does: how traffic moves through it and which [limits](https://docs.flozu.app/guides/traffic-and-limits.md#limits-on-parts) it can have. It doesn’t decide how the part looks, since any part can show [any drawing](https://docs.flozu.app/guides/looks.md#drawings).

A few kinds behave differently from the rest:

- **Rate limiters, firewalls, gateways, sign-in and AI models** can have a limit, and turn away what’s past it.
- **Queues and topics** hold what’s waiting, and lines into and out of them start as messages.
- **Schedulers** start traffic by the clock, so their lines start as messages and a scenario’s busier day doesn’t scale them.
- **People, client apps and schedulers** set the pace with the lines they send, so they have no limits of their own.

“Usually followed by” is what Flozu suggests when you drop a line from that part on empty canvas.

## People and apps

| Kind       | Key | What it is                                                                    | Usually followed by                                |
| ---------- | --- | ----------------------------------------------------------------------------- | -------------------------------------------------- |
| Person     | `P` | Someone who uses the system, such as a customer, an admin or a support agent. | Client app, CDN, Gateway                           |
| Client app | `C` | An app people use: a website, a mobile app, a desktop app or a device.        | Gateway, CDN, DNS, Sign-in, Load balancer, Service |

## The way in

| Kind          | Key | What it is                                                                     | Usually followed by                                     |
| ------------- | --- | ------------------------------------------------------------------------------ | ------------------------------------------------------- |
| DNS           | `U` | Turns names like shop.example.com into the addresses traffic is sent to.       | CDN, Firewall, Load balancer, Gateway                   |
| CDN           | `E` | Serves content from close to people and absorbs traffic before it reaches you. | Gateway, Firewall, Load balancer, Storage, Service      |
| Firewall      | `V` | Lets allowed traffic through and blocks the rest, such as attacks and bots.    | Gateway, Load balancer, Service                         |
| Gateway       | `G` | The front door for requests. It checks who's calling and routes each request.  | Service, Sign-in, Rate limiter, Load balancer, Function |
| Sign-in       | `I` | Checks who people are and hands out the tokens other parts trust.              | Database, Cache, Service                                |
| Load balancer | `L` | Shares traffic between copies of a service so none of them gets swamped.       | Service, Function, Gateway                              |
| Rate limiter  | `R` | Lets a set amount through each second and turns the rest away.                 | Service, Gateway, Function                              |

## Compute

| Kind      | Key | What it is                                                                     | Usually followed by                                  |
| --------- | --- | ------------------------------------------------------------------------------ | ---------------------------------------------------- |
| Service   | `S` | A running program that answers requests, such as an API or a web server.       | Database, Cache, Queue, Topic, Search, Service       |
| Worker    | `W` | Works through jobs in the background, usually taking them from a queue.        | Database, Storage, Service, AI model, Data warehouse |
| Function  | `F` | Code that runs when it's called and scales up and down by itself.              | Database, Storage, Queue, AI model                   |
| Scheduler | `J` | Starts jobs on a timetable, such as a nightly export or a reminder every hour. | Worker, Queue, Function, Service                     |
| AI model  | `A` | A language or machine learning model that the system calls.                    | Service, Database, Storage                           |

## Messaging

| Kind  | Key | What it is                                                                          | Usually followed by                              |
| ----- | --- | ----------------------------------------------------------------------------------- | ------------------------------------------------ |
| Queue | `Q` | Holds work in line until something is free to take it. Each item goes to one taker. | Worker, Function, Service                        |
| Topic | `T` | Broadcasts each event to every part that subscribes.                                | Worker, Function, Service, Queue, Data warehouse |

## Data

| Kind           | Key | What it is                                                                     | Usually followed by                              |
| -------------- | --- | ------------------------------------------------------------------------------ | ------------------------------------------------ |
| Database       | `D` | Keeps the system's records, such as orders, customers and stock.               | Database, Topic, Search, Data warehouse, Service |
| Cache          | `K` | Keeps popular data in memory so it can be read quickly.                        | Database, Service                                |
| Search         | `H` | An index that finds records by their words, such as products in a shop.        | Database, Service                                |
| Storage        | `B` | Holds files such as images, exports and backups.                               | Function, CDN, Worker, Data warehouse            |
| Data warehouse | `O` | Gathers data from across the system so people can report on it and analyse it. | Client app, AI model, Storage                    |

## Inside a service

| Kind      | Key  | What it is                                                                                               | Usually followed by                          |
| --------- | ---- | -------------------------------------------------------------------------------------------------------- | -------------------------------------------- |
| Endpoint  | `Y`  | A way into a service that others call, such as an HTTP route, an RPC method or an event handler.         | Module, Service, Code file, Function         |
| Module    | `M`  | A part of a service's code with one job, such as a package or a folder.                                  | Module, Code file, Table, Library, Interface |
| Code file | None | One source file, named by its path.                                                                      | Code file, Interface, Library, Table         |
| Interface | None | A contract code depends on rather than a thing that runs, such as a TypeScript interface or an API spec. | Code file, Module                            |
| Library   | None | A package the code is built on, such as stripe-node or a Go module.                                      | Library                                      |
| Table     | None | A table, collection or index inside a store, where a service keeps its records.                          | Table                                        |

## Anything else

| Kind        | Key | What it is                                                         | Usually followed by      |
| ----------- | --- | ------------------------------------------------------------------ | ------------------------ |
| Custom part | `X` | Anything that doesn't fit another kind. It behaves like a service. | Service, Database, Queue |
