go meetup 2015 04-23

29
Go в Спутник.Картах В бою

Upload: maxim-dementyev

Post on 16-Jul-2015

26.933 views

Category:

Technology


1 download

TRANSCRIPT

Page 1: Go meetup 2015 04-23

Go в Спутник.КартахВ бою

Page 2: Go meetup 2015 04-23

Go в Спутник.КартахВ бою

Page 3: Go meetup 2015 04-23

Тайловый бэкенд Gopnik =)

Page 4: Go meetup 2015 04-23

Тайловый бэкенд

- Карта состоит из тайлов

Page 5: Go meetup 2015 04-23

Тайловый бэкенд

Page 6: Go meetup 2015 04-23

Тайловый бэкенд

- Карта состоит из тайлов- Используются различные источники

данных

Page 7: Go meetup 2015 04-23

Тайловый бэкенд

Page 8: Go meetup 2015 04-23

Тайловый бэкенд

- Карта состоит из тайлов- Используются различные источники

данных- Используется специализированная

библиотека Mapnik (написана на C++)- Генерация тайлов занимает

существенное время

Page 9: Go meetup 2015 04-23

Тайловый бэкенд

- Часть тайлов генерируется заранее в пакетном режиме

- Часть - по требованию

Page 10: Go meetup 2015 04-23

Тайловый бэкенд

Page 11: Go meetup 2015 04-23

Open Source

http://sputnik-maps.github.io/

Page 12: Go meetup 2015 04-23

Поиск объектов реального мира

Page 13: Go meetup 2015 04-23

Особенности :-)

- Учитывает особенности строения адресного пространства (вложенность объектов)

- “Угадывает мысли” (учитывает подразумеваемый контекст)

- Различает “близко” и “далеко”, “большой” и “маленький”

Page 14: Go meetup 2015 04-23

Особенности :-(

- Много деталей, специфичных только для России

Page 15: Go meetup 2015 04-23

Обратный геокодер

- Преобразует координаты в адрес

- Используется порт библиотеки S2https://github.com/golang/geo

Page 16: Go meetup 2015 04-23

Архитектура

Page 17: Go meetup 2015 04-23

Архитектура

- Относительно небольшая коллекция данных (входит в оперативную память)

- Компоненты – простые веб-сервисы

- MVC-like

(✿◠‿◠)

Page 18: Go meetup 2015 04-23

Что нам дает Go

Page 19: Go meetup 2015 04-23

Что нам дает Go

- Скорость разработки

- Простота обучения

- Тестируемый код

Page 20: Go meetup 2015 04-23

Что нам дает Go

- Скорость выполнения

- Скорость компиляции

- Стандартная библиотека

- Tools

gofmt, gorename, cover, pprof, expvargotype, golint, vet, errcheck

Page 21: Go meetup 2015 04-23

Трудности(╯°□°)╯︵ ┻━┻

Page 22: Go meetup 2015 04-23

Gob

- gobhttp://blog.golang.org/gobs-of-datahttp://golang.org/pkg/encoding/gob

- не быстрый

- const tooBig = 1 << 30

Page 23: Go meetup 2015 04-23

Сторонние библиотеки

:-(- писать биндинги С++ ↔ Go непросто- segfault безжалостен

:-)- изолированные процессы- RPC

Page 24: Go meetup 2015 04-23

Данные в памяти и GC

- Хранишь миллионы объектов – GC придет за тобой

- длительность stop-the-world пропорциональна количеству указателей в heap

Page 25: Go meetup 2015 04-23

Данные в памяти и GC

Page 26: Go meetup 2015 04-23

Данные в памяти и GC

Где прячутся указатели

- указатели- мапы- слайсы- строки- интерфейсы- ...

Page 27: Go meetup 2015 04-23

Данные в памяти и GC

Как уменьшить длительность stop-the-world

- индекс массива вместо указателей

- строки положить в один большой []bytetype PString struct {

Offset: uint32

Lenghth: uint32

}

Page 28: Go meetup 2015 04-23

Данные в памяти и GC

Как уменьшить длительность stop-the-world

- mmap

- генерация кода с константамиvar data = map[string]int{

"a":1,

"b":2,

...

Page 29: Go meetup 2015 04-23

package mainimport "fmt"

func main() { c := []struct { name string email string }{ { name: "Константин Черкасов", email: "[email protected]", }, { name: "Максим Дементьев", email: "[email protected]", }, } fmt.Println(c)}