0
0
Lập trình
Hưng Nguyễn Xuân 1
Hưng Nguyễn Xuân 1xuanhungptithcm

Tái lập chỉ mục toàn bộ trong AWS OpenSearch: Khi nào, Tại sao, và Cách thực hiện?

Đăng vào 6 tháng trước

• 9 phút đọc

Giới thiệu

Trong bài viết này, chúng ta sẽ tìm hiểu về dịch vụ AWS OpenSearch, lịch sử hình thành của nó và đi sâu vào thách thức của việc tái lập chỉ mục tài liệu. Việc tái lập chỉ mục là một yếu tố quan trọng trong việc duy trì và tối ưu hóa cơ sở hạ tầng tìm kiếm của bạn. Hãy cùng tìm hiểu khi nào, tại sao và cách thực hiện điều này một cách hiệu quả.

Lịch sử ngắn gọn về OpenSearch: Sự phân nhánh của Elasticsearch

Elasticsearch là một công cụ tìm kiếm mã nguồn mở được phát triển bởi Elastic NV. Nó trở nên rất phổ biến nhờ khả năng mở rộng, tính phân tán và khả năng tìm kiếm mạnh mẽ. Tuy nhiên, vào năm 2021, Elastic NV đã thay đổi mô hình cấp phép của Elasticsearch từ Apache 2.0 sang Giấy phép công cộng phía máy chủ (SSPL). Bước đi này nhằm ngăn chặn các nhà cung cấp đám mây cung cấp Elasticsearch như một dịch vụ được quản lý mà không đóng góp trở lại cho cộng đồng mã nguồn mở.

Để đáp lại, AWS đã quyết định phân nhánh phiên bản Elasticsearch cuối cùng có giấy phép Apache 2.0 và tạo ra một dịch vụ mới mang tên Amazon OpenSearch Service. Sự phân nhánh này không chỉ bảo tồn tính mã nguồn mở của phần mềm mà còn cho phép AWS tiếp tục cung cấp dịch vụ tìm kiếm được quản lý với quyền kiểm soát hoàn toàn về phát triển.

Giấy phép

Sau khi thay đổi giấy phép, Elasticsearch hiện đang dưới SSPL, không được công nhận là giấy phép mã nguồn mở bởi Sáng kiến Mã nguồn mở (OSI). SSPL áp đặt các hạn chế về cách phần mềm có thể được sử dụng, đặc biệt là cho các dịch vụ đám mây.

Dịch vụ Elastic Cloud cung cấp cài đặt Elastic có thể được cài đặt vào bất kỳ tài nguyên nhà cung cấp đám mây công cộng nào hoặc trên cơ sở vật chất riêng.

AWS OpenSearch: OpenSearch vẫn dưới giấy phép Apache 2.0, hoàn toàn mã nguồn mở. Điều này có nghĩa là bất kỳ ai cũng có thể sử dụng, sửa đổi và phân phối phần mềm mà không có hạn chế, khiến nó trở nên hấp dẫn hơn cho người dùng ưa thích giải pháp mã nguồn mở.

Hiểu về AWS Elasticsearch: Triển khai nội bộ của các chỉ mục và tái lập chỉ mục

Dịch vụ Amazon Elasticsearch (Amazon ES), hiện được gọi là Amazon OpenSearch Service, là một dịch vụ được quản lý giúp dễ dàng triển khai, vận hành và mở rộng các cụm Elasticsearch trong đám mây AWS. Nó được sử dụng rộng rãi cho việc giám sát ứng dụng theo thời gian thực, phân tích nhật ký, tìm kiếm toàn văn và nhiều hơn nữa. Một trong những thành phần cốt lõi của Elasticsearch là các chỉ mục, đóng vai trò là cấu trúc chính để lưu trữ và truy vấn dữ liệu. Bài viết này đi sâu vào việc triển khai nội bộ của các chỉ mục trong AWS Elasticsearch và cung cấp hướng dẫn về cách tái lập chỉ mục một cơ sở dữ liệu trong môi trường này.

Chỉ mục trong Elasticsearch là gì?

Một chỉ mục trong Elasticsearch tương tự như một cơ sở dữ liệu trong các cơ sở dữ liệu quan hệ truyền thống. Nó chứa một tập hợp các tài liệu được lưu trữ và quản lý cùng nhau. Mỗi tài liệu là một đối tượng JSON, và mỗi trường trong tài liệu là một điểm dữ liệu có thể được tìm kiếm và phân tích.

