Yandex / Яндекс (Processor/Scheduler)
Актуальность: 1 кв 2026
Задача: Реализовать сервис, который будет: misc/general
Заголовок раздела «Задача: Реализовать сервис, который будет: misc/general»- быстро принимать входные задания;
- отдавать результат задания по запросу;
- если результата нет, возвращать соответствующий статус.
Задача: Процессор - сервис, который выполняет долгую ресурсоемкую операцию. Он уже реализован. Возвращаемые им ошибки связаны исключительно с некорректными входными данными, устойчивы и перезапрашивать их бесполезно. go/errors-panic
Заголовок раздела «Задача: Процессор - сервис, который выполняет долгую ресурсоемкую операцию. Он уже реализован. Возвращаемые им ошибки связаны исключительно с некорректными входными данными, устойчивы и перезапрашивать их бесполезно. go/errors-panic»type Processor interface { Process([]byte) ([]byte, error)}Задача: Считаем, что у нас есть генератор уникальных идентификаторов (например, UUID). Генератор гарантирует, что коллизий не будет. go/maps
Заголовок раздела «Задача: Считаем, что у нас есть генератор уникальных идентификаторов (например, UUID). Генератор гарантирует, что коллизий не будет. go/maps»type ID string
// func NewID() IDШедулер принимает от клиентов задачи, ставит в очередь и запускает в процессинг:
- обеспечивает, что единовременно запущено не более threads методов process;
- дает возможность проверить статус задачи и получить результат;
- не блокирует методы своего публичного интерфейса на процессинг.
type Scheduler struct { processor Processor}
func NewScheduler( prc Processor, threads int,) Scheduler { // todo initialization logic return Scheduler{ processor: prc, }}
func (s *Scheduler) Queue(request []byte) ID { // todo implement return ""}
func (s *Scheduler) Status(id ID) (status string, result []byte, err error) { // todo implement return}Задача: Для сохранения данных в нашем распоряжении есть быстрое персистентное хранилище, которое описывается интерфейсом. По сути БД. Хранилище может делать Create/Update, поиск конкретной записи по primary key, и поиск набора записей по критериям. Можно добавить в конструктор шедулера. architecture/patterns
Заголовок раздела «Задача: Для сохранения данных в нашем распоряжении есть быстрое персистентное хранилище, которое описывается интерфейсом. По сути БД. Хранилище может делать Create/Update, поиск конкретной записи по primary key, и поиск набора записей по критериям. Можно добавить в конструктор шедулера. architecture/patterns»type FindOperator struct { Key, Operator, Value string // ограничение на value - 255 символов // пример "<birthplace ", "=", "Moscow ">, "<birthdate ", ">", "2000-01-01 ">}
type Storage[T any] interface { Store(T, *ID) ID // выполняет Upsert, если ID не передан то генерирует его Get(ID) T FindIDs([]FindOperator) []ID}