#security
Sysdig (это компания, которая занимается безопасностью контейнеров) опубликовала тренды безопасности за 23 год.
Главной проблемой они называют что пользователи не следят за созданными ресурсами. В частности за выданными правами приложениям. А это, например, workload identity или сетевые правила.
Далее они жалуются что юзеры выбирают скорость в ущерб безопасности.
Так же говорят что среднее время атаки около 10 минут и не стоит думать что если ваши контейнеры живут не долго у атакующего ничего не получится.
Полный репорт где-то там по ссылке.
Sysdig (это компания, которая занимается безопасностью контейнеров) опубликовала тренды безопасности за 23 год.
Главной проблемой они называют что пользователи не следят за созданными ресурсами. В частности за выданными правами приложениям. А это, например, workload identity или сетевые правила.
Далее они жалуются что юзеры выбирают скорость в ущерб безопасности.
Так же говорят что среднее время атаки около 10 минут и не стоит думать что если ваши контейнеры живут не долго у атакующего ничего не получится.
Полный репорт где-то там по ссылке.
Sysdig
Sysdig | Cloud Security Starts at Runtime
From runtime to development, gain real-time visibility into your cloud with Sysdig. Prioritize critical risks, detect threats instantly, and respond with confidence.
👍1
#cgroups #linux
Искал в интернете сведения про iocost и наткнулся на совершенно фееричный по своей полезности ресурс от FB.
В серии статей они рассказывают как с помощью механизмов cgroups добиваться большей утилизации на сервере не вредя основной нагрузке на сервере.
В цикле затрагиваются CPU/MEM/IO.
Советую прочитать всем кто интересуются перфоманс инжинирингом.
Искал в интернете сведения про iocost и наткнулся на совершенно фееричный по своей полезности ресурс от FB.
В серии статей они рассказывают как с помощью механизмов cgroups добиваться большей утилизации на сервере не вредя основной нагрузке на сервере.
В цикле затрагиваются CPU/MEM/IO.
Советую прочитать всем кто интересуются перфоманс инжинирингом.
facebookmicrosites.github.io
Resource Control Demo Overview | Resource Control Demo
We all want our workloads to utilize our machines as much as possible.
👍2
#almaLinux #redhat
Рассказ про то как делают АльмуЛинукс похожей на Редхат.
Пакеты берут из:
- базового образа от redhat (вообще отличная вещь я считаю для контейнеров)
- немного тянут из апстрима centos stream
- и чуть-чуть с опаской из OracleLinux
Далее собирают, сравнивают и получают альму.
Рассказ про то как делают АльмуЛинукс похожей на Редхат.
Пакеты берут из:
- базового образа от redhat (вообще отличная вещь я считаю для контейнеров)
- немного тянут из апстрима centos stream
- и чуть-чуть с опаской из OracleLinux
Далее собирают, сравнивают и получают альму.
archive.fosdem.org
FOSDEM 2024 - AlmaLinux: How to make a RHEL compatible distribution
👍1
#CFS #linux
Читал тут главу System Performance посвященную процессору и наткнулся на полиси шедулинга.
Ну вы все их знаете:
- RR
- FIFO
- NORMAL
- BATCH
- IDLE
- DEADLINE
Меня заинтересовало описание BATCH (говорят что это тоже самое что и NORMAL (OTHER), но всегда считается что это CPU-bound задача)
Но что это означает для шедулера CFS (Completely Fair Scheduler)?
Хоть и в 6 ядре говорят появился новый шедулер, разобраться до конца как работает CFS мне все же было интересно. Поэтому я зарылся в инет на несколько часов.
Для себя я вынес следующее:
- Каждый процессор имеет свою очередь шедулинга.
- выбирается процесс с меньшим vruntime
- vruntime - это виртуальное время проведенное на процессоре
- следовательно - процессы потребляющие CPU работают реже, а процессы потребляющие IO - чаще
- Использует красно-черные деревья для шедулинга процессов
- Учитывает nice
- Если у процесса nice = 0 - vruntime не изменяется.
- Если у процесса nice < 0 - vruntime становится меньше
- Если у процесса nice > 0 - vruntime становится больше
- Есть групповой шедулинг. Это когда группе процессов может быть назначена группа, и другой группе процессов может быть назначена группа. И CFS пытается сделать так чтобы эти две группы процессов получили равное количество процессорного времени, не смотря на то что в одной группе может быть 5 процессов, а в другой 50.
Итого, чем же BATCH отличается от NORMAL (OTHER)?
В моем понимании, так как все batch процессы считаются CPU-bound по умолчанию, они сразу помещаются в правую сторону красно-черного дерева очереди процессов и соответственно вызываются реже.
В процессе изысканий наиболее полезными оказались следующие ресурсы
- Статья по CFS
- Видео про шедулинг в Linux курса SE 350
Читал тут главу System Performance посвященную процессору и наткнулся на полиси шедулинга.
Ну вы все их знаете:
- RR
- FIFO
- NORMAL
- BATCH
- IDLE
- DEADLINE
Меня заинтересовало описание BATCH (говорят что это тоже самое что и NORMAL (OTHER), но всегда считается что это CPU-bound задача)
The difference is that this policy will cause the scheduler to always assume that the thread is CPU-intensive
Но что это означает для шедулера CFS (Completely Fair Scheduler)?
Хоть и в 6 ядре говорят появился новый шедулер, разобраться до конца как работает CFS мне все же было интересно. Поэтому я зарылся в инет на несколько часов.
Для себя я вынес следующее:
- Каждый процессор имеет свою очередь шедулинга.
- выбирается процесс с меньшим vruntime
- vruntime - это виртуальное время проведенное на процессоре
- следовательно - процессы потребляющие CPU работают реже, а процессы потребляющие IO - чаще
- Использует красно-черные деревья для шедулинга процессов
- Учитывает nice
- Если у процесса nice = 0 - vruntime не изменяется.
- Если у процесса nice < 0 - vruntime становится меньше
- Если у процесса nice > 0 - vruntime становится больше
- Есть групповой шедулинг. Это когда группе процессов может быть назначена группа, и другой группе процессов может быть назначена группа. И CFS пытается сделать так чтобы эти две группы процессов получили равное количество процессорного времени, не смотря на то что в одной группе может быть 5 процессов, а в другой 50.
Итого, чем же BATCH отличается от NORMAL (OTHER)?
В моем понимании, так как все batch процессы считаются CPU-bound по умолчанию, они сразу помещаются в правую сторону красно-черного дерева очереди процессов и соответственно вызываются реже.
В процессе изысканий наиболее полезными оказались следующие ресурсы
- Статья по CFS
- Видео про шедулинг в Linux курса SE 350
👍7
Зашел разговор в чате про токены, которые кубер выписывает сервис аккаунту пода для доступа к апи. Решил освежить знания.
#kubernetes #sa
https://telegra.ph/Kubernetes-SA-tokens-03-06
#kubernetes #sa
https://telegra.ph/Kubernetes-SA-tokens-03-06
Telegraph
Kubernetes SA tokens
#kubernetes #sa https://kubernetes.io/docs/reference/access-authn-authz/service-accounts-admin/ - Токен выданный SA в поде по-умолчанию имеет срок жизни час. - Токен запрашивается через TokenRequest API кубелетом - Автоматически выданный токен инвалидировать…
Разбирался тут с кешами процессора и нашел отличную хардкорную статью доступную для моего уровня понимания.
Так же вы узнаете за какое время процессор складывает два 64битных числа!
https://habr.com/ru/amp/publications/515660/
Так же вы узнаете за какое время процессор складывает два 64битных числа!
https://habr.com/ru/amp/publications/515660/
Хабр
Зачем процессорам нужен кэш и чем отличаются уровни L1, L2, L3
Во всех центральных процессорах любого компьютера, будь то дешёвый ноутбук или сервер за миллионы долларов, есть устройство под названием «кэш». И с очень большой вероятностью он обладает несколькими...
👍3
#linux #mem
Как вы думаете какое максимальное количество виртуальной памяти может выделить себе процесс в Linux?
Говорят примерно до 128 TB на x86_64
https://www.kernel.org/doc/Documentation/arch/x86/x86_64/mm.rst
И 256TB на ARM64
https://www.kernel.org/doc/Documentation/arch/arm64/memory.rst
Я решил проверить :)
Вот программка с помощью которой я это проверял:
А вот что получилось:
Что в итоге?
На ARM64 памяти выделили 170TB, а обещали 256TB.
Как вы думаете какое максимальное количество виртуальной памяти может выделить себе процесс в Linux?
Говорят примерно до 128 TB на x86_64
https://www.kernel.org/doc/Documentation/arch/x86/x86_64/mm.rst
И 256TB на ARM64
https://www.kernel.org/doc/Documentation/arch/arm64/memory.rst
Я решил проверить :)
Вот программка с помощью которой я это проверял:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
int main() {
char *chars;
size_t nbytes;
while(chars != MAP_FAILED) {
nbytes += 0x39999999; // almost 1GB
chars = mmap(
NULL,
nbytes,
PROT_READ | PROT_WRITE,
MAP_SHARED | MAP_ANONYMOUS,
-1,
0
);
munmap(chars, nbytes);
}
printf("Allocated %ld total GB\n", nbytes/1024/1024/1024);
exit(EXIT_FAILURE);
}
А вот что получилось:
5.14.0-362.18.1.el9_3.x86_64 #1 SMP PREEMPT_DYNAMIC
# free -m
total used free shared buff/cache available
Mem: 1031182 7334 1026066 82 2273 1023847
Swap: 0 0 0
# echo 0 > /proc/sys/vm/overcommit_memory - ОС смотрит на сколько памяти в системе + добавляет своп
# ./main.out
Allocated 1007 total GB
# echo 1 > /proc/sys/vm/overcommit_memory - ОС "не ограничивает" выделение памяти
# ./main.out
Allocated 130859 total GB
# echo 2 > /proc/sys/vm/overcommit_memory - ОС не дает больше чем в реальности сможет выделить
# ./main.out
Allocated 503 total GB - почему тут получилось 503GB мне не до конца ясно.
5.15.0-1034-raspi #37-Ubuntu SMP PREEMPT
# free -m
total used free shared buff/cache available
Mem: 905 198 346 3 360 616
(тут я немного модифицировал программу чтобы учесть что у меня всего 1GB оперативной памяти)
# echo 0 > /proc/sys/vm/overcommit_memory
# ./main.out
Allocated 906 total MB
# echo 1 > /proc/sys/vm/overcommit_memory
# ./main.out
Allocated 170 total TB
# echo 2 > /proc/sys/vm/overcommit_memory
root@raspberrypi-1:/home/azalio# ./main.out
Allocated 921 total MB
Что в итоге?
На ARM64 памяти выделили 170TB, а обещали 256TB.
🔥4
#physics
Интересное видео о том работает транзистор на физическом уровне. Заодно рассказывают как на них складываются и вычитаются числа.
Интересное видео о том работает транзистор на физическом уровне. Заодно рассказывают как на них складываются и вычитаются числа.
YouTube
Магия транзисторов: как мы научили компьютеры думать с помощью кусочков кремния?
В этом видео разбираемся, что представляет собой полупроводниковый транзистор - и как это несложное устройство позволило нам создавать сложнейшие электронные устройства, способные бросить вызов даже человеческому мозгу!
Подпишитесь на мой канал в Telegram:…
Подпишитесь на мой канал в Telegram:…
👍6
Azalio_tech
На ARM64 памяти выделили 170TB, а обещали 256TB.
#linux #mem #aslr
В итоге дело оказалось в ASLR и дырках в адресном пространстве.
Указание опции компилятору
Рассказали мне об этом на стековерфлоу :)
В итоге дело оказалось в ASLR и дырках в адресном пространстве.
Указание опции компилятору
-no-pie позволило выделить 255ТB виртуальной памяти. Рассказали мне об этом на стековерфлоу :)
👍4🔥1
#THP #linux #mem
Зашла в одном из рабочих чатов речь про Transparent Hugepages, которые заметно влияют на производительность систем и я пошел разбираться.
Грегг "святой" Брендан в книге System performance говорит:
Перкона проводила тест для PostgreSQL и тест показал что чуть хуже становится при включении THP.
Но в тоже время почти все дистрибутивы включают их по-умолчанию. На SO тоже задались этим вопросом и получили очевидные ответы.
На куберах у нас эта опция включена, но на некоторых нодах по запросу продукта была переведена в madvise.
А должна она быть включена или нет в кубере, видимо, без глубоких тестов так и останется неизвестным.
Зашла в одном из рабочих чатов речь про Transparent Hugepages, которые заметно влияют на производительность систем и я пошел разбираться.
Грегг "святой" Брендан в книге System performance говорит:
"Обратите внимание, что прозрачным огромным страницам традиционно сопутствовали
проблемы производительности, сдерживавшие их использование. Надеемся, что эти
проблемы были исправлены."
Перкона проводила тест для PostgreSQL и тест показал что чуть хуже становится при включении THP.
Но в тоже время почти все дистрибутивы включают их по-умолчанию. На SO тоже задались этим вопросом и получили очевидные ответы.
На куберах у нас эта опция включена, но на некоторых нодах по запросу продукта была переведена в madvise.
А должна она быть включена или нет в кубере, видимо, без глубоких тестов так и останется неизвестным.
Percona Database Performance Blog
Settling the Myth of Transparent HugePages for Databases
Transparent HugePages are reputed to cause performance degradation in database applications. Ibrar Ahmed sets out to discover if the rumors have foundation.
👍1
#kubernetes #k8s #etcd #scale
Занимательная статья про скейлинг кубер-компонентов.
- Скейлят etcd по нагруженным путям
- Скейлят контроллер-менеджеры по задачам (выселили GC отдельно)
- Скейлят api-servers через HPA
Для балансировки используют envoy.
Занимательная статья про скейлинг кубер-компонентов.
- Скейлят etcd по нагруженным путям
- Скейлят контроллер-менеджеры по задачам (выселили GC отдельно)
- Скейлят api-servers через HPA
Для балансировки используют envoy.
Хабр
Как ускорить кластер Kubernetes на 100 тысяч подов в 10 раз
Что делать, когда кластер превращается в тыкву? На этот вопросы мы начали отвечать в предыдущей статье . Сегодня продолжим разбирать способы построения кластеров большого объема. Первым шагом...
👍2
#os #db
Как насчет OS поверх распределенной базы данных?
Один энтузиас и его команда (MIT, Stanford, Google, VMware и тд) разработала распределенную OS, в которой главная мантра: "Все есть таблица".
И утверждают:
- Она проще кубера и линукса.
- Перфоманс локальной fs сравним с первомансом fs на линуксе.
- Одним легким движением руки fs превращается в lustre подобную.
- Можно легко откатить систему на любое ее состояние в прошлом. Вот прям на то состояние, которое было включая весь стейт.
OS в основном предназначена для Stateful FaaS сервисов (написанных на TypeScript и использующих PostgreSQL) и работает намного быстрее чем AWS Lambda (по его словам, конечно)
К сожалению, в открытом доступе ее нет и она продается в составе облака.
Как насчет OS поверх распределенной базы данных?
Один энтузиас и его команда (MIT, Stanford, Google, VMware и тд) разработала распределенную OS, в которой главная мантра: "Все есть таблица".
И утверждают:
- Она проще кубера и линукса.
- Перфоманс локальной fs сравним с первомансом fs на линуксе.
- Одним легким движением руки fs превращается в lustre подобную.
- Можно легко откатить систему на любое ее состояние в прошлом. Вот прям на то состояние, которое было включая весь стейт.
OS в основном предназначена для Stateful FaaS сервисов (написанных на TypeScript и использующих PostgreSQL) и работает намного быстрее чем AWS Lambda (по его словам, конечно)
К сожалению, в открытом доступе ее нет и она продается в составе облака.
👍1😁1
#perfomance #linux #haproxy
Прекрасный пост-ретроспектива о том, как искали утечку памяти в haproxy.
Прекрасный пост-ретроспектива о том, как искали утечку памяти в haproxy.
Рестарт haproxy приводил к порождению нового процесса, который в свою очередь активно аллоцировал память под свои нужды (напомню что старые не завершались). Следующий рестарт добавлял еще один процесс и так по кругу, пока критический объем памяти не активировал OOM Killer.
Linkedin
haproxy и утечка памяти
На днях диагностировал утечку памяти в кластере haproxy, в процессе исследования допустил несколько ошибок, что привело к более долгой локализации проблемы. На примере данного кейса хочу провести небольшое ретро.
👍3🔥2
#ietf #rfc
Погудим?
Как часто вы в команде обсуждаете сложные вопросы где нет однозначно верного ответа?
ansible или puppet?
kubernetes или nomad?
linux или windows?
Вот IETF сталкиваются с таким постоянно и написали rfc7282 о том как они ведут дискуссию и принимают решение о том что выбрать.
В целом их подход описывается 2 предложениями:
Если же раскрыть в нескольких предложениях, то я это у себя в голове сформировал так:
- Важно учесть все точки зрения на проблематику. Даже если 100 человек говорят, что технология А лучше технологии В, а 5 говорят обратное - важно разобраться почему 5 так говорят. И разобраться объективно с каждым возражением, потому что возможно 100 человек ошибаются.
- Если решение А можно сделать за N часов, а решение B за N^2, то предлагают делать решение A как бы идеально не было решение B.
- Стараются не голосовать, а гудеть. Это связанно с тем, что у компаний могут быть одни интересы, а у их работников - другие. И гудением можно скрыть свое несогласие с позицией компании. Послушайте - это выглядит очень занимательно.
Погудим?
Как часто вы в команде обсуждаете сложные вопросы где нет однозначно верного ответа?
ansible или puppet?
kubernetes или nomad?
linux или windows?
Вот IETF сталкиваются с таким постоянно и написали rfc7282 о том как они ведут дискуссию и принимают решение о том что выбрать.
В целом их подход описывается 2 предложениями:
We reject: kings, presidents and voting.
We believe in: rough consensus and running code.
Если же раскрыть в нескольких предложениях, то я это у себя в голове сформировал так:
- Важно учесть все точки зрения на проблематику. Даже если 100 человек говорят, что технология А лучше технологии В, а 5 говорят обратное - важно разобраться почему 5 так говорят. И разобраться объективно с каждым возражением, потому что возможно 100 человек ошибаются.
- Если решение А можно сделать за N часов, а решение B за N^2, то предлагают делать решение A как бы идеально не было решение B.
- Стараются не голосовать, а гудеть. Это связанно с тем, что у компаний могут быть одни интересы, а у их работников - другие. И гудением можно скрыть свое несогласие с позицией компании. Послушайте - это выглядит очень занимательно.
👍4
#docker
Вы когда-нибудь задумывались почему
Я недавно наткнулся на KEP-4216: Image pull per runtime class и подумал что будет интересно об этом рассказать.
В целом все просто. К образу прикладывается манифест, в котором указана платформа и какой конечный образ надо стянуть для этой платформы.
Посмотреть легко:
Сделать тоже в принципе не сложно.
Вы когда-нибудь задумывались почему
docker pull python работает и на amd64 и на arm? И даже на прости господи, s390x? Я когда-то об этом читал, но никогда не делал для своих образов. Я недавно наткнулся на KEP-4216: Image pull per runtime class и подумал что будет интересно об этом рассказать.
В целом все просто. К образу прикладывается манифест, в котором указана платформа и какой конечный образ надо стянуть для этой платформы.
Посмотреть легко:
docker manifest inspect python
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 2007,
"digest": "sha256:49f4118027f9494ebe47d3d9b6c7a46b6d7454a19a7ba42eca32734d8108b323",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 2007,
"digest": "sha256:089081c12425406b89f78493e32ae5672d442ed426b3965fc8cffe17992947f4",
"platform": {
"architecture": "arm",
"os": "linux",
"variant": "v5"
}
},
Сделать тоже в принципе не сложно.
GitHub
enhancements/keps/sig-node/4216-image-pull-per-runtime-class at master · kubernetes/enhancements
Enhancements tracking repo for Kubernetes. Contribute to kubernetes/enhancements development by creating an account on GitHub.
👍2
#kubernetes #spot
Предположим, что ваш СЕО сошел с ума и решил посчитать число Pi в kubernetes без всякого стораджа.
Но бюджет как всегда ограничен и вы решили использовать только спотовые инстансы.
Как же это сделать?
Что удивительно этим вопросом задавались не только воспалённые мозги человека, который спит по 3 часа в сутки, но и вполне серьезные компании.
Все вы скорее всего знаете проект Virtuozzo.
От него отпочковался проект CRIU.
А на основе него уже появился crik.
И он позволяет судя по описанию реализовать эту задачу, о чем рассказал на последнем kubecon его основатель.
Где же это можно применить в реальной жизни? В голову сразу приходят 2 варианта:
- батчевые задачи
- ML!
Представьте, можно запускать долгие задачи на спотовых инстансах и здорово экономить!
Сам разработчик говорит что они это применяют для запуска 2кк тестов.
Я сомневаюсь, что облака встроят эту функциональность для клиентов, но что мешает самим клиентам это сделать?
Предположим, что ваш СЕО сошел с ума и решил посчитать число Pi в kubernetes без всякого стораджа.
Но бюджет как всегда ограничен и вы решили использовать только спотовые инстансы.
Как же это сделать?
Что удивительно этим вопросом задавались не только воспалённые мозги человека, который спит по 3 часа в сутки, но и вполне серьезные компании.
Все вы скорее всего знаете проект Virtuozzo.
От него отпочковался проект CRIU.
А на основе него уже появился crik.
И он позволяет судя по описанию реализовать эту задачу, о чем рассказал на последнем kubecon его основатель.
Где же это можно применить в реальной жизни? В голову сразу приходят 2 варианта:
- батчевые задачи
- ML!
Представьте, можно запускать долгие задачи на спотовых инстансах и здорово экономить!
Сам разработчик говорит что они это применяют для запуска 2кк тестов.
Я сомневаюсь, что облака встроят эту функциональность для клиентов, но что мешает самим клиентам это сделать?
#kubelet #kubernetes #containerd
Недавно столкнулся с ошибкой на проде: не стартовали static pods из-за невозможности скачать pause контейнер. Разбор этого случая привел к написанию статьи ниже.
Дано:
- containerD 1.6.
- kubernetes 1.28.
- Один приватный регистри с аутентификацией.
- Абсолютно все образа загружаются с этого регистри.
Вопрос:
- Где необходимо и достаточно указать данные для доступа к регистри чтобы запустить под?
Уверен большинство из вас правильно ответили на этот вопрос.
Для тех кто сомневается ответ под катом.
Необходимо и достаточно указать данные для доступа в конфиге containerD.
А тем кому интересны кровавые подробности, проходите по ссылке 🙂
Недавно столкнулся с ошибкой на проде: не стартовали static pods из-за невозможности скачать pause контейнер. Разбор этого случая привел к написанию статьи ниже.
Дано:
- containerD 1.6.
- kubernetes 1.28.
- Один приватный регистри с аутентификацией.
- Абсолютно все образа загружаются с этого регистри.
Вопрос:
- Где необходимо и достаточно указать данные для доступа к регистри чтобы запустить под?
Уверен большинство из вас правильно ответили на этот вопрос.
Для тех кто сомневается ответ под катом.
А тем кому интересны кровавые подробности, проходите по ссылке 🙂
Gist
Аутентификация в private registry в kubernetes и containerD
Аутентификация в private registry в kubernetes и containerD - containerD_kubelet_auth.md
🔥2
#kubernetes #kube-scheduler
Огромный пост от инженера OpenAI про то, как осуществляется preemption в kube-scheduler.
Огромный пост от инженера OpenAI про то, как осуществляется preemption в kube-scheduler.
❤2🔥2
#kubernetes #security
Интересный проект для защиты подов. Основная фишка - недоверие облачному провайдеру, но запуск нагрузки на облачном провайдере :)
https://docs.edgeless.systems/contrast/
Основан на kata-containers и Confidential Containers
Интересный проект для защиты подов. Основная фишка - недоверие облачному провайдеру, но запуск нагрузки на облачном провайдере :)
https://docs.edgeless.systems/contrast/
Основан на kata-containers и Confidential Containers
Contrast is designed to keep all data always encrypted and to prevent access from the infrastructure layer. It removes the infrastructure provider from the trusted computing base (TCB). This includes access from datacenter employees, privileged cloud admins, own cluster administrators, and attackers coming through the infrastructure, for example, malicious co-tenants escalating their privileges.
👍1
Возникла у меня рабочая потребность разобраться в google protobuf и как это может быть реализованно на Go.
А когда я разбираюсь, я обычно залезаю очень подробно внутрь.
Статей, которые на достаточно подробном уровне дали вводную и были понятны новичку я не нашел, поэтому написал свою.
По сути дела это пример как сделать клиент-сервер на protobuf и gRPC с очень подробными комментариями.
https://github.com/azalio/protobuf-example
А когда я разбираюсь, я обычно залезаю очень подробно внутрь.
Статей, которые на достаточно подробном уровне дали вводную и были понятны новичку я не нашел, поэтому написал свою.
По сути дела это пример как сделать клиент-сервер на protobuf и gRPC с очень подробными комментариями.
https://github.com/azalio/protobuf-example
GitHub
GitHub - azalio/protobuf-example
Contribute to azalio/protobuf-example development by creating an account on GitHub.
👍11