Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Etablere Redis i infrastruktur som backing for IDistributedCache #275

Closed
3 tasks done
Tracked by #41
elsand opened this issue Dec 11, 2023 · 5 comments
Closed
3 tasks done
Tracked by #41

Etablere Redis i infrastruktur som backing for IDistributedCache #275

elsand opened this issue Dec 11, 2023 · 5 comments
Assignees

Comments

@elsand
Copy link
Collaborator

elsand commented Dec 11, 2023

I forbindelse med eksterne oppslag mot bl.a. ressursregisteret, skal det etableres Redis gjennom Azure Cache for Redis.

Alle steder der IDistributedCache benyttes, skal Redis være backing.

Tasks

Preview Give feedback
@elsand elsand changed the title Etablere Redis i infra Etablere Redis i infrastruktur som backing for IDistributedCache Dec 14, 2023
@elsand elsand moved this from Nye issues to 📋 Backlog in Dialogporten / Arbeidsflate Dec 14, 2023
@elsand elsand added this to the Pilotproduksjon milestone Dec 14, 2023
@elsand elsand moved this from 📋 Backlog to 🔖 Klar for implementering in Dialogporten / Arbeidsflate Dec 14, 2023
@arealmaas arealmaas self-assigned this Mar 5, 2024
@arealmaas arealmaas moved this from 🔖 Klar for implementering to Doing in Dialogporten / Arbeidsflate Mar 5, 2024
arealmaas added a commit that referenced this issue Mar 5, 2024
A precursor for #275

- Use objects and user defined types:
<https://learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/user-defined-data-types>
- Exporting types in order to make it cleaner and to add additional
validation. Validation was not taken place for the module itself, but
only in the main bicep file. Now we have validation all the way from
bicepparam to the module in use.
<https://learn.microsoft.com/en-us/azure/azure-resource-manager/bicep/bicep-import#import-user-defined-data-types-preview>
- Add biceppconfig with some sane lint rules

---------

Co-authored-by: Ole Jørgen Skogstad <skogstad@softis.net>
arealmaas added a commit that referenced this issue Mar 6, 2024
Related to #275

- Added Redis resource to infrastructure
- Added `host name` to the key vault and app configuration to make it
accessible to the container app.
- Using managed identity to connect the web apis to Redis

~~Doesn't seem like managed identity is possible for apps that
read/write to the redis instance. We could use a pre-defined role, but
that would only enable control plane level permissions.. ¯\_(ツ)_/¯~~
@arealmaas
Copy link
Collaborator

Satt opp redis-resource i Azure nå. Skal teste managed identity som er måte å autentisere mot Redis. Ser ut som det er en av de få tjenestene som ikke tar imot credentials fra Azure Credentials, men heller krever en principalId Azure/Microsoft.Azure.StackExchangeRedis#17

... men jobbes med, og ser ut til at vi må sende med token credentials til å begynne med her.

Edit: ser ut til å være en pull request som forhåpentligvis kommer inn snart så vi slipper workaround Azure/Microsoft.Azure.StackExchangeRedis#43

@arealmaas arealmaas added the needs consideration Requires additional consideration label Mar 11, 2024
@arealmaas
Copy link
Collaborator

Tok en sync med @oskogstad om bruk av in-memory og Redis, og om vi skal bruke begge deler i samme miljø. Ref comment: https://github.com/digdir/dialogporten/pull/527/files#r1516954307

... 
Tror ideen var å ha begge?
Først sjekkes in-memory, så Redis, så hente fra whatever remote source

Vi snakket om at logikken som skal til for å bruke både in-memory og Redis kan bli ganske kompleks. Særlig når man må ta høyde for expiration med mer. Spørsmålet er om ms gained ved å bruke begge outweigher vanskeligheter med debugging, vanskeligere å skalere tjenesten (mindre kontroll på minnebruk) og implementasjonskompleksitet.

Vi kan potensielt diskutere dette i refinement? Vi eventuelt lage en ny task på å forbedre cachen, men inntil videre løse det ved å kun bruke den ene eller den andre. Altså, at vi enten bruker in-memory eller Redis.

@elsand
Copy link
Collaborator Author

elsand commented Mar 11, 2024

Tenker vi tar en runde på dette i refinement. Se også #40 som diskuterer ett av behovene vi har for dette. Et annet behov jeg ser vi vil kunne få er å ha en oversikt over distinkte ressurser som alle dialogene tilhørende en gitt party refererer, som vil være viktig informasjon å kunne sende over til autorisasjonslkomponenten ifm tilgangskontroll på søke-API-et for å redusere mengden jobb den må utføre. Dette er altså informasjon vi vil ha behov for ifm autorisasjon på svært sentrale endepunkter som vil være under tung last.

En Redis-cache som holdes varm uavhengig av innkommende requests løser brorparten av problemet, og unngår at requests fra brukere blokkeres eller fører til cache stampede ved expiration og ny deploy/nye replikas, så vi tenker vi begynner der. ("Holde varm"-funksjonaliteten må dog være noe vi ikke gjør oss avhengig av, det må fremdeles være en standard read-through slik at requests for ressurser som av en eller annen grunn ikke finnes i cache ikke feiler).

Tanken bak en flernivås cache er at det å skulle ta på seg en 3-6(?) ms request overhead i alle disse tilfellene nok vil kunne være uhensiktsmessig dyrt (i flere forstander) og dermed noe vi må kunne unngå på sikt. Å ha en minnebasert "nivå 1" cache vil begrense trafikken fra Redis til noe kontrollerbart per replika (uavhengig av antall tråder). Jeg er ikke spesielt bekymret for minnebruken her, jeg ser ikke for meg at vi blir noen gang å bikke mer enn et knippe MB per replika. Håndtering av TTL-verdier på tvers av cahenivåene er hakket mer komplisert, men håndterbart. Jeg tror det skal være mulig å lage en custom IDistributedCache-implementasjon som wrapper både Redis og en minnebasert-cache).

@elsand
Copy link
Collaborator Author

elsand commented Mar 11, 2024

https://github.com/ZiggyCreatures/FusionCache ser interessant ut, og adresserer mange (alle?) av de problemstillingene som nevnes over og i #40 . Er kanskje noe vi bør vurdere?

@elsand elsand moved this from Doing to Code Review og PR in Dialogporten / Arbeidsflate Mar 12, 2024
@arealmaas
Copy link
Collaborator

Måtte reverte til å bruke connection strings rett og slett fordi vi brukte feil Redis-bibliotek ( https://github.com/Azure/Microsoft.Azure.StackExchangeRedis). Managed Identity er ikke støttet i Microsoft.Extensions.Caching.StackExchangeRedis

Ref denne her: dotnet/aspnetcore#54414 (comment)

Ser ut til at det finnes en løsning, men spørs om det er verdt å implementere eller om vi skal holde på connection stringen som løsning for nå.

@elsand elsand removed the needs consideration Requires additional consideration label Mar 12, 2024
arealmaas added a commit that referenced this issue Mar 13, 2024
Related to #275

Using Redis for IDistributedCache. Will start using FusionCache as an alternative to this, but now we have a functioning distributed cache backed by Redis.
@arealmaas arealmaas moved this from Code Review og PR to Testing in Dialogporten / Arbeidsflate Mar 13, 2024
@arealmaas arealmaas moved this from Testing / review to Ferdig in Dialogporten / Arbeidsflate Apr 4, 2024
@elsand elsand closed this as completed Apr 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Archived in project
Development

No branches or pull requests

2 participants