Buradasın
Cadence Workflow Teknolojisi Hakkında Teknik Röportaj ve Eğitim
youtube.com/watch?v=rhwPE09PhLUYapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, Uber'de Sinir Saf Engineer olarak çalışan ve Cadence projesinin liderlerinden biri olan Ender Demirkaya ile yapılan bir teknik röportaj ve eğitim içeriğidir. Ender, Bilkent Üniversitesi Bilgisayar Mühendisliği mezunu olup, Microsoft ve Facebook gibi şirketlerde arama motorları üzerinde çalışmış bir uzmandır.
- Video, Cadence workflow teknolojisinin ne olduğunu, nasıl çalıştığını ve dağıtılmış sistemlerdeki avantajlarını detaylı şekilde anlatmaktadır. İçerikte workflow, activity, domain gibi temel kavramlar açıklanırken, Cadence'in mimarisi, çalışma prensipleri ve kullanım alanları ele alınmaktadır. Ayrıca, Cadence'in diğer workflow yönetimi teknolojileri (Temporal, Durable Functions, AWS Step Functions, Airflow, Conductor) ile karşılaştırması da yapılmaktadır.
- Videoda Uber'in Cadence'i hangi kullanım alanlarında kullandığı (deployment işlemleri, background checkler, para transferleri, raporlama) örneklerle anlatılmakta ve Cadence'in finans sektörü, telefon servisleri gibi farklı alanlarda da kullanılabileceği vurgulanmaktadır. Ayrıca, Cadence'in metrikler, izleme, yönetme imkanları, versiyon yönetimi, shadowing, idempotency gibi ileri düzey konuları da ele alınmaktadır.
- 00:04Ender Demirkaya'nın Tanıtımı
- Ender Demirkaya, Uber'de sinir saf engineer olarak çalışan ve Cadence projesinin tek liderlerinden biridir.
- Ender, Bilkent Üniversitesi Bilgisayar Mühendisliği bölümünden mezun olup, 2008-2009 civarında arama motorları üzerine araştırmalarla çalışmaya başlamıştır.
- Microsoft'da dört sene, Facebook'ta beş sene arama motorları üzerinde çalışmış ve yaklaşık bir iki sene önce Uber'a katılmıştır.
- 01:31Arama Motorları ve Dağıtılmış Sistemler
- Arama motorları herhangi bir şirketin en karmaşık sistemlerinden biridir ve Facebook'ta dört trilyondan fazla post bulunmaktadır.
- Arama motorlarında kullanıcı arama yapınca birkaç milisaniyede en iyi sonuçlar hesaplanıp gösterilmelidir.
- Arama motorları sadece dağıtılmış sistemler değil, makine öğrenimi, ürün ve kullanıcı arayüzü gibi birçok alanda da karmaşıklık içerir.
- 03:31Cadence Projesinin Arka Planı
- Cadence büyük bir proje olup büyük bir yatırım gerektiren bir sistemdir.
- İnternetin yaygınlaşmasıyla birlikte her şeyin ölçeklendirilmesi gerekmeye başlamıştır.
- İlk çözümler olarak E, CSP ve EDA gibi teknolojiler ortaya çıkmıştır.
- 04:46Dağıtılmış Sistemlerin Gelişimi
- Uygulamalar daha karmaşık hale gelmeye başlayınca, yazılımlar sadece tek bir fonksiyondan oluşmuyor, state machine (durum makinesi) şeklinde çalışıyor.
- Örneğin, Uber Eats veya Yemeksepeti gibi uygulamalarda sipariş süreci birkaç saat sürebilir ve birçok adım içerir.
- Büyük şirketlerin bazı süreçleri baştan tasarlama ve toptan ölçeklendirme ihtiyacı ortaya çıkmıştır.
- 07:48Cadence'in Çözümü
- Cadence, dağıtılmış sistemlerin geliştirilmesini kolaylaştıran sistemlerden biridir.
- Uygulamaların karmaşık hale gelmesiyle birlikte kod da daha karmaşıklaşmıştır.
- Cadence, kodu daha anlaşılır hale getirerek hangi adımda sorun çıktığını ve neden çıktığını kolayca görebilmenizi sağlar.
- 10:07Büyük Ölçekli İşlemler ve Sorunlar
- Yemeksepeti'nden her akşam bir milyon sipariş çıkıyorsa, benzer bir sistem için çok zengin olmak veya kar amacı gütmeyen bir şirket olmak gerekiyor.
- Mikroservisler dünyasında bir saat boyunca bir sürü şey değişebilir, örneğin tüm data center down olabilir.
- Kullanıcı siparişini beklerken, data center sorunları yaşanabilir ve bu durumları nasıl kurtarıp devam ettireceğiniz sorunudur.
- 11:09Cadence Teknolojisi
- Cadence, yeni bir dil öğrenmeden, mevcut kullandığınız dilde kod yazmanızı sağlar ve cloud ortamında çalışmayacakmış gibi basit bir şekilde kod yazabilirsiniz.
- Cadence'de workflow adı verilen fonksiyonlar ve activity adı verilen adımlar kullanılarak işlemler yönetilir.
- Bazı işlemler dışarıdan bir sinyal gelene kadar devam etmez, örneğin restoranın siparişi kabul etmesi veya kuryenin yemeği alması gibi.
- 12:54Cadence'in Avantajları
- Cadence ile yazdığınız kodlar istenilen kadar ölçeklenebilir, güvenilir ve fail durumlarında kurtarılabilir.
- Cadence %99,99 kullanılabilirlik garantisi verir ve workflow'ların durumlarını yıllarca koruyabilir.
- Replication özelliği sayesinde bir data center sorun yaşasa bile, veriler başka bir data center'e kopyalanmış olur ve failover yapılabilir.
- 14:00Geliştirme ve İzleme
- Cadence'in default UI'sı ile ne olup bittiğini görebilir, metrikleri takip edebilir ve workflow history'ini indirip debug edebilirsiniz.
- Arşivleme desteği sayesinde finansal işlemler gibi yıllarca kayıtlarınızı tutabilirsiniz.
- Cadence, stateful distributed sistem yazarken karşılaşacağınız tüm overheadleri kaldırmayı amaçlar.
- 15:36Workflow ve Child Workflow Yapısı
- Child workflow, parent workflow ile bir pointer ilişkisi kurar ve parent workflow iptal edildiğinde tüm child workflow'lar da iptal olur.
- Child workflow'lar farklı makinede çalışabilir ve workflow içinde çalışmaz, tamamen ayrı bir yapıda çalışır.
- Cadence, workflow'un kaldığı yerden devam etmesini sağlar ve history replay özelliği ile durumunu kaydeder.
- 18:19Cadence'in Çalışma Prensibi
- Cadence kullanmadan önce, geliştiriciler kod yazarken kullanılabilirlik, güvenilirlik ve ölçeklenebilirlik gibi distributed system overhead'leriyle uğraşmak zorundadır.
- Cadence ile sadece kod yazmanız yeterlidir, API'lar, distributed system overhead'leri ve metrikler otomatik olarak sağlanır.
- Cadence'in mimarisinde kendi server'ı bulunur ve kullanıcıların worker servisleri oluşturması gerekir, workflow worker'lar geçişleri takip ederken activity worker'lar fonksiyonları çağırır.
- 21:25Stateful Distributed Sistemlerde Karar Verme Mekanizması
- Workflow workerlar karar verme işlemleri (decision) yaparken, activity workerlar aktiviteleri (fonksiyonları) çalıştırıyor.
- Bir karar (decision), bir workflow'da yeni bir çağrı yapıldığı yere kadar giden süreçtir.
- Workflow worker, bir sonraki adımın ne olduğunu belirler ancak kendisi çalıştırma yapmaz, başka bir worker bu işi devam ettirir.
- 23:19Cadence Sistemlerinin Çalışma Prensibi
- Cadence gibi sistemlerde workflow fonksiyonları defalarca kapanıp baştan başlıyor (replay ediyor), bu nedenle multiplayer oyun gibi gerçek zamanlı uygulamalarda latency overhead yaşanabilir.
- Aktivitelerin konfigürasyonları ayarlanabilir, fail durumunda kaç kez tekrar çalıştırılacağı, timeout değerleri gibi politikalar belirlenebilir.
- Workerlar bir adım attığında server'a durumunu gönderir, server bu durumu kaydeder ve yeni bir görev (task) atar.
- 25:00Task Durumları ve İşlem Akışı
- Bir task atandığında önce "scale" (programlanır) durumuna, sonra "start" (başlatılır) durumuna, sonunda "complete" (tamamlanır) durumuna geçer.
- Bu durumlar, aynı taskın birden fazla worker'a verilmesini engeller ve workflow'un doğru şekilde orkestra edilmesini sağlar.
- Workflow başlatıldığında, server workflow state'ini oluşturur, workflow worker'lar taskları alır ve tamamlar, bu süreç "start" ve "complete" durumları arasında devam eder.
- 27:51Task Yönetimi ve Optimizasyon
- Her aktivite ve workflow için farklı task listeleri belirlenebilir ve bu listeler için farklı kaynaklar (makine sayısı, CPU, memory) ayarlanabilir.
- Workerlar optimize çalışması için aktif olur, her API çağrısından sonra uykuya girer ve aynı workflow'daki taskları aynı workerlara verilerek history oluşturma maliyeti azaltılır.
- Workflow worker crash olursa veya deployment yapılırken, yeni worker workflow'un tam geçmişini alır, kodu baştan çalıştırır ve sonunda kaldığı yerden devam ederek sistem kurtarılır.
- 31:35Cadence Kavramları ve Temel Yapısı
- Cadence'de domain, namespace gibi düşünülebilir ve workflow type'lar table'lar gibi, workflow'lar ise row'lar gibi kabul edilir.
- Bir takım genellikle bir veya birkaç domain kullanabilir, proje bazlı veya takım bazlı olabilir.
- Domain'in avantajı, içerideki workflow ve aktivitelerin sayısı önemli olmaksızın yukarıdan kaynak ayırabilmesidir.
- 33:32Workflow ve Run ID Kavramları
- Workflow ID kullanıcı tarafından tanımlanır ve user-defined olduğu için aynı ID'den birkaç workflow olabilir.
- Run ID ise workflow'ın her bir çalıştırmasının eşsiz kimliğidir ve aynı run ID'den iki tane olamaz.
- Örneğin Uber'de güvenlik kontrolleri için her kontrol eşsiz bir run ID'ye sahip olabilir, ancak bunların hepsi aynı workflow ID'ye ait olabilir.
- 35:44Cadence'in Kullanım Alanları
- Uber gibi şirketler Cadence'i binlerce servis için kullanmakta ve global operasyonları yönetmektedir.
- Uber'de farklı ülkeler ve şehirlerde farklı kurallar ve altyapılar olmasına rağmen, Cadence sayesinde düşük sayıda mühendisle bu servisleri yönetebilmektedir.
- Cadence, Uber'de deployment, background check, promosyonlar, provision, menü değişiklikleri, müşteri destekleri, ödeme işlemlerini ve diğer birçok işlemi yönetmektedir.
- 40:41Cadence'in Diğer Kullanım Alanları
- Google gibi şirketler Cadence'i çalışanlarına aylık Uber kredisi vermek ve rapor oluşturmak için kullanmaktadır.
- Cadence, workflow'ları zamanlamak, veri toplama ve singleton distribute systems gibi karmaşık sistemleri yönetmek için kullanılabilir.
- Teleform ve birçok finans şirketi gibi Cadence'i farklı kullanım alanlarında kullanmaktadır.
- 44:15Cadence Kullanımı ve Yapılandırma
- Cadence'i kullanmak için sadece Cadence client library'sini import etmek ve bir config dosyası yazmak yeterlidir.
- Config dosyasında servisin hangi server ile konuşacağını belirtmek gerekir.
- Geri kalan işlemler client library tarafından arka planda otomatik olarak yönetilir.
- 45:14Cadence'in Çalışma Mantığı
- Cadence ile workflow'ları yazarken, paralel işlemler başlatıp sonuçları toplayabilirsiniz.
- Bir workflow içinde for loop kullanarak birden fazla alt workflow başlatıp, hepsinin bitmesini bekleyebilirsiniz.
- Cadence, karmaşık işlemleri basitleştirerek tekrar tekerlek icat etmek zorunda kalmadan kolayca kod yazabilmenizi sağlar.
- 46:41Cadence'in Arka Plan Mimarisi
- Cadence'in mimarisinde dışarıdan workflow başlatan bir "starter" ve tüm işlemlerin geçtiği "frontend" bulunur.
- Workflow başlatıldığında, history'e kayd edilir ve matching servisi tarafından işlenir.
- Workerlar sürekli pol yaparak task isteyerek, matching servisi taskları uygun workerlara yönlendirir ve işlenen tasklar history'e kaydedilir.
- 47:47Cadence Çalışma Prensibi
- Cadence, otomatik sistem workflow'larını destekleyen bir platformdur ve arka tarafta background işlerini gerçekleştirir.
- Cadence, replication worklarla entegre olup, workflow'ları listeler ve Elasticsearch gibi sistemlerle entegrasyon sağlar.
- Cadence tamamen bir paket halinde (one box) gelir ve Docker ve kompozit kullanılarak kolayca kurulabilir.
- 48:43Cadence Kullanımı ve Kurulum
- Cadence'i kullanmak için Mac'te "brew install cadence" komutu ile veya Windows için web sitesinden kurulum yapılabilir.
- Cadence, workflow'ların bulunduğu tarafta tüm fonksiyon kollarını yakalayarak counter ve latency metriklerini takip edebilir.
- Platform, kaç workflow çalıştığını, kaç aktivite çalıştırdığını ve workflow'ların sağlığı hakkında bilgi sağlar.
- 50:08Cadence'in Güvenilirlik Özellikleri
- "Hard bit" özelliği, uzun süren aktivitelere zaman aralıklarında canlılık bilgisi göndererek, aktivitenin sağlıklı çalışıp çalışmadığını kontrol eder.
- "Panik" özelliği, crash eden worker'ları takip eder.
- "Shadowing" özelliği, workflow'ların performansını izlemeyi sağlar.
- 51:14Cadence'in İzleme ve Yönetimi
- Cadence, workflow'ların performansını detaylı bir şekilde gösterir ve aktivite sonuçlarını ve inputlarını görüntülemeyi sağlar.
- "Show graph" özelliği, workflow'ları diagram olarak göstererek izlemeyi kolaylaştırır.
- Admin operations ile workflow'ları iptal etmek, yeniden başlatmak veya sıfırlamak gibi işlemler yapılabilir.
- 52:51Workflow İzleme ve Sorun Giderme
- Workflow'ların hangi task'larda çalıştığını, hangi stack'te olduğunu ve kaç defa fail ettiğini görebilirsiniz.
- Workflow'lar için hem summery view hem de history view bulunmaktadır.
- Summery view'da workflow'un ne kadar süredir çalıştığını ve parametrelerini görebilirsiniz.
- 53:34Versioning ve Migration
- "Virgining" (versioning) özelliği, workflow'ların farklı versiyonlarını yönetmeyi sağlar.
- Kod değişikliği yapıldığında, yeni kod eski koddan farklı bir history oluşturuyorsa non-deterministik hata verir.
- Yeni kod eski kodla uyumlu değilse, get version kodu kullanılarak farklı versiyonlar için farklı kod blokları yazılabilir.
- 57:27Migration ve Sorun Giderme
- Rollout sırasında hem eski hem yeni versiyonu tanıyabilen bir yapı sunulur.
- Sorun oluştuğunda rollback yapılabilir.
- Non-determinizm hatası dönen workflow'lar için belirli bir adıma kadar reset edilebilir ve oradan devam ettirilebilir.
- 59:00Shadowing ve İdempotency Kavramları
- Shadowing, workflow'ları tamamlanmış halde tekrar çalıştırarak (replay) non-determinizm hatalarını tespit etme yöntemidir.
- İdempotency, aynı komutun birden fazla kez çalıştırılmasına rağmen her zaman aynı sonucu vermesini sağlar.
- İdempotency, network sorunları gibi durumlarda aynı işlemi tekrarlamak gerektiğinde, veri çakışmasını önlemek için kullanılır.
- 1:03:02Cadence ve Benzer Teknolojiler
- Cadence, Microsoft'un başlattığı Duruble Functions'tan başlayıp, Amazon'un Simple Workflow Foundation'ı, Uber'in Cadence'i ve Temporal'in Temporal'i şeklinde gelişen bir teknoloji ailesidir.
- Temporal, Cadence kodunun kopyalanıp diverge edilmesiyle oluşturulmuş olup, kendi sunucularını yönetme imkanı sunar.
- InstaCluster, Cadence kodunu birebir kullanarak hizmet sunar ve kullanıcılar daha sonra kendi data center'larında Cadence'i çalıştırabilirler.
- 1:05:42Temporal ve InstaCluster Karşılaştırması
- Temporal'da bazı kodlar gizli tutulduğu için, Temporal'da yazılan kodu Cadence'e geçirmek zaman alabilir.
- InstaCluster, sadece Cadence değil, Cassandra, Kafka ve Elasticsearch gibi diğer sistemleri de yöneterek "one-stop shop" olma imkanı sunar.
- 1:06:47Cadence ve Diğer Teknolojilerin Karşılaştırılması
- Cadence, Airflow, Conductor gibi diğer teknolojilerle karşılaştırıldığında en büyük farkı DSL (Domain Specific Language) kullanmamasıdır.
- Cadence'da yeni bir programlama dili öğrenmek gerekmezken, diğer teknolojiler genellikle küçük bir programlama dili veya konfigürasyon üzerinde çalışır.
- Cadence'da Go veya Java gibi dillerde yazabileceğiniz her şeyi çalıştırabilirken, diğer teknolojiler konfigürasyon sınırları içinde kalarak sınırlıdır.
- 1:08:04Amazon Step Functions ile Karşılaştırma
- Amazon Step Functions'da workflow'u görsel olarak görebilirsiniz, ancak bu görseli elle tek tek JSON ile çizmeniz gerekmektedir.
- Step Functions görsel diyagramı çizip infrastructura koduna dönüştürürken, Cadence'de dilin izin verdiği her şeyi kullanabilirsiniz.
- Step Functions'da JSON veya metin sınırları içindeyken, Cadence'de dildeki struct'ları, erişimlerini ve map'leri kullanabilirsiniz.
- 1:10:00Cadence'in Arka Plan Mimarisi
- Cadence beş ana servis içerir: frontend, history, matching, internal worker ve visibility store.
- Frontend dış dünyayla iletişim kurar ve iç mimariyi saklar.
- History, bir ledger sistemi gibi kayıtları tutar ve Matching ile iletişim kurarak workflow işlemlerini yönetir.
- 1:12:23Veritabanı ve Depolama
- History, Cassandra, MySQL, PostgreSQL gibi veritabanlarını kullanır ve workflow kayıtlarını tutar.
- Retention policy ile workflow tamamlandığında kayıtlar silinebilir veya belirli bir süre saklanabilir.
- Arşivleme özelliği ile veriler estree veya cold storage gibi yerlere yüklenebilir ve yıllarca tutulabilir.
- 1:14:31Timer İşlemleri ve Ölçeklenebilirlik
- Timer'lar veritabanında saklanır ve background sistemler her saniye uyanması gereken timer'ları kontrol eder.
- Ölçeklenebilirlik için shard sayısını değiştirmek mümkün değildir, ancak yeni history hostları eklenebilir.
- Hashring kullanılarak veriler homojen bir şekilde dağıtılmakta ve shard sayısına göre mod işlemi uygulanır.
- 1:19:26Cadence'e Erişim ve Kaynaklar
- Cadence web sitesinde detaylı bilgi ve blog yazıları bulunmaktadır.
- LinkedIn, Slack ve Stack Overflow üzerinden soru sorulabilir.
- GitHub'da feature request koyulabilir ve Office Hours ile Zoom üzerinden katılım sağlanabilir.
- 1:20:47Cadence Kullanımında Zorluklar ve Uber Deneyimi
- Cadence kullanırken bazı durumlarda kullanılmaması gereken senaryolar bulunmakta ve bunlar açıklanacaktır.
- Uber içinde Cadence kullanımı büyük bir baskı yaratmaktadır çünkü kullanıcılar bir kez kullandıktan sonra çok seviyorlar ve enty pattern olsa bile kullanmaya başlıyorlar.
- Kullanıcılar Cadence'e yeni özellikler talep ediyor ve özellikle chat gibi hızlı işlemlerde Cadence kullanmak istenmese de kullanıcılar kaydının olması gerektiğini belirtiyorlar.
- 1:21:46Cadence Kullanımında Öneriler ve Sorunlar
- Cadence kullanırken çok fazla aktivite arasında yüzlerce megabayt veri aktarımı yapmamak önerilmektedir, bunun yerine verinin bir yere kaydedilip sonra okunması tavsiye edilmektedir.
- Yakında Cadence'in open source sürümünde "large parameter support" özelliği eklenecektir, bu özellik ile büyük veri boyutları (1-2 megabayt) desteklenecektir.
- Cadence'in veri saklama için değil, sadece orkestrasyon için kullanılması önerilmektedir, verilerin bir database'de tutulması daha mantıklı olacaktır.
- 1:23:48Cadence'de Güvenilirlik ve Time Out Yönetimi
- Cadence'de "sticky worker" özelliği sayesinde bir workflow hep aynı workflow worker'a atanmaktadır ve bir task başladıktan sonra atomik bir şekilde işaretlenmektedir.
- Time out durumunda bir worker sağlıksız hale geldiğinde, decision time out sonrası task başka bir worker'a verilir ve eski worker'ın cevabı invalidate edilir.
- Workflow'ları idempotent yapmak gerekir, örneğin time objesi kullanırken sadece effect kullanmak ve normal sleep yerine database tabanlı sleep implementasyonu kullanmak önemlidir.