Menskalakan SignalR Service dengan beberapa instans
SignalR Service SDK mendukung beberapa titik akhir untuk instans SignalR Service. Anda dapat menggunakan fitur ini untuk menskalakan koneksi serentak, atau menggunakannya untuk olahpesan lintas wilayah.
Untuk ASP.NET Core
Menambahkan beberapa titik akhir dari konfigurasi
Konfigurasikan dengan kunci Azure:SignalR:ConnectionString
atau Azure:SignalR:ConnectionString:
untuk string koneksi SignalR Service.
Jika kunci dimulai dengan Azure:SignalR:ConnectionString:
, kunci harus dalam format Azure:SignalR:ConnectionString:{Name}:{EndpointType}
, di mana Name
dan EndpointType
merupakan properti ServiceEndpoint
objek, dan dapat diakses dari kode.
Anda dapat menambahkan beberapa string koneksi instans menggunakan perintah dotnet
berikut:
dotnet user-secrets set Azure:SignalR:ConnectionString:east-region-a <ConnectionString1>
dotnet user-secrets set Azure:SignalR:ConnectionString:east-region-b:primary <ConnectionString2>
dotnet user-secrets set Azure:SignalR:ConnectionString:backup:secondary <ConnectionString3>
Menambahkan beberapa titik akhir dari kode
Kelas ServiceEndpoint
menjelaskan properti titik akhir Azure SignalR Service.
Anda dapat mengonfigurasi beberapa titik akhir instans saat menggunakan Azure SignalR Service SDK melalui:
services.AddSignalR()
.AddAzureSignalR(options =>
{
options.Endpoints = new ServiceEndpoint[]
{
// Note: this is just a demonstration of how to set options.Endpoints
// Having ConnectionStrings explicitly set inside the code is not encouraged
// You can fetch it from a safe place such as Azure KeyVault
new ServiceEndpoint("<ConnectionString0>"),
new ServiceEndpoint("<ConnectionString1>", type: EndpointType.Primary, name: "east-region-a"),
new ServiceEndpoint("<ConnectionString2>", type: EndpointType.Primary, name: "east-region-b"),
new ServiceEndpoint("<ConnectionString3>", type: EndpointType.Secondary, name: "backup"),
};
});
Menyesuaikan perute titik akhir
Secara default, SDK menggunakan DefaultEndpointRouter untuk mengambil titik akhir.
Perilaku default
Perutean permintaan klien:
Ketika klien
/negotiate
dengan server aplikasi. Secara default, SDK memilih secara acak satu titik akhir dari kumpulan titik akhir layanan yang tersedia.Perutean pesan server:
Saat mengirim pesan ke koneksi tertentu dan koneksi target dirutekan ke server saat ini, pesan langsung masuk ke titik akhir yang tersambung tersebut. Jika tidak, pesan disiarkan ke setiap titik akhir Azure SignalR.
Menyesuaikan algoritma perutean
Anda dapat membuat router Anda sendiri ketika Anda memiliki pengetahuan khusus untuk mengidentifikasi ke titik akhir mana pesan akan masuk.
Contoh berikut mendefinisikan router kustom yang merutekan pesan dengan grup yang dimulai dengan east-
ke titik akhir bernama east
:
private class CustomRouter : EndpointRouterDecorator
{
public override IEnumerable<ServiceEndpoint> GetEndpointsForGroup(string groupName, IEnumerable<ServiceEndpoint> endpoints)
{
// Override the group broadcast behavior, if the group name starts with "east-", only send messages to endpoints inside east
if (groupName.StartsWith("east-"))
{
return endpoints.Where(e => e.Name.StartsWith("east-"));
}
return base.GetEndpointsForGroup(groupName, endpoints);
}
}
Contoh berikut mengambil alih perilaku negosiasi default dan memilih titik akhir tergantung pada lokasi server aplikasi.
private class CustomRouter : EndpointRouterDecorator
{ public override ServiceEndpoint GetNegotiateEndpoint(HttpContext context, IEnumerable<ServiceEndpoint> endpoints)
{
// Override the negotiate behavior to get the endpoint from query string
var endpointName = context.Request.Query["endpoint"];
if (endpointName.Count == 0)
{
context.Response.StatusCode = 400;
var response = Encoding.UTF8.GetBytes("Invalid request");
context.Response.Body.Write(response, 0, response.Length);
return null;
}
return endpoints.FirstOrDefault(s => s.Name == endpointName && s.Online) // Get the endpoint with name matching the incoming request
?? base.GetNegotiateEndpoint(context, endpoints); // Or fallback to the default behavior to randomly select one from primary endpoints, or fallback to secondary when no primary ones are online
}
}
Jangan lupa untuk mendaftarkan router ke kontainer DI menggunakan:
services.AddSingleton(typeof(IEndpointRouter), typeof(CustomRouter));
services.AddSignalR()
.AddAzureSignalR(
options =>
{
options.Endpoints = new ServiceEndpoint[]
{
new ServiceEndpoint(name: "east", connectionString: "<connectionString1>"),
new ServiceEndpoint(name: "west", connectionString: "<connectionString2>"),
new ServiceEndpoint("<connectionString3>")
};
});
Untuk ASP.NET
Menambahkan beberapa titik akhir dari konfigurasi
Konfigurasi dengan kunci Azure:SignalR:ConnectionString
atau Azure:SignalR:ConnectionString:
untuk string koneksi SignalR Service.
Jika diawali dengan Azure:SignalR:ConnectionString:
, kunci harus dalam format Azure:SignalR:ConnectionString:{Name}:{EndpointType}
, di mana Name
dan EndpointType
adalah properti objek ServiceEndpoint
, dan dapat diakses dari kode.
Anda dapat menambahkan beberapa string koneksi instans ke web.config
:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="Azure:SignalR:ConnectionString" connectionString="<ConnectionString1>"/>
<add name="Azure:SignalR:ConnectionString:en-us" connectionString="<ConnectionString2>"/>
<add name="Azure:SignalR:ConnectionString:zh-cn:secondary" connectionString="<ConnectionString3>"/>
<add name="Azure:SignalR:ConnectionString:Backup:secondary" connectionString="<ConnectionString4>"/>
</connectionStrings>
...
</configuration>
Menambahkan beberapa titik akhir dari kode
Kelas ServiceEndpoint
menjelaskan properti titik akhir Azure SignalR Service.
Anda dapat mengonfigurasi beberapa titik akhir instans saat menggunakan Azure SignalR Service SDK melalui:
app.MapAzureSignalR(
this.GetType().FullName,
options => {
options.Endpoints = new ServiceEndpoint[]
{
// Note: this is just a demonstration of how to set options. Endpoints
// Having ConnectionStrings explicitly set inside the code is not encouraged.
// You can fetch it from a safe place such as Azure KeyVault
new ServiceEndpoint("<ConnectionString1>"),
new ServiceEndpoint("<ConnectionString2>"),
new ServiceEndpoint("<ConnectionString3>"),
}
});
Menyesuaikan perute
Satu-satunya perbedaan antara ASP.NET SignalR dan ASP.NET Core SignalR adalah jenis konteks http untuk GetNegotiateEndpoint
. Untuk ASP.NET SignalR, jenisnya adalah IOwinContext.
Kode berikut adalah contoh negosiasi kustom untuk ASP.NET SignalR:
private class CustomRouter : EndpointRouterDecorator
{
public override ServiceEndpoint GetNegotiateEndpoint(IOwinContext context, IEnumerable<ServiceEndpoint> endpoints)
{
// Override the negotiate behavior to get the endpoint from query string
var endpointName = context.Request.Query["endpoint"];
if (string.IsNullOrEmpty(endpointName))
{
context.Response.StatusCode = 400;
context.Response.Write("Invalid request.");
return null;
}
return endpoints.FirstOrDefault(s => s.Name == endpointName && s.Online) // Get the endpoint with name matching the incoming request
?? base.GetNegotiateEndpoint(context, endpoints); // Or fallback to the default behavior to randomly select one from primary endpoints, or fallback to secondary when no primary ones are online
}
}
Jangan lupa untuk mendaftarkan router ke kontainer DI menggunakan:
var hub = new HubConfiguration();
var router = new CustomRouter();
hub.Resolver.Register(typeof(IEndpointRouter), () => router);
app.MapAzureSignalR(GetType().FullName, hub, options => {
options.Endpoints = new ServiceEndpoint[]
{
new ServiceEndpoint(name: "east", connectionString: "<connectionString1>"),
new ServiceEndpoint(name: "west", connectionString: "<connectionString2>"),
new ServiceEndpoint("<connectionString3>")
};
});
Metrik Titik Akhir Layanan
Untuk mengaktifkan router tingkat lanjut, SignalR server SDK menyediakan beberapa metrik untuk membantu server membuat keputusan cerdas. Properti berada di bawah ServiceEndpoint.EndpointMetrics
.
Nama Metrik | Deskripsi |
---|---|
ClientConnectionCount |
Jumlah total koneksi klien bersamaan di semua hub untuk titik akhir layanan |
ServerConnectionCount |
Jumlah total koneksi server bersamaan di semua hub untuk titik akhir layanan |
ConnectionCapacity |
Total kuota koneksi untuk titik akhir layanan, termasuk koneksi klien dan server |
Kode berikut adalah contoh penyesuaian router menurut ClientConnectionCount
.
private class CustomRouter : EndpointRouterDecorator
{
public override ServiceEndpoint GetNegotiateEndpoint(HttpContext context, IEnumerable<ServiceEndpoint> endpoints)
{
return endpoints.OrderBy(x => x.EndpointMetrics.ClientConnectionCount).FirstOrDefault(x => x.Online) // Get the available endpoint with minimal clients load
?? base.GetNegotiateEndpoint(context, endpoints); // Or fallback to the default behavior to randomly select one from primary endpoints, or fallback to secondary when no primary ones are online
}
}
Dynamic Scale ServiceEndpoints
Dari SDK versi 1.5.0, kami mengaktifkan ServiceEndpoints skala dinamis untuk versi ASP.NET Core terlebih dahulu. Jadi Anda tidak perlu menghidupkan ulang server aplikasi saat Anda perlu menambahkan/menghapus ServiceEndpoint. Karena ASP.NET Core mendukung konfigurasi default seperti appsettings.json
, reloadOnChange: true
Anda tidak perlu mengubah kode, dan didukung oleh alam. Dan jika Anda ingin menambahkan beberapa konfigurasi yang disesuaikan dan bekerja dengan hot-reload, lihat Konfigurasi di ASP.NET Core.
Catatan
Mengingat waktu penyiapan koneksi antara server/layanan dan klien/layanan mungkin berbeda, untuk memastikan tidak ada kehilangan pesan selama proses skala, kami memiliki periode penahapan yang menunggu koneksi server siap sebelum membuka ServiceEndpoint baru kepada klien. Biasanya dibutuhkan beberapa detik untuk menyelesaikannya dan Anda akan dapat melihat pesan log seperti Succeed in adding endpoint: '{endpoint}'
yang menunjukkan proses selesai.
Dalam beberapa situasi yang diharapkan, seperti masalah jaringan lintas wilayah atau inkonsistensi konfigurasi di server aplikasi yang berbeda, periode penahapan mungkin tidak selesai dengan benar. Dalam kasus ini, disarankan untuk memulai ulang server aplikasi saat Anda menemukan proses penskalaan tidak berfungsi dengan benar.
Periode batas waktu default untuk skala adalah 5 menit, dan dapat disesuaikan dengan mengubah nilai dalam ServiceOptions.ServiceScaleTimeout
. Jika Anda memiliki banyak server aplikasi, disarankan untuk memperluas nilai sedikit lebih banyak.
Catatan
Saat ini fitur beberapa titik akhir hanya didukung pada Persistent
jenis transportasi.
Untuk ekstensi SignalR Functions
Konfigurasi
Untuk mengaktifkan beberapa instans SignalR Service, Anda harus:
Gunakan
Persistent
jenis transportasi.Jenis transportasi default adalah
Transient
mode. Anda harus menambahkan entri berikut kelocal.settings.json
file anda atau pengaturan aplikasi di Azure.{ "AzureSignalRServiceTransportType":"Persistent" }
Catatan
Saat beralih dari
Transient
mode kePersistent
mode, mungkin ada perubahan perilaku serialisasi JSON, karena di bawahTransient
mode,Newtonsoft.Json
pustaka digunakan untuk menserialisasikan argumen metode hub, namun, dalamPersistent
mode,System.Text.Json
pustaka digunakan sebagai default.System.Text.Json
memiliki beberapa perbedaan utama dalam perilaku default denganNewtonsoft.Json
. Jika Anda ingin menggunakanNewtonsoft.Json
dalamPersistent
mode, Anda dapat menambahkan item konfigurasi:"Azure:SignalR:HubProtocol":"NewtonsoftJson"
dalamlocal.settings.json
file atauAzure__SignalR__HubProtocol=NewtonsoftJson
di portal Azure.Konfigurasikan beberapa entri titik akhir SignalR Service dalam konfigurasi Anda.
Kami menggunakan
ServiceEndpoint
objek untuk mewakili instans SignalR Service. Anda dapat menentukan titik akhir layanan dengan<EndpointName>
dan<EndpointType>
di kunci entri, dan string koneksi dalam nilai entri. Kunci dalam format berikut:Azure:SignalR:Endpoints:<EndpointName>:<EndpointType>
<EndpointType>
bersifat opsional dan default keprimary
. Lihat sampel di bawah ini:{ "Azure:SignalR:Endpoints:EastUs":"<ConnectionString>", "Azure:SignalR:Endpoints:EastUs2:Secondary":"<ConnectionString>", "Azure:SignalR:Endpoints:WestUs:Primary":"<ConnectionString>" }
Catatan
Saat Anda mengonfigurasi titik akhir Azure SignalR di App Service di portal Azure, jangan lupa untuk mengganti
":"
dengan"__"
, garis bawah ganda di kunci. Untuk alasannya, lihat Variabel lingkungan.String koneksi yang dikonfigurasi dengan kunci
{ConnectionStringSetting}
(default ke "AzureSignalRConnectionString") juga dikenali sebagai titik akhir layanan utama dengan nama kosong. Tetapi gaya konfigurasi ini tidak disarankan untuk beberapa titik akhir.
Perutean
Perilaku default
Secara default, pengikatan fungsi menggunakan DefaultEndpointRouter untuk mengambil titik akhir.
Perutean klien: Pilih satu titik akhir secara acak dari titik akhir online utama. Jika semua titik akhir utama offline, maka pilih satu titik akhir online sekunder secara acak. Jika pilihan gagal lagi, maka pengecualian akan dilemparkan.
Perutean pesan server: Semua titik akhir layanan dikembalikan.
Penyesuaian
Model dalam proses C#
Berikut langkah-langkahnya:
Menerapkan router yang disesuaikan. Anda dapat memanfaatkan informasi yang disediakan untuk
ServiceEndpoint
membuat keputusan perutean. Lihat panduan di sini: customize-route-algorithm. Harap dicatat bahwa pemicu Http diperlukan dalam fungsi negosiasi ketika Anda membutuhkanHttpContext
dalam metode negosiasi kustom.Daftarkan router ke kontainer DI.
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Azure.SignalR;
using Microsoft.Extensions.DependencyInjection;
[assembly: FunctionsStartup(typeof(SimpleChatV3.Startup))]
namespace SimpleChatV3
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddSingleton<IEndpointRouter, CustomizedRouter>();
}
}
}
Model proses terisolasi
Untuk fungsi yang berjalan pada model proses terisolasi, kami mendukung penentuan titik akhir target di setiap permintaan. Anda akan menggunakan jenis pengikatan baru untuk mendapatkan informasi titik akhir.
Perutean klien
Pengikatan SignalRConnectionInfo
memilih satu titik akhir sesuai dengan aturan perutean default. Jika Anda ingin menyesuaikan aturan perutean, Anda harus menggunakan SignalRNegotiation
pengikatan alih-alih SignalRConnectionInfo
mengikat.
SignalRNegotiation
properti konfigurasi pengikatan sama SignalRConnectionInfo
dengan . Berikut adalah function.json
sampel file:
{
"type": "signalRNegotiation",
"name": "negotiationContext",
"hubName": "<HubName>",
"direction": "in"
}
Anda juga dapat menambahkan data pengikatan lainnya seperti userId
, idToken
dan claimTypeList
seperti SignalRConnectionInfo
.
Objek yang Anda dapatkan dari SignalRNegotiation
pengikatan dalam format berikut:
{
"endpoints": [
{
"endpointType": "Primary",
"name": "<EndpointName>",
"endpoint": "https://****.service.signalr.net",
"online": true,
"connectionInfo": {
"url": "<client-access-url>",
"accessToken": "<client-access-token>"
}
},
{
"...": "..."
}
]
}
Berikut adalah sampel pengikatan SignalRNegotiation
penggunaan JavaScript:
module.exports = function (context, req, negotiationContext) {
var userId = req.query.userId;
if (userId.startsWith("east-")) {
//return the first endpoint whose name starts with "east-" and status is online.
context.res.body = negotiationContext.endpoints.find(endpoint => endpoint.name.startsWith("east-") && endpoint.online).connectionInfo;
}
else {
//return the first online endpoint
context.res.body = negotiationContext.endpoints.filter(endpoint => endpoint.online)[0].connectionInfo;
}
}
Perutean pesan
Perutean pesan atau tindakan membutuhkan dua jenis pengikatan untuk bekerja sama. Secara umum, pertama-tama Anda memerlukan jenis SignalREndpoints
pengikatan input baru untuk mendapatkan semua informasi titik akhir yang tersedia. Kemudian Anda memfilter titik akhir dan mendapatkan array yang berisi semua titik akhir yang ingin Anda kirimi. Terakhir Anda menentukan titik akhir target dalam pengikatan SignalR
output.
Berikut SignalREndpoints
adalah properti konfigurasi pengikatan dalam functions.json
file:
{
"type": "signalREndpoints",
"direction": "in",
"name": "endpoints",
"hubName": "<HubName>"
}
Objek yang Anda dapatkan adalah SignalREndpoints
array titik akhir yang masing-masing direpresentasikan sebagai objek JSON dengan skema berikut:
{
"endpointType": "<EndpointType>",
"name": "<EndpointName>",
"endpoint": "https://****.service.signalr.net",
"online": true
}
Setelah Anda mendapatkan array titik akhir target, tambahkan endpoints
properti ke objek pengikatan output. Ini adalah contoh JavaScript:
module.exports = function (context, req, endpoints) {
var targetEndpoints = endpoints.filter(endpoint => endpoint.name.startsWith("east-"));
context.bindings.signalRMessages = [{
"target": "chat",
"arguments": ["hello-world"],
"endpoints": targetEndpoints,
}];
context.done();
}
Untuk SDK Manajemen
Menambahkan beberapa titik akhir dari konfigurasi
Konfigurasikan dengan kunci Azure:SignalR:Endpoints
untuk string koneksi SignalR Service. Kunci harus dalam format Azure:SignalR:Endpoints:{Name}:{EndpointType}
, di mana Name
dan EndpointType
merupakan properti ServiceEndpoint
objek, dan dapat diakses dari kode.
Anda dapat menambahkan beberapa string koneksi instans menggunakan perintah dotnet
berikut:
dotnet user-secrets set Azure:SignalR:Endpoints:east-region-a <ConnectionString1>
dotnet user-secrets set Azure:SignalR:Endpoints:east-region-b:primary <ConnectionString2>
dotnet user-secrets set Azure:SignalR:Endpoints:backup:secondary <ConnectionString3>
Menambahkan beberapa titik akhir dari kode
Kelas ServiceEndpoint
menjelaskan properti titik akhir Azure SignalR Service.
Anda dapat mengonfigurasi beberapa titik akhir instans saat menggunakan Azure SignalR Management SDK melalui:
var serviceManager = new ServiceManagerBuilder()
.WithOptions(option =>
{
options.Endpoints = new ServiceEndpoint[]
{
// Note: this is just a demonstration of how to set options.Endpoints
// Having ConnectionStrings explicitly set inside the code is not encouraged
// You can fetch it from a safe place such as Azure KeyVault
new ServiceEndpoint("<ConnectionString0>"),
new ServiceEndpoint("<ConnectionString1>", type: EndpointType.Primary, name: "east-region-a"),
new ServiceEndpoint("<ConnectionString2>", type: EndpointType.Primary, name: "east-region-b"),
new ServiceEndpoint("<ConnectionString3>", type: EndpointType.Secondary, name: "backup"),
};
})
.BuildServiceManager();
Menyesuaikan perute titik akhir
Secara default, SDK menggunakan DefaultEndpointRouter untuk mengambil titik akhir.
Perilaku default
Perutean permintaan klien:
Ketika klien
/negotiate
dengan server aplikasi. Secara default, SDK memilih secara acak satu titik akhir dari kumpulan titik akhir layanan yang tersedia.Perutean pesan server:
Saat mengirim pesan ke koneksi tertentu dan koneksi target dirutekan ke server saat ini, pesan langsung masuk ke titik akhir yang tersambung tersebut. Jika tidak, pesan disiarkan ke setiap titik akhir Azure SignalR.
Menyesuaikan algoritma perutean
Anda dapat membuat router Anda sendiri ketika Anda memiliki pengetahuan khusus untuk mengidentifikasi ke titik akhir mana pesan akan masuk.
Contoh berikut mendefinisikan router kustom yang merutekan pesan dengan grup yang dimulai dengan east-
ke titik akhir bernama east
:
private class CustomRouter : EndpointRouterDecorator
{
public override IEnumerable<ServiceEndpoint> GetEndpointsForGroup(string groupName, IEnumerable<ServiceEndpoint> endpoints)
{
// Override the group broadcast behavior, if the group name starts with "east-", only send messages to endpoints inside east
if (groupName.StartsWith("east-"))
{
return endpoints.Where(e => e.Name.StartsWith("east-"));
}
return base.GetEndpointsForGroup(groupName, endpoints);
}
}
Contoh berikut mengambil alih perilaku negosiasi default dan memilih titik akhir tergantung pada lokasi server aplikasi.
private class CustomRouter : EndpointRouterDecorator
{ public override ServiceEndpoint GetNegotiateEndpoint(HttpContext context, IEnumerable<ServiceEndpoint> endpoints)
{
// Override the negotiate behavior to get the endpoint from query string
var endpointName = context.Request.Query["endpoint"];
if (endpointName.Count == 0)
{
context.Response.StatusCode = 400;
var response = Encoding.UTF8.GetBytes("Invalid request");
context.Response.Body.Write(response, 0, response.Length);
return null;
}
return endpoints.FirstOrDefault(s => s.Name == endpointName && s.Online) // Get the endpoint with name matching the incoming request
?? base.GetNegotiateEndpoint(context, endpoints); // Or fallback to the default behavior to randomly select one from primary endpoints, or fallback to secondary when no primary ones are online
}
}
Jangan lupa untuk mendaftarkan router ke kontainer DI menggunakan:
var serviceManager = new ServiceManagerBuilder()
.WithOptions(option =>
{
options.Endpoints = new ServiceEndpoint[]
{
// Note: this is just a demonstration of how to set options.Endpoints
// Having ConnectionStrings explicitly set inside the code is not encouraged
// You can fetch it from a safe place such as Azure KeyVault
new ServiceEndpoint("<ConnectionString0>"),
new ServiceEndpoint("<ConnectionString1>", type: EndpointType.Primary, name: "east-region-a"),
new ServiceEndpoint("<ConnectionString2>", type: EndpointType.Primary, name: "east-region-b"),
new ServiceEndpoint("<ConnectionString3>", type: EndpointType.Secondary, name: "backup"),
};
})
.WithRouter(new CustomRouter())
.BuildServiceManager();
Konfigurasi dalam skenario lintas wilayah
Objek ServiceEndpoint
memiliki properti EndpointType
dengan nilai primary
atau secondary
.
Titik akhir utama adalah titik akhir pilihan untuk menerima lalu lintas klien karena memiliki koneksi jaringan yang lebih andal. Titik akhir sekunder memiliki koneksi jaringan yang kurang andal dan hanya digunakan untuk lalu lintas server ke klien. Misalnya, titik akhir sekunder digunakan untuk menyiarkan pesan alih-alih lalu lintas klien ke server.
Dalam kasus lintas wilayah, jaringan dapat tidak stabil. Untuk server aplikasi yang terletak di US Timur, titik akhir SignalR Service yang terletak di wilayah US Timur yang sama adalah primary
dan titik akhir di wilayah lain yang ditandai sebagai secondary
. Dalam konfigurasi ini, titik akhir layanan di wilayah lain dapat menerima pesan dari server aplikasi US Timur ini, tetapi tidak ada klien lintas wilayah yang dirutekan ke server aplikasi ini. Diagram berikut menunjukkan arsitektur ini:
Saat klien mencoba /negotiate
dengan server aplikasi dengan router default, SDK secara acak memilih satu titik akhir dari kumpulan titik akhir yang tersedia primary
. Saat titik akhir utama tidak tersedia, SDK kemudian secara acak memilih dari semua titik akhir yang tersedia secondary
. Titik akhir ditandai sebagai tersedia jika koneksi antara server dan titik akhir layanan masih aktif.
Dalam skenario lintas wilayah, ketika klien mencoba /negotiate
dengan server aplikasi yang dihosting di US Timur, secara default selalu mengembalikan primary
titik akhir yang terletak di wilayah yang sama. Ketika semua titik akhir US Timur tidak tersedia, router mengalihkan klien ke titik akhir di wilayah lain. Bagian failover berikut menjelaskan skenario secara rinci.
Failover
Ketika tidak ada primary
titik akhir yang tersedia, klien /negotiate
memilih dari titik akhir yang tersedia secondary
. Mekanisme failover ini mengharuskan setiap titik akhir berfungsi sebagai primary
titik akhir ke setidaknya satu server aplikasi.
Langkah berikutnya
Anda dapat menggunakan beberapa titik akhir dalam skenario ketersediaan tinggi dan pemulihan bencana.