Cách ngủ ngon khi có dịch vụ đám mây: mẹo kiến ​​trúc cơ bản

Cách ngủ ngon khi có dịch vụ đám mây: mẹo kiến ​​trúc cơ bảnMẤT bởi sophiagworld

Bài viết này chứa một số mẫu phổ biến để giúp các kỹ sư làm việc với các dịch vụ quy mô lớn được hàng triệu người dùng truy cập. 

Theo kinh nghiệm của tác giả, đây không phải là một danh sách đầy đủ, nhưng thực sự hiệu quả lời khuyên. Vì vậy, hãy bắt đầu.

Được dịch với sự hỗ trợ Giải pháp đám mây Mail.ru.

Cấp độ đầu tiên

Các biện pháp được liệt kê dưới đây tương đối đơn giản để thực hiện nhưng có tác động cao. Nếu bạn chưa từng thử chúng trước đây, bạn sẽ ngạc nhiên trước những cải tiến đáng kể.

Cơ sở hạ tầng dưới dạng mã

Phần đầu tiên của lời khuyên là triển khai cơ sở hạ tầng dưới dạng mã. Điều này có nghĩa là bạn phải có phương pháp lập trình để triển khai toàn bộ cơ sở hạ tầng. Nghe có vẻ phức tạp nhưng thực ra chúng ta đang nói về đoạn mã sau:

Triển khai 100 máy ảo

  • với Ubuntu
  • Mỗi RAM 2 GB
  • họ sẽ có đoạn mã sau
  • với các thông số này

Bạn có thể theo dõi các thay đổi đối với cơ sở hạ tầng của mình và nhanh chóng hoàn nguyên về chúng bằng cách sử dụng tính năng kiểm soát phiên bản.

Người theo chủ nghĩa hiện đại trong tôi nói rằng bạn có thể sử dụng Kubernetes/Docker để thực hiện tất cả những điều trên và anh ấy đã đúng.

Ngoài ra, bạn có thể cung cấp tính năng tự động hóa bằng Chef, Puppet hoặc Terraform.

Tích hợp và phân phối liên tục

Để tạo một dịch vụ có thể mở rộng, điều quan trọng là phải có quy trình xây dựng và thử nghiệm cho từng yêu cầu kéo. Ngay cả khi quá trình kiểm thử rất đơn giản thì ít nhất nó cũng đảm bảo rằng mã bạn triển khai sẽ được biên dịch.

Mỗi lần ở giai đoạn này bạn trả lời câu hỏi: Hội đồng của tôi sẽ biên dịch và vượt qua các bài kiểm tra, nó có hợp lệ không? Điều này có vẻ giống như một mức thấp nhưng nó giải quyết được rất nhiều vấn đề.

Cách ngủ ngon khi có dịch vụ đám mây: mẹo kiến ​​trúc cơ bản
Không có gì đẹp hơn khi nhìn thấy những con bọ ve này

Đối với công nghệ này, bạn có thể đánh giá Github, CircleCI hoặc Jenkins.

Cân bằng tải

Vì vậy, chúng tôi muốn chạy bộ cân bằng tải để chuyển hướng lưu lượng truy cập và đảm bảo tải bằng nhau trên tất cả các nút hoặc dịch vụ sẽ tiếp tục trong trường hợp bị lỗi:

Cách ngủ ngon khi có dịch vụ đám mây: mẹo kiến ​​trúc cơ bản
Bộ cân bằng tải thường thực hiện tốt công việc phân phối lưu lượng truy cập. Cách thực hành tốt nhất là cân bằng quá mức để bạn không có một điểm thất bại nào.

Thông thường, bộ cân bằng tải được định cấu hình trên đám mây mà bạn sử dụng.

RayID, ID tương quan hoặc UUID cho các yêu cầu

Bạn đã bao giờ gặp lỗi ứng dụng có thông báo như thế này chưa: "Có gì đó không ổn. Lưu id này và gửi cho nhóm hỗ trợ của chúng tôi"?

Cách ngủ ngon khi có dịch vụ đám mây: mẹo kiến ​​trúc cơ bản
Mã định danh duy nhất, ID tương quan, RayID hoặc bất kỳ biến thể nào là mã định danh duy nhất cho phép bạn theo dõi yêu cầu trong suốt vòng đời của nó. Điều này cho phép bạn theo dõi toàn bộ đường dẫn yêu cầu trong nhật ký.

Cách ngủ ngon khi có dịch vụ đám mây: mẹo kiến ​​trúc cơ bản
Người dùng đưa ra yêu cầu tới hệ thống A, sau đó A liên hệ với B, hệ thống này liên hệ với C, lưu vào X và sau đó yêu cầu được trả về A

Nếu bạn kết nối từ xa với các máy ảo và cố gắng theo dõi đường dẫn yêu cầu (và tương quan thủ công với những cuộc gọi nào đang được thực hiện), bạn sẽ phát điên. Có một mã định danh duy nhất làm cho cuộc sống dễ dàng hơn nhiều. Đây là một trong những điều đơn giản nhất bạn có thể làm để tiết kiệm thời gian khi dịch vụ của bạn phát triển.

Trình độ trung cấp

Lời khuyên ở đây phức tạp hơn những lời khuyên trước, nhưng các công cụ phù hợp sẽ giúp công việc trở nên dễ dàng hơn, mang lại lợi tức đầu tư ngay cả đối với các công ty vừa và nhỏ.

Ghi nhật ký tập trung

Chúc mừng! Bạn đã triển khai 100 máy ảo. Ngày hôm sau, CEO đến và phàn nàn về một lỗi mà ông gặp phải khi thử nghiệm dịch vụ. Nó báo cáo ID tương ứng mà chúng ta đã nói ở trên, nhưng bạn sẽ phải xem qua nhật ký của 100 máy để tìm ra ID gây ra sự cố. Và nó cần phải được tìm thấy trước buổi thuyết trình ngày mai.

Mặc dù điều này nghe có vẻ là một cuộc phiêu lưu thú vị nhưng tốt nhất bạn nên đảm bảo rằng bạn có thể tìm kiếm tất cả các tạp chí ở một nơi. Tôi đã giải quyết vấn đề tập trung nhật ký bằng chức năng tích hợp của ngăn xếp ELK: nó hỗ trợ thu thập nhật ký có thể tìm kiếm. Điều này thực sự sẽ giúp giải quyết vấn đề tìm kiếm một tạp chí cụ thể. Là một phần thưởng, bạn có thể tạo biểu đồ và những điều thú vị khác tương tự.

Cách ngủ ngon khi có dịch vụ đám mây: mẹo kiến ​​trúc cơ bản
Chức năng ngăn xếp ELK

Đại lý giám sát

Bây giờ dịch vụ của bạn đã hoạt động, bạn cần đảm bảo rằng nó chạy trơn tru. Cách tốt nhất để làm điều này là chạy một số đại lý, hoạt động song song và kiểm tra xem nó có hoạt động không và các hoạt động cơ bản có được thực hiện hay không.

Tại thời điểm này bạn kiểm tra xem bản dựng đang chạy cho cảm giác tốt và hoạt động tốt.

Đối với các dự án vừa và nhỏ, tôi khuyên dùng Postman để theo dõi và ghi lại API. Nhưng nói chung, bạn chỉ muốn đảm bảo rằng bạn có cách để biết khi nào xảy ra sự cố ngừng hoạt động và được thông báo kịp thời.

Tự động điều chỉnh tỷ lệ tùy theo tải

Nó rất đơn giản. Nếu bạn có một yêu cầu dịch vụ VM và mức sử dụng bộ nhớ sắp đạt 80%, bạn có thể tăng tài nguyên của nó hoặc thêm nhiều VM vào cụm. Việc thực hiện tự động các thao tác này là tuyệt vời để thay đổi công suất đàn hồi khi có tải. Nhưng bạn phải luôn cẩn thận về số tiền mình chi tiêu và đặt ra những giới hạn hợp lý.

Cách ngủ ngon khi có dịch vụ đám mây: mẹo kiến ​​trúc cơ bản
Với hầu hết các dịch vụ đám mây, bạn có thể định cấu hình nó để tự động điều chỉnh quy mô bằng cách sử dụng nhiều máy chủ hơn hoặc máy chủ mạnh hơn.

Hệ thống thí nghiệm

Một cách hay để triển khai các bản cập nhật một cách an toàn là có thể thử nghiệm thứ gì đó cho 1% người dùng trong một giờ. Tất nhiên, bạn đã thấy những cơ chế như vậy hoạt động. Ví dụ: Facebook hiển thị cho các bộ phận khán giả một màu khác hoặc thay đổi kích thước phông chữ để xem người dùng cảm nhận những thay đổi như thế nào. Đây được gọi là thử nghiệm A/B.

Ngay cả việc phát hành một tính năng mới cũng có thể được bắt đầu dưới dạng thử nghiệm và sau đó xác định cách phát hành nó. Bạn cũng có khả năng “ghi nhớ” hoặc thay đổi cấu hình một cách nhanh chóng dựa trên chức năng đang gây ra sự xuống cấp trong dịch vụ của bạn.

Cấp độ nâng cao

Dưới đây là những lời khuyên khá khó thực hiện. Có thể bạn sẽ cần thêm một chút nguồn lực, vì vậy một công ty vừa hoặc nhỏ sẽ gặp khó khăn trong việc quản lý việc này.

Triển khai xanh lam

Đây là cái mà tôi gọi là cách mở ra "Erlang". Erlang được sử dụng rộng rãi khi các công ty điện thoại xuất hiện. Softswitches bắt đầu được sử dụng để định tuyến các cuộc gọi điện thoại. Mục đích chính của phần mềm trên các thiết bị chuyển mạch này là không bỏ cuộc gọi trong quá trình nâng cấp hệ thống. Erlang có một cách hay để tải mô-đun mới mà không làm hỏng mô-đun trước đó.

Bước này phụ thuộc vào sự hiện diện của bộ cân bằng tải. Hãy tưởng tượng bạn có phiên bản N của phần mềm và sau đó bạn muốn triển khai phiên bản N+1. 

Anh chúng ta có thể chỉ cần dừng dịch vụ và tung ra phiên bản tiếp theo vào thời điểm phù hợp với người dùng của bạn và có thời gian ngừng hoạt động. Nhưng giả sử bạn có thực sự điều kiện SLA nghiêm ngặt. Vì vậy, SLA 99,99% có nghĩa là bạn có thể ngoại tuyến chỉ thêm 52 phút mỗi năm.

Nếu bạn thực sự muốn đạt được các chỉ số như vậy, bạn cần hai lần triển khai cùng một lúc: 

  • cái hiện tại (N);
  • phiên bản tiếp theo (N+1). 

Bạn yêu cầu bộ cân bằng tải chuyển hướng phần trăm lưu lượng truy cập sang phiên bản mới (N+1) trong khi bạn chủ động theo dõi các hiện tượng hồi quy.

Cách ngủ ngon khi có dịch vụ đám mây: mẹo kiến ​​trúc cơ bản
Ở đây chúng tôi có triển khai N xanh hoạt động tốt. Chúng tôi đang cố gắng chuyển sang phiên bản tiếp theo của việc triển khai này

Trước tiên, chúng tôi gửi một thử nghiệm thực sự nhỏ để xem liệu việc triển khai N+1 của chúng tôi có hoạt động với lượng lưu lượng truy cập nhỏ hay không:

Cách ngủ ngon khi có dịch vụ đám mây: mẹo kiến ​​trúc cơ bản
Cuối cùng, chúng tôi có một bộ kiểm tra tự động mà cuối cùng chúng tôi sẽ chạy cho đến khi quá trình triển khai hoàn tất. nếu bạn rất rất cẩn thận, bạn cũng có thể lưu triển khai N của mình vĩnh viễn để khôi phục nhanh trong trường hợp hồi quy xấu:

Cách ngủ ngon khi có dịch vụ đám mây: mẹo kiến ​​trúc cơ bản
Nếu bạn muốn chuyển sang cấp độ nâng cao hơn nữa, hãy để mọi thứ trong quá trình triển khai màu xanh lam tự động chạy.

Phát hiện bất thường và tự động giảm thiểu

Vì bạn đã ghi nhật ký tập trung và thu thập nhật ký tốt, bạn có thể đặt mục tiêu cao hơn. Ví dụ, chủ động dự đoán thất bại. Các chức năng được theo dõi trên màn hình, trong nhật ký và nhiều sơ đồ khác nhau được xây dựng - và bạn có thể dự đoán trước điều gì sẽ xảy ra:

Cách ngủ ngon khi có dịch vụ đám mây: mẹo kiến ​​trúc cơ bản
Khi phát hiện thấy sự bất thường, bạn bắt đầu kiểm tra một số manh mối mà dịch vụ cung cấp. Ví dụ: tải CPU tăng đột biến có thể cho thấy ổ cứng đang bị lỗi, trong khi lượng yêu cầu tăng đột biến có thể cho thấy bạn cần phải mở rộng quy mô. Loại dữ liệu thống kê này cho phép bạn chủ động thực hiện dịch vụ.

Với những hiểu biết sâu sắc này, bạn có thể mở rộng quy mô theo bất kỳ chiều nào và thay đổi một cách chủ động và phản ứng các đặc điểm của máy móc, cơ sở dữ liệu, kết nối và các tài nguyên khác.

Đó là tất cả!

Danh sách ưu tiên này sẽ giúp bạn tránh được rất nhiều vấn đề nếu bạn đang phát triển một dịch vụ đám mây.

Tác giả bài viết gốc mời độc giả để lại bình luận và thực hiện những thay đổi. Bài viết được phân phối dưới dạng mã nguồn mở, pull request của tác giả chấp nhận trên Github.

Những gì khác để đọc về chủ đề này:

  1. Bộ nhớ cache của Go và CPU
  2. Kubernetes theo tinh thần vi phạm bản quyền với một mẫu để triển khai
  3. Kênh của chúng tôi Xung quanh Kubernetes trong Telegram

Nguồn: www.habr.com

Thêm một lời nhận xét