AWS Türkçe Blog

Güle güle Microsoft SQL Server, Merhaba Babelfish

Orijinal makale: Link (Sébastien Stormacq)

Müşterilerimizin çoğu, pahalı maliyetlerden ve külfetli lisans koşullarından kaçınmak için tescilli veritabanı satıcılarından uzaklaşmak istediklerini söylüyor. Ancak ticari ve eski veritabanlarından geçiş yapmak zaman alıcı ve yoğun kaynak gerektiren işler olabilir. Veritabanlarınızı taşırken, AWS Schema Conversion Tool ve AWS Database Migration Service‘i kullanarak veritabanı şemanızın ve verilerinizin geçişini otomatikleştirebilirsiniz. Ancak, veritabanıyla etkileşime giren uygulama kodunun yeniden yazılması da dahil olmak üzere, uygulamanın kendisini taşımak için her zaman yapılacak daha çok iş vardır. Motivasyon var, ancak maliyetler ve riskler genellikle sınırlayıcı faktörlerdir.

Bugün, Aurora PostgreSQL için Babelfish‘i kullanıma sunuyoruz. Babelfish, Amazon Aurora PostgreSQL-Compatible Edition’ın SQL Server bağlantı protokolünü (wire protocol) anlamasını sağlar. SQL Server uygulamalarınızı PostgreSQL’e daha ucuza, daha hızlı ve bu tür bir değişiklikle ilgili daha az riskle taşımanıza olanak tanır.

Uygulamanızı, geleneksel bir geçişin gerektireceği zamandan çok daha kısa bir sürede geçirebilirsiniz. Uygulamanızın bugün kullandığı mevcut sorguları ve sürücüleri kullanmaya devam edersiniz. Uygulamayı, Babelfish etkinleştirilmiş bir Amazon Aurora PostgreSQL veritabanına yönlendirmeniz yeterlidir. Babelfish, Amazon Aurora PostgreSQL’e SQL Server bağlantı protokolü Tabular Data Stream’i (TDS) anlama ve PostgreSQL’i SQL Server tarafından yaygın olarak kullanılan T-SQL komutlarını anlayacak şekilde genişletme yeteneği ekler. T-SQL desteği, SQL dili, statik imleçler (static cursors), veri türleri, tetikleyiciler, saklı yordamlar (stored procedures) ve fonksiyonlar gibi öğeleri içerir. Babelfish, uygulamada gereken değişiklik sayısını önemli ölçüde azaltarak veritabanı geçiş projeleriyle ilişkili riski azaltır. Babelfish’i benimserken, SQL Server kullanmanın lisanslama maliyetlerinden tasarruf edersiniz. Amazon Aurora, ticari veritabanlarının güvenliğini, kullanılabilirliğini ve güvenilirliğini 1/10 maliyetle sağlar.

SQL Server 30 yılı aşkın bir süredir gelişmiştir ve tüm işlevleri hemen desteklemeyi beklemiyoruz. Bunun yerine, en yaygın T-SQL komutlarına ve doğru yanıtı veya bir hata mesajını döndürmeye odaklandık. Örneğin, MONEY veri türü, SQL Server’da (dört ondalık hassasiyetle) ve PostgreSQL’de (iki ondalık hassasiyetle) farklı özelliklere sahiptir. Böyle küçük bir fark, yuvarlama hatalarına yol açabilir ve finansal raporlama gibi alt süreçler üzerinde önemli bir etkiye sahip olabilir. Bu durumda ve diğer birçok durumda Babelfish, SQL Server veri türlerinin ve T-SQL işlevselliğinin semantiğinin korunmasını sağlar: SQL Server uygulamalarının beklediği gibi davranan bir MONEY veri türü oluşturduk. Babelfish bağlantısı aracılığıyla bu veri türüyle bir tablo oluşturduğunuzda, bu uyumlu veri türünü ve bir SQL Server uygulamasının beklediği davranışları elde edersiniz.

Konsolu Kullanarak Babelfish Kümesi Oluşturun
Babelfish’in nasıl çalıştığını göstermek için önce konsola bağlanalım ve yeni bir Amazon Aurora PostgreSQL kümesi (cluster) oluşturalım. Prosedür, normal Amazon Aurora veritabanından farklı değildir. RDS başlatma sihirbazında önce PostgreSQL 13.4 veya daha yeni bir Aurora sürümü seçtiğimden emin oluyorum. Güncellenen konsolda, Babelfish ile uyumlu sürümleri seçmenize yardımcı olacak ek filtreler bulunur.

Ardından, sayfanın alt kısmında, “Turn on Babelfish” seçeneğini seçiyorum.

Monitörleme bölümünün altında, “Enable Enhanced monitoring”i (Gelişmiş Monitörlemeyi Etkinleştir) de kapattığımdan emin oluyorum. Bu seçenek, bu demo için uygun olmayan ek IAM izinleri ve hazırlığı gerektirir.

Birkaç dakika sonra kümem oluşturulur, iki örneği (instance) vardır, bir yazar (writer) ve bir okuyucu (reader).

CLI’yi Kullanarak Babelfish Kümesi Oluşturun
Alternatif olarak, bir küme oluşturmak için CLI’i kullanabilirim. İlk önce Babelfish’i etkinleştirmek için bir parametre grubu oluşturuyorum (konsol bunu otomatik olarak yapıyor):

aws rds create-db-cluster-parameter-group             \
    --db-cluster-parameter-group-name myapp-babelfish \
    --db-parameter-group-family aurora-postgresql13   \
    --description "babelfish APG 13"
aws rds modify-db-cluster-parameter-group             \
    --db-cluster-parameter-group-name myapp-babelfish \
    --parameters "ParameterName=rds.babelfish_status,ParameterValue=on,ApplyMethod=pending-reboot" \
Zsh

Sonra veritabanı kümesini oluşturuyorum (aşağıdaki komutu kullanırken “security group” kimliğini ve “subnet group” adını ayarlayın):

aws rds create-db-cluster \
    --db-cluster-identifier awsnewblog-cli-demo \
    --master-username postgres \  
    --master-user-password Passw0rd \
    --engine aurora-postgresql \
    --engine-version 13.4 \
    --vpc-security-group-ids sg-abcd1234 \
    --db-subnet-group-name default-vpc-1234abcd \
    --db-cluster-parameter-group-name myapp-babelfish
{
    "DBCluster": {
        "AllocatedStorage": 1,
        "AvailabilityZones": [
            "us-east-1c",
            "us-east-1d",
            "us-east-1a"
        ],
        "BackupRetentionPeriod": 1,
        "DBClusterIdentifier": "awsnewblog-cli-demo",
        "Status": "creating",
        ... <redacted for brevity> ...
    }
}
Zsh
Küme oluşturulduktan sonra, aşağıdaki kodu kullanarak bir örnek oluşturuyorum:
aws rds create-db-instance \
    --db-instance-identifier myapp-db1 \
    --db-instance-class db.r5.4xlarge \
    --db-subnet-group-name default-vpc-1234abcd \
    --db-cluster-identifier awsnewblog-cli-demo \
    --engine aurora-postgresql
{
    "DBInstance": {
        "DBInstanceIdentifier": "myapp-db1",
        "DBInstanceClass": "db.r5.4xlarge",
        "Engine": "aurora-postgresql",
        "DBInstanceStatus": "creating",
        ... <redacted for brevity> ...
Zsh
Babelfish Kümesine Bağlanın
Küme ve örnekler hazır olduğunda, veritabanının kendisini oluşturmak için yazar örneğine bağlanıyorum. SQL Server Management Studio (SSMS) veya sqlcmd gibi başka bir SQL istemcisi (client) kullanarak örneğe bağlanabilirim. Windows istemcisi Babelfish kümesine bağlanabilmelidir, RDS security group’un Windows ana bilgisayarından gelen bağlantıları yetkilendirmesini sağladım.

Windows üzerinde SSMS kullanarak araç çubuğundan New Query seçiyorum, Server name olarak veritabanı DNS adını giriyorum. SQL Server Authentication‘ı seçiyorum ve veritabanı Login ve Password bilgilerini giriyorum. Connect’e tıklıyorum.

Önemli: SSMS Object Explorer aracılığıyla bağlanmayın. New Query düğmesi aracılığıyla sorgu düzenleyicisini kullanarak bağlandığınızdan emin olun. Şu anda Babelfish, sorgu düzenleyiciyi destekler, ancak Object Explorer’ı desteklemez.

Bağlandıktan sonra, select @@version komutu ile sürümü kontrol ediyorum ve araç çubuğundaki yeşil Execute düğmesine tıklıyorum. Komut sonucunu ekranın alt kısmında okuyabiliyorum.

Son olarak create database demo komutu ile örnek (instance) üzerinde veritabanını oluşturuyorum.

Babelfish varsayılan olarak single-db modunda çalışır. Bu modu kullanarak, örnek başına en fazla bir kullanıcı veritabanına sahip olabilirsiniz. SQL Server ve PostgreSQL arasında şema adlarının yakın eşlenmesine izin verir. Alternatif olarak, küme oluşturma zamanında multi-db modunu açabilirsiniz. Bu, örnek başına birden çok kullanıcı veritabanı oluşturmanıza olanak tanır. PostgreSQL’de, kullanıcı veritabanları, önek olarak veritabanı adı ile birden çok şemaya eşlenir.

Bir Uygulama Çalıştırın
Bu demo amacıyla, bir şema oluşturmak ve onu verilerle doldurmak için SQL Server Tutorial‘larının bir parçası olarak SQLServerTutorial.net tarafından sağlanan bir veritabanı şeması kullanıyorum. Bu demoda kullandığım SQL betiği (script) ve uygulama C# kodu GitHub depomda mevcut. Meslektaşım Anuja‘ya bana bir C# demo uygulaması sağladığı için çok teşekkür ederim.

SQL Server Management Studio’da create_objects.sql betiğini açıyorum ve üst araç çubuğundaki yeşil execute simgesini seçiyorum. Bir onay mesajı, bana veritabanı şemasının oluşturulduğunu söylüyor.

Yeni oluşturulan tablolara veri yüklemek için load_data.sql betiği ile işlemi tekrarlıyorum. Veri yüklemenin çalışması birkaç dakika sürer.

Şimdi veritabanı yüklendi, bir SQL Server veritabanına erişmek için geliştirilen Anuja‘nın C# uygulamasını açalım. İki satır kod değiştiriyorum:

  • line 12: Daha önce oluşturduğum Babelfish kümesinin DNS adını yazıyorum. Kümemden bir “write” düğümünün (node) DNS adını kullandığımı unutmayın.
  • line 15: Veritabanı kümesini oluştururken girdiğim şifreyi yazıyorum.

Ve bu kadar! Bu uygulamada başka bir değişiklik gerekli değildir. SQL Server’ı sorgulamak ve onunla etkileşim kurmak için yazılan bu kod, Babelfish ile Aurora PostgreSQL’de “olduğu gibi” çalışıyor.

Açık Kaynak Şeffaflığı
PostgreSQL için Babelfish açık kaynak projesini oluşturmak için Babelfish’in arkasındaki teknolojiyi açık kaynak olarak kullanmaya karar verdik. İzin verilen Apache 2.0 ve PostgreSQL lisanslarını kullanır, yani Babelfish’i uygun gördüğünüz herhangi bir şekilde değiştirebilir, ince ayar yapabilir veya dağıtabilirsiniz. Zamanla, Babelfish’i GitHub’da tamamen açık geliştirme yapacak şekilde değiştiriyoruz, bu nedenle baştan şeffaflık var. Artık herhangi biri, AWS müşterisi olsa da olmasa da, SQL Server’ı geride bırakmak ve uygulamalarını hızlı, kolay ve uygun maliyetli bir şekilde açık kaynaklı PostgreSQL’e geçirmek için Babelfish’i kullanabilir. Babelfish’in PostgreSQL’i her zamankinden çok daha geniş bir müşteri ve geliştirici grubu için, özellikle de orijinal olarak SQL Server için yazılmış çok sayıda karmaşık uygulamaya sahip olanlar için erişilebilir kılacağına inanıyoruz.

Kullanılabilirlik
Aurora PostgreSQL için Babelfish, bugün herkese açık tüm AWS Bölgelerinde ek ücret olmadan kullanılabilir. Uygulama geçişinizi bugün başlatın.

Not: Babelfish isminin nereden geldiğini merak ediyorsanız cevabın 42 olduğunu unutmayın. (Ya da bu biraz daha uzun cevabı okuyabilirsiniz.)