Mihai Plesa, DevOps Yöneticisi, Brave

Burada, Brave’de, yalnızca birkaç masaüstü ve mobil uygulamayla uğraştığımızı düşünebilirsiniz ancak tarayıcınızı, brave reklamlarını ve içerik oluşturucu ödül ekosistemini destekleyen giderek artan sayıda arka plan hizmetleri var. Bunlara; tarayıcı ve uzantı güncellemelerini, reklam engelleme listelerini, onaylı içerik oluşturucu listelerini, arka plan ve sponsorlu görselleri, reklam kataloglarını, ödül ödeme işlemlerini, özel CDN ve proxy’leri, Brave News için altyapıyı, Brave Search’ı ve daha fazlasını ekleyebilirsiniz. Kullanıcılara tüm bu özellikleri taşıyan ana gemimiz brave tarayıcıyı yayınlarken karşılaştığımız bazı zorluklara biraz daha yakından bakalım.

Brave’de uygulamalı bir DevOps yöneticisi olarak, yalnızca altyapı oluşturmakla ve işlerin sorunsuz yürümesini sağlamakla kalmayıp aynı zamanda oluşturma ve yayınlama süreçlerinin otomasyonundan da sorumlu yüksek motivasyonlu küresel bir mühendis ekibine liderlik etmekten gurur duyuyorum.

Brave’e 2018’de ilk katıldığımda tarayıcımız hâlâ Muon’a (Elektron çatalımız) dayalıydı ancak kısa bir süre sonra Chromium’a geçtik. İlk amaç, manuel ve kırılgan yapılar yapmayı durdurmaktı ancak bu da Sürüm, Beta ve Geliştirme kanallarında isteğe bağlı güncellemeler sunarken bir darboğaz yarattı.

Birkaç aylık bir süre içinde sürekli entegrasyon sistemimizde platforma özel ardışık düzenleri kodlamayı başardık ve geçici serbest stil yürütmeden uzaklaştık. Bu, manuel adımların çoğunu otomatikleştirmemize ve sonuçların öngörülebilirliğini artırmamıza olanak sağladı. En büyük zorluklardan biri, kod imzalamayı doğru yapmak ve sertifikaları güvende tutarken yenilemekti. Ayrıca Windows derlemeleri için Azure’dan Amazon Web Services’e ve macOS derlemeleri için MacStadium’dan kendi Apple makinelerimize geçtik.

Bu arada, her kod değişikliğinde masaüstü tarayıcı yapıtları üretecek ve depolayacak bir çekme isteği oluşturucusu için kavram ispatına ulaştım. Başlangıçta hiçbir test yürütülmüyordu ve tüm iş akışı saatler sürüyordu ancak otomatik derlemelerin temeli atıldıktan sonra, sürekli entegrasyonla ilgilenmenin ve geliştiricilerin birden çok platformdan erken geri bildirim almasına izin vermenin zamanı gelmişti.

Mart 2019 civarında, gün içinde birden çok kez yenilenen ancak kullanıcılara haftada 5-7 kez iletilen bir Nightly (Brave’in her gece güncellenen öncü sürümü) kanalı oluşturduk. Bu, daha hızlı yapılar elde etmeye daha fazla odaklanmamızı sağladı ve birçok şey denendi. Çeşitli önbelleğe alma türlerinden (Git, ccache, sccache, RAM diskleri) paralel testler yürütmeye, çalışma alanlarını yeniden kullanmaktan, log ayrıntılarını azaltmaya ve daha fazlasına kadar epeyce denedik. Derlemeleri daha ucuz hale getirmek için çeşitli bulut örneği türlerini karşılaştırdık ve Docker’da derlemeleri denedik. Yeniden üretilebilir yapılar ve çapraz derleme de ilgi çekiciydi (örneğin, Linux’ta Windows ikili dosyaları oluşturmak).

Tarayıcımızın Android sürümleri Mart 2020’de masaüstü platformlarımızla aynı kodu kullanacak şekilde taşındı. Android sürümlerin masaüstü sürümlerinden de önce (ancak ayrı bir kaynak kontrol deposunda) Chromium’u temel aldığını not edelim.

iOS sürümleri de otomasyon sürecine uyum sağladı, IOS sürümleri şu anda temel tarayıcı kitaplıklarını kullanan bir framework olarak inşa edilmekte. Gelecekte bir noktadan sonra tamamen Chromium’un üzerine inşa edilebilir.

Aralık 2020, yeni Apple M1 CPU’lar için ARM64 yapılarının eklenmesiyle başka bir zorluk getirdi. Bu, macOS derlemelerinin miktarını iki katına çıkarmayı ve evrensel ikili dosyalar oluşturmayı gerektiriyordu.

Google’ın Goma’sını ve çeşitli uzaktan yürütme arka uçlarını araştırırken, derleme sürelerini azaltma vaadi geldi. Google Cloud RBE alfa aşamasındaydı ve kullanıma hazır başka çözümler olmadığında bir bekleme listesi vardı. Ticari varyantlar daha sonra ortaya çıktı ancak bir tarayıcı kadar karmaşık bir şey oluşturmaya uygun değildi (özellikle bir yapı sistemi olarak Bazel kullanmıyorsa).

EngFlow bize ulaştı ve Android ve Linux derlemelerimizi hızlandırmak için bir deneme üzerinde birlikte çalışmaya başladık. Bu kolayca elde edildi ve derleme süresi, geliştirici makinelere veya bulut VM’lerine kıyasla 8 kat azaldı. Bu, dünyanın neresinde olurlarsa olsun, mütevazı bir dizüstü bilgisayar ile ulaşılan havuzlanmış bir yapı kümesine ve bir önbelleğe sahip olmamızı sağladı. Şu anda bunu macOS için entegre ediyoruz ve sırada Windows var.

Bireysel geliştiricilerin derleme yapmak için yeni ve pahalı donanımlara sahip olma ihtiyacı ortadan kalkıyor (ancak bunun daha hızlı olduğu kanıtlanırsa veya ağ yavaşsa yerel derlemeye geri dönüş olabilir). Buna karşın herkese açık olmayan bireysel fiziksel düğümlere karşı bulutta esnek ve ölçeklenebilir bir sisteme sahip olmak da iyidir.

Şu anda haftada yüzlerce yapı yapıyoruz ve bunların yaklaşık 10’u halka açılıyor. Serbest bırakma (kararlı sürüm) kalite kontrol ekibi kanal yapıları üzerinde testini tamamladıktan sonra onay üzerine çıkıyor. Güvenlik düzeltmeleri kullanıma sunulurken veya yeni özelliklerin gönderilmesi gerektiğinde bu oldukça sık meydana geliyor. 2020’de 50’den fazla sürüm vardı. Her 3 haftada bir Nightly’de olanları Geliştirme ve Beta kanallarına ve oradan da kararlı sürüm kanalına taşıyoruz.

Tarayıcı güncellemelerini kullanıcılarımıza sunmak da farklı bir zorluktu. Ben katıldığımda, Crystalnix adlı şu anda feshedilmiş bir şirketten güncel olmayan bir Omaha sunucu dağıtımımız vardı. Özellikleri güncel değildi, dağıtımlar manueldi ve yalnızca bir ortamımız vardı. Üretim, arada bir yeniden başlatılma gerektirdiğinden, kesintilere neden oluyordu. Biraz temizleme, düzeltme testleri ve Docker otomasyonundan sonra yeni özellikler eklenmesine hazır hale gelindi.

Omaha Consulting ile temasa geçtik ve önce güvenlik yamaları, güvenilirlik ve daha sonra delta (diferansiyel güncellemeler) konusunda ilerlemeler üzerinde çalışarak verimli bir işbirliği başlattık. Windows için Google’ın Omaha istemcisinin ve macOS için Sparkle istemcisinin çatallarını kullandığımız için bu hem istemci hem de sunucu tarafında çalışmayı gerektiriyordu. Kullanıcılarımız daha hızlı ve daha az veri aktarımı ile güncellenirken (bazı delta güncellemeleri tam yükleyicilerden bile 100 kat daha küçüktür) bunun AWS faturamızı azalttığını söyleyebiliriz.

Kullanıcı tabanımız geçtiğimiz yıllarda 10 kattan fazla büyüdü, son zamanlarda aylık 32 milyon aktif kullanıcıya ulaştık ve bu karışıma giderek artan sayıda platform, kanal ve mimariyi eklerseniz, oluşturma ve yayınlama kapasitemizin 100 kat artması gerekiyor. Şimdi ekiplerimiz (Harry, Linh ve Wojciech) 1000x üzerinde çalışıyor.