Compare commits

...

7 Commits

21 changed files with 358 additions and 14 deletions

View File

@ -0,0 +1,35 @@
---
aliases:
tags:
- maturity/🌱
date:
- - 2024-03-12
zero-link:
- "[[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]"
parents:
linked:
---
CAP теорема — это принцип, описывающий фундаментальные ограничения, с которыми сталкиваются распределённые вычислительные системы в контексте обеспечения следующих трёх свойств:
- **Согласованность (Consistency)**: Каждый раз, когда данные читаются, возвращается самое последнее записанное значение или ошибка. С другими словами, операции с данными выглядят так, будто выполняются в некоторой строгой последовательности, одна за другой
- **Доступность (Availability)**: Каждый запрос на получение или запись данных получает ответ, независимо от состояния системы, даже если некоторые части системы вышли из строя.
- **Устойчивость к разделению (Partition Tolerance)**: Система продолжает функционировать, даже если произошло "разделение" — потеря связи между узлами в распределённой сети. То есть система способна переносить произвольное число сообщений, которые задерживаются или теряются в сети.
==Согласно теореме CAP, в любой момент времени система может обеспечивать только два из этих трёх свойств.== Это означает, что при разработке системы приходится принимать компромисс между этими свойствами в зависимости от требований приложения и условий эксплуатации. Например, если для системы критически важна согласованность данных и её устойчивость к разделению, возможно придётся пожертвовать её доступностью в некоторых сценариях.
## Свободные заметки
- Google заявляет, что их продукт Google Spanner якобы нарушает CAP теорему.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Архитектура ПО|00 Архитектура ПО]]
**Родитель**::
**Источник**::
**Автор**::
**Создана**:: [[2024-03-12]]
### Дополнительные материалы
-
### Дочерние заметки
```dataview
LIST
FROM [[]]
WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link)
```

View File

@ -0,0 +1,34 @@
---
aliases:
tags:
- maturity/🌱
date:
- - 2024-04-13
zero-link:
- "[[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]"
parents:
- "[[../garden/ru/dev/architecture/Фронтенд|Фронтенд]]"
linked:
---
Rеverse proxy позволяет снять часть задач с [[Бэкенд|бэкенда]].
Rеverse proxy решает следующие проблемы:
- **Организация https шифрования.** Клиенты подключаются к Reverse proxy по https, а прокси подключается к бэкенду по http.
- Буферизация запросов и ответов.
- Валидация http
- Борьба с медленными клиентами. Клиенты с плохим интернет соединением могут долго удерживать канал. Reverse proxy с бэкендом быстро обмениваются данными, Reverse Proxy буферизирует ответ с бэкенда и может довольно долго удерживать соединение с клиентом скармливая ему ответ.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]
**Родитель**:: [[Фронтенд]]
**Источник**::
**Автор**::
**Создана**::
### Дополнительные материалы
-
### Дочерние заметки
```dataview
LIST
FROM [[]]
WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link)
```

View File

@ -0,0 +1,35 @@
---
aliases:
- бэкенде
- backend
- бэкенда
- бэкенду
tags:
- maturity/🌱
date:
- - 2024-04-13
zero-link:
- "[[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]"
parents:
linked:
---
Бэкенд один из самых больших бездельников в веб-архитектуре. У него есть всего 2 задачи:
- Сетевой ввод-вывод. Обычно сводится к общению с [Rеverse proxy](Rеverse%20proxy.md) прием http-запроса и ответ на него, и со всевозможными сервисами, которые хранят данные это могут быть БД, очереди, memcaсhed и т.п.
- Склеивание строк сериализовать данные в JSON, сформировать шаблон на основе html, посчитать sh1 или md5? выполнить сжатие данных.
А что такое бизнес-логика в бэкенде? Это проверки наподобие "если значение переменных больше 3-х, делай это", "если пользователь авторизован, покажи одно, если не авторизован покажи другое". Бывают, конечно, отдельные задачи, например, по изменению размера картинки, преобразования видео, но чаще всего такие задачи решаются вне бэкенда с использованием очередей, воркеров и т.д.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]
**Родитель**::
**Источник**::
**Автор**::
**Создана**:: [[2024-04-13]]
### Дополнительные материалы
- [[../../../../_inbox/Бэкенд большую часть времени ждет|Бэкенд большую часть времени ждет]]
### Дочерние заметки
```dataview
LIST
FROM [[]]
WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link)
```

View File

@ -0,0 +1,34 @@
---
aliases:
- трехзвенная структура
tags:
- maturity/🌱
date:
- - 2024-05-23
zero-link:
- "[[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]"
parents:
linked:
---
Мы выделяем некие звенья в обработке наших запросов, и каждое звено специализируется на обработке или выполнении определенного класса задач.
![](Pasted%20image%2020240523133746.png)
- [Фронтенд](Фронтенд.md). предназначен для быстрой обработки легких данных, как правило, статики. Эти запросы обрабатываются тут и не проходят на массивный, тяжелый бэкенд. Для фронтенда используются такие легковесные сервера, как [nginx](00%20Nginx.md). В разработке подобных серверов огромное внимание уделяется тому, какое количество ресурсов тратится на обработку одного запроса.
- [Бэкенд](Бэкенд.md), как правило, это тяжелые приложения, в которых происходят вычисления, зашита бизнес-логика, и обрабатывать статические запросы бэкендом попросту неэффективно.
- Следующий слой это хранение данных, в простейшем варианте [база данных](00%20Базы%20Данных.md).
***
## Мета информация
**Область**:: [[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]
**Родитель**::
**Источник**::
**Автор**::
**Создана**:: [[2024-05-23]]
### Дополнительные материалы
-
### Дочерние заметки
```dataview
LIST
FROM [[]]
WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link)
```

View File

@ -0,0 +1,19 @@
---
aliases:
- фронтенд
tags:
- maturity/🌱
date:
- - 2024-05-23
zero-link:
- "[[../../meta/zero/00 Архитектура ИС|00 Архитектура ИС]]"
parents:
linked:
---
- [[Rеverse proxy]]
Для чего нужен фронтенд
- Отдача статического контента
- Буферизация запросов
- Масштабирование бэкендов
- Обслуживание медленных клиентов.

View File

@ -0,0 +1,22 @@
---
aliases:
- рефлексию
- рефлексия
tags:
- maturity/🌱
date: 2024-09-11
zero-link:
- "[[00 Java разработка]]"
parents:
linked:
---
***
## Мета информация
**Область**:: [[../../meta/zero/00 Java разработка|00 Java разработка]]
**Родитель**::
**Источник**::
**Создана**:: [[2024-09-11]]
**Автор**::
### Дополнительные материалы
-

View File

@ -36,7 +36,7 @@ B следующие недостатки:
> Дай мне места для размещения того, что пока еще нужно. Дай мне смелости удалить то, что больше не пригодится. И дай мне мудрости, чтобы отличить одно от другого.
## Производительность GC
Вам быстро, дешево или качественно?
- **Throughput.** Объем вычислительных ресурсов CPU, затрачиваемых на работу GC.
- [[../../architecture/Throughput|Throughput]]. Объем вычислительных ресурсов CPU, затрачиваемых на работу GC.
- **Предсказуемость.** На какое время прерывается работа приложения.
- **Footprint.** Объем используемой памяти.
## Работа GC

View File

@ -0,0 +1,45 @@
---
aliases:
tags:
- maturity/🌱
date: 2024-09-11
zero-link:
- "[[../../meta/zero/00 Java разработка|00 Java разработка]]"
parents:
linked:
---
В [моей библиотеке по конструированию Telegram ботов](https://git.struchkov.dev/Godfather-Bots/telegram-bot) при переходе на [[../../meta/zero/00 Quarkus|Quarkus 3]] возникала проблема.
Проблема возникает при вызове метода в [библиотеке телеграма](https://mvnrepository.com/artifact/org.telegram/telegrambots) `AbsSender.executeAsync()`. Судя по всему сессии БД зависают и не освобождаются, из-за чего пул сессий заканчивается и возникает следующее исключение:
```shell
024-09-11 11:25:05,060 ERROR [io.qua.arc.imp.AbstractInstanceHandle] (pool-12-thread-1) Error occurred while destroying instance of bean [io.quarkus.hibernate.reactive.runtime.ReactiveSessionProducer_ProducerMethod_createMutinySession_1321d110ee9e92bda147899150401e0a136779c7_Bean]: java.util.concurrent.CompletionException: java.lang.IllegalStateException: HR000069: Detected use of the reactive Session from a different Thread than the one which was used to open the reactive Session - this suggests an invalid integration; original thread [186]: 'vert.x-eventloop-thread-5' current Thread [189]: 'vert.x-eventloop-thread-6'
```
Проблема в том, что в `DefaultAbsSender` есть поле `protected final ExecutorService exe`, который используется в `AbsSender.executeAsync()`. Этот `ExecutorService` никак не изменить, в конструктор не передать, сеттера нет, да и поле `final`.
Эта особенность приводит к тому, что при использовании вызовов телеграм в контексте работы с [[../../meta/zero/00 Hibernate Reactive|Hibernate Reactive]] мы получаем ситуацию, в которой [[../fundamental/Поток процесса ОС|поток]] меняется. [[../../meta/zero/00 Hibernate Reactive|Hibernate Reactive]] в свою очередь требует, чтобы вся работа выполнялась в рамках одного и того же [[../fundamental/Поток процесса ОС|потока]] из-за особенностей управления сессиями и транзакциями.
> В [документации](https://hibernate.org/reactive/documentation/2.0/reference/html_single/#_sessions_and_vert_x_contexts) четко сказано: "Сеанс не является потокобезопасным (или "потокобезопасным"), поэтому его использование в разных потоках (или реактивных потоках) может привести к ошибкам, которые крайне трудно обнаружить. Не говорите, что мы вас не предупреждали!"
Решением данной ситуации для своей библиотеки я нашел в следующем. У меня есть `TelegramPollingBot`, который является наследником `DefaultAbsSender`, поэтому в конструкторе я получаю доступ к `final` полю через [[../java/Java Reflection|рефлексию]], далее делаю его изменяемым и устанавливаю `ExecutorService`.
```java
final Field field = this.getClass().getSuperclass().getSuperclass().getDeclaredField("exe");
// Делаем поле exe доступным для изменений
field.setAccessible(true);
// Заменяем поле exe в экземпляре наследника
field.set(this, Infrastructure.getDefaultWorkerPool());
// Закрываем доступ к полю exe
field.setAccessible(false);
```
***
## Мета информация
**Область**:: [[../../meta/zero/00 Снипеты для Java|00 Снипеты для Java]]
**Родитель**::
**Источник**::
**Создана**:: [[2024-09-11]]
**Автор**::
### Дополнительные материалы
- [Parallel execution: A Hibernate Reactive Gotcha](https://blog.lunatech.com/posts/2023-05-19-hibernate-reactive-gotchas)

View File

@ -0,0 +1,29 @@
---
aliases:
- метапознание
tags:
- maturity/🌱
date: "[[2023-10-28]]"
zero-link:
- "[[../meta/zero/00 Образование|00 Образование]]"
parents:
linked:
---
Метапознание - это способность осознавать, контролировать и оценивать свои процессы познания и обучения. Оно включает понимание того, как мы учимся, как мы понимаем информацию и как мы используем знания для выполнения задач.
Метапознание также означает осознание своих собственных сильных и слабых сторон в области обучения и умение регулировать свое поведение для оптимизации результатов обучения.
***
## Мета информация
**Область**:: [[../meta/zero/00 Образование|00 Образование]]
**Родитель**::
**Источник**::
**Автор**::
**Создана**:: [[2023-10-28]]
### Дополнительные материалы
-
### Дочерние заметки
```dataview
LIST
FROM [[]]
WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link)
```

View File

@ -0,0 +1,33 @@
---
aliases:
- СБН
tags:
- maturity/🌱
date: "[[2023-10-26]]"
zero-link:
- "[[../../meta/zero/00 Здоровье|00 Здоровье]]"
parents:
- "[[../Болезни|Болезни]]"
linked:
---
Регулярно возникающие неприятные ощущения в нижних, иногда в верхних конечностях, из-за которых людям постоянно хочется ими шевелить или дергать. Обычно такие ощущения проявляются во второй половине дня. И иногда не проходят всю ночь. СБН мешает уснуть и приводит к частым пробуждениями.
**Почему возникает?**
Иногда из-за дефицита железа, болезней почек, или ревматоидного артрита. Достаточно вылечить их - неприятные ощущения уйдут. Но бывает и так, что СБН начинается сам по себе. Тогда его лечат лекарствами, влияющими на дофаминовые рецепторы в мозге.
Каждый раз врач подбирает конкретное средства и дозировку индивидуально. Также показаны специальные упражнения, [[../../../../knowledge/mindfulness/Медитация|медитация]], [[../../../../knowledge/mindfulness/Йога|йога]], и техники расслабления.
***
## Мета информация
**Область**:: [[../../meta/zero/00 Здоровье|00 Здоровье]]
**Родитель**:: [[../Болезни|Болезни]]
**Источник**::
**Автор**::
**Создана**:: [[2023-10-26]]
### Дополнительные материалы
-
### Дочерние заметки
```dataview
LIST
FROM [[]]
WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link)
```

25
health/Болезни.md Normal file
View File

@ -0,0 +1,25 @@
---
aliases:
tags:
- maturity/🌱
zero-link:
- "[[../meta/zero/00 Здоровье|00 Здоровье]]"
linked:
date: 2024-09-10
---
- [[disease/Синдром беспокойных ног|Синдром беспокойных ног]]
***
## Мета информация
**Область**:: [[../meta/zero/00 Здоровье|00 Здоровье]]
**Родитель**::
**Источник**::
**Автор**::
**Создана**:: [[2024-09-10]]
### Дополнительные материалы
-
### Дочерние заметки
```dataview
LIST
FROM [[]]
WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link)
```

View File

@ -14,7 +14,9 @@ enableToc: false
Основная идея цифрового сада — это процесс, а не результат. Это место, где идеи могут расти, пересекаться и менять направление. Записи здесь — это как маленькие растения, которые можно пересаживать, подкармливать и наблюдать, как они со временем изменяются.
![digital-garden](meta/files/images/digital-garden.png)
## 🤔 Зачем мне сад?
Я публикую не все свои заметки, но опубликованная заметка может ссылаться на не опубликованную. В таком случае ссылка будет вести на страницу 404. В этом случае можно написать в комментарии к заметке и вежливо попросить поделиться заметкой, возможно я просто забыл ее опубликовать.
### 🤔 Зачем мне сад?
**Ведение заметок это отличный способ накапливать знания и обучаться.** Я пишу заметки в процессе изучения какой-то новой темы. После чего структурирую их какое-то время. И уже после могу решить опубликовать заметки в мой цифровой сад.
Все люди делают ошибки, особенно в процессе обучения, это нормально. Поэтому не стоит считать все написанное тут истинной в последней инстанции. ==Если заметили фактическую ошибку, то можете воспользоваться кнопкой "Редактировать"== и предложить свое исправление, или оставьте комментарий на странице с заметкой.
@ -25,18 +27,27 @@ enableToc: false
## 🗺 Как не заблудиться?
Чтобы получить максимальную пользую от сада, нужно научиться в нем ориентироваться. Этот раздел поможет вам.
🧑‍🔬 Для настоящих исследователей в нижней части сайта есть кнопка: "<a id="random-page-button">Мне повезет 🎲</a>", которая переместит вас на случайную заметку.
🔎 Если вы ищите что-то конкретное, то воспользуйтесь поиском.
- 🔎 Если вы ищите что-то конкретное, то воспользуйтесь поиском.
- 🧑‍🔬 Для настоящих исследователей в нижней части сайта есть кнопка: "<a id="random-page-button">Мне повезет 🎲</a>", которая переместит вас на случайную заметку. Это отличный способ узнать что-то новое.
- 🔗 Граф знаний. Находится в правом верхнем углу. По нему можно изучить связи заметок между собой.
- 🎓 В конце каждой заметки есть раздел **Мета информация**. Эта информация позволит изучать тему дальше. Там указано следующее
- Область знания, к которой относится заметка.
- Родительская заметка по теме.
- Дочерние заметки.
- Дополнительные материалы.
- Обратные ссылки. Это список заметок, которые ссылаются на текущую заметку.
- Дата создания заметки. По ней можно получить созданные в этот день заметки. Пока в разработке.
- Все дочерние заметки. Пока в разработке.
### 🌳 Корни дерева знаний
Каждая заметка принадлежит какой-то "области знаний" - #type/zero-link . А здесь можно видеть иерархию всех областей знаний. Это корни деревьев моего сада. С этих заметок можно начать погружаться в область.
Каждая заметка принадлежит какой-то "области знаний" - #type/zero-link . А здесь можно видеть иерархию всех областей знаний. Это корни деревьев моего сада. С этих заметок можно начать погружаться в определенную область.
- [[meta/zero/00 Здоровье|00 Здоровье]]
- [[meta/zero/00 Здоровье|Здоровье]]
- [Продуктивность](meta/zero/00%20Продуктивность.md)
- [Разработка](meta/zero/00%20Разработка.md)
- [Java разработка](meta/zero/00%20Java%20разработка.md)
- [Quarkus](meta/zero/00%20Quarkus.md)
- [SpringBoot](meta/zero/00%20SpringBoot.md)
- [00 Hibernate](meta/zero/00%20Hibernate.md)
- [Hibernate](meta/zero/00%20Hibernate.md) / [[meta/zero/00 Hibernate Reactive|Hibernate Reactive]]
- Архитектура
- [[meta/zero/00 Архитектура ЭВМ|Архитектура ЭВМ]]
- [Архитектура ПО](meta/zero/00%20Архитектура%20ПО.md)

Binary file not shown.

After

Width:  |  Height:  |  Size: 194 KiB

View File

@ -0,0 +1,14 @@
---
aliases:
- Hibernate Reactive
tags:
- type/zero-link
zero-link:
- "[[00 Hibernate|00 Hibernate]]"
parents:
linked:
title: Hibernate Reactive
---
- [[../../dev/snippet/Проблема с Hibernate Reactive в Telegram SDK для Java|Проблема с Hibernate Reactive в Telegram SDK для Java]]
В [документации](https://hibernate.org/reactive/documentation/2.0/reference/html_single/#_sessions_and_vert_x_contexts) сказано: "Сеанс не является потокобезопасным (или "потокобезопасным"), поэтому его использование в разных потоках (или реактивных потоках) может привести к ошибкам, которые крайне трудно обнаружить. Не говорите, что мы вас не предупреждали!"

View File

@ -6,4 +6,6 @@ tags:
title: Hibernate
---
- [Дублирование значений при использовании @ElementCollection и @OneToMany](../../dev/java/hibernate/Дублирование%20значений%20при%20использовании%20@ElementCollection%20и%20@OneToMany.md)
- [Логирование SQL в Hibernate](../../dev/java/hibernate/Логирование%20SQL%20в%20Hibernate.md)
- [Логирование SQL в Hibernate](../../dev/java/hibernate/Логирование%20SQL%20в%20Hibernate.md)
- [[00 Hibernate Reactive|Hibernate Reactive]]

View File

@ -36,7 +36,7 @@ aliases:
- Асинхронная обработка
- Конвейерная обработка
- Использование толстого клиента
- [Кэширование](Кэширование.md)
- [Кэширование](../../dev/architecture/Кэширование.md)
- [Функциональное разделение](Функциональное%20разделение.md)
- [Шардинг](Шардирование%20в%20БД.md)
- Виртуальные шарды
@ -74,6 +74,6 @@ aliases:
- [Reliability](Reliability.md)
- [Disaster recovery](Disaster%20recovery.md)
[Пропускная способность](Throughput.md) сетевой карты 1 Гбит/с (реальная 800-900 Мбит/с) или 120 000 пакетов в секунду. Bonding позволяет несколько физических интернет соединений объединить в одно логическое, например, 4 интерфейса - 3.5 Гбит/с.
[Пропускная способность](../../dev/architecture/Throughput.md) сетевой карты 1 Гбит/с (реальная 800-900 Мбит/с) или 120 000 пакетов в секунду. Bonding позволяет несколько физических интернет соединений объединить в одно логическое, например, 4 интерфейса - 3.5 Гбит/с.
В highload системах как правило отдают предпочтение [throughput](Throughput.md).
В highload системах как правило отдают предпочтение [throughput](../../dev/architecture/Throughput.md).

View File

@ -8,6 +8,7 @@ title: Java разработка
---
- [Устройство Java](Устройство%20Java.md)
- [JDK](../../dev/java/JDK.md)
- [[../../dev/java/Java Reflection|Java Reflection]]
- [Снипеты для Java](00%20Снипеты%20для%20Java.md)
- Системы сборки
- [Maven](00%20Maven.md)

View File

@ -5,8 +5,9 @@ parents:
- "[[00 Разработка]]"
title: Архитектура ПО
---
- [[../../dev/architecture/CAP теорема|CAP теорема]]
- [Трёхзвенная структура](../../dev/architecture/Трёхзвенная%20структура.md)
- [Монолитная архитектура](Монолитная%20архитектура.md)
- [Микросервисная архитектура](Микросервисная%20архитектура.md)
- [Service Oreinted Architecture](Service%20Oreinted%20Architecture.md)
- [Трёхзвенная структура](Трёхзвенная%20структура.md)
- [[00 HighLoad|HighLoad]]

View File

@ -15,6 +15,7 @@ title: Здоровье
Все понимают важность [правильного питания](Правильное%20питание.md), [качественного сна](Качественный%20сон.md) и [физической активности](Физическая%20нагрузка.md), но многие не осознают важность мыслительного процесса. Важно не только потреблять информацию, но и обрабатывать ее, обдумывать, делать выводы.
## Основные ссылки
- [[../../health/Болезни|Болезни]]
- [Качественный сон](Качественный%20сон.md)
- [Как наладить сон?](Как%20наладить%20сон?.md)
- [Правильное питание](Правильное%20питание.md)

View File

@ -3,4 +3,6 @@ tags:
- type/zero-link
title: Образование
---
Согласно исследованиям, оптимальное время для начала обучения и работы [лежит в промежутке 11:00-12:00](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5395635/). Хотя исследователи и признают, что это довольно индивидуально, и важно слушать свои ощущения.
- [[../../education/Метапознание|Метапознание]]
## Свободные заметки
- Согласно исследованиям, оптимальное время для начала обучения и работы [лежит в промежутке 11:00-12:00](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC5395635/). Хотя исследователи и признают, что это довольно индивидуально, и важно слушать свои ощущения.

View File

@ -14,4 +14,5 @@ aliases:
- [Несколько подключений к базе H2](../../dev/snippet/Несколько%20подключений%20к%20базе%20H2.md)
- [Дебаг приложения на этапе компиляции IntelliJ IDEA](../../dev/snippet/Дебаг%20приложения%20на%20этапе%20компиляции%20IntelliJ%20IDEA.md)
- [Логирование SQL в Hibernate](../../dev/java/hibernate/Логирование%20SQL%20в%20Hibernate.md)
- [Бинарный поиск на Java](../../dev/java/Бинарный%20поиск%20на%20Java.md)
- [Бинарный поиск на Java](../../dev/java/Бинарный%20поиск%20на%20Java.md)
- [[../../dev/snippet/Проблема с Hibernate Reactive в Telegram SDK для Java|Проблема с Hibernate Reactive в Telegram SDK для Java]]