Các thành phần chính của một chỉ mục Elasticsearch:

  • Shard: Một chỉ mục được chia thành các phần nhỏ hơn gọi là shards. Mỗi shard là một phiên bản tự chứa, hoàn toàn chức năng của Lucene, công cụ tìm kiếm cơ sở cho Elasticsearch.
  • Replica: Để đảm bảo tính khả dụng cao và khả năng chịu lỗi, Elasticsearch cho phép bạn tạo các shard bản sao. Đây là các bản sao của các shard chính có thể phục vụ các yêu cầu tìm kiếm trong trường hợp shard chính gặp sự cố.
  • Mapping: Mapping xác định cấu trúc của các tài liệu trong một chỉ mục, bao gồm các kiểu dữ liệu của các trường và cách chúng nên được lập chỉ mục và lưu trữ.

Triển khai nội bộ của các chỉ mục trong AWS Elasticsearch

AWS Elasticsearch xử lý các chỉ mục tương tự như một triển khai Elasticsearch tiêu chuẩn nhưng với các lớp quản lý, bảo mật và khả năng mở rộng bổ sung do AWS cung cấp.

Các khía cạnh chính của các chỉ mục AWS Elasticsearch:

  • Cụm được quản lý: AWS Elasticsearch quản lý hạ tầng cơ sở, bao gồm cung cấp nút, phân bổ shard và sao chép chỉ mục.
  • Mở rộng: Các chỉ mục có thể được mở rộng theo chiều ngang bằng cách điều chỉnh số lượng shard và theo chiều dọc bằng cách tăng kích thước phiên bản hoặc thêm nhiều nút hơn.
  • Bảo mật: AWS tích hợp Elasticsearch với các dịch vụ AWS khác như AWS IAM, AWS KMS cho mã hóa, và VPC cho phân lập mạng, đảm bảo rằng các chỉ mục của bạn được bảo mật và chỉ có thể truy cập bởi người dùng được ủy quyền.
  • Snapshots: AWS Elasticsearch cung cấp các snapshots tự động cho các chỉ mục, được lưu trữ trong Amazon S3 và có thể được sử dụng cho mục đích sao lưu và phục hồi.

Tại sao tái lập chỉ mục lại quan trọng

Tái lập chỉ mục trong Elasticsearch là quá trình sao chép dữ liệu từ một chỉ mục này sang một chỉ mục khác. Điều này thường cần thiết khi bạn cần:

  • Thay đổi cấu trúc của chỉ mục, chẳng hạn như thay đổi mapping (thay đổi kiểu dữ liệu).
  • Cải thiện hiệu suất bằng cách tái cấu hình số lượng shard hoặc replicas (cũng như gộp/chia chỉ mục).
  • Nâng cấp các phiên bản Elasticsearch có thể yêu cầu thay đổi định dạng dữ liệu.
  • Giới thiệu các trường mới trong tài liệu và làm cho chúng có sẵn để tìm kiếm.

Tái lập chỉ mục có thể là một hoạt động tiêu tốn tài nguyên, và AWS Elasticsearch cung cấp các công cụ và thực tiễn tốt nhất để đảm bảo rằng nó được thực hiện một cách hiệu quả mà không làm gián đoạn sự sẵn có của dịch vụ.

Các bước để tái lập chỉ mục trong AWS Elasticsearch

Bước 1: Tạo chỉ mục mục tiêu

Trước khi bạn bắt đầu tái lập chỉ mục, bạn cần tạo chỉ mục mục tiêu với các mapping, thiết lập và cấu hình shard mong muốn.

json Copy
PUT /new-index
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 1
  },
  "mappings": {
    "properties": {
      "field1": {
        "type": "text"
      },
      "field2": {
        "type": "date"
      }
    }
  }
}

Bước 2: Sử dụng API Reindex

Elasticsearch cung cấp một API _reindex cho phép bạn sao chép dữ liệu từ chỉ mục nguồn sang chỉ mục mục tiêu.

json Copy
POST /_reindex
{
  "source": {
    "index": "old-index"
  },
  "dest": {
    "index": "new-index"
  }
}

Bước 3: Giám sát quá trình tái lập chỉ mục

Tái lập chỉ mục có thể mất thời gian tùy thuộc vào kích thước dữ liệu của bạn. Bạn có thể giám sát tiến trình bằng cách sử dụng API Task.

json Copy
GET /_tasks?detailed=true&actions=*reindex

Bước 4: Cập nhật Alias (Tùy chọn)

Khi quá trình tái lập chỉ mục hoàn tất, bạn có thể muốn chuyển một alias để chỉ đến chỉ mục mới.

json Copy
POST /_aliases
{
  "actions": [
    {
      "remove": {
        "index": "old-index",
        "alias": "my-alias"
      }
    },
    {
      "add": {
        "index": "new-index",
        "alias": "my-alias"
      }
    }
  ]
}

Bước 5: Xóa chỉ mục cũ (Tùy chọn)

Sau khi xác nhận rằng chỉ mục mới hoạt động đúng, bạn có thể xóa chỉ mục cũ để giải phóng tài nguyên.

json Copy
DELETE /old-index

Ngoài ra, trong quá trình lập chỉ mục, có thể cập nhật cấu trúc của tài liệu (bằng cách thêm phần script):

json Copy
POST _reindex
{
   "source":{
      "index":"source"
   },
   "dest":{
      "index":"destination"
   },
   "script":{
      "lang":"painless",
      "source":"ctx._account.number++"
   }
}

Kỹ thuật không di chuyển chỉ mục (thích hợp cho các cụm nhỏ hơn)

Nếu khối lượng dữ liệu không cao, một khi mẫu chỉ mục được cập nhật, tất cả các chỉ mục mới sẽ được tạo từ mẫu mới (với các trường mới có sẵn để tìm kiếm). Đối với tất cả các chỉ mục hiện có, chúng ta cần cập nhật mapping chỉ mục (điều này sẽ cho phép bất kỳ cập nhật/thêm tài liệu vào các chỉ mục này theo cấu trúc mới nhất).

Đối với các tài liệu cũ, chúng ta có thể chạy cập nhật scripted với điều kiện xác định để cập nhật các tài liệu cần thiết với giá trị mặc định của các trường mới:

Bước 1: Cập nhật mẫu tìm kiếm

json Copy
PUT _template/{index}
{
  ...full_body with new mappings
}

Bước 2: Thêm mapping mới cho từng chỉ mục

json Copy
PUT /{
  index
}/_mappings
{
  "properties": {
    "new_field": {
      "null_value": false,
      "type": "boolean"
    }
  }
}

Bước 3: Cập nhật tất cả tài liệu bằng cập nhật scripted

json Copy
POST /{index}/_update_by_query
{
  "query": {
    "bool": {
      "must_not": {
        "exists": {
          "field": "hidden"
        }
      }
    }
  },
  "script": {
    "source": "ctx._source.new_field = false",
    "lang": "painless"
  }
}

Thực tiễn tốt nhất cho việc tái lập chỉ mục trong AWS Elasticsearch

  • Snapshot trước khi tái lập chỉ mục: Luôn luôn tạo snapshot dữ liệu của bạn trước khi bắt đầu quá trình tái lập chỉ mục để bảo vệ chống lại mất dữ liệu.
  • Giám sát sức khỏe cụm: Theo dõi sức khỏe của cụm trong quá trình tái lập chỉ mục để tránh làm quá tải hệ thống.
  • Sử dụng Alias: Aliases có thể giúp giảm thiểu thời gian chết bằng cách cho phép bạn chuyển đổi các chỉ mục mà không thay đổi mã ứng dụng của bạn.
  • Kiểm tra trong môi trường staging: Trước khi tái lập chỉ mục trong môi trường sản xuất, hãy kiểm tra quá trình này trong môi trường staging để phát hiện bất kỳ vấn đề tiềm ẩn nào.

Kết luận

Tái lập chỉ mục trong AWS Elasticsearch là một hoạt động quan trọng để duy trì và tối ưu hóa hạ tầng tìm kiếm của bạn. Bằng cách hiểu triển khai nội bộ của các chỉ mục và tuân theo các thực tiễn tốt nhất cho việc tái lập chỉ mục, bạn có thể đảm bảo môi trường Elasticsearch của mình vẫn mạnh mẽ, có thể mở rộng và sẵn sàng đáp ứng nhu cầu của các ứng dụng của bạn. AWS Elasticsearch, với khả năng quản lý và tích hợp chặt chẽ với các dịch vụ AWS khác, cung cấp một nền tảng mạnh mẽ để triển khai và quản lý các tải công việc tìm kiếm của bạn.

Tham khảo (Liên kết)

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào