Te takiuru ki roto i te taiao .Net microservice i roto i te mahi

Te takiuru ki roto i te taiao .Net microservice i roto i te mahi

He taputapu tino nui te takiuru mō ngā kaiwhakawhanake, engari i te wā e hanga ana i ngā pūnaha tohatoha, ka waiho hei tūāpapa me whakatakoto tika ki te turanga o tō tono, ki te kore ka kitea wawetia te uauatanga o te whakawhanaketanga ratonga moroiti.

I tāpirihia e .Net Core 3 tētahi āhuatanga pai rawa atu te kaha ki te tuku i te horopaki hononga i roto i ngā pane HTTP, nō reira, ki te whakamahi ō tono i ngā karangatanga HTTP tika mō te whakawhitiwhiti kōrero i waenga i ngā ratonga, ka taea e koe te whakamahi i tēnei mahi hou. Heoi, ki te hiahia tō hoahoanga papamuri ki te whakawhitiwhiti kōrero mā te kaihokohoko karere (RabbitMQ, Kafka, me ētahi atu), me whakahaere tonu e koe te whakawhiti horopaki hononga mā roto i ēnei karere.

I roto i tēnei tuhinga, ka tangohia e mātou tētahi taupānga API tukutuku māmā, ā, ka whakarite i te takiuru ka

  • pupuri i te hononga mai i te tīmatanga ki te mutunga i waenga i ngā rangitaki o ngā ratonga motuhake kia taea ai e koe te tiro ngāwari i ngā mahi katoa i puta mai i tētahi tono motuhake mai i tētahi kiritaki

  • Kia kotahi te pūwāhi whakauru me te tātari watea kia taea ai e te Tautoko, e whiwhi ana i ngā pātai pēnei i te "I puta he hapa i roto i te tono me te ID tono pēnei," te whakamahi i te taputapu takiuru.

Tuatahi, me whakatau tātou i tētahi kaiwhakarato takiuru mō tā tātou tono. Ko te whakaritenga matua mō te takiuru hou ko te hanganga, arā, me mahi tātou me ngā mea kaua ki ngā karere kuputuhi papatahi. Nā ēnei rangitaki, ka taea e tātou te hanga ngāwari i ngā whakaaturanga o ā tātou karere i roto i ngā whānuitanga rerekē me te whakahaere tātari.

Mō tā mātou tono, ka whakamahia e mātou te mōkihi Serilog, he tino pai te tautoko mō te takiuru hanganga me te pūnaha monomai whai rawa. Ka pekehia e au ngā mahi tatūnga taketake (ka kitea e koe he maha ngā tuhinga mō tēnei kaupapa) ka whakaaro ahau

  • Kua whirihorahia kētia a Seriallog, ā, koinei te kairākau taunoa mō tō kaiwhakarato weronga whakawhirinakitanga.

  • kei roto i tōna whirihoranga te whakarei karere me ngā āhuatanga horopaki (Enrich.FromLogContext)

Ko te mahi e whai ake nei ko te whiriwhiri ko tēhea pūnaha kohikohinga takiuru pokapū hei tuku karere mai i Serilog. Ko te kōwhiringa pūtake tuwhera tino noa i ēnei rā ko te puranga ELK (Elasticsearch, Logstash, me Kibana), nō reira ka whakamahia e mātou tēnā. Mō tēnei, ka whakamahia e mātou he otinga mai i Logz.IO — Whai muri i te rēhitatanga mō tētahi mahere kore utu, kei ō ringaringa te mana katoa o te pūkaha rapu Lucene.

Ko tā tātou mahi anake he tāpiri i tētahi mōkihi ki tā tātou kaupapa. Serilog.Tonu.Logzio

Install-Package Serilog.Sinks.Logzio

Ā, tāpirihia te enreacher e rite ana ki tā mātou whirihoranga logger, ka whāngaihia ki te tohu urunga.

LoggerConfiguration loggerConfig = new LoggerConfiguration();
loggerConfig.WriteTo.Logzio(secrets.LogzioToken, 10, TimeSpan.FromSeconds(10), null, LogEventLevel.Debug);

Mā te whakarewa i te taupānga, ka taea e tātou te kite i ā tātou karere ehara i te mea i roto i te papatohu anake, engari i roto hoki i a Kibana.

Te takiuru ki roto i te taiao .Net microservice i roto i te mahi

Nga waahi

Te takiuru ki roto i te taiao .Net microservice i roto i te mahi

E rua ngā atanga matua o tētahi tono momo ratonga ki te ao o waho, ka kiia e tātou ko te poutū me te whakapae. Ko te atanga poutū ko te API tukutuku e tae atu ai ngā waea mai i te tono kiritaki. Ko te atanga whakapae ko te kaihokohoko karere, e whakamahia ana hei whakawhiti raraunga me ētahi atu ratonga ā-roto.

Me whakaaro tātou ki ngā wāhanga o te whakatinanatanga o te whanaungatanga ki ia o ēnei atanga.

Te hononga i roto i ngā tono HTTP

Hei whiwhi i te nui o ngā mōhiohio e taea ana, me whakaputa e tātou te ID taunga hononga kia tata ki te tīmatanga o te mahi, arā, i runga i te kuwaha, i runga rānei i te kiritaki (pūkoro, tukutuku rānei). Nā te mea kei te mahi tātou me tētahi tono papamuri i tēnei rā, me whai noa i tētahi pane "X-Correlation-ID" i roto i ngā tono API tukutuku katoa.

Te tāpiri i tētahi mōkihi Tauhononga, ko tana mahi he tango i te uara mai i te pane e hiahiatia ana e tātou

Install-Package CorrelationID

Me tāpiri atu ki te pūnaha tukatuka tono

public class Startup
{
    public void Configure(IApplicationBuilder application)
    {
        application
	    .UseCorrelationId(new CorrelationIdOptions
        {
            Header = "X-Correlation-ID",
            IncludeInResponse = false,
            UpdateTraceIdentifier = false,
            UseGuidForCorrelationId = false
        });
    }
}

Nā, me whakamahi tātou hei waihanga i tētahi tātari mahi māmā:

public sealed class ApiRequestFilter : ActionFilterAttribute
{
    public ApiRequestFilter(IApiRequestTracker apiRequestTracker, ICorrelationContextAccessor correlationContextAccessor)
    {
        _correlationContextAccessor = correlationContextAccessor ?? throw new ArgumentNullException(nameof(correlationContextAccessor));
    }
    
    private readonly ICorrelationContextAccessor _correlationContextAccessor;
    
    public override async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
    {
        if (!Guid.TryParse(_correlationContextAccessor.CorrelationContext.CorrelationId, out Guid correlationId))
        {
            context.Result = new BadRequestResult();
            return;
        }
    
        await next.Invoke();
    }
    
    public override async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next)
    {
        await next.Invoke();
    }
}

Ā, me tāpiri atu ki te kaiwhakahaere

[Route("[controller]")]
[ApiController]
[ServiceFilter(typeof(ApiRequestFilter))]
public class CarsController : ControllerBase
{

}

Nō reira, ka tukuna e te kaiwhakahaere he tono kino 400 mō ngā tono katoa me te kore he pane me te tohu e rite ana.

I muri i te tīmatanga o te whiwhinga i tētahi tohu mai i te kiritaki, me tāpiri atu ki te horopaki takiuru. Ka waihangahia e mātou he paparanga anga mō tēnei:

public class CorrelationIdContextLogger
{
    public CorrelationIdContextLogger(RequestDelegate next)
    {
        _next = next ?? throw new ArgumentNullException(nameof(next));
    }
    
    readonly RequestDelegate _next;
    
    public async Task InvokeAsync(HttpContext httpContext, ILogger<CorrelationIdContextLogger> logger, ICorrelationContextAccessor correlationContextAccessor)
    {
        if (Guid.TryParse(correlationContextAccessor.CorrelationContext.CorrelationId, out Guid correlationId))
        {
            using (logger.BeginScopeWith(("CorrelationId", correlationId)))
            {
                await _next(context);
            }
        }
        else
        {
            await _next(context);
        }
    }
}

I roto i tā mātou taupānga, ka whakamahia e mātou te ILogger paerewa mai i te mōkihi Microsoft.Extensions.Logging.Abstractions, nō reira ka tāpirihia e mātou te uara mā te whakamahi i tētahi toronga māmā ki roto.

public static IDisposable BeginScopeWith(this ILogger logger, params (string key, object value)[] keys)
{
    return logger.BeginScope(keys.ToDictionary(x => x.key, x => x.value));
}

Ka tāpirihia e mātou he paparanga ki te paipa tukatuka tono, ā, ka whiwhi i te hua e hiahiatia ana.

public class Startup
{
    public void Configure(IApplicationBuilder application)
    {
        application.UseMiddleware<CorrelationIdContextLogger>();
    }
}

Inaianei, kei roto i ngā mahi katoa i puta mai i ngā tono ki tā mātou API tukutuku he tohu hononga e taea ai te hono atu.

Te takiuru ki roto i te taiao .Net microservice i roto i te mahi

Te hononga i roto i ngā karere a te kaihokohoko

Ko te mahi e whai ake nei ko te whakarite i te tuku me te whiwhi i te tohu hononga mā te kaihokohoko karere. I roto i tā mātou tauira, ka whakamahia e mātou a RabbitMQ, me te anga MassTransit hei kiritaki. Anō, ka pekehia e mātou te tatūnga tuatahi o MassTransit ka neke tika atu ki te takiuru.

Hei tīmatanga, ka taea e tātou te whakahohe i ngā rangitaki o MassTransit tonu, mō tēnei ka tāpirihia e tātou he mōkihi ki tā tātou taupānga. Te WhakawhitingaMaha.WhakaurungaSerilog

Install-Package MassTransit.SerilogIntegration

I muri i te tāpiri i te takiuru ki ngā tautuhinga MassTransit, ka taea e tātou te kite i ngā rangitaki anga.

services
    .AddSingleton(provider =>
        {
            return Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                cfg.UseSerilog();
            });
        });

Me kī, ka tukuna e tā tātou tono tētahi kaupapa SomethingDoneMessage me te uara "done" hei whakautu ki tētahi tono POST. Ka taea te whakaahua i te kirimana mō tētahi karere pēnei penei:

namespace MbMessages
{
    public interface ISomethingDoneMessageV1
    {
        string Value { get; }
    }
}

Ko ngā karere MassTransit he rite tonu ki ngā reta kei roto ngā karere kaihokohoko. He rite te āhua o te reta ki tēnei:

{
  "messageId": "59020000-5dba-0015-10b8-08d77ec28593",
  "requestId": "59020000-5dba-0015-5674-08d77ec28592",
  "conversationId": "59020000-5dba-0015-bca8-08d77ec28594",
  "destinationAddress": "rabbitmq://bear.rmq.cloudamqp.com/aelzlsta/ya.servicetemplate.receiveendpoint",
  "headers": {},
  "messageType": [
    "urn:message:MbMessages:ISomethingDoneMessageV1"
  ],
  "message": {
    "value": "done"
  }
}

Ka whakaatuhia e te karere ngā āpure ratonga e hiahiatia ana mō te anga mahi tonu, engari ka taea hoki e tātou te tāpiri i ā tātou ake āhuatanga tāpiri ki tēnei kōpaki. Hei tāpiri, kei a MassTransit ngā taputapu kua hangaia mō te whakahaere i ētahi āpure kōwhiringa, ko te mea tino whakamere ko te CorrelationId.

Me tāpiri te atanga CorrelatedBy ki te kirimana karere:

namespace MbMessages
{
    public interface ISomethingDoneMessageV1 : CorrelatedBy<Guid>
    {
        string Value { get; }
    }
}

Me whakatinana, me te tuku uara ki te āhuatanga CorrelationId ina hangaia he karere:

internal class SomethingDoneMessageV1 : ISomethingDoneMessageV1
{
    internal SomethingDoneMessageV1(Guid correlationId, string value)
    {
        CorrelationId = correlationId;
        Value = value;
    }
    
    public Guid CorrelationId { get; private set; }
    public string Value { get; private set; }
}

Ki te titiro tātou ki te karere kua whakahoutia, ka kite tātou ehara i te mea ko te tohu hononga he wāhanga noa iho o tā tātou karere, engari he wāhanga anō hoki o te kōpaki—ka whakamahia anō hoki tēnei tohu i roto i ngā rangitaki MassTransit katoa, ko te tikanga ka māmā ake te whakatau i ngā raruraru i te taumata kaihokohoko karere.

{
  "messageId": "59020000-5dba-0015-10b8-08d77ec28593",
  "requestId": "59020000-5dba-0015-5674-08d77ec28592",
  "conversationId": "59020000-5dba-0015-bca8-08d77ec28594",
  "correlationId": "c7ff562a-b639-415b-9add-c9e524a727cc",
  "destinationAddress": "rabbitmq://bear.rmq.cloudamqp.com/aelzlsta/ya.servicetemplate.receiveendpoint",
  "headers": {},
  "messageType": [
    "urn:message:MbMessages:ISomethingDoneMessageV1"
  ],
  "message": {
    "correlationId": "c7ff562a-b639-415b-9add-c9e524a727cc",
    "value": "Hello"
  }
}

Me whirihora tonu e tātou te takiuru o ēnei āhuatanga ratonga o te karere. Hei mahi i tēnei, ka tāpirihia e tātou he mōkihi ki te kaupapa. Karere Whakawhiti Papatipu Serilog.Enrichers.Ka tāpirihia e te mōkihi he tātari ki te paipa tukatuka karere MassTransit, e whakanoho ana i te horopaki karere ki runga i tētahi puranga haumaru-miro. Ka pānuihia e SerialLog te horopaki mai i te puranga, ā, ka tāpirihia ēnei āhuatanga tāpiri ki ā mātou mea takiuru.

Install-Package Serilog.Enrichers.MassTransitMessage

Whakauruhia he tātari ki MassTransit

services
    .AddSingleton(provider =>
        {
            return Bus.Factory.CreateUsingRabbitMq(cfg =>
            {
                cfg.UseSerilog();
                cfg.UseSerilogMessagePropertiesEnricher();
            });
        });

Ā, i roto i te whirihoranga Serilog ka tāpirihia e mātou a Enricher

Log.Logger = new LoggerConfiguration()
    .Enrich.FromMassTransitMessage()
    .CreateLogger();

I te mea ka taea e te tono e whiwhi ana i tētahi karere mai i tētahi rarangi RabbitMQ te uru atu ki ngā āhuatanga katoa o te kōpaki MassTransit, ka taea e tātou te whakamahi i te tohu taunga hononga i roto i te tono e kai ana, me te tuku atu hoki i raro i te mekameka waea.

Nā reira, ka tīmata ā mātou rangitaki ki te pupuri i te CorrelationId ehara i te mea i roto i te ratonga kotahi anake, engari i te wā e taunekeneke ana me ētahi atu taupānga.

Te takiuru ki roto i te taiao .Net microservice i roto i te mahi

Nō reira, mā te pūnaha takiuru hua mō ngā tono .Net ka taea e tātou te hono ngāwari i ngā rangitaki mai i ngā ratonga moroiti tino rerekē—tae atu ki ērā e rere ana mā te kaihokohoko karere. Ā, mā te Elasticsearch, ka taea e tātou te tātari tere me te ngāwari i ngā rangitaki mā te hanga i ngā papaaho e tika ana i Kibana (kei te whakaatuhia he tauira i te ahua e piri ana ki te pou).

Ae, e kore e hipokina e te takiuru ki tēnei puka ngā taunekeneke uaua i waenga i ō ratonga me ngā pūnaha o waho, engari ko te whakatū i tēnei momo raupapa i te tīmatanga o te whanaketanga o tētahi kaupapa tētahi o ngā mea ka mihi nui koe ki a koe anō mōna.

Ka taea e koe te tūhura i te waehere pūtake o te pūnaha hua i roto i te kaupapa: github.com/a-postx/YA.Tauira Ratonga

Source: will.com

Hokona te manaaki pono mo nga waahi me te tiaki DDoS, nga kaiwhakarato VPS VDS 🔥 Hokona he manaaki paetukutuku pono me te tiakitanga DDoS, ngā tūmau VPS VDS | ProHoster