Yazılımcılar İçin Hafta Sonu Okumaları - Sayı #76 / Sezon #4 (Dağıtık Uygulamalar, Eşzamanlılık(Concurrency), ElasticSearch ve Şürekası ve daha fazlası)
Merhaba aziz okuyucularım.
Yaklaşık 40 günlük bir sürenin ardından 76. sayı ile karşınızdayım. Her zamanki gibi sizler için bol kepçe derlediğim güzel yazılarla dolup taşan bir sayı oldu.
Keyifli okumalar
Önce Reklamlar
4 sene kadar önce Redis'te Master-Replica(o zamanki ismiyle Slave) ve Sentinel yapılarıyla yüksek erişilebilir(highly available) dağıtık mimariler oluşturmayı anlattığım 2 yazılık bir seri yayımlamıştım.
Bu kez -İngilizce olarak- güncel Redis versiyonuyla, Docker kullanarak ve aynı konuyu daha geniş anlatmayı planladığım bir seriye başladım. İlk yazıda Master-Replica yapısını anlattım.(İng)
Redis demişken, Deniz TÜRKMEN de Redis Master-Replica(Slave) yapısını ve Ubuntu'da kurulumunu anlatmış.
Dağıtık Uygulamalar
Hazır dağıtık uygulamalar demişken ilgili başka yazılara da göz atalım:
Hüseyin Demir, dağıtık veritabanlarında yazılan verinin yeterli sayıda node'a yazılmasını amaçlayan durability kavramından ve Couchbase'de uygulamasından bahsetmiş. Diğer bir yazısında ise PosgreSQL'de yüksek erişilebilirlik için kullanılan farklı HAProxy mimarilerinden ve farklı senaryolardaki kıyaslamalarla pgbouncer aracının avantajlarından/dezavantajlarından bahsetmiş.
Bilal Dinç, dağıtık uygulamalarda olayların gönderilip alınmasını takip etmeyi ve yönetmeyi sağlayan .NET Standard tabanlı CAP kütüphanesinden ve görsel arayüz sağlayan dashboard'undan bahsetmiş.
Erdi Gürbüz, mikroservis kullandıkları dağıtık bir uygulamada bir kaydı bir intance'ın işlemesi için MongoDB'nin ShedLock kütüphanesiyle nasıl dağıtık kilit(distributed lock) mekanizması oluşturduklarını anlatmış.
Eren Yılmaz, Redlock algoritması ve Redis kullanımı ile dağıtık kilit(distributed lock) uygulamasını anlatmış.
Derin Blockchain
En meşhur dağıtık teknolojilerden olan Blockchain ile devam edelim:
Mithrandir, Blockchain ağlarında işlemleri ağ dışında gerçekleştirip sonuçları ağa ileterek performans ve veri kazancı sağlamayı vaat eden Rollup mekanizmalarını detaylıca anlatmış. Diğer bir yazısında ise oldukça geniş bir şekilde Blockchain teknolojisinde kullanılan cebirsel şifreleme yöntemlerini anlatmış.
Elif Hilal Umucu, Blockchain teknolojisi ve kripto paraların çözmeye çalıştığı asıl problemleri, çözüm yöntemlerini ve karşılaştıkları zorlukları anlatmış.
Derinlemesine Başka Şeyler
Murat Çabuk, derinlemesine Git'i anlattığı serinin 3. yazısında Git'te geçmişi değiştirmeyi sağlayan interaktif Rebase özelliğini detaylıca anlatmış.
Şuayip Üzülmez, genişçe Python'da metaprogramlamayı anlatmış.
Çağlayan DÖKME, C++'ta Singleton tasarım deseninin uygulanışını incelemiş.(İng)
Eşzamanlılık(Concurrency)
Ayşe Nur Bakırcı, iOS'te eşzamanlı(concurrent) çalışan uygulamalar geliştirmek için kullanılan GrandCentralDispatch(GCD) ve operasyon yapılarını anlatmış.
Hüseyin Kaya, eşzamanlılık(concurrency) kavramından, Go'daki eşzamanlı programlama için kullanılan Goroutine'lerden ve bunların kullanımında dikkat edilmesi gereken kritik noktalardan bahsetmiş.(İng)
Hasan Kadir Demircan, Java'da eşzamanlılığı(concurrency) anlattığı bir seriye başlamış. İlk yazıda Atomic yapısını ve Concurrent Collection'ları anlatmış.(İng)
Bir CTO'nun Tecrübeleri
Oğuzhan Yılmaz, son 3 yılda CTO olarak edindiği tecrübeleri, acısıyla tatlısıyla yaşadıklarını ve bunlardan çıkardığı dersleri yazmış
ElasticSearch ve Şürekası
Metin tabanlı sorgulama için vazgeçilmez teknolojilerden ElasticSearch ve birlikte kullanıldığı teknolojiler hakkında bolca yazıya denk geldim:
Cemal Ünal, ElasticSearch'te kaybolan verilerin Snapshot'tan nasıl geri yüklenebileceğini anlatmış.(İng)
Berkay Yalçın, ElasticSearch'te eş anlamlı kelimelerin arama sonuçlarına dahil edilmesi için kullanılan yöntemleri anlatmış.(İng)
Tuğrul Bayrak, ElasticSearch kullanırken yaptıkları hataları ve bunları nasıl aştıklarını anlatmış.(İng)
Furkan Özmen, Java, Kotlin, Spring Boot, Kafka, PostgreSQL ve ElasticSearch gibi teknolojileri kullanarak oluşturduğu projeyle CQRS desenini anlatmış.
Nazelin Özalp, MongoDB ve PostgreSQL loglarını Filebeat ve Logstash kullanarak ElasticSearch'e aktarmayı anlatmış.(İng)
Onur Ozan Korkmaz, MSSQL veritabanındaki verileri ELK stack(ElasticSearch-Logstash-Kibana) ile görselleştirmeyi anlatmış.
Soner Paycı, log4net kullandıkları mevcut bir backend servisin loglama kısmına ElasticSearch - Kibana - Filebeat stack'ini nasıl entegre ettiklerini anlatmış.
Test ve Otomasyon
Sinem Merve Yılmaz, Azure Devops Pipeline'da Postman ile entegrasyon testi yapmayı anlatmış.
Kübra Saylı, Go'da BDD frameworkü Godog ile API testi yapmayı anlatmış.(İng)
Mert Kimyonşen, Go'da birim testi yazmayı anlatmış.(İng)
Emre Baş, mikroservis mimarisindeki projelerinde otomatize kulanıcı kabul testlerini nasıl yönettiklerini anlatmış.
Tuğsan Ünlü, Cypress İpuçları serisinin 5. yazısında Chrome DevTools Recorder aracıyla test senaryoları oluşturmayı anlatmış.
Gökhan KARAMAN, API testleri için kullanılan Karate Framework vs Rest Assured framewoklerini karşılaştırmış.(İng)
Pınar Örmeci, test otomasyonlarında kullanılan tasarım desenlerinden Page Object Model'i Selenium ve Java'da bir örnek proje üzerinden anlatmış.
Damla Mutlu, React'te React Testing Library ile test yazmayı anlatmış.(İng)
Ugur Selim Özen, Regresyon testlerinde paralel test yapmayı ve bunu otomatize etmeyi anlatmış.
Numanhan Duran, yazılım testi konusunda gözden kaçırılmaması gereken hususlardan bahsetmiş.(İng)
Ali Furkan Dadali, NestJS'te birim test yazmayı anlatmış. (İng)
Kemal Kağan Kural, Github Copilot yardımıyla Serenity BDD projesi ve otomatize testler oluşturmayı anlatmış.(İng)
Kadriye Taylan, Terraform kullanarak Docker imajlarını AWS App Runner'a deploy etmeyi anlatmış.
Bir Tutam Kubernetes
Fırat Yaşar, Kubernetes cluster kaynaklarının yedekleme ve geri yüklemesi için kullanılan açık kaynak Velero aracını anlatmış.(İng)
Ferhat Candaş, yapılan deployment'ı yavaş yavaş tüm kullanıcılara yansıtmayı sağlayan Canary Deployment yaklaşımını Kubernetes ile ile uygulamayı anlatmış.
Onur Cil, Kubernetes kullanımında bazı best practice'lerden bahsetmiş.(İng)
Erkan Şirin, Kubernetes'te bazı pratik bilgiler ve komutlara ait notlarını paylaşmış. Diğer bir yazısında ise makine öğrenmesi modellerinin canlı ortamlara taşınması ve bu süreçlerin otomatize edilmesiyle ilgilenen MLOps rolünü anlatmış.
Bu Algoritmalar Gerçek Hayatta Ne İşimize Yarayacak?
Can Bayar, gerçek hayatta kullandığımız algoritmaları anlattığı "Algorithms in Context" diye bir seri kaleme almış. Serinin 8. yazısında karıştırma(rastgele karışık sayı/sayı listesi) üretme algoritmalarının nasıl çalıştığından bahsetmiş. 9. yazısında ise otomatik metin tamamlama algoritmalarının nasıl çalıştığını anlatmış.(İng)
Serinin önceki yazılarına da göz atmanızı öneririm.
Kısa Kısa
Hatice Ergün, "kadın yazılımcı" olarak karşılaştığı sıkıntılardan ve zorluklardan bahsetmiş.
Burak Selim Şenyurt, Rust pratikleri serisinde önce C# ile geliştirdiği bir örnek üzerinden Rust'ta nesne tabanlı programlama(OOP) özelliklerinin nasıl uygulanabileceğine kafa yormuş.
Eray Akartuna, nesne yönelimli programlamada "basitliğin" önemimden ve gözden kaçırdığımız noktalardan bahsetmiş.(İng)
Ömer Savaş, kamuda açık kaynak olarak geliştirdikleri "low-code ERP platformu" Angaryos'u anlatmış.
İbrahim Doğan, sürekli büyüyen ve 500 milyonu aşkın canlı veriyi Couchbase'den PostgreSQL'e nasıl arşivlediklerini anlatmış.(İng)
Sertaç Kağan Aydın, bazı batch işlemler için verileri geçici olarak Couchbase'e(Couchbase Eventing ile) yazmak ve Kafka ile (Kafka Connectors kullanarak) yayımlayarak tüketmek için oluşturdukları mekanizmayı anlatmış.(İng)
Burakcan Ekici, Couchbase'de veri değişikliklerini cURL ve Eventing Service ile yakalayıp gerekirse aksiyon almayı anlatmış.(İng)
Ahmet GÜL, Kafka ile Avro formatını kullanarak ilişkisel veri tabanlarına sürekli veri akışı sağlamayı(streaming) anlattığı bir seriye başlamış.
Harun Pekşen, farklı consumer-consumer grup senaryolarıyla Kafka consumer'larının nasıl çalıştığını anlatmış.(İng)
Batıkan Sosun, 2 yazı halinde iOS simülatör kullanımının püf noktalarını anlatmış.(İng)
Engincan Veske, yazılımda derinleşme konusunda tecrübelerini ve önerilerini yazmış.
Ali Furkan Dadali, 2 yazı halinde NuGet paket oluşturmayı ve Azure DevOps ile yayımlamaya anlatmış. (İng)
Nevil Gültekin, Garanti'de gerçekleştirdikleri dijital dönüşümün merkezindeki platformu geliştirme süreçlerini anlattığı bir seri kaleme almış.(1, 2, 3)
Alperen Yavuz, büyük çaplı dijital dönüşüm projelerine nasıl başladıklarından, planlama aşamalarından ve oluşturdukları organizasyondan bahsetmiş.(İng)
Emre Çakır, Web Component oluşturmayı ve kullanımını anlatmış.
Ali Yıldızöz, kurumsal uygulama tasarım desenlerinden Active Record desenini anlatmış.
Ayşegül Yönet, NPM'deki güvenlik açığı uyarılarının overrides yöntemiyle nasıl çözüldüğünü anlatmış.
Olgun Yıldız, React öğrenim sürecini anlattığı bir seriye başlamış. İlk yazısında proje oluşturmayı ve birim testlerini yazmayı anlatmış.
Beyza Madenoğlu, React'te bileşenler(component) arası veri aktarımı için neden Context API yerine Props tercih ettiklerini anlatmış.
Yağmur Mutluer, React'te HOC'ların(Higher Order Component) ve Context API'ın nasıl kullanıldığından bahsetmiş.
Yılmaz Yağız Dokumacı, Flutter ile yaptığı #100daysofcode "challenge"ının serüvenini anlatmış.
Burak Yiğit Kaya, hobi olarak uğraştığı elektronik kart maceralarından ve çıkardığı hayat derslerinden bahsetmiş.(İng)
Altuğ Bilgin Altıntaş, problemin durumuna göre karar verme için bir yöntem sunan Cynefin çerçevesini(framework) anlatmış.
Turgay Çelik, Çevik yazı dizisinin 5. yazısında "sahte çevik" projelerin nasıl tespit edilebileceğini anlatmış. Diğer bir yazısında ise "Disiplinli Girişimcilik" kitabından çıkardığı notları paylaşmış.
Tamer TÜRKSOY, .NET Core ile gRPC servis geliştirmeyi ve Windows Service olarak yayımlamayı anlatmış. (İng)
Nil Seri, Spring Boot ile gRPC implementasyonun anlatmış.(İng)
Özgür Doğan Yildiz, Spring Boot annotations yardımıyla istek doğrulama(request validation) yapmayı anlatmış.(İng)
Nesrin Aşan, Java'da Random vs SecureRandom kütüphanelerinin kullanımlarını ve farklılıklarını anlatmış.
Itır Ege Değer, Java'da null kontrolü yapmayı sağlayan farklı yöntemleri anlatmış.(İng)
Mohamad Eldhemy, tercih nedenleriyle birlikte PHP projesinde kod kalitesini sağlamak için kullanılan araçlardan bahsetmiş.(İng)
Şükriye Soyer, bir örnek eşliğinde micro frontends yaklaşımını anlatmış. (İng)
Erdem Köşk, Feature flag yaklaşımı için kullanılabilecek flag servislerden bahsetmiş.
Mustafa Emre Özmen, framework ve kütüphaneleri anlamaktan ve bunların perde arkasında "sihir" yapıp yapmadığından bahsetmiş.
Burak Tahtacıoğlu, bir .NET Core örneği üzerinden Clean Architecture yaklaşımını anlatmış.(İng)
Furkan Güngör, C#'ta enum değerlerin string halini almak için kullanılabilecek farklı yöntemleri kıyaslamış.
Ertugrul Kara, EF Core 6'da tüm sorgulara nasıl With NoLock ifadesini eklediklerini anlatmış.
Muhammet İkbal KAZANCI, C# 6 için bazı performans ipuçlarından bahsetmiş.(İng)
Beyza Celep, C#'ta kodları gruplamak için region ifadesinden, bunun kullanımını şeytanlaştıranların ve tersini savunanların görüşlerinden bahsetmiş.
Talip Korkmaz, takım yönetimi konusunda temel bazı pratiklerden bahsetmiş.(İng)
Naz Eylem Kaya, GitLab'i ürün yönetimi için nasıl kullandığından bahsetmiş.(İng)
Bitirirken
Bir sayının daha sonuna geldik. Beğendiyseniz paylaşmayı; eleştirileriniz, önerileriniz varsa iletmeyi unutmayın.
Faydalı olması ümidiyle.
Zâtınıza çook iyi davranın.
Çay, kahve ısmarlamak için: Patreon
Sosyal Medya
[tweet https://twitter.com/dayioglu/status/1502655093770010625] [tweet https://twitter.com/mengukagan/status/1525611039932534784]