Рубрики
Без рубрики

Улучшение производительности приложений с Amazon Elasticache – #Cloudguruchallenge

Это моя первая #cloudguruchallenge. Я принял задачу, чтобы узнать больше о уластике и … Помечено Python, RDS, террафом, эластике.

Это моя первая #cloudguruchallenge. Я принял задачу, чтобы узнать больше о уластике и питоне. Итак, давайте воспользуемся этим!

Что такое кэширование?

Кэширование – это инструмент для хранения и доступа к данным очень быстро. С кэшированием у вас есть возможность смягчить непредсказуемые нагрузочные нагрузки, масштабные источники данных, снижению затрат на сетевые и способствуют наличию наличия, продолжая служить данным в случае сбоев.

Redis – это кэш и хранилище структуры данных с открытым исходным кодом, и с операционной точки зрения, Redis может быть сложным для развертывания монитора и масштабирования самостоятельно. Приходит, Amazon Elasticache для Redis. Amazon Eleasicache – это управляемая услуга кэширования, совместимая с помощью Redis, так и MeMCached. Он предлагает полностью управляемую платформу, которая позволяет легко развертывать, управлять и масштабировать высокую производительность распределенного кластера хранения данных в памяти.

Какой вызов?

Применение было сделано намеренно медленно, поэтому для улучшения производительности приложений Цель состоит в том, чтобы реализовать кластер Redis, используя упругую упругу Amazon, чтобы кэшировать запросы базы данных в приложении Python. Вы можете найти более подробную информацию о Challenge здесь.

Подход и выводы

Прежде чем я начал вызов, я решил сделать две руки на лаборатории, размещенные на облачном гуру. Один использовал экземпляр PostgreSQL RDS и Redis, а другой – это таблица DynamoDB, используя Memcached Cluster и функции лямбда.

Имея обоими ручными развертываниями, я установил, чтобы развернуть этот полностью использование террафора.

Я на некоторое время учусь и хранил пароли «raphaway» в простом тексте моего REPOS GitHUB, когда мне нужно получить доступ к базе данных. Но я понимаю, что это не лучшая практика в целях безопасности, поэтому я подумал сейчас, было хорошее время, попробуйте управлять секретами в террафоре, поэтому мои пароли не выставлены.

Управляющие секретные переменные

Во-первых, государство террафора должно быть безопасным. Независимо от того, какую технику вы используете для управления своими секретами, если ваша ошибка не зашифрована, секреты все еще будут в конечном итоге в Terraform.tfstate В простом тексте! Имея это в виду, я установил S3 как мою бэкэнд и зашифровал его. Ключ – путь к тому, где мы хотим хранить файл состояния.

resource "aws_s3_bucket" "terraform_state" {
  bucket = "terraform-state-acgappperf"
  versioning {
    enabled = true
  }

  server_side_encryption_configuration {
    rule {
      apply_server_side_encryption_by_default {
        sse_algorithm = "AES256"
      }
    }
  }
}

terraform {
  backend "s3" {
    bucket  = "terraform-state-acgappperf"
    region  = "us-east-1"
    key     = "global/s3/terraform.tfstate"
    encrypt = true
  }
}

Я решил использовать переменные среды. Чтобы использовать эту технику, вы должны объявить переменные для секретов, которые вы хотите пройти, настройка подавляет значения.

variable "db_username" {
  description = "The username for the DB master user"
  type        = string
  sensitive   = true
}

  variable "db_password" {
  description = "The password for the DB master user"
  type        = string
  sensitive   = true
}

Далее я передаю переменные на ресурсы террафора, которые нуждаются в этих секретах

# Set secrets via environment variables
export TF_VAR_username=(the username)
export TF_VAR_password=(the password)

#When you run Terraform, it'll pick up the secrets automatically

terraform apply

Я также создал скрипт оболочки данных пользователей для установки необходимых зависимостей, клонируйте репо и настроить базу данных .ini Я использовал Шаблон \ _file Функция и Продавец "Файл" Блок, чтобы пройти через переменные, чтобы настроить Postgres RDS.

data "template_file" "init" {
  template = file("./user-data.sh.tpl")

  vars = {
    DBUSER    = var.db_username
    DBPASS    = var.db_password
    DBNAME    = aws_db_instance.acg-db.name
    DBHOST    = aws_db_instance.acg-db.address
    REDISHOST = aws_elasticache_cluster.acg-redis.cache_nodes[0].address
  }
}

У меня были некоторые проблемы с подключением к базе данных изначально и должны были редактировать мои группы безопасности. Как только это было отсортировано, все было, пришло время проверить время загрузки, которые составляли около 5 секунд.

Настройка приложения для использования Redis

Редактирование кода Python для использования Redis было сложнее, чем я подумал, что это будет. В основном из-за ошибок вдавливания, и я будучи новым в Python. Чтобы помочь, я работал в VS-коде вместо редактора VI из командной строки.

Обновленный код:

def fetch(sql):
    ttl = 10 # Time to live in seconds
    try:
       params = config(section='redis')
       cache = redis.Redis.from_url(params['url'])
       result = cache.get(sql)

       if result:
         print('Redis result')
         return result
       else:
         # connect to database listed in database.ini
         conn = connect()
         cur = conn.cursor()
         cur.execute(sql)
         # fetch one row
         result = cur.fetchone()
         print('Closing connection to database...')
         cur.close() 
         conn.close()

         # cache result
         cache.setex(sql, ttl, ''.join(result))
         return result

Теперь время загрузки составляет миллисекунды

Последние мысли

В целом этот вызов был действительно проблемой, в следующий раз я буду смотреть на разные способы управления секретами и использование модулей, поэтому мне не нужно все писать, но приятно впервые развернуть кластер упругости на террафоре. Я также наслаждался работать с Python. Вы можете найти мой Github Repo здесь Отказ

Оригинал: “https://dev.to/chauntelkellar/improving-application-performance-with-amazon-elasticache-cloudguruchallenge-lnl”