1. Giriş
Cloud Tasks, çok sayıda görevin yürütme, dağıtım ve teslim süreçlerinin yönetimi için tümüyle yönetilen bir sıra oluşturma hizmetidir.
Cloud Tasks, ana uygulama akışınızın dışında bağımsız olarak gerçekleştirilebilen (ör. veritabanı girişini güncelleme görevi) görev adı verilen iş parçalarını ayırmanızı ve oluşturduğunuz işleyicileri kullanarak bunları eşzamansız olarak işlenmek üzere göndermenizi sağlar.
Kaldırılan görev bir sıraya eklenir ve görev başarıyla yürütülene veya hata alana kadar devam eder. Yapılandırmaya bağlı olarak, sıra bir dağıtım akışı denetimi olarak da kullanılabilir. Sırayı oluşturup yapılandırırsınız. Bu sıra, Cloud Tasks hizmeti tarafından yönetilir. Görevler eklendiğinde, sıra görevleri dağıtır ve çalışanların bunları güvenilir bir şekilde işlemesini sağlar.
Cloud Tasks'ın bazı temel özellikleri şunlardır:
- HTTP hedefleri: Sektör standardı OAuth/OIDC kimlik doğrulamasını kullanarak Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions veya şirket içi sistemlerde çalışan dilediğiniz HTTP hizmetini hedefleyen görevler ekleyin.
- Görev tekilleştirme: Birden çok kez eklenen görevler yalnızca bir kez gönderilir.
- Garantili yayınlama: Görevlerin en az bir kez teslim edileceği garanti edilir ve çoğu görev tam olarak bir kez teslim edilir.
- Hız ve yeniden deneme kontrolleri: Görevlerin dağıtılma hızını, maksimum deneme sayısını ve denemeler arasındaki minimum bekleme süresini ayarlayarak yürütme işlemini kontrol edin.
- Gelecekteki planlama: Bir görevin çalıştırılacağı zamanı kontrol edin.
Bu codelab'de ilk olarak HTTP hedef görevleri için normal Cloud Tasks sırası oluşturmayı ve kullanmayı öğreneceksiniz. Ardından, Cloud Tasks ile HTTP isteklerini daha kolay bir şekilde önbelleğe almak için sıra düzeyinde HTTP URI geçersiz kılmayı ve yeni BufferTask API'yi nasıl kullanacağınızı öğreneceksiniz.
Neler öğreneceksiniz?
- HTTP hedefi görevleri oluşturma
- Yeni sıra düzeyinde HTTP URI geçersiz kılmasıyla HTTP hedefi görevleri oluşturma
- Beklemedeki görevleri, yeni sıra düzeyinde HTTP URI geçersiz kılma özelliğiyle değiştirme.
- Yeni BufferTask API ile HTTP isteklerini daha kolay bir şekilde arabelleğe alma.
2. Kurulum ve Gereksinimler
Kendi hızınızda ortam kurulumu
- Google Cloud Console'da oturum açıp yeni bir proje oluşturun veya mevcut bir projeyi yeniden kullanın. Gmail veya Google Workspace hesabınız yoksa hesap oluşturmanız gerekir.
- Proje adı, bu projenin katılımcıları için görünen addır. Google API'leri tarafından kullanılmayan bir karakter dizesidir. İstediğiniz zaman güncelleyebilirsiniz.
- Proje Kimliği, tüm Google Cloud projelerinde benzersizdir ve değiştirilemez (belirlendikten sonra değiştirilemez). Cloud Console, otomatik olarak benzersiz bir dize oluşturur. bunun ne olduğunu umursamıyorsunuz. Çoğu codelab'de proje kimliğinizi (genellikle
PROJECT_ID
olarak tanımlanır) belirtmeniz gerekir. Oluşturulan kimliği beğenmezseniz rastgele bir kimlik daha oluşturabilirsiniz. Alternatif olarak, kendi ölçümünüzü deneyip mevcut olup olmadığına bakabilirsiniz. Bu adımdan sonra değiştirilemez ve proje süresince kalır. - Bilginiz olması açısından, bazı API'lerin kullandığı üçüncü bir değer, yani Proje Numarası daha vardır. Bu değerlerin üçü hakkında daha fazla bilgiyi belgelerde bulabilirsiniz.
- Sonraki adımda, Cloud kaynaklarını/API'lerini kullanmak için Cloud Console'da faturalandırmayı etkinleştirmeniz gerekir. Bu codelab'i çalıştırmanın maliyeti, yüksek değildir. Bu eğitim dışında faturalandırmanın tekrarlanmasını önlemek amacıyla kaynakları kapatmak için oluşturduğunuz kaynakları silebilir veya projeyi silebilirsiniz. Yeni Google Cloud kullanıcıları 300 ABD doları değerindeki ücretsiz denemeden yararlanabilir.
Cloud Shell'i Başlatma
Google Cloud dizüstü bilgisayarınızdan uzaktan çalıştırılabilse de bu codelab'de, Cloud'da çalışan bir komut satırı ortamı olan Google Cloud Shell'i kullanacaksınız.
Google Cloud Console'da, sağ üstteki araç çubuğunda bulunan Cloud Shell simgesini tıklayın:
Ortamı sağlamak ve bağlamak yalnızca birkaç dakika sürer. Tamamlandığında şuna benzer bir sonuç görmeniz gerekir:
İhtiyacınız olan tüm geliştirme araçlarını bu sanal makinede bulabilirsiniz. 5 GB boyutunda kalıcı bir ana dizin sunar ve Google Cloud üzerinde çalışarak ağ performansını ve kimlik doğrulamasını büyük ölçüde iyileştirir. Bu codelab'deki tüm çalışmalarınız tarayıcıda yapılabilir. Herhangi bir şey yüklemeniz gerekmez.
3. HTTP hedef görevleri için düzenli bir sıra oluşturma
Bu ilk adımda, normal bir Cloud Tasks sırası oluşturmayı ve bir Cloud Run hizmetini hedeflemek için bu sıraya HTTP görevleri eklemeyi öğreneceksiniz.
HTTP hedef görevleri nelerdir?
HTTP hedef görevleri, endüstri standardı OAuth/OIDC kimlik doğrulamasını kullanarak Compute Engine, Google Kubernetes Engine, Cloud Run, Cloud Functions veya şirket içi sistemlerde çalışan tüm HTTP hizmetlerini güvenli bir biçimde hedefleyebilir.
Cloud Run hizmeti dağıtma
Öncelikle, gerekli API'lerin etkinleştirildiğinden emin olun:
gcloud services enable \ cloudtasks.googleapis.com \ run.googleapis.com
HTTP görevlerinin hedefi olacak bir Cloud Run hizmeti dağıtın:
SERVICE1=hello1 REGION=us-central1 gcloud run deploy $SERVICE1 \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
Cloud Tasks sırası oluşturma
Normal bir Cloud Tasks sırası oluşturun:
QUEUE1=http-queue LOCATION=us-central1 gcloud tasks queues create $QUEUE1 --location=$LOCATION
Oluşturulan HTTP görevlerini gözlemleyebilmek için sırayı geçici olarak duraklatın:
gcloud tasks queues pause $QUEUE1 --location=$LOCATION
4. HTTP görevi oluşturma ve test etme
Bu adımda, daha önce oluşturduğunuz sırayı hedeflemek için bir HTTP görevi oluşturacaksınız.
HTTP görevi oluşturma
gcloud
kullanarak HTTP görevleri oluşturabilirsiniz:
gcloud tasks create-http-task \ --queue=$QUEUE1 \ --location=$LOCATION \ --url=$SERVICE1_URL \ --method=GET
İsteğe bağlı: İstemci kitaplıklarıyla HTTP görevi de oluşturabilirsiniz. Örneğin, bir HTTP isteğinin CloudTasksClient
ile Cloud Tasks'a gönderilmeden önce Task
ve TaskRequest
olarak sarmalandığı C# örneği için Program.cs
'na göz atabilirsiniz:
var taskRequest = new CreateTaskRequest { Parent = new QueueName(projectId, location, queue).ToString(), Task = new Task { HttpRequest = new HttpRequest { HttpMethod = HttpMethod.Get, Url = url } } }; var client = CloudTasksClient.Create(); var response = client.CreateTask(taskRequest);
Görevi oluşturup sıraya eklemek için aşağıdaki şekilde çalıştırabilirsiniz:
dotnet run $PROJECT_ID $LOCATION $QUEUE1 $SERVICE1_URL
HTTP görevini test etme
Bu noktada görev oluşturulur, ancak sıra duraklatıldığı için henüz yürütülmez. Bunu, sıraları listeleyerek doğrulayabilirsiniz:
gcloud tasks queues list --location=$LOCATION
Sıra, PAUSED
durumunda gösterilir:
QUEUE_NAME STATE http-queue PAUSED
Sırayı devam ettirin:
gcloud tasks queues resume $QUEUE --location=$LOCATION
Cloud Run hizmetinin günlüklerini kontrol edin:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 1
Cloud Run hizmetinin, Cloud Tasks'tan HTTP GET isteği aldığını göreceksiniz:
httpRequest: latency: 0.227597158s protocol: HTTP/1.1 remoteIp: 35.243.23.192 requestMethod: GET requestSize: '415' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.32.53 status: 200 userAgent: Google-Cloud-Tasks
5. Yönlendirme yapılandırması olan bir sıra oluşturma
Bu adımda Sıra düzeyinde Görev Yönlendirme Yapılandırması özelliğini kullanarak HTTP URI geçersiz kılması eklemek için yönlendirme yapılandırmasına sahip bir Cloud Tasks sırası oluşturmayı öğreneceksiniz. Ardından ilk Cloud Run hizmetini hedeflemek için görevlere HTTP görevleri ekleyecek ve yönlendirme yapılandırmasının, görevleri ikinci Cloud Run hizmetine yönlendirmek için URI'yi geçersiz kıldığını göreceksiniz.
Sıra Düzeyinde Görev Yönlendirme Yapılandırması nedir?
Sıra düzeyinde Görev Yönlendirme Yapılandırması, beklemedeki ve yeni tüm görevler için sıranın tamamı için HTTP görevi yönlendirmesini değiştirir. Bu, HTTP hedefinin görev düzeyinde ayarlanmasına gerek olmadığından görevlerin daha kolay oluşturulmasına olanak tanır ve bir kuyruktaki tüm görevlerin hedefini ayarlayabildiğinden (ör. orijinal arka uç arızalıysa trafiği farklı bir arka uca yönlendirme) servis sağlayıcıya daha fazla kontrol kaydırır.
Aşağıdaki yapılandırma, sıra düzeyinde ayarlanabilir:
- Üstbilgiler: Sıra düzeyinde belirtildiğinde, sıra düzeyinde üstbilgiler, sıradaki tüm görevlerin üstbilgilerini günceller.
- HTTP Method (HTTP Yöntemi): Sıra düzeyinde belirtildiğinde HTTP yöntemi, sıradaki tüm görevler için HTTP yöntemini geçersiz kılar.
- Hedef URI: Ana makine, yol, sorgu, bağlantı noktası, şema (HTTP veya HTTPS) ayrı ayrı geçersiz kılınabilir.
- Yetkilendirme: OIDC/OAuth yapılandırması, sıra düzeyinde belirtildiğinde görev düzeyindeki OIDC/OAuth yapılandırmasını geçersiz kılar.
İkinci bir Cloud Run hizmeti dağıtma
Daha sonra HTTP URI geçersiz kılma hedefi olarak hizmet verecek ikinci bir Cloud Run hizmeti dağıtın:
SERVICE2=hello2 REGION=us-central1 gcloud run deploy $SERVICE2 \ --allow-unauthenticated \ --image=gcr.io/cloudrun/hello \ --region=$REGION
Hizmet URL'sinin ana makinesini daha sonra kullanmak üzere kaydedin:
SERVICE2_URL=$(gcloud run services describe $SERVICE2 --region $REGION --format 'value(status.url)') SERVICE2_HOST=$(echo $SERVICE2_URL | sed 's,http[s]*://,,g')
Yönlendirme yapılandırmasıyla Cloud Görevleri sırası oluşturma
İkinci Cloud Run hizmetine HTTP URI geçersiz kılması olan bir yönlendirme yapılandırmasına sahip sıra oluşturun.
QUEUE2=http-queue-uri-override gcloud beta tasks queues create $QUEUE2 \ --http-uri-override=host:$SERVICE2_HOST \ --location=$LOCATION
URI geçersiz kılma işleminin, ikinci Cloud Run hizmetini ifade ettiğini unutmayın. Sıraya eklenen herhangi bir HTTP görevinin orijinal URI ana makinesi geçersiz kılınır. Sıra yapılandırmasını görebilirsiniz:
gcloud beta tasks queues describe $QUEUE2 --location=$LOCATION
httpTarget
öğesinde, ikinci hizmetin ana makinesini işaret eden bir uriOverride
bulunduğunu göreceksiniz:
httpTarget: uriOverride: host: hello2-idcwffc3yq-uc.a.run.app pathOverride: {} queryOverride: {} ...
Oluşturulan HTTP görevlerini gözlemleyebilmek için sırayı geçici olarak duraklatın:
gcloud tasks queues pause $QUEUE2 --location=$LOCATION
6. Yönlendirme yapılandırmasıyla sıra için bir HTTP görevi oluşturma ve test etme
Bu adımda, ilk hizmeti hedeflemek için bir HTTP görevi oluşturacak ve ikinci hizmete işaret etmek üzere URI'nin sıra tarafından geçersiz kılındığını gözlemleyeceksiniz.
HTTP görevi oluşturma
İlk hizmetin URL'siyle bir HTTP görevi oluşturun:
gcloud tasks create-http-task \ --queue=$QUEUE2 \ --location=$LOCATION \ --url=$SERVICE1_URL \ --method=GET
HTTP görevini test etme
Sırayı devam ettirin:
gcloud tasks queues resume $QUEUE2 --location=$LOCATION
İkinci (birinci değil) Cloud Run hizmetinin geçersiz kılma nedeniyle Cloud Tasks'tan bir HTTP GET isteği aldığını göreceksiniz:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE2" --limit 1
--- httpRequest: latency: 0.228982142s protocol: HTTP/1.1 remoteIp: 35.187.132.84 requestMethod: GET requestSize: '426' requestUrl: https://hello2-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.34.53 status: 200 userAgent: Google-Cloud-Tasks
7. Beklemedeki görevleri yönlendirme yapılandırmasıyla değiştirme
Yönlendirme yapılandırmasını, bir sıradaki tüm beklemedeki görevlerin HTTP URI'sini değiştirmek için de kullanabilirsiniz. Arka uç hizmeti bozulursa ve hızlıca başka bir hizmete yönlendirmek istiyorsanız bu yöntem kullanışlıdır. Şimdi, bu adımda bunun nasıl çalıştığına bakalım.
Sırayı tekrar duraklatın:
gcloud tasks queues pause $QUEUE2 --location=$LOCATION
Görev URL'si olarak google.com
ile bir HTTP görevi oluşturun:
gcloud tasks create-http-task \ --queue=$QUEUE2 \ --location=$LOCATION \ --url=https://www.google.com \ --method=GET
Sıra duraklatıldığı için görev bekleme durumundadır.
Şimdi, HTTP URI geçersiz kılmasını ilk hizmeti işaret edecek şekilde güncelleyin. Bu işlem, beklemedeki görevin ana makinesini google.com
yerine ilk hizmetin ana makinesine geçersiz kılacak:
SERVICE1_URL=$(gcloud run services describe $SERVICE1 --region $REGION --format 'value(status.url)') SERVICE1_HOST=$(echo $SERVICE1_URL | sed 's,http[s]*://,,g') gcloud beta tasks queues update $QUEUE2 \ --http-uri-override=host:$SERVICE1_HOST \ --location=$LOCATION
Sırayı devam ettirin:
gcloud tasks queues resume $QUEUE2 --location=$LOCATION
İlk Cloud Run hizmetinin, geçersiz kılma nedeniyle (google.com
yerine) Cloud Tasks'tan HTTP GET isteği aldığını göreceksiniz:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 1 --- httpRequest: latency: 0.228982142s protocol: HTTP/1.1 remoteIp: 35.187.132.84 requestMethod: GET requestSize: '426' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.34.53 status: 200 userAgent: Google-Cloud-Tasks
8. BufferTask API için sıra oluşturma
Normalde görevleri gcloud
veya Görevler istemci kitaplıklarındaki Tasks API'yi kullanarak oluşturursunuz. Bu durum, uygulamaların istemci kitaplıklarını kullanarak HTTP isteklerini Görevler'e sarmalamalarını zorlaştırır ve uygulamalarla Görevler istemci kitaplıkları arasında bağımlılık oluşturur.
Bu adımda, yalnızca bir HTTP isteği göndererek HTTP hedefi görevlerini daha kolay bir şekilde oluşturmak için sıra düzeyinde HTTP URI geçersiz kılma özelliğinden ve yeni BufferTask API'den nasıl yararlanacağınızı öğreneceksiniz. HTTP isteği gönderebilen tüm uygulamalar artık HTTP hedefi görevleri oluşturabilir.
BufferTask API nedir?
CreateTask API, Görevler'i oluşturmanın eski yoludur ve istemcinin, gerekli tüm alanlar ayarlanmış olarak API'ye bir Görev nesnesi göndermesini gerektirir.
BufferTask API, kullanıcıların herhangi bir Görev Yapılandırması (HTTP URL'si, üstbilgiler, yetkilendirme) sağlamaya gerek kalmadan HTTP Görevi oluşturmasına olanak tanıyan yeni bir özelliktir. Bu özellik, yalnızca bir mesajı veya isteğinizin gövdesini Buffer API'ye göndermenize olanak tanır.
Cloud Tasks artık istemci tarafında kod değişikliğine gerek kalmadan hizmetinizin önünde dağıtılabileceğinden bu durum hizmetlerle daha kolay entegrasyon sağlar. BufferTask API'ye gönderilen rastgele HTTP istekleri bir Görev nesnesi olarak sarmalanır ve sıra düzeyinde belirlenen hedefe teslim edilir.
BufferTask API'yi kullanmak için sırada hedef URI yapılandırması ayarlanmış olmalıdır. Diğer bir deyişle, BufferTask API'yi kullanmanın ön koşulu olarak Sıra Düzeyinde Yönlendirme Yapılandırması özelliği bulunmalıdır.
Yönlendirme yapılandırmasıyla Cloud Görevleri sırası oluşturma
Önceki adımda dağıttığımız ilk hizmeti işaret eden bir yönlendirme yapılandırmasıyla bir sıra oluşturun:
SERVICE1=hello1 SERVICE1_URL=$(gcloud run services describe $SERVICE1 --region $REGION --format 'value(status.url)') SERVICE1_HOST=$(echo $SERVICE1_URL | sed 's,http[s]*://,,g') QUEUE3=http-queue-uri-override-buffer gcloud beta tasks queues create $QUEUE3 \ --http-uri-override=host:$SERVICE1_HOST \ --location=$LOCATION
Oluşturulan HTTP görevlerini gözlemleyebilmek için sırayı geçici olarak duraklatın:
gcloud tasks queues pause $QUEUE3 --location=$LOCATION
9. BufferTask API ile arabellek HTTP istekleri
Bu adımda, basit HTTP GET veya POST isteklerini BufferTask API ile arabelleğe alacaksınız. Cloud Tasks, özetlerin altında bu HTTP isteklerini, sıranın varsayılan yönlendirme yapılandırma ayarlarıyla HTTP görevlerine sarmalar.
Öncelikle, giriş yaparak bir erişim jetonu alın ve bazı değişkenleri ayarlayın:
gcloud auth application-default login ACCESS_TOKEN=$(gcloud auth application-default print-access-token) PROJECT_ID=$(gcloud config get-value project) TASKS_QUEUES_API="https://cloudtasks.googleapis.com/v2beta3/projects/$PROJECT_ID/locations/$LOCATION/queues"
HTTP görevi oluşturma
BufferTask API ile bir HTTP görevi oluşturun. Görev oluşturmaya gerek kalmadan basit bir HTTP GET isteği olduğuna dikkat edin:
curl -X GET "$TASKS_QUEUES_API/$QUEUE3/tasks:buffer" \ -H "Authorization: Bearer $ACCESS_TOKEN"
HTTP POST ve bir gövde ile başka bir HTTP görevi oluşturun:
curl -X POST "$TASKS_QUEUES_API/$QUEUE3/tasks:buffer" \ -H "Authorization: Bearer $ACCESS_TOKEN" \ -d "{'message': 'Hello World'}"
İsteğe bağlı: İstemci kitaplıklarıyla HTTP görevi de oluşturabilirsiniz. Örneğin, bir HTTP GET isteğinin Task
olarak sarmalamanıza veya Cloud Tasks için istemci kitaplığına ihtiyaç duymadan doğrudan BufferTask API'ye gönderildiği bir C# örneği için Program.cs
'na göz atabilirsiniz:
var BufferTaskApiUrl = $"https://cloudtasks.googleapis.com/v2beta3/projects/{ProjectId}/locations/{Location}/queues/{Queue}/tasks:buffer"; using (var client = new HttpClient()) { client.DefaultRequestHeaders.Add("Authorization", $"Bearer {AccessToken}"); var response = await client.GetAsync(BufferTaskApiUrl); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine($"Response: {content}"); }
Bu eklentiyi aşağıdaki gibi çalıştırabilirsiniz:
dotnet run $PROJECT_ID $LOCATION $QUEUE3 $ACCESS_TOKEN
BufferTask API, HTTP isteklerinden Görev oluşturma işlemini gerçekleştirir ve URI için sıranın yönlendirme yapılandırması ayarlarından URL'yi ekler.
HTTP görevini test etme
Sırayı devam ettirin:
gcloud tasks queues resume $QUEUE3 --location=$LOCATION
Cloud Run hizmetinin, Cloud Tasks'tan HTTP GET ve POST istekleri aldığını göreceksiniz:
gcloud logging read "resource.type=cloud_run_revision AND resource.labels.service_name=$SERVICE1" --limit 4
--- httpRequest: latency: 0.002279292s protocol: HTTP/1.1 remoteIp: 35.243.23.42 requestMethod: POST requestSize: '777' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5450' serverIp: 216.239.32.53 status: 200 userAgent: Google-Cloud-Tasks ... httpRequest: latency: 0.228982142s protocol: HTTP/1.1 remoteIp: 35.187.132.84 requestMethod: GET requestSize: '426' requestUrl: https://hello1-idcwffc3yq-uc.a.run.app/ responseSize: '5510' serverIp: 216.239.34.53 status: 200 userAgent: Google-Cloud-Tasks
10. Tebrikler
Tebrikler, codelab'i tamamladınız.
Konunun devamı olarak Cloud Tasks'ı Pub/Sub ile Cloud Run arasında bir arabellek olarak kullanabilir ve Cloud Tasks'ın bu yeni özelliklerinin hizmetler arasında kolayca bir arabellek sırası oluşturmaya nasıl yardımcı olabileceğine dair gerçek dünyadan bir örnek görebilirsiniz.
Temizlik (İsteğe bağlı)
Ücretlerin tekrarlanmasını önlemek için kaynakları temizlemeniz önerilir.
Projeye ihtiyacınız yoksa projeyi silmeniz yeterlidir:
gcloud projects delete $PROJECT_ID
Projeye ihtiyacınız varsa kaynakları tek tek silebilirsiniz.
Cloud Run hizmetlerini silin:
gcloud run services delete $SERVICE1 --region $REGION gcloud run services delete $SERVICE2 --region $REGION
Cloud Tasks sıralarını silin:
gcloud tasks queues delete $QUEUE1 --location=$LOCATION gcloud tasks queues delete $QUEUE2 --location=$LOCATION gcloud tasks queues delete $QUEUE3 --location=$LOCATION
İşlediğimiz konular
- HTTP hedefi görevleri oluşturma
- Yeni sıra düzeyinde HTTP URI geçersiz kılmasıyla HTTP hedefi görevleri oluşturma
- Beklemedeki görevleri, yeni sıra düzeyinde HTTP URI geçersiz kılma özelliğiyle değiştirme.
- Yeni BufferTask API ile HTTP isteklerini daha kolay bir şekilde arabelleğe alma.