Mimari'ye Genel Bakış (Architectural Overview)
Bu bölümde platformu oluşturan bileşenlerin yerleşimleri, birbirleri ile etkileşimleri ve içeriklerini kapsayacak şekilde Apinizer'in mimari yapısı aktarılmaktadır.
Apinizer Platformunun Modülleri ve Modüllerin Bileşenleri
Aşağıdaki görselde Apinizer Platformu içerisinde yer alan modüllerin etkileşimi gösterilmektedir:
Bu modüllere ait alt bileşenler aşağıdaki görselde verilmiştir.
APINIZER MANAGER
Apinizer'de ön tanımlı ayarlarda bir tane Manager modülü bulunur. Manager modülü esasen konfigürasyon amaçlı çalışıyor gibi gözükse de üzerinde çalıştırdığı görevler sistemin önemli bir bileşeni olmasını sağlar.
Web API Manager
Ayarların/Tanımlamaların bir Web tarayıcı üzerinden form tabanlı arayüzler aracılığı ile yapılabilmesini, bu ayarların diğer bileşenlere gönderilebilmesini sağlar.
Test Console
Dahili ya da harici API’lerin test edilebilmesi için geliştirme ortamını terk etmeden ve başka bir yazılıma ihtiyaç duymadan kullanılabilecek test aracıdır.
Scheduled Jobs
Zamanlanmış görevlerin tetiklenmesini sağlar.
Analytics
Tutulan log kayıtlarındaki analitik verilerin görselleştirilmesini ve sorgulanabilmesini sağlar.
Monitoring
API Proxy'lerin çalışıp çalışmadığını kontrol eder, çalışmadığını tespit ederse alarm oluşturur.
Anomaly Detection
API Proxy'lerin çalışmasında anormal bir durum olup olmadığını kontrol eder, anormal durum tespit ederse alarm oluşturur.
Alarms & Actions
Monitoring veya Anomaly Detection ile oluşan alarmların eyleme dönüştürülmesi sağlar. Örneğin ilgili kişilere mail ile alarm verisini gönderir.
Management API
Uygulama üzerinden yapılabilecek ayarların API'ler ile yapılmasını sağlar.
APINIZER WORKER
Worker modülü Apinizer'in en önemli bileşenidir. Her Worker bir Ortam'a (Environment) ait olup, ayarları çalıştığı Ortam'a göre değişir. Apinizer'de birden fazla Ortam ve her bir Ortam'da da birden fazla Worker olabilir.
Proxy Handler
İstemcilerden gelen isteklerin karşılandığı noktadır. Aynı zamanda Politika Uygulama Noktası (Policy Enforcement Point) olarak görev yapar. Gelen isteği tanımlanmış politikalara uygun şekilde işleyerek ilgili Backend API/Servise yönlendirir. Yönlendirme yaparken yük dengeleyici olarak çalışabilir. TLS/SSL sonlandırması burada yapılır. Backend API/Servisten dönen yanıtı da yine tanımlı politikalara uygun olarak işleyerek istemciye gönderir. Bu esnada yapılan tüm işlemleri kayıt altına alarak asenkron olarak log sunucusuna gönderir. Hassas verilerin kayıt altına alınması işini, belirlenen kurallara (silme, maskeleme, şifreleme) uygun şekilde ele alır.
Management API
Apinizer Manager modülündeki konfigürasyonların Worker'a yüklenmesi (deploy), yüklü olanların yeniden yüklenerek güncellenmesini (redeploy) veya kaldırılmasını (undeploy) sağlar. Apinizer Manager modülündeki Management API ile karıştırılmamalıdır. Worker'a yüklenecek tüm konfigürasyonlar Management API üzerinden geçerek gelir.
Local Cache
Management API üzerinden yüklenen tüm veriler Local Cache içinde tutulur. Worker, açılış ya da yeniden başlatma sırasında kendisine ait verileri mongoDB veri tabanından çekerek Local Cache'e koyar.
Db-2-Api
Tanımlanan bir veri tabanına bağlantı kurarak tanımlı SQL'lerin işletilmesini ya da Stored Procedure'lerin çalıştırılmasını sağlar. Db-2-Api'ye erişim "Proxy Handler" üzerinden yapılır.
Script2API
Tanımlı JavaScript veya Groovy Script'lerin çalıştırılmasını sağlar. Script2API'ye erişim "Proxy Handler" üzerinden yapılır.
MockAPI
Tanımlanan koşullara göre önceden hazırlanmış yanıtların döndürülmesini sağlar. MockAPI'ye erişim "Proxy Handler" üzerinden yapılır.
Token Provider API
Apinizer üzerinde eğer OAuth2 veya JWT Yetkilendirme Politikaları kullanılmak istenirse, Token üretimi için Worker üzerinde çalışan "Token Provider API" kullanılır. İstemci, kimlik bilgilerini "Token Provider API"ye gönderir, eğer bilgileri doğru ise Token üretilerek istemciye dönülür. Token alma isteği ile ilgili kayıtlar Log sunucunda kayıt altına alınır. Böylece kime, ne zaman, hangi Token verilmiş bilgisi saklanmış olur. JWT Token'larının yapısı gereği veri tabanında tutulmasına gerek yoktur, doğrulama için sertifikası kontrol edilir. OAuth2 tipindeki Token'lar ise ayrıca mongoDB veri tabanına kaydedilir. Ayrıca, Proxy Handler'daki Token kontrolünün performansını arttırmak için "Apinizer Cache"e de eklenir.
APINIZER CACHE
Apinizer, dağıtılmış önbellekte saklayarak hem bileşenlerinin paylaştığı verileri yönetir, hem de performans iyileştirmesi sağlar.
Dağıtılmış Önbellek (Distributed Cache)
Apinizer distributed cache gerçekleştirimi olarak, Kubernetes üzerinde kolayca genişletilerek ölçeklenebilen, dinamik konfigürasyon ile yönetilebilen ve başarılı performans gösteren Hazelcast teknolojisini kullanmaktır. Distributed Cache üzerinde Quota, Throttling, OAuth2 Token, Yük Dengeleme Nesnesi.. vb nesneler tutulmakta ve işlenmektedir.
Cache API
Cache üzerinden yapılacak olan tüm işlemler için Cache API kullanılır.
APINIZER INTEGRATION
API Integrator ile geliştiriciler, çeşitli kaynaklara yayılan karmaşık işleri otomatikleştirmek için görev zincirleri oluşturup bunları isteğe göre zamanlayıcılar aracılığıyla ya da API oluşturarak kullanıma sunabilirler. Böylece örneğin, her gün aynı saatte merkez bankasının kurlarının çekilerek belirtilen yerel veri tabanına istenen formatta aktarılması, iş tamamlandıktan sonra başka bir veri tabanına log düşecek bir Web Servisin çağrılması ve belirtilen kişilere e-posta gönderilerek haber verilmesi gibi bir iş akışı için özel kod yazmaya gerek kalmaz.
Konnektörler (Connectors)
Farklı kaynaklara bağlanabilmeyi, bu kaynaklara veri gönderebilmeyi veya bu kaynaklardan veri çekebilmeyi sağlar. Örneğin; Mail, API Call, PagerDuty, Opsgenie, Oracle DB, Postgres, IBM DB2.. vb
Görev Akışı (Task Flow)
Konnektörler kullanılarak iş tanımları yapılabilmesini sağlar. İstenirse tanımlanan görevler zincir haline getirilebilir ve bir görevin çıktısını diğer görev girdi olarak kullanılabilir.
Zamanlayıcı (Scheduler)
Tanımlanan görev veya görev zincirlerinin belirli bir zamanda otomatik olarak çalışmasını sağlar.
Ortam (Environment)
Apinizer Platformu’nda bir Ortam (Environment), API Proxy'lerin yüklenerek erişime açıldığı, kendisine ait bir erişim adresi ve ayarları olan, diğer Ortam'lardan yalıtılmış olarak ve kendisine ayrılmış CPU ve RAM gibi kaynakları kullanarak çalışan sanal sunucu alanlarıdır.
İki nedenle birden çok Ortam kullanılması tavsiye edilmektedir:
- Geliştirme (Development), Test, Üretim (Production) gibi farklı amaca yönelik Ortamlar oluşturarak API yaşam döngüsünü yönetmek.
- Çok kaynak tüketen API'leri gruplandırarak izole çalışmalarını sağlamak, böylece diğer API'lerin performansının kötü etkilenmesine engel olmak.
API Proxy’ler, bir veya birden fazla ortam üzerine yüklenebilir (detaylar için Revizyon, Yükleme, Yeniden Yükleme, Kaldırma).
Kurulumu yapılan ortam ya da ortamların hepsi bir küme (cluster) içinde yer alır ve Apinizer Platformu’nun kurulu olduğu sunucular üzerinde çalışır.
Ortam Bileşenleri
Apinizer Platformu ile oluşturulan tüm ortamlar Kubernetes altyapısında çalışmaktadır. Bir ortamda aşağıdaki bileşenler bulunur.
Ortam, Kubernetes bağlamında "Namespace" ifadesine karşılık gelir.
Kubernetes kümeleri büyük miktarda bağlantısız iş yüklerini eş zamanlı olarak yönetebilir. Kubernetes, küme içindeki nesnelerin karmaşasını gidermek için Namespace adı verilen bir kavramdan faydalanır.
Namespace’ler nesnelerin birbirleriyle gruplanmasına ve bu grupların bir birim olarak filtrelenip kontrol edilmesine olanak sağlar. Böylece özelleştirilmiş erişim kontrol politikalarını uygulamak ya da bir test ortamı için tüm birimleri birbirlerinden ayırmak için gruplamalar yapmak gibi amaçlarla kullanılabilir.
Aşağıdaki görselde Apinizer'ın Kubernetes üzerindeki yerleşimi gösterilmektedir: