Масштабирование
Вертикальное масштабирование — заменить сервер на более мощный. Способ решить проблему с производительностью в моменте. Но не работает на большой дистанции.
Горизонтальное масштабирование — запустить несколько экземпляров приложения на разных машинах и балансировать нагрузку между ними. Это правильный путь. Легко масштабировать стейт-лесс сервисы, но с базами данных все усложняется.
Для масштабирования базы данных на операции чтения обычно применяется довольно простая тактика — создается полная копия базы, которая доступна только для чтения (реплика), и часть запросов отправляется туда. Иногда данные становятся не согласованными. С этим сложно бороться.
Масштабировать базу данных на операции записи черезвычнайно сложно. Например, можно разделить узлы для записи разных данных.
#микросервисы
Вертикальное масштабирование — заменить сервер на более мощный. Способ решить проблему с производительностью в моменте. Но не работает на большой дистанции.
Горизонтальное масштабирование — запустить несколько экземпляров приложения на разных машинах и балансировать нагрузку между ними. Это правильный путь. Легко масштабировать стейт-лесс сервисы, но с базами данных все усложняется.
Для масштабирования базы данных на операции чтения обычно применяется довольно простая тактика — создается полная копия базы, которая доступна только для чтения (реплика), и часть запросов отправляется туда. Иногда данные становятся не согласованными. С этим сложно бороться.
Масштабировать базу данных на операции записи черезвычнайно сложно. Например, можно разделить узлы для записи разных данных.
#микросервисы
Кеширование
Кешировать результаты можно на клиенте, можно в прокси-сервере, а можно на сервере:
+ если клиент управляет кешом, такой кеш сложно инвалидировать с сервера, зато клиент получает результат запроса очень быстро;
+ если прокси-сервер управляет кешом, то инвалидировать этот кеш сложно всем, результат все равно не получается быстро, зато не нужно вносить никаких правок в код, достаточно просто вставить прокси между сервером и клиентов;
+ если сервер управляет кешом, то для клиента это незаметно, сервис легко управляет временем жизни кеша, но скорость его ответа не может быть меньше чем лаг сети.
В реальных проектах, обычно, используется все три варианта кеширования.
#микросервисы
Кешировать результаты можно на клиенте, можно в прокси-сервере, а можно на сервере:
+ если клиент управляет кешом, такой кеш сложно инвалидировать с сервера, зато клиент получает результат запроса очень быстро;
+ если прокси-сервер управляет кешом, то инвалидировать этот кеш сложно всем, результат все равно не получается быстро, зато не нужно вносить никаких правок в код, достаточно просто вставить прокси между сервером и клиентов;
+ если сервер управляет кешом, то для клиента это незаметно, сервис легко управляет временем жизни кеша, но скорость его ответа не может быть меньше чем лаг сети.
В реальных проектах, обычно, используется все три варианта кеширования.
#микросервисы
Кеширование
В HTTP встроен мощный механизм кеширования. Можно управлять временем жизни кеша через заголовки
Часто чтобы разгрузить сервис применяется сокрытие источника данных. При этом подходе, клиенты могут получить данные только из кеша. Если в нем нет нужных данных, клиент ничего не получает, а сервис-поставщик реагирует на это событие и а асинхронном режиме добавляет данные в кеш. При следующем запросе, клиент уже получит нужные ему данные.
Кеширование — это опасно. Можно легко накосячить (сообщить клиенту, что кеш вечный, например) и потом долго исправлять все это. Поэтому, нужно быть очень осторожным и стараться делать максимально простые для понимания системы кеширования.
#микросервисы
В HTTP встроен мощный механизм кеширования. Можно управлять временем жизни кеша через заголовки
cache-control
и expires
и передавать серверу ETag для получения только новой версии ресурса. Если сервисы общаются по HTTP, то можно смело кешировать данные на стороне клиента, в протокол строен удобный инструментарий для этого.Часто чтобы разгрузить сервис применяется сокрытие источника данных. При этом подходе, клиенты могут получить данные только из кеша. Если в нем нет нужных данных, клиент ничего не получает, а сервис-поставщик реагирует на это событие и а асинхронном режиме добавляет данные в кеш. При следующем запросе, клиент уже получит нужные ему данные.
Кеширование — это опасно. Можно легко накосячить (сообщить клиенту, что кеш вечный, например) и потом долго исправлять все это. Поэтому, нужно быть очень осторожным и стараться делать максимально простые для понимания системы кеширования.
#микросервисы
Теорема CAP
В распределенных системах есть три компромиссных по отношению друг к другу свойства: согласованность, доступность и терпимость к разделению. Любая распределенная система может сохранить только два из них при чрезвычайной ситуации.
#микросервисы
В распределенных системах есть три компромиссных по отношению друг к другу свойства: согласованность, доступность и терпимость к разделению. Любая распределенная система может сохранить только два из них при чрезвычайной ситуации.
#микросервисы
🌚 всё, конспект "Создания микросервисов" закончился.
Это хорошая книга, она рассказывает о сложных и важных штуках. Такой, хай-енд контент.
Даже есть вы не строите распределенные системы, книгу прочитать стоит.
Через пару недель я соберу конспект в одном месте, почищу и выложу в виде заметки.
#микросервисы
Это хорошая книга, она рассказывает о сложных и важных штуках. Такой, хай-енд контент.
Даже есть вы не строите распределенные системы, книгу прочитать стоит.
Через пару недель я соберу конспект в одном месте, почищу и выложу в виде заметки.
#микросервисы
Больше про CAP-теорему
Кстати, про теорему CAP есть отличный подкаст. Там Рахим рассказывает не только о сути, но и приводит простое доказательство.
Вообще, очень любопытно, что в нашей области есть штуки, которые просто невозможны и это строго доказано.
#общие_знания
Кстати, про теорему CAP есть отличный подкаст. Там Рахим рассказывает не только о сути, но и приводит простое доказательство.
Вообще, очень любопытно, что в нашей области есть штуки, которые просто невозможны и это строго доказано.
#общие_знания
Pocket Casts
Мысли и методы
Научно-образовательный подкаст о программировании, математике, вселенной и вычислимости.
(До 24 выпуска подкаст выходил под брендом "Хекслет")
(До 24 выпуска подкаст выходил под брендом "Хекслет")
This media is not supported in your browser
VIEW IN TELEGRAM
DDD в Node.js — уже в эту субботу!
Никаких Hello-MVC примеров, реальные задачи, реальные решения. За три часа мы вместе запилим небольшой сервис и оценим, почему он получился клёвым.
18 апреля 2020, 14.00 МСК, 1500 рублей.
Никаких Hello-MVC примеров, реальные задачи, реальные решения. За три часа мы вместе запилим небольшой сервис и оценим, почему он получился клёвым.
18 апреля 2020, 14.00 МСК, 1500 рублей.
Напоминаю, вебинар через три часа. Если вы хотели купить, но тянули — сейчас самое время 😇
Вчера был вебинар, поэтому не было дайджеста. Вот вам маленький сегодня 🌚
+ Refactoring This class is too large — Мартин Фаулер на живом примере разбирает рефакторинг слишком большого класса
+ Как быть, если всё моё время уходит на разработку всё новых и новых фич? — как объяснить бизнесу необходимость уплаты технического долга
+ Архитектура для начинающих или почему не нужно вставлять флажок в человека-меча — простая вводная статья про важность правильного дизайна
#дайджест
+ Refactoring This class is too large — Мартин Фаулер на живом примере разбирает рефакторинг слишком большого класса
+ Как быть, если всё моё время уходит на разработку всё новых и новых фич? — как объяснить бизнесу необходимость уплаты технического долга
+ Архитектура для начинающих или почему не нужно вставлять флажок в человека-меча — простая вводная статья про важность правильного дизайна
#дайджест
Машинное обучение
Для меня, одна из самых загадочных областей в IT — это машинное обучение и все что крутится вокруг. Я понимаю, что там происходят крутые вещи, но больше не понимаю ничего.
Кажется, что иметь хотя бы поверхностные знания полезно. Вот хорошая тематическая статья — Машинное обучение для людей :: Разбираемся простыми словами.
#общие_знания
Для меня, одна из самых загадочных областей в IT — это машинное обучение и все что крутится вокруг. Я понимаю, что там происходят крутые вещи, но больше не понимаю ничего.
Кажется, что иметь хотя бы поверхностные знания полезно. Вот хорошая тематическая статья — Машинное обучение для людей :: Разбираемся простыми словами.
#общие_знания
vas3k.blog
Машинное обучение для людей
None
Где поесть?
Два месяца назад я переехал на Пхукет и растерялся — я не понимал, где тут есть стоит, а где нет.
За время жизни в Питере я привык к крутым заведениям со вкусной едой, но после приезда в новое место растерялся. Это не в первый раз, во многих путешествиях я сталкивался с такой же проблемой — ты или будешь есть в стремных туристических местах, или должен обладать скилом поиска классного.
Так я придумал бота — «Где поесть?» @trip_trip_robot.
Он умеет выбирать хорошее рядом, понимает время суток и вообще классный. Пока он знает не так много локаций — Таллин, Петербург и Пхукете, и немного Томск, Москву, Новосибирск, Тель-Авив, Хельсинки, Берлин и Протарас. Но я ищу варианты, как мастштабировать его и научить искать еду везде.
Пробуйте, пишите фидбеки (@igorkamyshev) и ешьте вкусно. Я понимаю, что сейчас почти везде в России все закрыто, но вы все равно попробуйте. А как откроется — я выкачу новую версию, еще лучше. И напомню.
Два месяца назад я переехал на Пхукет и растерялся — я не понимал, где тут есть стоит, а где нет.
За время жизни в Питере я привык к крутым заведениям со вкусной едой, но после приезда в новое место растерялся. Это не в первый раз, во многих путешествиях я сталкивался с такой же проблемой — ты или будешь есть в стремных туристических местах, или должен обладать скилом поиска классного.
Так я придумал бота — «Где поесть?» @trip_trip_robot.
Он умеет выбирать хорошее рядом, понимает время суток и вообще классный. Пока он знает не так много локаций — Таллин, Петербург и Пхукете, и немного Томск, Москву, Новосибирск, Тель-Авив, Хельсинки, Берлин и Протарас. Но я ищу варианты, как мастштабировать его и научить искать еду везде.
Пробуйте, пишите фидбеки (@igorkamyshev) и ешьте вкусно. Я понимаю, что сейчас почти везде в России все закрыто, но вы все равно попробуйте. А как откроется — я выкачу новую версию, еще лучше. И напомню.
Preact — идея на 5, реализация на 3
Preact — классный, но есть нюансы. Однажды я делал приложение, в котором был очень критичен перформанс. Попробовал внедрить в него Preact и получилось неплохо, но в итоге пришлось отказаться от этой идеи и добавить в бандл около 40кб.
Читать на Medium
#react
Preact — классный, но есть нюансы. Однажды я делал приложение, в котором был очень критичен перформанс. Попробовал внедрить в него Preact и получилось неплохо, но в итоге пришлось отказаться от этой идеи и добавить в бандл около 40кб.
Читать на Medium
#react
Medium
Preact — идея на 5, реализация на 3
Preact — классный. Но есть нюансы. Попробовал перевести проект на него и вот что получилось.
В январе я сделал список маст-ридов для разработчиков, теперь хочется перевести его на английский. Ищу помощников для перевода — пишите мне @igorkamyshev, или присылайте сразу ПРы — igorkamyshev/mustread.
Ну и ставьте звездочки, рассказывайте друзьям 🌚
Ну и ставьте звездочки, рассказывайте друзьям 🌚
read.kamyshev.me
Mustread List | kamyshev.code
Невероятный список книг, которые стоит прочитать кажому разработчику
Давно не было дайджестов 💁♂️
Минутука флаттера:
+ Почему Flutter побеждает?
+ Новое приложение «Медузы». Почему Flutter?
+ A first look at records and tuples in JavaScript — JS продолжает раздуваться, на очереди рекоды и теплы, штош
+ Идея механизма авторизации с нулевым знанием — классная заметка о необычной системе авторизации в вебе
+ Почему JetBrains не напишет легковесную IDE — ответ на вечный вопрос 😉
#дайджест
Минутука флаттера:
+ Почему Flutter побеждает?
+ Новое приложение «Медузы». Почему Flutter?
+ A first look at records and tuples in JavaScript — JS продолжает раздуваться, на очереди рекоды и теплы, штош
+ Идея механизма авторизации с нулевым знанием — классная заметка о необычной системе авторизации в вебе
+ Почему JetBrains не напишет легковесную IDE — ответ на вечный вопрос 😉
#дайджест
Пыщ, пыщ, сегодня в 19 МСК буду в прямом эфире Фронтенд Юности, приходите — https://www.youtube.com/watch?v=iGv0yqMnCHQ
YouTube
#142 Самый Улетный
В гостях Игорь Камышев. Игорь Работает в команде веб-платформы aviasales.ru (поиск дешевых авиабилетов), делает жизнь фронтендеров приятнее, строит инфраструктуру разработки. Ведет телеграм канал @kamyshev_code.
0:21 Вступление. О госте и DI
5:01 Как устроен…
0:21 Вступление. О госте и DI
5:01 Как устроен…
Фронтенд Юность выложили смонтированный подкаст — https://t.co/cvlUBD02Gp?amp=1
SoundCloud
#142 Последний шанс уехать подальше
В гостях Игорь Камышев https://twitter.com/kamyshev_code из Aviasales
Вступление. О госте и DI (0:44)
Как устроен фронтенд и бэкенд в Aviasales (4:04)
Про создание дизайн-систем (10:44)
Офисы и кале
Вступление. О госте и DI (0:44)
Как устроен фронтенд и бэкенд в Aviasales (4:04)
Про создание дизайн-систем (10:44)
Офисы и кале
Готовлю доклад про
Этот менеджер пакетов хранит все зависимости прямо в репозитории, в виде архивов. А мир JS-зависимостей прикрасен и удивителен. Некоторые архивы весят больше 100MB, такие большие файлы нельзя грузить на GitHub (про другие сервисы не знаю) через Git. Это очень неудобно, и единственный выход, который я нашел — хранить такие файл в Git Large File Storage.
Вот так удобство прорывного инструмента разбивается о криворукость разработчиков.
#js
yarn@berry
, буду делится с вами некоторыми заметками-черновиками.Этот менеджер пакетов хранит все зависимости прямо в репозитории, в виде архивов. А мир JS-зависимостей прикрасен и удивителен. Некоторые архивы весят больше 100MB, такие большие файлы нельзя грузить на GitHub (про другие сервисы не знаю) через Git. Это очень неудобно, и единственный выход, который я нашел — хранить такие файл в Git Large File Storage.
Вот так удобство прорывного инструмента разбивается о криворукость разработчиков.
#js
Medium
File abc.xyz exceeds GitHub’s file size limit of 100.00 MB — Git Large File Storage to the rescue!
In a recent project of mine (Flutter + Unity) some very large files were exported from Unity. These files then had to be put below the…
Давно не рассказывал о факапах, которые случались со мной.
Два года назад я сходил на митап и послушал доклад про redux-symbiote. Меня очень вдохновила эта идея — писать ревьюсеры и экшон-креаторы всегда бесило, а тут вужх, и все готово.
Через пару недель на работе мы начинали новый проект и я решил вкрутить туда эту библиотеку. Конечно, перед этим я внимательно изучил ее, прочитал весь код, разобрался насколько легко будет в случае чего от нее отказаться, кто ее поддерживает. Все было отлично.
Я не учел пары вещей. Во-первых, я плохо презентовал эту штуку остальным членам команды и многие из них так и не поняли, что это и зачем оно нужно. Во-вторых, я недооценил сложности с интеграцией других библиотек в эту.
В итоге, библиотека всех бесила и только мешала. В последующих проектах мы ее больше не использовали.
Это была технология ради технологии, она решала выдуманную проблему (писать меньше шаблонного кода), но создавала кучу новых. В первую очередь, повышала порог входа в проект. Не делайте так, не приносите ничего, если не понимаете какую оно решает боль.
#кейс
Два года назад я сходил на митап и послушал доклад про redux-symbiote. Меня очень вдохновила эта идея — писать ревьюсеры и экшон-креаторы всегда бесило, а тут вужх, и все готово.
Через пару недель на работе мы начинали новый проект и я решил вкрутить туда эту библиотеку. Конечно, перед этим я внимательно изучил ее, прочитал весь код, разобрался насколько легко будет в случае чего от нее отказаться, кто ее поддерживает. Все было отлично.
Я не учел пары вещей. Во-первых, я плохо презентовал эту штуку остальным членам команды и многие из них так и не поняли, что это и зачем оно нужно. Во-вторых, я недооценил сложности с интеграцией других библиотек в эту.
В итоге, библиотека всех бесила и только мешала. В последующих проектах мы ее больше не использовали.
Это была технология ради технологии, она решала выдуманную проблему (писать меньше шаблонного кода), но создавала кучу новых. В первую очередь, повышала порог входа в проект. Не делайте так, не приносите ничего, если не понимаете какую оно решает боль.
#кейс