A real-time map of geo coordinates designed for high loads.
This is an example project that updates a map in real time with millions of geocoordinates per day.
- Blazing -- Sub millisecond response times for writing locations
- Fast and Secure -- HTTP2 and HTTPS only
- Horizontally scalable
- Scales to millions of listeners
- New Relic integration
- Demo suite
Cartographer was built as a side project to handle very high loads of inbound traffic, and learn about scaling websockets, http2 and auto signing of TLS connections.
OS X & Linux:
# install docker 17+
# install go 1.8+
go run $GOROOT/src/crypto/tls/generate_cert.go --host localhost # writes cert.pem, key.pem
make dev
# available on https://localhost:8080 by default
# open https://localhost:8080/static/index.html in browser
make cities
# watch map update in browser
TODO
- Go 1.8.3+
- Glide 0.12.3+
- Echo 3.2.1+
- Docker 17+
- 0.0.1
- Work in progress
- Import is fast. Need to slow down map consumption though.
- Scale bottlenecks:
- Number of websocket listeners -- move to distributed pubsub model
- Better docs
- Make JS not so 2000s
- Prettify GUI
- Input validation
- Better error handling and communication
- Unit test concurrency model
Distributed under the GPL3. See LICENSE
for more information.
- Fork it (https://github.com/teastburn/cartographer/fork)
- Create your feature branch (
git checkout -b feature/fooBar
) - Commit your changes (
git commit -am 'Add some fooBar'
) - Push to the branch (
git push origin feature/fooBar
) - Create a new Pull Request