Skip to content

Instantly share code, notes, and snippets.

@nmvuong92
Last active September 6, 2018 08:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nmvuong92/07c687c89ca06408a75f915dc73cc892 to your computer and use it in GitHub Desktop.
Save nmvuong92/07c687c89ca06408a75f915dc73cc892 to your computer and use it in GitHub Desktop.

NGUYÊN TẮC THIẾT KẾ TRONG ELASTICSEARCH

Bạn không thể thiết kế một cụm (cluster) mà không biết khối lượng công việc của bạn sẽ là bao nhiêu?

"You can't design a cluster without knowing what your workload will be"

Bao nhiêu tìm kiếm và ghi mỗi giây bạn sẽ nhận được?

"how much search and writes per second you'll get"

tốc độ các chỉ mục của bạn sẽ tăng nhanh như thế nào?

"how fast your indexes will grow"

loại truy vấn nào người dùng của bạn sẽ chạy?

"what kind of queries your users will run"

Elasticsearch is elastic, for real

Elasticsearch là một công cụ tìm kiếm. Elasticsearch không phải là một kho dữ liệu và nó sẽ không thay thế MySQL.

Elasticsearch is a search engine. Elasticsearch is not a datastore and it won't replace MySQL. Nếu bạn đang tìm kiếm một kho lưu trữ dữ liệu phân tán (distributed data store) hãy đóng tab trình duyệt này lại, bạn đã tìm sai chỗ

Có 2 điều về độ đàn hồi (elasticity ) khi bạn thiết kế cụm (cluster) của mình.

  • cái đầu tiên là chia theo tỷ lệ ngang (horizontal scaling): Bạn có thể xây dựng một cụm (cluster) với hầu như vô số máy chủ, tùy thuộc vào nhu cầu của bạn và nút cổ chai (bottleneck ) bạn phải đối mặt. Đôi khi, việc chạy tập dữ liệu của bạn trên nhiều máy nhỏ sẽ cung cấp hiệu suất tốt hơn hơn so với sử dụng một vài máy chủ lớn, Đôi khi, chạy trên máy chủ trung bình với nhiều đĩa là tốt hơn. Và đôi khi, bạn sẽ cần CPU gonzo nhưng bộ nhớ và bộ nhớ sẽ không thành vấn đề.
  • Một trong số khác là chỉ mục sharding (index sharing), Elasticsearch phân chia các chỉ mục trong không gian vật lý (physical spaces) gọi là mảnh vỡ, phân đoạn (shards). Chúng cho phép bạn dễ dàng tách dữ liệu giữa các máy chủ nhưng có một nhược điểm là số lượng phân đoạn (shards) được xác định khi tạo chỉ mục. Mặc định Elasticsearch là 5 phân đoạn (shards) trên mỗi chỉ mục (index), nhưng chỉ khối lượng công việc của bạn sẽ giúp bạn xác định đúng số lượng phân đoạn

Design for failure

  • Trừ khi bạn đang chạy Elasticsearch trên một nút duy nhất, chuẩn bị thiết kế cho sự thất bại, Thiết kế cho thất bại có nghĩa là chạy cụm của bạn ở nhiều vị trí và sẵn sàng mất toàn bộ trung tâm dữ liệu mà không bị gián đoạn dịch vụ, Nó không phải là tư duy lý thuyết ở đây.Bạn Sẽ đánh mất toàn bộ trung tâm dữ liệu nhiều lần trong suốt thời gian hoạt động của cụm
  • Các nút Elasticsearch có dưới 4 hương vị:
    1. (Eligible) master nodes: điều khiển cụm.
    2. Http nodes: để chạy truy vấn của bạn.
    3. Data nodes: dữ liệu địa điểm được lưu trữ, rõ ràng.
    4. Coordinating nodes: xem chúng như cân bằng tải thông minh ( smart load balancers).
  • Yêu cầu tối thiểu đối với cụm chịu lỗi là:
    • 3 địa điểm để lưu trữ các nút của bạn. 2 vị trí để chạy một nửa cụm của bạn và một vị trí cho nút chính sao lưu.
    • 3 nút chính. Bạn cần một số lượng lớn các nút chính đủ điều kiện để tránh bộ não bị tách khi bạn mất toàn bộ trung tâm dữ liệu. Đặt một nút chính ở mỗi vị trí để bạn hy vọng không bao giờ mất số đại biểu.
    • 2 nút http, một trong mỗi trung tâm dữ liệu chính.
    • Như nhiều nút dữ liệu bạn cần, hãy chia đều giữa hai vị trí chính.

nguồn

https://thoughts.t37.net/designing-the-perfect-elasticsearch-cluster-the-almost-definitive-guide-e614eabc1a87
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment