Hệ thống ISP, tha thứ và vĩnh biệt! Tại sao và cách chúng tôi viết bảng điều khiển máy chủ của mình

Hệ thống ISP, tha thứ và vĩnh biệt! Tại sao và cách chúng tôi viết bảng điều khiển máy chủ của mình

Xin chào! Chúng tôi là "Công nghệ lưu trữ" và đã ra mắt cách đây 5 năm VDSina — dịch vụ lưu trữ vds đầu tiên được tạo riêng cho các nhà phát triển. Chúng tôi cố gắng làm cho nó thuận tiện, giống như DigitalOcean, nhưng với sự hỗ trợ của Nga, phương thức thanh toán và máy chủ ở Nga. Nhưng DigitalOcean không chỉ là độ tin cậy và giá cả, nó còn là một dịch vụ.

Phần mềm từ ISPsystem hóa ra lại là sợi dây trói tay chúng tôi trên con đường đến với một dịch vụ tuyệt vời. Ba năm trước, chúng tôi đã sử dụng thanh toán Billmanager và bảng điều khiển máy chủ VMmanager và nhanh chóng nhận ra rằng gần như không thể cung cấp dịch vụ tốt nếu không có bảng điều khiển của riêng chúng tôi.

Hệ thống ISP đã giết chết sự tiện lợi như thế nào

Lỗi

Chúng tôi không thể tự sửa lỗi - mỗi lần chúng tôi phải viết thư cho người khác hỗ trợ và chờ đợi. Giải pháp cho bất kỳ vấn đề nào đều cần có phản hồi của công ty bên thứ ba.

Hỗ trợ hệ thống ISP phản hồi bình thường, nhưng các bản sửa lỗi chỉ xuất hiện sau một vài bản phát hành, sau đó không phải lúc nào và không phải tất cả. Đôi khi các lỗi nghiêm trọng đã được sửa trong vài tuần. Chúng tôi đã phải trấn an khách hàng, xin lỗi và chờ ISPsystem sửa lỗi.

Mối đe dọa thời gian ngừng hoạt động

Các bản cập nhật có thể tạo ra thời gian ngừng hoạt động không thể đoán trước và gây ra các lỗi mới.

Mỗi bản cập nhật là một cuộc xổ số: Tôi phải thanh toán hóa đơn và hy sinh cho các vị thần cập nhật - một vài lần bản cập nhật gây ra thời gian chết trong 10-15 phút. Các quản trị viên của chúng tôi lúc này đang ngồi trên mắt - chúng tôi không bao giờ biết thời gian ngừng hoạt động sẽ kéo dài bao lâu và không thể dự đoán khi nào ISPsystem sẽ quyết định tung ra bản cập nhật mới.

Ở thế hệ thứ năm, Billmanager đã trở nên tốt hơn, nhưng để có quyền truy cập vào các tính năng cần thiết, tôi phải cài đặt bản beta, bản này đã được cập nhật hàng tuần. Nếu có lỗi xảy ra, tôi phải cấp quyền truy cập cho các nhà phát triển khác để họ có thể sửa lỗi.

Giao diện bảng điều khiển không thuận tiện

Mọi thứ được chia thành các bảng khác nhau và được điều khiển từ những nơi khác nhau. Ví dụ: khách hàng đã thanh toán qua Billmanager và họ phải khởi động lại hoặc cài đặt lại VDS trong VMManager. Nhân viên của chúng tôi cũng phải chuyển đổi giữa các cửa sổ để giúp khách hàng, kiểm tra tải trên máy chủ của họ hoặc xem hệ điều hành mà họ đang sử dụng.

Một giao diện như vậy cần có thời gian - cả của chúng tôi và khách hàng của chúng tôi. Không nghi ngờ gì về bất kỳ sự thuận tiện nào, như của DigitalOcean, trong tình huống như vậy.

Vòng đời ngắn với các bản cập nhật API thường xuyên

Chúng tôi đã viết các plugin của riêng mình - ví dụ: một plugin có các phương thức thanh toán bổ sung không có trong VMManager.

Trong những năm gần đây, VMManager có vòng đời tương đối ngắn và trong các phiên bản mới, tên của các biến hoặc hàm trong API có thể thay đổi tùy ý - điều này đã phá vỡ các plugin của chúng tôi. Hỗ trợ cho các phiên bản cũ hơn đã nhanh chóng bị loại bỏ và phải được cập nhật.

Không thể sửa đổi

Chính xác hơn là có thể, nhưng cực kỳ kém hiệu quả. Các hạn chế về giấy phép không cho phép bạn thay đổi mã nguồn, bạn chỉ có thể viết plugin. Các plugin tối đa - một số mục menu, trình hướng dẫn từng bước. Hệ thống ISP được thiết kế cho tính linh hoạt, nhưng chúng tôi cần các giải pháp chuyên biệt.

Vì vậy, quyết định đã chín muồi để viết bảng điều khiển của riêng tôi. Chúng tôi đã đặt mục tiêu:

  • Phản hồi nhanh chóng các lỗi, bug và có thể tự khắc phục mà không để khách hàng chờ đợi.
  • Tự do sửa đổi giao diện cho quy trình công việc và nhu cầu của khách hàng.
  • Tăng khả năng sử dụng với thiết kế rõ ràng và dễ hiểu.

Và chúng tôi bắt đầu phát triển.

Kiến trúc bảng điều khiển mới

Chúng tôi có một nhóm phát triển độc lập, vì vậy chúng tôi đã tự viết bảng điều khiển.
Công việc chính được thực hiện bởi ba kỹ sư - giám đốc kỹ thuật Sergey đã đưa ra kiến ​​trúc và viết tác nhân máy chủ, Alexey thực hiện thanh toán và giao diện người dùng được lắp ráp bởi Artysh của chúng tôi.

Bước 1: Đại lý máy chủ

Tác nhân máy chủ là một máy chủ web python quản lý thư viện sinh nhật, do đó chi phối Trình ảo hóa Qemu-kvm.

Tác nhân quản lý tất cả các dịch vụ trên máy chủ: tạo, dừng, xóa vds, cài đặt hệ điều hành, thay đổi tham số, v.v. thông qua thư viện libvirt. Tại thời điểm xuất bản bài báo, đây là hơn bốn mươi chức năng khác nhau, chúng tôi bổ sung tùy thuộc vào nhiệm vụ và nhu cầu của khách hàng.

Về lý thuyết, libvirt có thể được kiểm soát trực tiếp từ thanh toán, nhưng điều này yêu cầu quá nhiều mã bổ sung và chúng tôi đã quyết định tách các chức năng này giữa tác nhân và thanh toán - thanh toán chỉ đơn giản là đưa ra yêu cầu cho tác nhân thông qua API JSON.

Tác nhân là điều đầu tiên chúng tôi làm, vì nó không yêu cầu bất kỳ giao diện nào và có thể kiểm tra nó trực tiếp từ bảng điều khiển máy chủ.

Những gì đại lý máy chủ đã cho chúng tôi: một lớp đã xuất hiện giúp đơn giản hóa cuộc sống cho mọi người - thanh toán không cần gửi cả đống lệnh mà chỉ thực hiện một yêu cầu. Và tác nhân sẽ làm mọi thứ cần thiết: ví dụ: nó sẽ phân bổ dung lượng ổ đĩa và RAM.

Bước 2. Thanh toán

Đối với nhà phát triển Alex của chúng tôi, đây không phải là bảng điều khiển đầu tiên - Alex đã làm công việc lưu trữ trong một thời gian dài nên nhìn chung anh ấy hiểu khách hàng cần gì và chủ nhà lưu trữ cần gì.

Chúng tôi gọi việc thanh toán giữa chúng tôi là “bảng điều khiển”: nó không chỉ chứa tiền và dịch vụ mà còn quản lý, hỗ trợ khách hàng, v.v.

Để chuyển từ phần mềm ISPSystem, cần phải duy trì đầy đủ chức năng trước đó cho khách hàng, chuyển tất cả các hoạt động tài chính của người dùng từ thanh toán cũ sang thanh toán mới, cũng như tất cả các dịch vụ và kết nối giữa chúng. Chúng tôi đã nghiên cứu những gì có trong sản phẩm hiện tại, sau đó là giải pháp của các đối thủ cạnh tranh, chủ yếu là DO và Vultr. Chúng tôi đã xem xét những nhược điểm và ưu điểm, thu thập phản hồi từ những người đã làm việc với các sản phẩm cũ từ ISPsystem.

Thanh toán mới sử dụng hai ngăn xếp: PHP cổ điển, MySQL (và trong tương lai nó được lên kế hoạch chuyển sang PostgreSQL), Yii2 làm khung ở phần phụ trợ và VueJS ở mặt trước. Các ngăn xếp hoạt động độc lập với nhau, được phát triển bởi những người khác nhau và giao tiếp bằng API JSON. Để phát triển sau đó và bây giờ chúng tôi sử dụng PHPStorm и webstorm từ JetBrains và yêu họ tha thiết (xin chào các bạn!)

Bảng điều khiển được thiết kế trên cơ sở mô-đun: mô-đun hệ thống thanh toán, mô-đun công ty đăng ký tên miền hoặc ví dụ: mô-đun chứng chỉ SSL. Bạn có thể dễ dàng thêm tính năng mới hoặc xóa tính năng cũ. Nền tảng cho việc mở rộng được đặt về mặt kiến ​​trúc, kể cả theo hướng ngược lại, “về phía phần cứng”.
Hệ thống ISP, tha thứ và vĩnh biệt! Tại sao và cách chúng tôi viết bảng điều khiển máy chủ của mình
Những gì chúng tôi có: bảng điều khiển mà chúng tôi có toàn quyền kiểm soát. Giờ đây, các lỗi được sửa trong vài giờ chứ không phải vài tuần và các tính năng mới được triển khai theo yêu cầu của khách hàng chứ không phải theo yêu cầu của ISPSystem.

Bước 3 Giao diện

Hệ thống ISP, tha thứ và vĩnh biệt! Tại sao và cách chúng tôi viết bảng điều khiển máy chủ của mình
Giao diện là đứa con tinh thần của nhóm chúng tôi.

Trước tiên, chúng tôi đã xem xét điều gì sẽ xảy ra nếu chúng tôi tạo một tiện ích bổ sung trên API hệ thống ISP mà không thay đổi cơ bản bất kỳ thứ gì trong giao diện. Hóa ra là như vậy và chúng tôi quyết định làm lại mọi thứ từ đầu.

Chúng tôi tin rằng điều chính yếu là làm cho giao diện trở nên logic, với thiết kế gọn gàng và tối giản, sau đó chúng tôi sẽ có được một bảng điều khiển đẹp mắt. Vị trí của các phần tử đã được thảo luận trong Megaplan và giao diện mà người dùng nhìn thấy trong bảng điều khiển bây giờ sẽ dần ra đời.

Thiết kế của trang thanh toán là thiết kế đầu tiên xuất hiện, bởi vì chúng tôi đã tạo các plugin thanh toán cho hệ thống ISP.

giao diện người dùng

Họ quyết định biến bảng điều khiển thành một ứng dụng SPA - không yêu cầu tài nguyên và tải dữ liệu nhanh. Artysh front-end của chúng tôi đã quyết định viết nó trên Vue — lúc đó Vue mới xuất hiện. Chúng tôi cho rằng framework sẽ phát triển linh hoạt, giống như React, sau một thời gian, cộng đồng Vue sẽ phát triển và một biển thư viện sẽ xuất hiện. Chúng tôi đã đặt cược vào Vue và không hối tiếc - bây giờ chỉ mất một ít thời gian để thêm các chức năng mới vào phía trước đã được lập trình trên phần phụ trợ. Chúng tôi sẽ cho bạn biết thêm về bảng điều khiển phía trước trong một bài viết riêng.

Kết nối frontend với backend

Giao diện người dùng được kết nối với phần phụ trợ thông qua thông báo đẩy. Tôi đã phải làm việc chăm chỉ và viết trình xử lý của riêng mình, nhưng bây giờ thông tin trên trang được cập nhật gần như ngay lập tức.

Chuyện gì đã xảy ra: Giao diện bảng điều khiển đã trở nên đơn giản hơn. Chúng tôi đã làm cho nó thích ứng và tải nhanh cho phép bạn sử dụng nó ngay cả từ điện thoại di động trong những phút cuối cùng trước khi cất cánh mà không cần cài đặt ứng dụng riêng để hoạt động với bảng điều khiển.

Bước 4. Sơ đồ thử nghiệm và di chuyển

Khi mọi thứ bắt đầu và các bài kiểm tra đầu tiên được thông qua, câu hỏi về việc di chuyển đã nảy sinh. Trước hết, chúng tôi đã cài đặt thanh toán và bắt đầu thử nghiệm hoạt động của nó với tác nhân máy chủ.

Sau đó, chúng tôi đã viết một tập lệnh đơn giản để chuyển cơ sở dữ liệu từ thanh toán cũ sang thanh toán mới.

Tôi đã phải kiểm tra và kiểm tra lại mọi thứ theo đúng nghĩa đen, vì dữ liệu đã được hợp nhất thành một cơ sở dữ liệu mới từ ba cơ sở dữ liệu cũ: Billmanager, VMmanager và IPmanager của người quản lý. Có lẽ việc di chuyển thử nghiệm là điều khó khăn nhất mà chúng tôi gặp phải trong quá trình phát triển bảng điều khiển mới.

Sau khi kiểm tra lại, chúng tôi đã đóng hóa đơn cũ. Quá trình di chuyển dữ liệu cuối cùng là một thời điểm rất rắc rối, nhưng cảm ơn Chúa, nó đã được hoàn thành sau vài phút và không có vấn đề gì đáng chú ý. Có những lỗi nhỏ mà chúng tôi đã sửa trong tuần. Hầu hết thời gian được dành để kiểm tra những gì đã xảy ra.

Sau đó, chúng tôi đã gửi thư cho khách hàng với địa chỉ của bảng điều khiển mới và thanh toán và thực hiện chuyển hướng.

Tóm lại: NÓ CÒN SỐNG!

Kết cuộc hạnh phúc

Ngay từ những giờ đầu tiên làm việc với phần mềm của mình, chúng tôi đã cảm nhận được tất cả những điều thú vị của quá trình chuyển đổi. Mã này hoàn toàn là của chúng tôi và có kiến ​​trúc thuận tiện, giao diện rõ ràng và hợp lý.
Hệ thống ISP, tha thứ và vĩnh biệt! Tại sao và cách chúng tôi viết bảng điều khiển máy chủ của mình
Đánh giá đầu tiên sau khi ra mắt bảng điều khiển mới

Chúng tôi đã khởi động quá trình chuyển đổi vào tháng 2017, vào đêm giao thừa năm XNUMX, khi lượng tải thấp nhất, để giúp khách hàng chuyển đổi dễ dàng hơn - hầu như không có ai làm việc vào đêm trước ngày lễ.

Điều chính mà chúng tôi nhận được khi chuyển sang hệ thống của mình (ngoài độ tin cậy và sự tiện lợi chung) là khả năng nhanh chóng thêm chức năng cho những khách hàng quan trọng - trở thành bộ mặt của họ chứ không phải mông của họ.

Cái gì tiếp theo?

Chúng tôi ngày càng phát triển, lượng dữ liệu, khách hàng, dữ liệu khách hàng ngày càng lớn. Tôi đã phải thêm một máy chủ Memcached và hai trình quản lý hàng đợi với các tác vụ khác nhau vào phần phụ trợ. Giao diện người dùng có bộ nhớ đệm và hàng đợi riêng.

Tất nhiên, chúng tôi vẫn có những cuộc phiêu lưu khi sản phẩm được phát triển và trở nên phức tạp hơn, chẳng hạn như khi chúng tôi thêm HighLoad.

Trong bài viết tiếp theo, chúng tôi sẽ cho bạn biết biểu giá Hi-CPU đã được đưa ra như thế nào: về phần cứng, phần mềm, những tác vụ chúng tôi đã giải quyết và những gì chúng tôi đã làm.

Nguồn: www.habr.com

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