Skip to content

Commit 1ce5c85

Browse files
committed
readme updates
1 parent 989b8fa commit 1ce5c85

File tree

3 files changed

+33
-31
lines changed

3 files changed

+33
-31
lines changed

README.md

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,22 @@ The only way this project can possibly work is to be super focused about what it
4646

4747
3. OFM does not promise worry-free automatic updates for self-hosters. Only use the autoupdate version of http-host if you keep a close eye on this repo.
4848

49+
## What is the tech stack?
50+
51+
There is no tile server running; only Btrfs partition images with 300 million hard-linked files. This was my idea; I haven't read about anyone else doing this in production, but it works really well.
52+
53+
There is no cloud, just dedicated servers. The HTTPS server is nginx on Ubuntu.
54+
55+
## Btrfs images
56+
57+
Production-quality hosting of 300 million tiny files is hard. The average file size is just 450 byte. Dozens of tile servers have been written to tackle this problem, but they all have their limitations.
58+
59+
The original idea of this project is to avoid using tile servers altogether. Instead, the tiles are directly served from Btrfs partition images + hard links using an optimised nginx config. I wrote [extract_mbtiles](scripts/tile_gen/extract_mbtiles) and [shrink_btrfs](scripts/tile_gen/shrink_btrfs) scripts for this very purpose.
60+
61+
This replaces a running service with a pure, file-system-level implementation. Since the Linux kernel's file caching is among the highest-performing and most thoroughly tested codes ever written, it delivers serious performance.
62+
63+
I run some [benchmarks](docs/quick_notes/http_benchmark.md) on a Hetzner server, the aim was to saturate a gigabit connection. At the end, it was able to serve 30 Gbit on loopback interface, on cold nginx cache.
64+
4965
## Code structure
5066

5167
The project has the following parts
@@ -85,26 +101,14 @@ A very important part, probably needs the most work in the long term future.
85101

86102
#### load balancer script - scripts/loadbalancer
87103

88-
Round Robin DNS based load balancer, script for health checking and updating records.
89-
90-
Pushes warnings to a Telegram bot.
104+
Round Robin DNS based load balancer, script for health checking and updating records. It pushes status messages to a Telegram bot.
91105

92106
Currently it's running in read-only mode, DNS updates need manual confirmation.
93107

94108
## Self hosting
95109

96110
See [self hosting docs](docs/self_hosting.md).
97111

98-
## Btrfs images
99-
100-
Production-quality hosting of 300 million tiny files is hard. The average file size is just 450 byte. Dozens of tile servers have been written to tackle this problem, but they all have their limitations.
101-
102-
The original idea of this project is to avoid using tile servers altogether. Instead, the tiles are directly served from Btrfs partition images + hard links using an optimised nginx config. I wrote [extract_mbtiles](scripts/tile_gen/extract_mbtiles) and [shrink_btrfs](scripts/tile_gen/shrink_btrfs) scripts for this very purpose.
103-
104-
This replaces a running service with a pure, file-system-level implementation. Since the Linux kernel's file caching is among the highest-performing and most thoroughly tested codes ever written, it delivers serious performance.
105-
106-
I run some [benchmarks](docs/quick_notes/http_benchmark.md) on a Hetzner server, the aim was to saturate a gigabit connection. At the end, it was able to serve 30 Gbit on loopback interface, on cold nginx cache.
107-
108112
## FAQ
109113

110114
### Full planet downloads
@@ -126,10 +130,8 @@ There are three public buckets:
126130

127131
### Domains and Cloudflare
128132

129-
Tiles are currently available on:
130-
131-
- tiles.openfreemap.org - Cloudflare proxied
132-
- direct.openfreemap.org - direct connection, Round-Robin DNS
133+
- `tiles.openfreemap.org` - Cloudflare proxied
134+
- `direct.openfreemap.org` - direct connection, Round-Robin DNS
133135

134136
The project has been designed in such a way that we can migrate away from Cloudflare if needed. This is the reason why there are a .com and a .org domain: the .com will always stay on Cloudflare to host the R2 buckets, while the .org domain is independent.
135137

website/assets/style.css

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -61,19 +61,19 @@ body {
6161
}
6262

6363
.static,
64-
h1,
65-
h2,
66-
h3,
67-
h4,
68-
h5,
69-
h6,
70-
.col-lbl,
71-
p,
72-
.button-container,
73-
#support-plans-slider {
74-
margin-left: 40px;
75-
margin-right: 40px;
76-
}
64+
h1,
65+
h2,
66+
h3,
67+
h4,
68+
h5,
69+
h6,
70+
.col-lbl,
71+
p,
72+
.button-container,
73+
#support-plans-slider {
74+
margin-left: 40px;
75+
margin-right: 40px;
76+
}
7777

7878
.static {
7979
max-width: 600px;

website/blocks/main.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ GitHub: [openfreemap](https://github.com/hyperknot/openfreemap) and [openfreemap
6262

6363
## What is the tech stack?
6464

65-
There is no tile server running; only Btrfs partition images with 300 million hard-linked files. This was my idea; I haven't read about anyone else doing this in production, but it works really well.
65+
There is no tile server running; only Btrfs partition images with 300 million hard-linked files. This was my idea; I haven't read about anyone else doing this in production, but it works really well. (You can read more about it on [GitHub](https://github.com/hyperknot/openfreemap).
6666

6767
There is no cloud, just dedicated servers. The HTTPS server is nginx on Ubuntu.
6868

0 commit comments

Comments
 (0)