Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Python özellik yönetimi kitaplığı, özellik bayraklarını temel alarak uygulama işlevselliği geliştirmenin ve kullanıma sunmanın bir yolunu sağlar. Yeni bir özellik geliştirildikten sonra, birçok uygulamanın özelliğin ne zaman etkinleştirilmesi gerektiği ve hangi koşullar altında olduğu gibi özel gereksinimleri vardır. Bu kitaplık, bu ilişkileri tanımlamanın bir yolunu sağlar ve ayrıca bu özelliklerin kullanıma sunulmasını mümkün kılmak için ortak Python kod desenleriyle tümleştirilir.
Özellik bayrakları, Python uygulamalarının özellikleri dinamik olarak açması veya kapatması için bir yol sağlar. Geliştiriciler, koşullu deyimler gibi basit kullanım örneklerinde özellik bayraklarını kullanabilir.
Python özellik yönetimi kitaplığını kullanmanın avantajlarından bazıları şunlardır:
Özellik yönetimi için ortak bir kural
Giriş için düşük bariyer
- JSON özellik bayrağı kurulumunu destekler
Özellik bayrağı yaşam süresi yönetimi
- Yapılandırma değerleri gerçek zamanlı olarak değişebilir; özellik bayrakları isteğin tamamında tutarlı olabilir
Ele alınan basit ve karmaşık senaryolar
- Bildirim temelli yapılandırma dosyası aracılığıyla özellikleri açma/kapatma
- Sunucu çağrısına göre özelliğin durumunu dinamik olarak değerlendirme
Python özellik yönetimi kitaplığı açık kaynak. Daha fazla bilgi için GitHub deposunu ziyaret edin.
Özellik bayrakları
Özellik bayrakları, özelliği açmak için kullanılan bir ad ve özellik filtreleri listesi olmak üzere iki bölümden oluşur.
Özellik filtreleri
Özellik filtreleri, bir özelliğin ne zaman etkinleştirilmesi gerektiğine yönelik bir senaryo tanımlar. Özellik açık mı yoksa kapalı mı olduğu değerlendirildiğinde, filtrelerden biri özelliğin etkinleştirilmesi gerektiğine karar verene kadar özellik filtreleri listesinden geçilir. Bu noktada özellik etkin olarak kabul edilir ve özellik filtreleri durakları arasında geçiş yapılır. Özellik filtresi özelliğin etkinleştirilmesi gerektiğini belirtmiyorsa devre dışı olarak kabul edilir.
Örneğin, bir Microsoft Edge tarayıcı özellik filtresi tasarlanabilir. Bu özellik filtresi, Microsoft Edge'den http isteği geldiği sürece bu filtreye eklenen tüm özellikleri etkinleştirir.
Özellik bayrağı yapılandırması
Özellik bayraklarını tanımlamak için Python sözlüğü kullanılır. Sözlük, anahtar olarak özellik adlarından ve değer olarak özellik bayrak nesnelerinden oluşur. Özellik bayrağı nesnesi, anahtarı içeren ve anahtarı içeren bir conditions sözlüktür client_filters . Anahtar client_filters , özelliğin etkinleştirilmesi gerekip gerekmediğini belirlemek için kullanılan özellik filtrelerinin listesidir.
Özellik bayrağı bildirimi
Özellik yönetimi kitaplığı, özellik bayrağı kaynağı olarak json'yi destekler. Aşağıda bir JSON dosyasında özellik bayraklarını ayarlamak için kullanılan biçime bir örnek verilmiştir.
{
"feature_management": {
"feature_flags": [
{
"id": "FeatureT",
"enabled": true
},
{
"id": "FeatureU",
"enabled": false
},
{
"id": "FeatureV",
"enabled": true,
"conditions": {
"client_filters": [
{
"name": "Microsoft.TimeWindow",
"parameters": {
"Start": "Wed, 01 May 2019 13:59:59 GMT",
"End": "Mon, 01 Jul 2019 00:00:00 GMT"
}
}
]
}
}
]
}
}
feature_management json belgesinin bölümü, özellik bayrağı ayarlarını yüklemek için kural tarafından kullanılır.
feature_flags bölümü, kitaplığa yüklenen özellik bayraklarının listesidir. Yukarıdaki bölümde üç farklı özellik görüyoruz. Özellikler, client_filtersiçinde özelliğini kullanarak conditions özellik filtrelerini tanımlar. için FeatureTözellik filtrelerinde tanımlı filtre olmadığını ve bunun sonucunda her zaman döndürüldiğini enabledtrue görüyoruz FeatureTtrue.
FeatureUile aynıdırFeatureT, ancak özelliğin enabled her zaman döndürüleceği falsesonucuna neden olurfalse.
FeatureV adlı Microsoft.TimeWindowbir özellik filtresi belirtir.
FeatureV yapılandırılabilir özellik filtresi örneğidir. Örnekte filtrenin bir parameters özelliği olduğunu görebiliriz.
parameters özelliği, filtreyi yapılandırmak için kullanılır. Bu durumda, özelliğin etkin olması için başlangıç ve bitiş saatleri yapılandırılır.
Bölümün feature_management ayrıntılı şemasına buradan ulaşabilirsiniz.
Gelişmiş: Özellik bayrağı adlarında ':' iki nokta üst üste kullanımı yasaktır.
Açık/kapalı bildirimi
Aşağıdaki kod parçacığında, açık/kapalı özellikler için kullanılabilecek bir özelliği tanımlamanın alternatif bir yolu gösterilmektedir.
{
"feature_management": {
"feature_flags": [
{
"id": "FeatureT",
"enabled": "true"
},
{
"id": "FeatureX",
"enabled": "false"
}
]
}
}
Gereksinim türü
requirement_type Özellik bayrağının özelliği, bir özelliğin durumunu değerlendirirken filtrelerin mi yoksa Any mantığın mı kullanılacağını All belirlemek için kullanılır. Belirtilmezse requirement_type , varsayılan değer olur Any.
-
Any, özelliğin etkinleştirilmesi için yalnızca bir filtrenin true olarak hesaplanması gerektiği anlamına gelir. -
All, özelliğin etkinleştirilmesi için her filtrenin true olarak hesaplanması gerektiği anlamına gelir.
Geçiş requirement_type değişikliklerinden biri All . İlk olarak, filtre yoksa özellik devre dışı bırakılır. Ardından, filtrelerden biri özelliğin devre dışı bırakılması gerektiğine karar verene kadar özellik filtreleri geçirilir. Hiçbir filtre özelliğin devre dışı bırakılması gerektiğini belirtmezse etkin olarak kabul edilir.
{
"feature_management": {
"feature_flags": [
{
"id": "FeatureW",
"enabled": "true",
"conditions": {
"requirement_type": "All",
"client_filters": [
{
"name": "Microsoft.TimeWindow",
"parameters": {
"Start": "Wed, 01 May 2019 13:59:59 GMT",
"End": "Mon, 01 Jul 2019 00:00:00 GMT"
}
},
{
"name": "Percentage",
"parameters": {
"Value": "50"
}
}
]
}
},
]
}
}
Yukarıdaki örnekte, FeatureW özelliğinin etkinleştirilmesi requirement_typeiçin tüm filtrelerinin true olarak hesaplanması gerektiği anlamına gelen öğesini All belirtir. Bu durumda özellik, belirtilen zaman penceresinde kullanıcıların %50'sinde etkinleştirilir.
Tüketim
Özellik yönetiminin temel biçimi, özellik bayrağının etkinleştirilip etkinleştirilmediğini denetlemek ve ardından sonucta göre eylemler gerçekleştirmektir. Özellik bayrağının durumunu denetleme işlemi ' nin FeatureManager yöntemi aracılığıyla is_enabledyapılır.
…
feature_manager = FeatureManager(feature_flags)
…
if feature_manager.is_enabled("FeatureX"):
# Do something
feature_flags için sağlananFeatureManager, özellik bayraklarının sözlüğü veya sözlüğü olabilirAzureAppConfigurationProvider.
Özellik filtresi uygulama
Özellik filtresi oluşturmak, tanımladığınız ölçütlere göre özellikleri etkinleştirmenin bir yolunu sağlar. Özellik filtresi uygulamak için arabiriminin FeatureFilter uygulanması gerekir.
FeatureFilter adlı evaluatetek bir yöntemi vardır. Özellik, özellik filtresi için etkinleştirilebileceğini belirttiğinde evaluate yöntemi çağrılır. döndürürse evaluatetrue, özelliğin etkinleştirilmesi gerektiği anlamına gelir.
Aşağıdaki kod parçacığında özelleştirilmiş özellik filtresinin MyCustomFilternasıl ekleneceği gösterilmektedir.
feature_manager = FeatureManager(feature_flags, feature_filters=[MyCustomFilter()])
Özellik filtreleri oluşturulurken feature_filtersözelliğine FeatureManager sağlanarak kaydedilir. Özel özellik filtresinin herhangi bir bağlama ihtiyacı varsa, kullanılarak is_enabledçağrılırken kwargs geçirilebilir.
Filtre diğer adı özniteliği
Özellik bayrağı için bir özellik filtresi kaydedildiğinde, filtrenin adı varsayılan olarak diğer ad olarak kullanılır.
Özellik filtresi tanımlayıcısı kullanılarak @FeatureFilter.alias("MyFilter")geçersiz kılınabilir. Bir özellik filtresi, bir özellik bayrağı içinde bu özellik filtresine başvurmak üzere yapılandırmada kullanılması gereken adı bildirmek için bu öznitelikle donatılabilir.
Eksik özellik filtreleri
Bir özellik belirli bir özellik filtresi için etkinleştirilecek şekilde yapılandırılmışsa ve bu özellik filtresi kayıtlı değilse, özellik değerlendirildiğinde bir ValueError özel durum oluşur.
Yerleşik özellik filtreleri
Paketiyle birlikte FeatureManagement gelen iki özellik filtresi vardır: TimeWindowFilter, ve TargetingFilter.
Yerleşik özellik filtrelerinin her birinin kendi parametreleri vardır. Örneklerle birlikte özellik filtrelerinin listesi aşağıda verilmiştir.
Microsoft.TimeWindow
Filtre, Microsoft.TimeWindow bir özelliği bir zaman penceresine göre etkinleştirmenin bir yolunu sağlar.
- Yalnızca bir
Enddeğer belirtirseniz, özellik o zamana kadar açık olarak kabul edilir. - Yalnızca bir
Startdeğer belirtirseniz, bu özellik bu sürenin ardından tüm noktalarda açık kabul edilir.
{
"id": "EnhancedPipeline",
"enabled": true,
"conditions": {
"client_filters": [
{
"name": "Microsoft.TimeWindow",
"parameters": {
"Start": "Sun, 01 Jun 2025 13:59:59 GMT",
"End": "Fri, 01 Aug 2025 00:00:00 GMT"
}
}
]
}
}
Filtreyi, yinelenen olarak bir zaman penceresi uygulayacak şekilde yapılandırabilirsiniz. Bu özellik, bir günün düşük trafikli veya yüksek trafikli bir döneminde veya haftanın belirli günlerinde bir özelliği açmanız gerektiğinde yararlı olabilir. Tek bir zaman penceresini yinelenen bir zaman penceresine genişletmek için, yinelenme kuralı belirtmek için bir Recurrence parametre kullanırsınız.
Not
Yinelenmeyi kullanmak için Start ve End değerlerini belirtmeniz gerekir. Bazı durumlarda, değerin tarih bölümü, filtreyi aktif olarak değerlendirmek için bir bitiş tarihi belirtmez. Bunun yerine filtre, yinelenen zaman penceresinin süresini tanımlamak için başlangıç tarihine göre bitiş tarihini kullanır.
{
"id": "EnhancedPipeline",
"enabled": true,
"conditions": {
"client_filters": [
{
"name": "Microsoft.TimeWindow",
"parameters": {
"Start": "Fri, 22 Mar 2024 20:00:00 GMT",
"End": "Sat, 23 Mar 2024 02:00:00 GMT",
"Recurrence": {
"Pattern": {
"Type": "Daily",
"Interval": 1
},
"Range": {
"Type": "NoEnd"
}
}
}
}
]
}
}
Ayarlar Recurrence iki bölümden oluşur:
- Ayarlar
Pattern, zaman penceresinin ne sıklıkta yineleneceğini belirtir. - Ayarlar,
Rangeyineleme düzeninin ne kadar süreyle yineleneceğini belirtir.
Yinelenme düzeni
İki olası yinelenme deseni türü vardır: Daily ve Weekly. Örneğin, bir zaman penceresi her gün, her üç günde, her Pazartesi veya her cuma yinelenebilir.
Türüne bağlı olarak, ayarların Pattern belirli alanları zorunludur, isteğe bağlıdır veya yoksayılır.
DailyGünlük yinelenme düzeni, zaman penceresinin her oluşum arasındaki belirtilen gün sayısına göre yinelenmesine neden olur.
Özellik İlgililik Açıklama TypeGerekli Yinelenme desen türü. Dailyolarak ayarlanmalıdır.IntervalOpsiyonel Her oluşum arasındaki gün sayısı. Varsayılan değer şudur: 1.WeeklyHaftalık yinelenme düzeni, zaman penceresinin haftanın aynı günü veya günlerinde tekrarlanmalarına neden olur. Ancak her yineleme kümesi arasındaki hafta sayısını belirtebilirsiniz.
Özellik İlgililik Açıklama TypeGerekli Yinelenme desen türü. Weeklyolarak ayarlanmalıdır.DaysOfWeekGerekli Olayın gerçekleştiği haftanın günleri. IntervalOpsiyonel Her yineleme kümesi arasındaki hafta sayısı. Varsayılan değer şudur: 1.FirstDayOfWeekOpsiyonel Haftanın ilk günü olarak kullanılacak gün. Varsayılan değer şudur: Sunday.Aşağıdaki örnek, zaman penceresini her Pazartesi ve Salı günü yineler:
"Pattern": { "Type": "Weekly", "Interval": 2, "DaysOfWeek": ["Monday", "Tuesday"] }
Not
Değer, Start yinelenme düzenine uyan geçerli bir ilk oluşum olmalıdır. Ayrıca, zaman penceresinin süresi ne sıklıkta oluştuğundan daha uzun olamaz. Örneğin, 25 saatlik bir zaman penceresi her gün yinelenemez.
Yinelenme aralığı
Üç olası yineleme aralığı türü vardır: NoEnd, EndDate, ve Numbered.
NoEndAralık
NoEnd, yinelenmenin süresiz olarak gerçekleşmesine neden olur.Özellik İlgililik Açıklama TypeGerekli Yinelenme aralığı türü. NoEndolarak ayarlanmalıdır.EndDateBu aralık,
EndDatezaman penceresinin bitiş tarihine kadar belirlenen desene uyan tüm günlerde oluşmasına neden olur.Özellik İlgililik Açıklama TypeGerekli Yinelenme aralığı türü. EndDateolarak ayarlanmalıdır.EndDateGerekli Desenin uygulanmasının durdurulacağı tarih ve saat. Son oluşumun başlangıç saati bitiş tarihinden önceyse, bu oluşumun bitiş saati bunun ötesine uzanabilir. Aşağıdaki örnekte, zaman penceresi 1 Nisan 2024'teki son oluşuma kadar her gün yineler.
"Start": "Fri, 22 Mar 2024 18:00:00 GMT", "End": "Fri, 22 Mar 2024 20:00:00 GMT", "Recurrence":{ "Pattern": { "Type": "Daily", "Interval": 1 }, "Range": { "Type": "EndDate", "EndDate": "Mon, 1 Apr 2024 20:00:00 GMT" } }NumberedBelirlenen
Numberedaralığı, zaman penceresinin belirtilen sayıda tekrarlanmasına neden olur.Özellik İlgililik Açıklama TypeGerekli Yinelenme aralığı türü. Numberedolarak ayarlanmalıdır.NumberOfOccurrencesGerekli Oluşum sayısı. Aşağıdaki örnekte, zaman penceresi Pazartesi ve Salı günleri toplam üç kez yinelenerek aşağıdaki tarihlerde gerçekleşir:
- 1 Nisan Pazartesi
- 2 Nisan Salı
- 8 Nisan Pazartesi
"Start": "Mon, 1 Apr 2024 18:00:00 GMT", "End": "Mon, 1 Apr 2024 20:00:00 GMT", "Recurrence":{ "Pattern": { "Type": "Weekly", "Interval": 1, "DaysOfWeek": ["Monday", "Tuesday"] }, "Range": { "Type": "Numbered", "NumberOfOccurrences": 3 } }
Yinelenme kuralı oluşturmak için hem hem de PatternRange ayarlarını belirtmeniz gerekir. Herhangi bir desen türü herhangi bir aralık türüyle çalışabilir.
İleri: Özelliğin Start saat dilimi uzaklığı yinelenme ayarlarına uygulanır.
Microsoft.Targeting
Bu filtre, bir özelliği hedef kitle için etkinleştirme özelliği sağlar. Hedeflemenin ayrıntılı açıklaması aşağıdaki hedefleme bölümünde açıklanmıştır. Filtre parametreleri, kullanıcıları, grupları, dışlanan kullanıcıları/grupları tanımlayan bir nesneyi ve özelliğe erişimi olması gereken kullanıcı tabanının varsayılan yüzdesini içerir Audience . Bölümünde listelenen Groups her grup nesnesi, grup üyelerinin yüzde kaçının erişimi olması gerektiğini de belirtmelidir. Doğrudan veya kullanıcı dışlanan bir grupta yer alırsa, bölümde bir kullanıcı belirtilirse Exclusion özellik devre dışı bırakılır. Aksi takdirde, bir kullanıcı doğrudan bölümde belirtilirse Users veya kullanıcı grup dağıtımlarından herhangi birinin dahil edilen yüzdesindeyse veya kullanıcı varsayılan dağıtım yüzdesine düşerse, bu kullanıcı özelliği etkinleştirmiş olur.
"client_filters": [
{
"name": "Microsoft.Targeting",
"parameters": {
"Audience": {
"Users": [
"Jeff",
"Alicia"
],
"Groups": [
{
"Name": "Ring0",
"RolloutPercentage": 100
},
{
"Name": "Ring1",
"RolloutPercentage": 50
}
],
"DefaultRolloutPercentage": 20,
"Exclusion": {
"Users": [
"Ross"
],
"Groups": [
"Ring2"
]
}
}
}
}
]
Hedefleme
Hedefleme, geliştiricilerin yeni özellikleri kullanıcı tabanına aşamalı olarak dağıtmasını sağlayan bir özellik yönetimi stratejisidir. Strateji, hedef kitle olarak bilinen bir kullanıcı kümesini hedefleme kavramını temel alır. Hedef kitle belirli kullanıcılardan, gruplardan, dışlanan kullanıcılardan/gruplardan ve tüm kullanıcı tabanının belirlenmiş yüzdelerinden oluşur. Hedef kitleye dahil edilen gruplar, toplam üyelerinin yüzdelerine ayrılabilir.
Aşağıdaki adımlarda yeni bir 'Beta' özelliği için aşamalı dağıtım örneği gösterilmektedir:
- Bireysel kullanıcılar Jeff ve Alicia'ya Beta erişimi verilir.
- Başka bir kullanıcı, Mark, kabul etmek ister ve dahil edilir.
- "Ring1" olarak bilinen bir grubun yüzde yirmisi Beta'ya dahil edilir.
- Beta'ya dahil edilen "Ring1" kullanıcılarının sayısı yüzde 100'e kadar artırılır.
- Kullanıcı tabanının yüzde beşi Beta'ya dahil edilir.
- Dağıtım yüzdesi yüzde 100'e kadar artırılır ve özellik tamamen kullanıma sunulmaktadır.
Bir özelliği dağıtmaya yönelik bu strateji, dahil edilen Microsoft.Targeting özellik filtresi aracılığıyla kitaplıkta yerleşik olarak bulunur.
Kullanıcıyı hedefleme
Bir kullanıcı ya doğrudan is_enabled çağrısında belirtilebilir ya da isteğe bağlı grup ile kullanıcıyı belirtmek için TargetingContext kullanılabilir.
TargetingContext çağrısı yapıldığında veya FeatureManager oluşturulurken is_enabled çağrısı yapılarak ya da targeting_context_accessor için bir geri çağırma sağlanarak geçirilebilir.
# Directly specifying the user
result = is_enabled(feature_flags, "test_user")
# Using a TargetingContext
result = is_enabled(feature_flags, TargetingContext(user_id="test_user", groups=["Ring1"]))
Hedefleme bağlam erişimcisi
Her TargetingContext çağrıya bir is_enabled geçirmek yerine, hedefleme bağlamını otomatik olarak sağlayan FeatureManager ile bir geri çağırım fonksiyonu kaydedebilirsiniz. Bu yaklaşım, kullanıcı kimliği ve grupları HTTP isteği üst bilgileri veya oturum verileri gibi ortak bir kaynaktan belirlenebildiğinde kullanışlıdır ve her özellik değerlendirmesi için bağlamı el ile oluşturma ve geçirme gereksinimini ortadan kaldırır.
from quart import request
from featuremanagement import FeatureManager, TargetingContext
# A callback for assigning a TargetingContext for Feature Flag evaluation in a Quart app
def my_targeting_accessor() -> TargetingContext:
session_id = ""
if "Session-ID" in request.headers:
session_id = request.headers["Session-ID"]
return TargetingContext(user_id=session_id)
# Load feature flags and set up targeting context accessor
feature_manager = FeatureManager(config, targeting_context_accessor=my_targeting_accessor)
Hedefleme dışlaması
Hedef kitle tanımlanırken, kullanıcılar ve gruplar hedef kitlenin dışında tutulabilir. Dışlamalar, bir özelliğin bir kullanıcı grubuna dağıtılması için yararlıdır, ancak birkaç kullanıcı veya grubun piyasaya sürülmesinin dışında tutulması gerekir. Dışlama, hedef kitlenin özelliğine Exclusion bir kullanıcı ve grup listesi eklenerek tanımlanır.
"Audience": {
"Users": [
"Jeff",
"Alicia"
],
"Groups": [
{
"Name": "Ring0",
"RolloutPercentage": 100
}
],
"DefaultRolloutPercentage": 0,
"Exclusion": {
"Users": [
"Mark"
]
}
}
Yukarıdaki örnekte, özellik ve Jeffadlı Alicia kullanıcılar için etkinleştirilmiştir. Ayrıca adlı Ring0gruptaki kullanıcılar için de etkinleştirilir. Ancak, kullanıcı olarak adlandırılırsa Mark, grupta Ring0 olup olmadığına bakılmaksızın özellik devre dışı bırakılır. Dışlamalar, hedefleme filtresinin geri kalanından önceliklidir.
Varyantlar
Bir uygulamaya yeni özellikler eklendiğinde, bir özelliğin birden çok farklı tasarım seçeneğinin olduğu bir zaman gelebilir. Tasarıma karar vermek için yaygın bir çözüm, bir tür A/B testidir. A/B testi, özelliğin farklı bir sürümünü kullanıcı tabanının farklı segmentlerine sağlamayı ve kullanıcı etkileşimini temel alan bir sürüm seçmeyi içerir. Bu kitaplıkta bu işlev, bir özelliğin farklı yapılandırmalarını çeşitlemelerle temsil ederek etkinleştirilir.
Çeşitlemeler, özellik bayrağının basit bir açık/kapalı bayrağından daha fazlasına dönüşebilmesini sağlar. Değişken, bir özellik bayrağının dize, sayı, boole, hatta yapılandırma nesnesi olabilecek bir değerini temsil eder. Varyantları bildiren bir özellik bayrağı, varyant ayırma bölümünde daha ayrıntılı olarak ele alınan her bir değişkenin hangi koşullarda kullanılması gerektiğini tanımlamalıdır.
class Variant:
def __init__(self, name: str, configuration: Any):
self._name = name
self._configuration = configuration
@property
def name(self) -> str:
"""
The name of the variant.
:rtype: str
"""
return self._name
@property
def configuration(self) -> Any:
"""
The configuration of the variant.
:rtype: Any
"""
return self._configuration
Çeşitlemeler alınıyor
Her özellik için, 'nin FeatureManager yöntemi kullanılarak get_variantbir değişken alınabilir.
…
variant = print(feature_manager.get_variant("TestVariants", TargetingContext(user_id="Adam"))
variantConfiguration = variant.configuration;
// Do something with the resulting variant and its configuration
Döndürülen değişken, şu anda değerlendirilmekte olan kullanıcıya bağlıdır ve bu bilgiler bir örneğinden TargetingContextalınır.
Değişken özellik bayrağı bildirimi
Normal özellik bayraklarıyla karşılaştırıldığında, değişken özellik bayraklarının iki özelliği daha vardır: variants ve allocation.
variants özelliği, bu özellik için tanımlanan değişkenleri içeren bir dizidir. özelliği, allocation bu varyantların özellik için nasıl ayrılacaklarını tanımlar. Normal özellik bayraklarını bildirme gibi, bir JSON dosyasında da değişken özellik bayrakları ayarlayabilirsiniz. Aşağıda bir değişken özellik bayrağı örneği verilmiştır.
{
"feature_management": {
"feature_flags": [
{
"id": "MyVariantFeatureFlag",
"enabled": true,
"allocation": {
"default_when_enabled": "Small",
"group": [
{
"variant": "Big",
"groups": [
"Ring1"
]
}
]
},
"variants": [
{
"name": "Big"
},
{
"name": "Small"
}
]
}
]
}
}
Varyantları tanımlama
Her değişken iki özelliğe sahiptir: ad ve yapılandırma. Ad, belirli bir değişkene başvurmak için kullanılır ve yapılandırma bu değişkenin değeridir. Yapılandırma özelliği kullanılarak configuration_value ayarlanabilir.
configuration_value dize, sayı, boole veya yapılandırma nesnesi olabilecek bir satır içi yapılandırmadır. Belirtilmezse configuration_value , döndürülen değişkenin Configuration özelliği olur None.
Özelliğin altındaki her özellik için tüm olası değişkenlerin variants listesi tanımlanır.
{
"feature_management": {
"feature_flags": [
{
"id": "MyVariantFeatureFlag",
"variants": [
{
"name": "Big",
"configuration_value": {
"Size": 500
}
},
{
"name": "Small",
"configuration_value": {
"Size": 300
}
}
]
}
]
}
}
Çeşitlemeler ayırma
Bir özelliğin değişkenlerini ayırma işlemi, özelliğin allocation özelliği tarafından belirlenir.
"allocation": {
"default_when_enabled": "Small",
"default_when_disabled": "Small",
"user": [
{
"variant": "Big",
"users": [
"Marsha"
]
}
],
"group": [
{
"variant": "Big",
"groups": [
"Ring1"
]
}
],
"percentile": [
{
"variant": "Big",
"from": 0,
"to": 10
}
],
"seed": "13973240"
},
"variants": [
{
"name": "Big",
"configuration_value": "500px"
},
{
"name": "Small",
"configuration_value": "300px"
}
]
Bir allocation özelliğin ayarı aşağıdaki özelliklere sahiptir:
| Özellik | Açıklama |
|---|---|
default_when_disabled |
Özellik devre dışı olarak kabul edilirken bir değişken istendiğinde hangi değişkenin kullanılacağını belirtir. |
default_when_enabled |
Özellik etkin olarak kabul edilirken ve kullanıcıya başka bir değişken atanmadığında bir değişken istendiğinde hangi değişkenin kullanılacağını belirtir. |
user |
Bir değişken ve bu değişkenin atanması gereken kullanıcıların listesini belirtir. |
group |
Bir değişken ve grup listesi belirtir. Kullanıcı gruplardan en az birindeyse değişken atanır. |
percentile |
Kullanıcının hesaplanan yüzdesinin atanacağı değişken için uyması gereken bir değişken ve yüzde aralığı belirtir. |
seed |
Yüzde hesaplamalarının percentile temel aldığı değer. Belirli bir kullanıcı için yüzde hesaplaması, aynı değer kullanılırsa tüm özelliklerde aynı seed olur. Belirtilmezse seed , özellik adına göre varsayılan bir tohum oluşturulur. |
Özellik etkinleştirilmemişse, özellik yöneticisi geçerli kullanıcıya default_when_disabled olarak Small işaretlenmiş değişkeni atar. Bu durumda bu durum geçerlidir.
Özellik etkinleştirilirse, özellik yöneticisi userbir değişken atamak için , groupve percentile ayırmalarını denetler. Bu belirli örnek için, değerlendirilen kullanıcı adlı Marshagrupta Ring1ise veya kullanıcı 0 ile 10. yüzdebirlik arasında kalırsa, belirtilen değişken kullanıcıya atanır. Bu durumda, atanan tüm kullanıcılar değişkenini Big döndürür. Bu ayırmalardan hiçbiri eşleşmiyorsa, kullanıcıya değişken (olandefault_when_enabled) atanırSmall.
Ayırma mantığı Microsoft.Targeting özellik filtresine benzer, ancak hedeflemede bulunan ve ayırmada olmayan bazı parametreler vardır ve tam tersi de geçerlidir. Hedefleme ve ayırmanın sonuçları ilişkili değildir.
Etkin durumu bir değişkenle geçersiz kılma
Özellik bayrağının etkin durumunu geçersiz kılmak için varyantları kullanabilirsiniz. Geçersiz kılma, varyantlara özellik bayrağı değerlendirmesini genişletme fırsatı verir. Özellik yöneticisi, varyantları olan bir bayrak üzerinde çağrı is_enabled yaparken, geçerli kullanıcıya atanan değişkenin sonucu geçersiz kılacak şekilde yapılandırılıp yapılandırılmamış olduğunu denetler. Geçersiz kılma isteğe bağlı variant özelliği status_overridekullanılarak yapılır. Varsayılan olarak, bu özellik olarak Noneayarlanır. Bu, değişkenin bayrağın etkin veya devre dışı olarak kabul edilip edilmediğini etkilemediği anlamına gelir. ayarı status_overrideEnabled , seçildiğinde bir bayrağın etkinleştirilmesini geçersiz kılmak için değişkene izin verir. ayarı status_overrideDisabled tam tersi bir işlev sağlar, bu nedenle değişken seçildiğinde bayrağı devre dışı bırakır. Durumu enabled olan bir false özellik geçersiz kılınamaz.
İkili değişkenli bir özellik bayrağı kullanıyorsanız özelliği status_override yararlı olabilir. Uygulamanızda olduğu gibi is_enabled API'leri kullanmaya devam etmenizi sağlarken, yüzdebirlik ayırma ve tohum gibi çeşitlemelerle birlikte gelen yeni özelliklerden yararlanmanızı sağlar.
{
"id": "MyVariantFeatureFlag",
"enabled": true,
"allocation": {
"percentile": [
{
"variant": "On",
"from": 10,
"to": 20
}
],
"default_when_enabled": "Off",
"seed": "Enhanced-Feature-Group"
},
"variants": [
{
"name": "On"
},
{
"name": "Off",
"status_override": "Disabled"
}
]
}
Yukarıdaki örnekte özellik her zaman etkindir. Geçerli kullanıcı 10 ile 20 arasında hesaplanan yüzdebirlik aralığındaysa On , değişken döndürülür. Aksi takdirde, Off değişken döndürülür ve status_override değerine eşit Disabledolduğundan özellik artık devre dışı olarak kabul edilir.
Telemetri
Özellik bayrağı değişikliği dağıtıldığında, bunun uygulama üzerindeki etkisini analiz etmek genellikle önemlidir. Örneğin, ortaya çıkabilecek birkaç soru şunlardır:
- Bayraklarım beklendiği gibi etkin/devre dışı mı?
- Hedeflenen kullanıcılar beklendiği gibi belirli bir özelliğe erişiyor mu?
- Belirli bir kullanıcı hangi çeşitle görüşüyor?
Bu tür sorular, özellik bayrağı değerlendirme olaylarının emisyonu ve analizi aracılığıyla yanıtlanabilir. Bu kitaplık isteğe bağlı olarak aracılığıyla AzureMonitorözellik bayrağı değerlendirmesi sırasında izleme telemetrisi üretmeyi etkinleştirirOpenTelemetry.
Telemetriyi etkinleştirme
Varsayılan olarak, özellik bayraklarında telemetri gösterilmez. Belirli bir özellik bayrağı için telemetri yayımlamak için bayrağı , telemetri emisyonu için etkinleştirildiğini BILDIRMESİ GEREKİR .
json'da tanımlanan özellik bayrakları için etkinleştirme özelliği kullanılarak telemetry gerçekleştirilir.
{
"feature_management": {
"feature_flags": [
{
"id": "MyFeatureFlag",
"enabled": true,
"telemetry": {
"enabled": true
}
}
]
}
}
Yukarıdaki kod parçacığı, telemetri için etkinleştirilmiş adlı MyFeatureFlag bir özellik bayrağı tanımlar. Nesnenin telemetryenabled özelliği olarak trueayarlanır. özelliğinin enabled değeri, bayrak için telemetri yayımlamak için olmalıdır true .
Özellik telemetry bayrağının bölümü aşağıdaki özelliklere sahiptir:
| Özellik | Açıklama |
|---|---|
enabled |
Özellik bayrağı için telemetrinin yayımlanıp yayımlanmayacağını belirtir. |
metadata |
Değerlendirme olaylarına özellik bayrağı hakkında özel meta veriler eklemek için kullanılabilen, sözlük olarak modellenen anahtar-değer çiftleri koleksiyonu. |
Ayrıca, oluştururken FeatureManagertelemetri olaylarını işlemek için bir geri çağırma kaydedilmelidir. Bu geri çağırma, bir özellik bayrağı değerlendirildiğinde ve bu bayrak için telemetri etkinleştirildiğinde çağrılır.
feature_manager = FeatureManager(feature_flags, on_feature_evaluated=publish_telemetry)
Application Insights telemetrisi
Özellik yönetimi kitaplığı, Application Insights'a özellik bayrağı değerlendirme verileri gönderen yerleşik bir telemetri yayımcısı sağlar. Application Insights'ı etkinleştirmek için özellik yönetimi kitaplığı aracılığıyla pip install FeatureManagement[AzureMonitor]Azure İzleyici ile yüklenebilir. Bu komut, OpenTelemetry kullanarak Application Insights'a telemetri stili uygulamak için kullanılan paketi yükler azure-monitor-events-extension .
Not
Paket azure-monitor-events-extension telemetriyi yalnızca Açık Telemetri işlem hattına ekler. Application Insights'ı kaydetme işlemi hala gereklidir.
from azure.monitor.opentelemetry import configure_azure_monitor
configure_azure_monitor(
connection_string="InstrumentationKey=00000000-0000-0000-0000-000000000000"
)
Telemetri olaylarını günlüğe kaydetme
Özellik yönetimi kitaplığı, telemetri olaylarını günlüğe kaydetmek için birden çok yol sağlar. Özellik bayrağı değerlendirme olayları için yerleşik geri aramayı kullanabilir veya kullanıcı etkileşimleri ve uygulama olayları için özel olayları el ile izleyebilirsiniz.
Özellik değerlendirme olayları
Telemetri geri çağırması bir işlev olduğundan, telemetriyi istenen herhangi bir hedefe yayımlayacak şekilde özelleştirilebilir. Örneğin, telemetri bir günlük hizmetine, veritabanına veya özel telemetri hizmetine yayımlanabilir.
Özellik bayrağı değerlendirildiğinde ve telemetri etkinleştirildiğinde, özellik yöneticisi telemetri geri çağırmasını bir EvaluationEvent parametreyle çağırır.
EvaluationEvent aşağıdaki özellikleri içerir:
| Etiket | Açıklama |
|---|---|
feature |
Kullanılan özellik bayrağı. |
user |
Hedefleme için kullanılan kullanıcı kimliği. |
enabled |
Özellik bayrağının etkin olarak değerlendirilip değerlendirilmediği. |
Variant |
Atanan değişken. |
VariantAssignmentReason |
Değişkenin atanma nedeni. |
Özel olayları izleme
Otomatik özellik bayrağı değerlendirme telemetrisinin ötesinde, track_event işlevini kullanarak özel olayları el ile izleyebilirsiniz. Bu özellik bayrağı kullanımıyla bağıntılı olması gereken kullanıcı etkileşimlerini, iş olaylarını veya diğer özel telemetri verilerini izlemek için kullanışlıdır.
from featuremanagement.azuremonitor import track_event
# Track a custom event with a user identifier
track_event("ButtonClicked", "user123")
# Track an event without a user identifier
track_event("ApplicationStarted")
track_event İşlev iki parametre kabul eder:
| Parametre | Açıklama |
|---|---|
event_name |
İzlenen olayın adı. |
user |
Olayla ilişkilendirilecek isteğe bağlı kullanıcı tanımlayıcısı. |
Özel olaylar, özellik bayrağı telemetrisi için yapılandırılan aynı Application Insights örneğine gönderilir ve özellik bayrağı değerlendirmelerini kullanıcı davranışı ve uygulama olaylarıyla ilişkilendirmenizi sağlar.
Telemetriyi hedefleme bağlamıyla zenginleştirme
Kullanıcı tanımlayıcılarını her track_event çağrısına el ile geçirmek yerine, tüm telemetri verilerini hedef bağlam bilgileriyle otomatik olarak zenginleştirmek için TargetingSpanProcessor kullanabilirsiniz. İşlemci, TargetingContext döndüren bir geri çağırma işlevini kabul eder ve telemetrinin her istek için kullanıcı kimliğini otomatik olarak eklemesine izin verir. Bu zenginleştirme, telemetri verilerini belirli kullanıcılar ve gruplarla ilişkilendirmeye yardımcı olur ve telemetri çağrılarınızda açık kullanıcı parametrelerine gerek kalmadan hedeflenen hedef kitleler için özellik bayrağı performansını çözümlemeyi kolaylaştırır.
Not
TargetingSpanProcessor özellikle telemetri zenginleştirmesine yöneliktir. Bir
Aşağıdaki örnekte, kullanıcı tanımlayıcısı olarak istek üst bilgilerinden bir oturum kimliği kullanarak Quart uygulamasında işlemcinin nasıl yapılandırılır gösterilmektedir. Uygulama örneğinizi oluşturmadan önce düzgün başlatmayı sağlamak için configure_azure_monitor öğesini çağırın.
import os
from quart import request
from azure.monitor.opentelemetry import configure_azure_monitor
from featuremanagement import TargetingContext
from featuremanagement.azuremonitor import TargetingSpanProcessor
async def my_targeting_accessor() -> TargetingContext:
session_id = ""
if "Session-ID" in request.headers:
session_id = request.headers["Session-ID"]
return TargetingContext(user_id=session_id)
# Configure Azure Monitor with targeting context for telemetry
configure_azure_monitor(
connection_string=os.getenv("APPLICATIONINSIGHTS_CONNECTION_STRING"),
span_processors=[TargetingSpanProcessor(targeting_context_accessor=my_targeting_accessor)],
)
# You must also provide the targeting context accessor to FeatureManager for evaluation
feature_manager = FeatureManager(config, targeting_context_accessor=my_targeting_accessor)
Sonraki adımlar
Uygulamalarınızda özellik bayraklarını kullanmayı öğrenmek için aşağıdaki hızlı başlangıçlara geçin.
Özellik filtrelerini kullanmayı öğrenmek için aşağıdaki öğreticilere geçin.