Image for post
Image for post

Merhabalar, bu yazıda Trendyol Platform ekibi olarak geliştirmesini yaptığımız cross cluster service authorization projesinde Istio’nun sağladığı özellikleri kullanarak oluşturduğumuz yapının geliştirme sürecini anlatmaya çalışacağım.

Yazı içerisinde bahsedilecek konu başlıkları:

Service Identification

Servisler birbirleriyle haberleşirken, kendilerine gelen istekleri authorize edebilmeleri için, isteğin kimliğini (kimin tarafından gönderildiğini) bilmesi gerekiyor.

Bu noktada servisler için identification ihtiyacı ortaya çıkıyor.

Spiffe ID

Spiffe (Secure Production Identity Framework for Everyone) kendisini “dinamik ortamlarda yazılım sistemlerini güvenli bir şekilde tanımlamak için belirlenmiş bir takım open source standartlar” olarak tanıtıyor.

Bu noktada Istio da Spiffe…


Image for post
Image for post

Gelişen ve büyüyen bir microservice ekosistemine sahipseniz servisleriniz arasında güvenli iletişimi sağlamak gün geçtikçe zorlayıcı bir hal alabilir. Dışarıdan gelecek tehditlere karşı alınan önlemlerin yanısıra iç networkte de bazı güvenlik önlemleri bulunması gerekiyor. Örneğin container runtime ve container orchestration araçları kullanıyorsanız alınacak önlemlerin bunlardan bağımsız düşülmemesi gerekiyor.

E-ticaret domainini baz alacak olursak, bir kullanıcıya indirim tanımlanmasını sağlayan servisin herkes tarafından erişime açık olması istenilen bir durum olmayacaktır. Harici erişimlerin sınırlandırılması gereken servis sayısı arttıkça bu durumu yönetmek için global bir çözüm sağlama ihtiyacı ortaya çıkmış oldu.

Bu yazımızda da Trendyol Platform ekibi olarak cross-cluster service authorization sorunu için nasıl bir…


How to become a production ready developer?

In these days sticking to a single technology / programming language / tool is not enough for a developer. There are so many things to consider, especially in the microservice’s world.

This might make developers freak.

Image for post
Image for post
CNCF Landscape and Developers — source

As a software developer in my daily job I am handling different stuffs like designin architecture, writing code, testing it, writing CI/CD pipelines, creating alerts according to logs or events, monitoring the app etc..

In this article I am aiming to enlighten the new developers or the ones who does not involved in multi-tech stack.

What is…


Image for post
Image for post

Selamlar, bu yazıda Trendyol Platform ekibi olarak geliştirdiğimiz bir uygulama olan Sidecache projesinden, geliştirme sürecinde edindiğimiz tecrübelerden ve bu projeye olan ihtiyaçtan bahsedeceğim.

Genel itibari ile anlatacaklarım aşağıdaki konu başlıkları etrafında olacaktır.

  • Neden böyle bir projeye ihtiyaç duyduk?
  • Bu proje ile neyi amaçladık?
  • Sidecar Pattern nedir?
  • Istio ile cache requestlerini yönlendirmeyi nasıl çözdük?
  • Cache backendi olarak ne kullandık?
  • Golang ile cache proxy geliştirmesini nasıl yaptık?
  • Geliştirme sonrası metrikler

Neden Bu Projeye İhtiyaç Duyduk?

Platform ekibi olarak geliştirdiğimiz yeni service discovery altyapısı ile microserviceler arası haberleşmede harici load balancerları aradan çıkarttık.

Servisler arası load balancerların aradan çıkmasının avantajları olduğu gibi kaybettiğimiz bir kabiliyetimiz de oldu, bu…


Image for post
Image for post

As a software developer I feel happy when I contribute to community. It is an opportunity to improve your development skills and learning new things. It is both educative and entertaining process. There are so little things that satisfies as much as an accepted pull request :)

Becoming an open source contributor is a dream for some developers. If you are a new developer or never made a contribution before and want to become a contributor, in this post I will give several suggestions for you.

Where To Start

Well, let’s assume that you found a project on Github and you want to…


Image for post
Image for post

In this post I will explain how to configure RBAC in kubernetes. We will configure RBAC both with kubectl and yaml definitions.

What is RBAC

In kubernetes there are several authorization mechanism like RBAC, ABAC.

With RBAC we can add constraints to access kubernetes resources. For example we can give permission to listing pods for specific namespace to a ServiceAccount and prevent it to delete any resource. We can do it for a specific namespace or cluster wide as well.

Key points of RBAC

There are 3 important concept in RBAC.

  • Subject : Users, groups or service accounts.
  • Resources : Kubernetes API objects which we will operate…


Image for post
Image for post

Selamlar, bu yazımda sizlere geliştirme yaparken referans aldığım kitaplardan bazılarını paylaşacağım.

Yazılım geliştiriciler olarak yaptığımız iş çok derin ve dalgalı bir okyanusta batmayacak gemiler oluşturmak diyebilirim. Bu geminin aynı zamanda çok hızlı gidebilmesi, zorlu hava şartlarına dayanabilmesi, fazlaca yükü kaldırabilmesi hatta yeri geldiğinde uçabilmesi ise uğraştığımız challangelar arasında :)

Bizler için bilginin kaynağı olarak bu zamana kadar geliştirilmiş kaynak kodlar, başkalarının tecrübeleri ve kitaplar bulunuyor.

Hazır hepimiz evlere kapanmış geliştirmelerimizi sürdürüyorken, trafikte harcadığımız zamanı yeni bilgiler öğrenerek değerlendirmemiz için güzel bir fırsat.

Kubernetes


Image for post
Image for post

Merhabalar bu yazımda sizlere docker client kullanarak golang uygulamalarımızda container ve image etkileşimlerini göstereceğim.

Geliştirdiğimiz uygulamaların infrastructural testlerini manuel efor harcamadan yapmak istediğimiz zaman, docker bu süreci otomatize etmemize olanak sağlıyor. Örneğin bir uygulamanın başarılı bir şekilde consul bağlantısı yapıp servis kaydını doğru oluşturabildiğini her seferinde manuel test etmek yerine bu süreci otomatize edebiliriz. Veya containerlar ile ilgili yaptığımız tekrarlayan işlemleri programatik hale getirebiliriz.

Aşağıda docker client kullanımı için örnek senaryoları ve kod implementasyon örneklerini paylaştım. Örneklerde error handling bulunmuyor. Production için kullanacaksanız kodunuzda hata durumlarına karşı aksiyon almayı unutmayın.

1 - Docker Client

Docker API ile etkileşime geçmek için öncelikle clientımızı oluşturalım.

2.1 - Image Build


Image for post
Image for post

Selamlar, bu yazımda sizlere twitter üzerinden takip ettiğim ve henüz keşfetmemiş olanlarınızın da takip etmeyi isteyebileceği kişileri listeleyeceğim.

Yazılım alanında güncel konu başlıklarını takip etmek, diğer yazılımcıların ilgi alanlarını keşfetmek ve çeşitli bilgileri edinmek için sosyal platformlardan farklı insanları takip ediyorum.

Twitterı neredeyse sadece bu kişilerin tweetlerini okumak için kullanıyorum desem yeridir. İçerisinde ilgi alanlarım olan golang, kubernetes, java, open souce, linux, cncf, software architecture, DDD gibi konular ve bunun yanında bazı eğlenceli twitter hesapları da bulunuyor.

Sizlerinde gerek kafa dağıtmak için bakıp gülebileceğiniz gerekse bilgilenmek amacıyla takip etmeyi isteyebileceğiniz hesapları burada listeleyeceğim.

Julia Evans

Kendisi takip listemde olan kişiler arasında çizimleriyle…


Image for post
Image for post
Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French.

Geliştirdiğimiz uygulamaların düşük kaynak kullanması hepimizin istediği bir şeydir. Peki sizlere uygulamanın memory kullanımını sadece structların içerdiği fieldların yerlerini değiştirerek azaltabileceğimizi söyleseydim?

  • Yukarıda verilen iki adet structın memoryde kapladığı alan nedir?
  • Programı çalıştırdığımızda ekrana basacağı değerler ne olur?
  • Acaba int32(4) + int16(2) + int16(2) = 8 byte diyebilir miyiz?

Evet diyebiliriz. Ve hayır, diyemeyiz.

Örnek olarak gösterdiğim iki structın memory üzerinde kapladıkları alan birbirinden farklıdır. İlk structın memory boyutu 12byte ikincisinin ise 8byte olacaktır.

Peki bu nasıl olabilir? Aynı gibi gözüken iki structtan bir tanesi neden daha fazla memory tüketiyor? Cevap memory alignment ve padding dediğimiz kavramlarda yatıyor.

Emre Savcı

Software Engineer @Trendyol & Software Development Enthusiast | Interested in Go&Java DDD, CQRS, Event Sourcing, Scalability. Open Source Contributor.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store