Computer >> Máy Tính >  >> Lập trình >> Redis

Phát triển không máy chủ với AWS Lambda và Redis Enterprise Cloud

Trong bài đăng trên blog này, bạn sẽ tìm hiểu cách tích hợp AWS Lambda và Redis Enterprise Cloud. Sử dụng ứng dụng cơ sở dữ liệu phim mẫu, bạn sẽ khám phá cách xây dựng và triển khai hai hàm Lambda, một trong Node.js, một trong Python. Hai hàm Lambda này được sử dụng để tương tác với cơ sở dữ liệu Redis để chèn, cập nhật, xóa và truy vấn. Ứng dụng sử dụng API RediSearch cung cấp các chức năng tìm kiếm và truy vấn phong phú. Serverless, sử dụng AWS Lambda, phù hợp với xu hướng ngày càng tăng đối với các kiến ​​trúc microservice vì nó cho phép các nhà phát triển giảm phạm vi của một “dịch vụ” kinh doanh thành một dự án nhỏ có thể được thực hiện bằng ngôn ngữ lập trình mà họ lựa chọn. Để tìm hiểu thêm, hãy xem video bên dưới và đọc để biết tổng quan nhanh về AWS Lambda và tìm hiểu sâu hơn về cách tạo ứng dụng bằng Redis Enterprise Cloud và Lambda:

Xem nhanh AWS Lambda

Nếu bạn chưa quen với AWS Lambda — thời gian chạy tính toán không máy chủ của công ty, còn được gọi là Chức năng như một Dịch vụ (FaaS) — thì có những điều cơ bản bạn cần biết. (Các chuyên gia Lambda có thể chuyển sang phần tiếp theo.) AWS Lambda cho phép các ứng dụng chạy một chức năng theo yêu cầu để đáp ứng với một sự kiện cụ thể, đây là một cách tốt để xây dựng các ứng dụng kiến ​​trúc hướng sự kiện (EDA). Các hàm AWS Lambda, được AWS quản lý hoàn toàn, có thể được tạo bằng nhiều ngôn ngữ lập trình khác nhau. Có lẽ điểm hay nhất của AWS Lambda là các nhà phát triển thường không cần phải hiểu đầy đủ về vòng đời của ứng dụng để sử dụng nó.

AWS Lambda có thể được gọi bằng một số phương pháp khác nhau:trực tiếp từ Bảng điều khiển AWS, sử dụng các sự kiện từ các Dịch vụ AWS khác như SNS, SQS hoặc Kinesis hoặc thậm chí từ các sự kiện AWS Console, CloudWatch hoặc S3. Trong ứng dụng cơ sở dữ liệu phim mẫu của chúng tôi, các hàm Lambda sẽ được gọi bằng điểm cuối HTTP REST, điều này được thực hiện bằng AWS API Gateway. (Bạn có thể tìm thêm về lệnh gọi hàm AWS Lambda trong tài liệu.)

Quy trình thực thi AWS Lambda HTTP

Cụ thể, các yêu cầu qua HTTP được chuyển đến công cụ quản lý Cổng API của AWS, công cụ này phân tích cú pháp phần nội dung, tiêu đề và các tham số, sau đó kích hoạt hàm Lambda của chúng tôi với tải trọng này:

Phát triển không máy chủ với AWS Lambda và Redis Enterprise Cloud

Là một nhà phát triển, bạn chỉ cần viết mã để hiển thị điểm cuối REST và định cấu hình triển khai để hiển thị nó bên trong Cổng API AWS. (Chúng ta sẽ thảo luận thêm về vấn đề này trong phần tiếp theo bao gồm ứng dụng cơ sở dữ liệu phim mẫu của chúng tôi.)

Quản lý trạng thái và dữ liệu trong các ứng dụng không có máy chủ

AWS Lambda là một môi trường không trạng thái. Tuy nhiên, trong nhiều ứng dụng, bạn vẫn muốn chia sẻ trạng thái giữa các dịch vụ hoặc cuộc gọi và Redis có thể trợ giúp. Để quản lý trạng thái đơn giản, các nhà phát triển AWS thường sử dụng ElastiCache, nhưng nhiều ứng dụng yêu cầu nhiều hơn quản lý trạng thái, chúng còn cần sự bền bỉ, dữ liệu phong phú, hiệu suất cao và mô hình truy vấn. Redis Enterprise Cloud cung cấp dịch vụ được quản lý hoàn toàn trên AWS (Google Cloud và Microsoft Azure cũng được hỗ trợ).

Ứng dụng mẫu cơ sở dữ liệu phim của Redis

Bây giờ, chúng tôi đã sẵn sàng xem xét ứng dụng cơ sở dữ liệu phim mẫu của mình để xem các bước quan trọng để tạo ứng dụng bằng Redis Enterprise Cloud và AWS Lambda.

Ứng dụng sử dụng tập dữ liệu đã được ghi lại trong hướng dẫn Bắt đầu RediSearch, bao gồm một danh mục phim, được làm bằng Redis Hashes. Như được hiển thị trong biểu đồ bên dưới, giao diện người dùng được xây dựng bằng cách sử dụng Vue.js, gọi các điểm cuối REST đến:

  • Liệt kê, sắp xếp và lọc phim
  • Chỉnh sửa phim và thêm / xóa nhận xét
  • Tìm kiếm phim bằng tìm kiếm toàn văn và tìm kiếm theo từng khía cạnh
Phát triển không máy chủ với AWS Lambda và Redis Enterprise Cloud Phát triển không máy chủ với AWS Lambda và Redis Enterprise Cloud

Như đã đề cập ở trên, ứng dụng sử dụng AWS API Gateway, AWS Lambda và Redis Enterprise Cloud cho kho dữ liệu. Ngoài ra, dịch vụ Python sử dụng Dịch vụ quản lý khóa AWS để lưu trữ và mã hóa mật khẩu cơ sở dữ liệu Redis.

Cài đặt và chạy ứng dụng trình diễn

Để bắt đầu, bạn sẽ cần một số điều kiện tiên quyết:

  • Thiết lập tài khoản AWS, bằng chứng xác thực, với CLI đã được Cài đặt
  • Cơ sở dữ liệu và tài khoản Redis Enterprise Cloud, với mô-đun RediSearch được bật
  • Git
  • Node.js
  • Python
  • Giao diện dòng lệnh Redis (CLI)

Sau khi bạn đã hoàn thành mọi thứ, hãy xem qua quá trình cài đặt và chạy ứng dụng mẫu.

Bước 1:Nhận thông tin cơ sở dữ liệu Redis Enterprise Cloud

Nếu bạn chưa tạo cơ sở dữ liệu trên Redis Enterprise Cloud, vui lòng sử dụng thông tin trong hướng dẫn Bắt đầu với Mô-đun Redis của chúng tôi.

Khi bạn được kết nối với Redis Enterprise Cloud, bạn có thể tìm thấy thông tin kết nối cơ sở dữ liệu trong bảng điều khiển web; hãy chắc chắn rằng bạn thêm mô-đun “RediSearch 2” vào cơ sở dữ liệu.

Phát triển không máy chủ với AWS Lambda và Redis Enterprise Cloud

Bạn sẽ cần các thuộc tính sau để kết nối các hàm Lambda với cơ sở dữ liệu Redis của mình:

  • REDIS_HOST:redis-18541.xxx.xxxx.xxx.cloud.redis.com
  • REDIS_PORT:18541
  • REDIS_PASSWORD:

Bước 2:Nhận dự án từ GitHub

Sao chép kho lưu trữ vào môi trường cục bộ của bạn và di chuyển nó vào thư mục dự án

> git clone https://github.com/redis-developer/aws-redis-cloud-demo.git

> cd aws-redis-cloud-demo

Cấu trúc thư mục dự án được hiển thị ở đây:

aws-redis-cloud-demo
├── README.md
├── front-end                   => Vue.js project
│   ├── .env.development        => to set the Lambda URLs in dev mode
│   ├── .env.production         => to set the Lambda URLs in production mode    
│   ├── ...
│   └── vue.config.js
│   └── ...
├── movie-comments-microservice => The Python, comments service
│   ├── .chalice
│   │   └── config.json         => Lambda & Service configuration  
│   ├── app.py
│   ├── chalicelib              => Contains application code and lib
│   │   └── ….
│   ├── readme.md
│   └── requirements.txt
└── movies-list-microservice    => The Node.js, movie service
    ├── import_movies.redis     => Dataset file
    ├── ...
    ├── serverless.yml          => Lambda & Service configuration
    ├── src
    │   └── ...
    └── ...

Bước 3:Nhập tập dữ liệu phim-cơ sở dữ liệu vào ứng dụng của bạn

Tệp aws-redis-cloud-demo / movies-list-microservice / import_movies.redis chứa tất cả các lệnh Redis để chèn phim vào cơ sở dữ liệu. Các lệnh được sử dụng là:

  • HSET cho mỗi phim
  • FT.CREATE để tạo chỉ mục Tìm kiếm lại.

Để nhập tập dữ liệu, hãy mở một thiết bị đầu cuối và chạy lệnh sau:

> export REDISCLI_AUTH=<YOUR_DB_PASSWORD>
> redis-cli -h redis-18541.xxx.xxxx.xxx.cloud.redis.com \
        -p 18541 < movies-list-microservice/import_movies.redis

Bước 4:Định cấu hình ứng dụng để sử dụng phiên bản Redis Enterprise Cloud của bạn

Trước khi thử nghiệm ứng dụng, bạn phải định cấu hình các dịch vụ Node.js và Python với phiên bản cơ sở dữ liệu Redis Enterprise Cloud của mình. Mở các tệp này:

  • ./movies-list-microservice/serverless.yml
  • ./movie-comments-microservice/.chalice/config.json

Sau đó đặt máy chủ, cổng và mật khẩu của Redis:( REDIS_HOST, REDIS_PORT, REDIS_PASSWORD )

Bước 5:Xây dựng và chạy microservice phim (Node.js)

Làm theo các bước được liệt kê ở đây để xây dựng và chạy dự án. (Bạn cũng có thể tìm thấy tất cả thông tin trong tệp Readme của dự án.)

  1. Cài đặt khung công tác không máy chủ
> npm install -g serverless

2. Đi tới thư mục phim-list-microservice

> cd movies-list-microservice

3. Cài đặt phần phụ thuộc

> npm install

4. Chạy hàm Lambda cục bộ

> npm start

5. Kiểm tra dịch vụ bằng cách mở cuộc gọi trình duyệt tới dịch vụ REST: https:// localhost:3000 / api / movies / 1

6. Triển khai dịch vụ tới AWS, bằng cách chạy lệnh sau để triển khai chức năng cho môi trường AWS của bạn:

> serverless deploy
................................
Serverless: Stack update finished...
Service Information
service: movies-list-microservice
stage: api
region: us-east-1
stack: movies-list-microservice-api
resources: 33
api keys:
  None
endpoints:
  GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/search
  GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/group_by/{field}
  GET - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/{id}
  POST - https://<xxx>.execute-api.<reg>.amazonaws.com/api/movies/{id}
functions:
  listMovies: movies-list-microservice-api-listMovies
  searchMovies: movies-list-microservice-api-searchMovies
  getMovie: movies-list-microservice-api-getMovie
  saveMovie: movies-list-microservice-api-saveMovie
layers:
  None

7. Kiểm tra API bằng cách trỏ trình duyệt của bạn tới https:// .execute-api. .amazonaws.com / api / movies / 1

Lưu ý:nếu bạn gặp lỗi, hãy kiểm tra các chức năng đăng nhập AWS CloudWatch để xem điều gì đã xảy ra.

Cái nhìn sâu hơn về mã:

  • Tệp package.json chứa các phần phụ thuộc được sử dụng bởi dự án Node.js này. Dự án này khá đơn giản và sử dụng các phụ thuộc sau:
    • redis redis-redisearch thư viện được sử dụng để kết nối với Redis và các lệnh RediSearch được tiếp xúc.
    • aws-lambda thư viện được sử dụng để gọi tất cả các hàm AWS Lambda nhằm triển khai ứng dụng nút cho môi trường AWS của bạn.
  • serverless.yml tệp xác định các hàm không máy chủ ánh xạ các hành động HTTP tới hàm JavaScript sẽ được gọi (được định nghĩa trong handler.ts ), và chứa các biến môi trường (chủ yếu là chuỗi kết nối Redis trong phần trình diễn này).
  • handler.ts tệp là lớp nắm bắt sự kiện đến từ AWS Gateway và gọi thư viện ứng dụng SearchService , đang thực hiện tất cả các lệnh gọi đến cơ sở dữ liệu Redis.
  • Tệp SearchService.ts chứa tất cả các phương thức để tương tác với cơ sở dữ liệu Redis và sử dụng API Redis và RediSearch: client.ft_search () , client.aggregate () , client.hmset () , và nhiều hơn nữa. (Bạn có thể tìm hiểu thêm về các lệnh Redis và RediSearch tại Đại học Redis và hướng dẫn Bắt đầu với RediSearch 2.0 trên GitHub.

Bước 6:Xây dựng và chạy microservice nhận xét (Python)

Dưới đây là các bước để xây dựng và chạy dự án. (Bạn cũng có thể tìm thấy tất cả thông tin trong tệp Readme của dự án.)

  1. Chuyển sang dự án Python và tạo môi trường ảo:
> cd movie-comments-microservice

> python3 -m venv chalice-env

> source chalice-env/bin/activate

2. Cài đặt các phụ thuộc:

> pip install -r requirements.txt

3. Thiết lập môi trường AWS, chạy lệnh sau và định cấu hình ID và Bí mật của bạn:

> aws configure

AWS Access Key ID [None]: ****************ABCD
AWS Secret Access Key [None]: ****************abCd
Default region name [None]: us-west-2
Default output format [None]:

4. Triển khai dịch vụ tới AWS, bằng cách chạy lệnh sau để triển khai chức năng cho môi trường AWS của bạn:

> chalice deploy

Reusing existing deployment package.
Updating policy for IAM role: movie-comments-microservice-dev
Creating lambda function: movie-comments-microservice-dev
Creating Rest API
Resources deployed:
  - Lambda ARN: arn:aws:lambda:us-east-1:11111111111:function:movie-comments-microservice-dev
  - Rest API URL: https://XXXXXXX.execute-api.us-east-1.amazonaws.com/api/

Cái nhìn sâu hơn về mã:

  • Tệp tests.txt chứa các phần phụ thuộc được sử dụng bởi dự án Python này. Dự án này khá đơn giản và sử dụng các phụ thuộc sau:
    • Chalice là khung AWS được sử dụng để tạo các ứng dụng không máy chủ bằng Python
    • redis redisearch truy cập Redis và sử dụng API RediSearch
  • config.json tệp xác định ứng dụng không máy chủ và được sử dụng để xác định các biến môi trường — trong ứng dụng này, thông tin kết nối cơ sở dữ liệu Redis.
  • app.py tệp là điểm nhập ứng dụng xác định tất cả các điểm cuối REST sử dụng các tuyến khác nhau. Ứng dụng nhập các phần phụ thuộc khác nhau, đặc biệt là CommentService được sử dụng để tương tác với Redis. Khi bạn muốn sử dụng nhiều tệp, bạn phải đặt các tệp vào chalicelib thư mục.
  • Tệp comment_service.py chứa tất cả các tương tác với Redis để tạo, truy vấn và xóa nhận xét. Một điểm thú vị cho tính năng bình luận là search () phương pháp. Phương thức này được sử dụng để truy xuất các nhận xét cho một bộ phim được sắp xếp theo ngày tạo bằng cách sử dụng search_client.search () cuộc gọi.

Theo tùy chọn, bạn có thể lưu trữ mật khẩu cơ sở dữ liệu Redis trong Dịch vụ quản lý khóa AWS . Bạn có thể tìm thấy các bước cấu hình trong dự án tài liệu .

Bước 7:Chạy ứng dụng giao diện người dùng

  1. Đi tới thư mục giao diện người dùng và cài đặt các phần phụ thuộc:
> cd front-end

> npm install

2. Chỉnh sửa .env.development tệp để đặt URL của phim và dịch vụ bình luận:

VUE_APP_MOVIES_SERVICE=https://<xxx>.execute-api.<reg>.amazonaws.com/api
VUE_APP_COMMENTS_SERVICE=https://<xxx>..execute-api.<reg>.amazonaws.com/api

3. Chạy ứng dụng:

> npm run serve

4. Mở trình duyệt của bạn và truy cập https:// localhost:8084

Giờ đây, bạn có thể điều hướng trong ứng dụng, cập nhật và tìm kiếm phim cũng như thêm / xóa nhận xét.

Theo tùy chọn, bạn có thể sử dụng S3 và CloudFront để triển khai ứng dụng Vue trong môi trường AWS của bạn và phân phát công khai cho người dùng của bạn. Điều này được giải thích trong dự án tài liệu .

Kết luận

Làm việc với AWS Lambda và Redis Enterprise Cloud giúp đơn giản hóa việc triển khai các dịch vụ của bạn. Sử dụng Redis Enterprise Cloud với RediSearch, bạn có thể dễ dàng truy vấn dữ liệu Redis bằng cách sử dụng các giá trị, cho phép bạn sử dụng Redis làm cơ sở dữ liệu chính cho các dịch vụ của mình.

Redis Enterprise Cloud tương thích với Redis, cho phép bạn dễ dàng di chuyển các triển khai Redis hiện có của mình, cả OSS và các dịch vụ được quản lý. Bạn chỉ cần thay đổi các tham số kết nối (chẳng hạn như điểm cuối cơ sở dữ liệu). Có nhiều cách để thực hiện di chuyển trực tiếp, bao gồm:

  • Triển khai xanh lam-xanh lá cây
  • Đồng bộ hóa Amazon ElastiCache và Redis Enterprise Cloud bằng cách sử dụng Active Passive Geo-Distribution
  • Sử dụng công cụ RIOT nguồn mở của chúng tôi để di chuyển dữ liệu của bạn

Ngoài RediSearch, Redis Enterprise Cloud cho phép bạn sử dụng các mô hình dữ liệu hứa hẹn khác như biểu đồ, JSON, chuỗi thời gian và bộ lọc Bloom, đồng thời cung cấp nhiều tính năng cơ sở dữ liệu khác quan trọng trong môi trường sản xuất, bao gồm tính khả dụng cao, khả năng mở rộng, tính bền bỉ, bảo mật và phân phối địa lý Hoạt động-Hoạt động.

Muốn tìm hiểu thêm? Kiểm tra trang chủ AWS re:Invent của chúng tôi và đọc các hướng dẫn và bài đăng trên blog này:

  • Bắt đầu với Mô-đun Redis trên AWS
  • 6 Tính năng Chính cần Cân nhắc khi Chọn Nhà cung cấp DBaaS
  • Cách Redis Enterprise Cloud đáp ứng nhu cầu của các khách hàng doanh nghiệp đang trưởng thành trên AWS