Chapter 2. The Production Environment at Google, from the Viewpoint of an SRE
- Machine: A piece of hardware (or perhaps a VM)
 - Server: A piece of software that implements a service
 
Градация: machine in rack-unit,rack,row,cluster(logical),dc,campus(eg. availability zone)
Сеть: Jupiter(фабрика коммутаторов с bandwidth ~1.3 Пб/с).
Borg
Managing Machines

Borg (похож на mesos) - он оперирует job-ами, это может быть запуск демона и etc. Borg шедулид джобы на разные ноды и следит за то чтобы они там выполнялись (scheduler,kubelet).
Обращение в job-е идет по BNS(Borg Naming Service) имени: /bns/<cluster>/<user>/<job name>/<task number>, BNS резоливится в <IP address>:<port> (k8s - <svc-name>.<ns>.svc.cluster.local kube-dns или <svc-name>.<ns>:<port> для доступа внутри куба)
Scheduler как и в k8s следит за ресурсами которые запрашивает job-а, а так же старается назначать джобы на машины в разных стойках.
Storage

СХД от google для Borg-а можно сравнить с Lustre и Hadoop Distributed File System (HDFS)
Networking
Для построения сети использует протокол OpenFlow (wiki, habr) - это контроллер который программно управляет сетевыми железяками.
Некоторые сервисы геораспределены, используется балансировка на трех уровнях:
- geo DNS
 - на уровне сервисов
 - gRPC
 
Other System Software
Lock Service
Chubby - сервис блокировок, использует протокол Paxos и асинхронно обращается к Consensus.
Используется, например для выбора мастера, если например у нас есть 5 реплик, но единовременно мастером может быть только одна из них.
Monitoring and Alerting - Borgmon
Местный прометеей.
swe infra / environment
Сервисы между собой общаются через Stubby - это местная версия gRPC. Данные передаются через protocol buffers = protobufs (аналог XML)
Все разработчики работают в монорепе и активно шлют MR-ы в соседние сервисы, если находят там что-то.
Push-on-Green - это местный CD когда при прохождении автотестов идет деплой в прод.
Shakespeare (сервис - пример)
Сервис, который помогает определить в каких произведениях шекспира находится указанное вами слово.
- БД (bigtable) где лежат данные (тексты)
 - frontend: обрабатывает запросы клиентов
 
MapReduce:
- The mapping phase reads Shakespeare’s texts and splits them into individual words. This is faster if performed in parallel by multiple workers.
 - The shuffle phase sorts the tuples by word.
 - In the reduce phase, a tuple of (word, list of locations) is created.
 
Каждый кортеж записывается в виде строки в bigtable, ключ - слово
Lifecycle of a Request

- Клиент делает запрос на URL сервиса. DNS сервис google резолвит DNS-запрос в адрес GFE при помощи GSLB
 - Запрос клиента попадает на GFE
 - GFE при помощи GSLB находит FE приложения и передает ему данные через RPC
 - FE связывается с BE приложения и передает данные через protobuf (местный JSON). Найти экземпляр BE (BNS адрес) помогает GSLB
 - BE идет в базу (в этом случае в Bigtable) достает данные и они возвращаются клиенту
 
QoS
Зная примерное количество запросов в секунду которое может обрабатывать один экземпляр бэкэнда приложения - вычисляем сколько нужно и как их географически разнести. Как геораспределенные бэки будут ходить в базу.
Key Insights
Symlinks
- blobstore - (26)
 - geo DNS - (19)
 - gRPC - (20)
 - Chubby - (23)
 
note
Empty