Pull to refresh
-8
0
Victor@vba

Пользователь

Send message

В сторону Seq не смотрели? Раз уж вы с Serilog работаете.

как работает прибор ориентации на звезду и солнце

А о том что солнце это то-же звезда, вы не задумывались?

Это единственный очевидный путь, как из Elastic можно получить доступ к данным в MSSQL.

Костыль это а не единственный очевидный путь. Насколько я понимаю вы работаете на платформе .NET, которая богата имплементациями EventSourcing. БД как API это тоже костыль или пуля в ногу.


Logstash в вашем случае тоже костыль, корни слова просто кричат за себя log stash. Вы же ведь не дрова в БД храните а ваши ненаглядные бизнес данные.


Что мешает сделать через модель событий с двумя типами слушателей Data и FullTextIndexer, которые могут быть параллельными или один идти после другого.

Вы ограничиваете характеристику stateful/stateless только на сессию, может ещё на контекст, а я распространяю её на бизнес-данные.

Ну это вы тут ваш огород городите. Вы не привели ни одного внятного определения из литературы подтверждающие ваши гипотезы. Все ваши доводы основываются на недопонимании вами отдельных концепций и не имеют ничего общего с реальностью. Хотите называть красное зеленым, пожалуйста.


Понятия stateless/stateful используются в контексте потоков информации в контексте движения. Ваш БД слой никаких потоков или движения не осуществляет, это такая же абстрактная структура данных только не в памяти.

Конечно stateful. Есть некое состояние, изменяющееся со временем, и сервис даёт его текущий срез.

Чем подкрепите ваше утверждение? Я говорю что этот сервис stateless если не удерживает состояния в виде контекста сессии от предыдущего запроса. Что абсолютно симметрично примеру с HTTP протоколом из вашего источника.


чтобы удерживать состояние бизнес-модели

Наличие изменения представления ресурса не влияет на statelessness/statefulness сервиса. См определение из вашего источника.


Вы выделили "операции" — в REST-сервисе операции должны быть stateless, операции — это интерфейс сервиса

А вот и нет, операция это лишь часть интерфейса. REST-сервис может состоять из одной или множества stateless операций. До тех пор пока все операции данного сервиса stateless этот сервис можно считать REST-совместимым. Следовательно REST-сервис это stateless сервис.


REST-compliant Web services allow requesting systems to access and manipulate textual representations of Web resources using a uniform and predefined set of stateless operations.

Мне кажется то что вы так яро называете состоянием приложения или системы, в данном определении названо представлением ресурса (representation of resource) но увы не его состоянием. Наличие изменяемых или неизменяемых ресурсов в системе делает ее immutable/mutable но не stateful/stateless.

Во втором сценарии требуется чтобы login был вызван раньше foo в рамках одного соединения или сессии.

Не всегда, технически пока "сессия" жива не нужно проходить через логин этап. Иногда куки сессии могут просто угнать.

Если токен передаете через заголовки то у вас никакой разницы в сигнатурах не будет. То что вы пометили звездочкой справедливо для обоих сценариев.


Если следовать вашей логике со счетчиком то любой stateful контракт можно замаскировать под stateless и наоборот.


Да и вообще я не вижу смысла пытаться передать эту информацию здесь, контракты API не для этого. Клиенту вашего API будет все равно что там внутри.

Но вот ваше "или прочей под информации" некорректно

Под прочей подобной информацией понимается технические данные которые для бизнес части не представляют никакого интереса, например данные о мобильном или IoT устройстве. Так что некорректно ваше замечание.


Если ответ всегда одинаков, то значит состояние приложения не изменяется.

Следовательно, по вашему, если ответ меняется то и состояние меняется. Возьмем к примеру сервис который выдает вам тек время, по вашему выходит что это stateful сервис.


По второй цитате — stateless там о протоколе, а не о приложении в целом.

Брехня, пожалуйста вчитайтесь, там как раз говорится о свободе от состояния в целом на примере отдельно взятого протокола. Вот отрывок ниже:


A classic example of statelessness is the use of the HTTP protocol.

Все остальное ваши фантазии.


Сервер удерживает информацию из тела некоторых запросов, он может не хранить связь с запросом или хранить, но не использовать для бизнес-логики, но своё состояние изменяет.

Сервер ничего сам по себе удерживать не будет если вы ему не скажете об этом. Вернемся еще раз к определению REST из википедии раз у вы не в состоянии трактовать его из вашей же статьи:


REST-compliant Web services allow requesting systems to access and manipulate textual representations of Web resources using a uniform and predefined set of stateless operations.

Я вам ответил ниже и по диаграмме и по тексту. Есть только одно понятие stateless. Опровергаете, ссылочку пожалуйста.

Укажите где в источнике на который вы ссылаетесь есть подтверждение тому что вы сказали выше?


Я же нашел след формулировку:


As you may have guessed, a service that is actively processing or retaining state data is classified as being stateful.

Это не соответствует вашему утверждению. Капнем глубже и увидим:


A classic example of statelessness is the use of the HTTP protocol. When a browser requests a Web page from a Web server, the Web server responds by delivering the content and then returning to a stateless condition wherein it retains no further memory of the browser or the request.

Следовательно, состояние stateless это состояние при котором сервер не удерживает никакой информации о браузере или запросе или прочей под информации. Следуя данной формулировке мой endpoint GET /posts/count, which does not retain neither further memory of the browser nor the request is considered as stateless. То же самое можно сказать про ваш POST.


Ну так что же подтвердит ваше утверждение что


Если приложение на все одинаковые запросы отдаёт одинаковые ответы независимо от того, только что оно развёрнуто/запущено или уже обработало миллион запросов, то это стейтлесс. А если на запрос GET /posts/count оно отдаёт количество успешно обработанных запросов POST /posts, то оно stateful.

Чем подкрепите свое утверждение?

Бизнес-данные, принадлежащие сервису — часть его состояния.
А вот и нет. Бизнес данные отражают состояния ресурсов к которым тот или иной сервис имеет доступ. Состояние ресурса и состояние сервиса это разные вещи.

Если вызов мутирующего запроса или метода требует предварительного вызова других запросов или методов, то интерфейс этого сервиса или объекта является stateful.

Я свои доводы подкрепил ссылками на статьи и даже википедию. Вы чем можете подкрепить свои утверждения?

И мы обратно возвращаемся к тому, что или вы полагаетесь на клиент (что очень не безопасно) или делаете свое приложение таки немного stateful.

Да с чего вы взяли что хранить временный токен где-то на клиенте это менее безопаснее чем хранить куки с данными сессиями на том же клиенте. REST по определению не может быть stateful, определение еще раз перечитайте.

Непонятно то, почему если вы храните токен, то это внезапно становится stateless

Дак никто же не хранит токен нигде, кроме клиента.


Не зря же REST так назвали.

REST-compliant Web services allow requesting systems to access and manipulate textual representations of Web resources using a uniform and predefined set of stateless operations


Термин State здесь не про stateful. И официально на великий и могучий переводится как передача состояния представления. Помните про амнезию.


REST Это архитектурный стиль. API в стиле REST остается всего лишь контрактом, так как контракт может быть stateful или stateless?

Если следовать вашей логике то в природе есть только stateful приложения. Поскольку исходники любого приложения развернуты на сервере и прежде чем обработать запрос в первый раз серверу нужно подгрузить исходники или залить байткод в JIT компилятор или whatever. Следовательно в любом случае нужно куда-то обращаться соу это stateful. Вздор.

Это вы что то путаете. API это просто программный контракт, как контракт может иметь или не иметь состояние?


С чего вы взяли что зависимость от бизнес данных хоть как-то влияет на состояние. В случае stateless вы будете чаще обращаться к источникам данных чем в случае с stateful, тут речь не об этом.


Если у вас есть workflow, с этапaми login->choose_item->put_to_cart->purchase где за каждый этап отвечает микросервис. И если от login к choose_item или к put_to_cart у вас сохраняются данные в некой сессии, то у вас stateful. Так как сервер используя механизм сессий сохраняет некоторые данные между запросами HTTP(s). Что тут непонятного, ума не приложу, вам может литературу какую посоветовать по теме? Я там выше ссылку на статью оставлял.

А если вы сверяете информацию о токене с записью в базе данных, то это уже состояние. Или я не прав?

Нет вы не правы, это не stateful.

Ну, то есть хранить все на клиенте и надеяться на силу своей криптографии

Клиенту передается лишь временный токен. И да in cryptography we trust. В базе нет состояния, в базе есть информация о токене. И это не stateful, вы статью внимательно читали?

Возможно, вы правы, но в конечном итоге у вас все равно будет в системе stateful сервис.

Грубо говоря если вы не используете сессий или их подобий у вас будет сервис без состояния. Все что у меня будет в конечном состоянии это нечистая функция с точки зрения ФП.


Ну и как я понимаю, с технической точки зрения, хранить абсолютно все состояния в базе данных ...

Если не вдаваться в подробности EventSourcing то вы не храните состояния в БД, вы храните бизнес данные. Если вы используете БД как хранилище сессий то вы stateful.

Нет тут вы не правы. Вы путаете концепцию чистых и не чистых функций с концепцией stateful/stateless. Вот тут есть доходчивое объяснение обоих понятий.


Вы не слышали о понятии антероградной амнезии? Это когда мозг не в состоянии перемещать информацию из кратковременной в долговременную память. Т.е. человеку после пробуждения каждое утро приходится объяснять как он прожил жизнь с момента травмы и до сего дня.


Так вот понятие stateless это и есть полная и желаемая амнезия вашего сервиса, где при каждом обращении вы должны ему напомнить кто вы и каков ваш контекст. Для облегчения этого дела есть фильтры или цепочки обработки запроса, но в целом это так.

Information

Rating
Does not participate
Location
Halle, Vlaams Brabant, Бельгия
Date of birth
Registered
Activity