Bài viết được gắn thẻ: lưới điện

Văn phòng lưới máy tính sử dụng môi trường ảo - Phần 4

, thứ Sáu ngày 04 tháng 12 năm 2009 11:59

Giới thiệu

Tôi làm việc trong một công ty mà chúng tôi chạy nhiều công việc hàng loạt chế biến hàng triệu bản ghi dữ liệu mỗi ngày và tôi đã suy nghĩ gần đây về tất cả các máy ngồi xung quanh mỗi ngày và không làm gì trong vài giờ. Nó sẽ không tốt nếu chúng ta có thể sử dụng những máy móc để tăng cường sức mạnh xử lý của hệ thống của chúng tôi? Trong tập hợp các bài viết này, tôi sẽ xem xét các lợi ích tiềm năng của việc sử dụng một văn phòng lưới điện bằng cách sử dụng môi trường ảo hóa.

Trong phần 3, chúng tôi tạo ra máy chế biến ảo của chúng tôi và thiết lập cửa sổ máy để trở thành công nhân có thời gian nhàn rỗi.

Chạy mã mới nhất

Chắc chắn sau khi tạo nhân viên logic kinh doanh của bạn sẽ thay đổi, lỗi sẽ được tìm thấy, mã nhanh hơn hiệu quả hơn sẽ được sản xuất do đó để lại nhân viên của bạn ngồi xung quanh xử lý dữ liệu bằng cách sử dụng cũ đang có mùi . Làm thế nào sau đó chúng tôi đảm bảo rằng chúng tôi luôn sử dụng phiên bản mới nhất và lớn nhất của các kịch bản xử lý của chúng tôi?

Có một vài cách dễ dàng đơn giản, chúng ta có thể làm điều này, thủ đoạn này, tuy nhiên, là để giảm sức mạnh xử lý và mạng lưới giao thông trong việc đạt được điều này. Cho phép bắt đầu với các giải pháp đơn giản và cải thiện từ từ trong một vài lặp đi lặp lại.

Phương pháp đầu tiên là chỉ đơn giản là kết nối với máy chủ kiểm soát công việc của chúng tôi (qua samba, FTP, hoặc tương tự) và kéo xuống các phiên bản mới nhất của mã này. Không phải rất hiệu quả, nhưng nó sẽ làm công việc. Cho phép cải thiện phần nào, làm thế nào về việc tạo ra một kịch bản rsync và sử dụng mà mỗi lần thay vì? Ngoài ra những gì về việc đưa kịch bản xử lý mới nhất của chúng tôi vào lật đổ kiểm tra ra các mã ban đầu và sau đó chỉ cần cập nhật mã của chúng tôi trên mỗi run ( svn cập nhật )

Cuối cùng, chúng ta có thể kết thúc với một kịch bản bash (được gọi là định kỳ mỗi 10 phút) có vẻ đơn giản như sau:

  # / Bin / sh
 nếu ps ax | grep-v grep | grep php > / dev / null
 sau đó
     echo "công việc hiện đang được chế biến, xuất cảnh"
 khác
     echo "Công việc không chạy, bắt đầu ngay bây giờ"
     cd / path / to / / sao chép
     svn cập nhật
     php yourJobProcessingScript.php
 fi 

Bây giờ chúng ta có thể chắc chắn rằng với mỗi lần chạy, chúng tôi chắc chắn đang chạy mã mới nhất. Chúng tôi đảm bảo điều này bằng cách cập nhật cơ sở mã của chúng tôi thời gian và chúng tôi thực hiện một hoạt động và giảm lưu lượng mạng bằng cách chỉ chuyển sự khác biệt tập tin trên mạng của chúng tôi.

Trong thiết lập trình diễn của tôi, tôi đã làm chính xác như trên. Subversion được cài đặt trên máy chủ xử lý công việc của tôi và tôi chỉ đơn giản là kéo mã mới nhất từ ​​một chi nhánh của công nhân bằng cách sử dụng 'svn các bản cập nhật'. Tôi cũng đã thêm một thẻ số phiên bản để xử lý kịch bản của tôi được trả lại cho cơ sở dữ liệu như là một phần của sự trở lại kết quả. Bằng cách này tôi có thể thấy rằng mã của tôi đã được cập nhật mỗi khi tôi sao chép thân của tôi vào các nhân viên, tức là chi nhánh mà tôi chắc chắn chạy kịch bản xử lý mới nhất.

Sử dụng dữ liệu mới nhất

Nếu xử lý công việc của bạn làm cho việc sử dụng các nguồn dữ liệu sau đó tại một số điểm sẽ được cập nhật quá. Trừ khi bạn gọi các nguồn dữ liệu của bạn trên một cơ sở rất thường xuyên bạn sẽ làm tràn ngập hệ thống mạng của bạn với lưu lượng truy cập càng sớm như công nhân của bạn bắt đầu chạy tất cả mọi thứ bế tắc. Đối với giải pháp của tôi, tôi quyết định rằng tôi muốn để di chuyển các nguồn dữ liệu của tôi xung quanh với máy ảo của tôi.

Giữ bạn là con ngựa đó! Nguồn dữ liệu của tôi là gì HUGE? Vâng điều này thực sự là một trường hợp của bao nhiêu dữ liệu chúng ta đang nói? Nó có thể là tiết kiệm chi phí hiệu quả để cài đặt một ổ đĩa cứng bổ sung lớn hơn vào mỗi máy hơn là mua một máy chủ xử lý bổ sung. Đây là một câu hỏi của ngân sách và kinh doanh để quyết định. Nó có thể đó là nguồn dữ liệu của bạn là quá lớn nên không khả thi để giữ cho rằng số lượng dữ liệu trong các máy nhân viên của bạn. Trong trường hợp đó bạn sẽ làm gì? Vâng, chúng tôi có thể nhìn vào gọi một máy chủ dữ liệu địa phương, nhưng điều này có thể gây ra các vấn đề với mạng. Trong trường hợp này, một hệ thống lưới điện như thế này có thể trở thành không thực tế để bao gồm trong môi trường văn phòng của bạn. Nó cũng có thể là bạn có thể nhìn vào các chiến lược thay thế chạy, ví dụ như chỉ kêu gọi công nhân của bạn 20:00-06:00 mỗi đêm và / hoặc nguồn dữ liệu yêu cầu throttling.

Di chuyển trên cho phép nói rằng số lượng nguồn dữ liệu của chúng tôi đến 100GB dữ liệu. Cũng có khá một chút dữ liệu để di chuyển xung quanh mạng cập nhật. Làm thế nào chúng ta sẽ đảm bảo rằng chúng tôi có bản sao mới nhất của các dữ liệu trong trường hợp này? Rsync là một khả năng, nhưng cá nhân tôi nghĩ rằng bằng cách chạy nguồn dữ liệu mới nhất của bạn trên máy chủ xử lý công việc của bạn và thiết lập này lên như là một bậc thầy trong nhân rộng (với một bản ghi bin tốt đẹp lâu dài) có thể là cách để đi:

nhân rộng Bằng cách thiết lập mỗi công nhân của bạn như là một nô lệ các bản cập nhật máy chủ kiểm soát công việc để nguồn dữ liệu của bạn sẽ chảy xuống độc đáo cho người lao động của bạn mà không có một sự gia tăng rất lớn trong hoạt động mạng (có nghĩa là trừ khi bạn thực hiện một cập nhật dữ liệu rất lớn và tất cả các công nhân đá trong cùng một lúc). Điều này có lợi thế hơn rsync trong đó bạn sẽ không nhận được một lúc ngập ngừng trước khi mỗi công việc, như các bản cập nhật cơ sở dữ liệu, mysql daemon nhân viên của bạn sẽ liên tục cập nhật dữ liệu của nó khi xử lý vẫn tiếp tục.

Điều này là làm thế nào tôi thiết lập máy chủ trình diễn của tôi. Để thiết lập sao chép theo hướng dẫn trên trang web mySQL ( Thiết lập sao chép ) và trong vòng 20 phút tôi đã có nhân viên inital của tôi sao chép các tập dữ liệu máy chủ kiểm soát công việc. Đối với mỗi người lao động bổ sung các thiết lập sao chép và quá trình làm việc mỗi khi VM đã được sao chép.

Tóm tắt thông tin

Trong phần này của bài viết chúng tôi đã xem xét cách dễ dàng và không đau là để giữ cho mã xử lý của bạn cập nhật bằng cách using rsync hoặc subverion (SVN) để làm công việc và làm giảm lưu lượng mạng tại cùng một time. Chúng tôi cũng thảo luận làm thế nào để giữ cho nguồn thông tin dữ liệu của bạn up-to-date bằng cách cho phép nó chảy xuống cho mỗi công nhân của bạn. Vì vậy chúng tôi khu vực đảm bảo rằng chúng tôi tiếp tục với logic kinh doanh và thông tin trong hệ thống mạng lưới văn phòng của chúng tôi. Rõ ràng là sẽ có vô số lựa chọn thay thế để thực hiện các nhiệm vụ này, nhưng ở đây là hai ví dụ đơn giản để hiển thị một giải pháp dễ dàng để đi qua.

Tiếp theo thời gian

Trong phần cuối cùng của loạt bài này, aptly tên là Phần 5 , chúng tôi sẽ thảo luận về việc triển khai hệ thống này. Tôi sẽ tóm tắt những gì đã học được và những gì tôi quản lý để tạo ra.

Văn phòng lưới máy tính sử dụng môi trường ảo - Phần 3

, thứ Sáu ngày 04 tháng 12 năm 2009 23:37

Giới thiệu

Tôi làm việc trong một công ty mà chúng tôi chạy nhiều công việc hàng loạt chế biến hàng triệu bản ghi dữ liệu mỗi ngày và tôi đã suy nghĩ gần đây về tất cả các máy ngồi xung quanh mỗi ngày và không làm gì trong vài giờ. Nó sẽ không tốt nếu chúng ta có thể sử dụng những máy móc để tăng cường sức mạnh xử lý của hệ thống của chúng tôi? Trong tập hợp các bài viết này, tôi sẽ xem xét các lợi ích tiềm năng của việc sử dụng một văn phòng lưới điện bằng cách sử dụng môi trường ảo hóa.

Trong phần 2 chúng ta nhìn vào việc làm một máy chủ sẽ chạy, và làm thế nào công việc nên được cấu hình để đạt được số tiền lớn nhất của chế biến trong khi đảm bảo rằng mỗi công việc được xử lý mà không thất bại.

Nhân viên của bạn hoặc máy chủ khập khiễng

Bước tiếp theo trong quá trình là thiết lập các công nhân ảo của bạn. Đối với điều này, tôi sẽ sử dụng một cài đặt của CentOS bằng cách sử dụng VirtualBox. Tôi sẽ cài đặt mySQLPHP trên máy chủ, còn được gọi là (Li nux, m ySQL, P HP) Limp ServerA (tôi có thể đã thực hiện rằng tên lên).

  • Cài đặt VirtualBox trên máy tính các cửa sổ của bạn (theo liên kết)
  • Tải về và cài đặt CentOS (phiên bản hiện hành 5.3) bên trong một máy ảo được tạo ra

Không có điểm tôi sẽ có 1.000 's hướng dẫn tuyệt vời có (ok, đây là một: Tạo và máy ảo trong VirtualBox Managing CentOS ). Điểm quan trọng cần lưu ý tôi giả sử là tôi được gọi là máy ảo của tôi GridMachine.

Theo như sự lựa chọn của khách hàng ảo hóa và hệ điều hành đi không có lý do hấp dẫn lớn đối với mỗi sự lựa chọn. VirtualBox là một cái gì đó tôi sử dụng trên máy chủ của tôi và được hỗ trợ bởi ba hệ điều hành chính. Tôi đã chọn CentOS là một hệ điều hành ổn định của nó tốt và tôi sử dụng nó trên máy chủ web của riêng tôi. Tôi có niềm tin lớn trong các công cụ cho công việc (mặc dù tôi đang áp dụng sử dụng nhanh nhất và dễ nhất cho bạn tâm lý ở đây), vì vậy nếu hệ điều hành X chạy mã của bạn nhanh hơn và nhiều hơn nữa hiệu quả sử dụng mà thay vào đó :)

Điều quan trọng là đảm bảo rằng máy ảo của bạn sử dụng DHCP, nếu không cho mỗi máy ảo mới sẽ cần phải được cấu hình riêng biệt mà là một cái gì đó chúng tôi không want.By sử dụng DHCP chúng ta không cần cấu hình các thiết lập mạng riêng biệt cho các máy công nhân, DHCP sẽ trao ra khu công nghiệp cho bạn. Vì vậy, bạn có thể sao chép máy ảo của bạn về văn phòng mà không cần lo lắng về việc thiết lập mỗi một trong những động (cải thiện khả năng mở rộng và làm giảm nhân viên hành chính).

Quá trình bạn nên nhằm mục đích để đạt được sẽ là để có được một máy vật lý mới, cài đặt VirtualBox, và sau đó triển khai khá nhiều hình ảnh ảo mà không có nhiều khác. Nó có thể là khôn ngoan để thiết lập tất cả các công nhân của bạn trên một subnet khác nhau để bạn có thể nhìn thấy bao nhiêu máy đang chạy. Bạn cũng sẽ cần phải thiết lập máy của bạn trên một hợp đồng thuê lâu dài hay không giới hạn cho thuê DHCP.

Làm thế nào để chạy Việc người lao động

Đây là một khu vực thú vị và có một số phương pháp hợp lệ để xử lý công việc người lao động. Ở đây tôi sẽ chỉ thảo luận về hai rõ ràng nhất:

  • Vĩnh viễn chạy kịch bản: Một kịch bản, có thể là một kịch bản, hoặc một kịch bản PHP được thực hiện một lần trên người lao động và chạy như một phần của một vòng lặp vô hạn. Tôi đã giảm giá phương pháp này là một trong những vụ tai nạn của kịch bản và có khả năng lao động của bạn sẽ ngừng chạy mà không có một số loại can thiệp.
  • Thực hiện kịch bản định kỳ dựa trên: Mỗi phút X cron daemon bắt đầu một cuộc gọi đến kịch bản của bạn để có được điều đi. Nếu không có kiểm tra một số điều này có thể dẫn đến nhiều bản sao nhiều nhân viên chạy kịch bản của bạn.

Quyết định của tôi là đi với cron khởi động một kịch bản mỗi minutes. 10 kịch bản của tôi thực hiện các nhiệm vụ sau đây:

  1. Có được một danh sách các tiến trình và grep 'php'. Nếu không tìm thấy sau đó tiếp tục.
  2. Gọi mã công việc của bạn, trong trường hợp này sẽ là một cái gì đó PHP
  3. Công nhân kịch bản hoàn thành chạy của nó
  4. Sẵn sàng để đi lại trên các cuộc gọi thích hợp tiếp theo

Kịch bản bash của tôi trông giống như sau:

  # / Bin / sh
 nếu ps ax | grep-v grep | grep php> / dev / null
 sau đó
     echo "công việc hiện đang được chế biến, xuất cảnh"
 khác
     echo "Công việc không chạy, bắt đầu ngay bây giờ"
     php yourJobProcessingScript.php
 fi 

Lưu ý: của tiếng vọng gần như hoàn toàn vô nghĩa, nhưng có thể giúp người tiếp theo đến cùng để thử và chỉnh sửa chúng.

Đó là kết luận các thiết lập của máy công nhân ảo, nhanh chóng, đơn giản và dễ dàng để sao chép cho mỗi mảnh của phần cứng mới được nhận. 'Thông minh' của hệ thống lưới điện thực sự không phải là hình tượng trong hệ điều hành, tất cả để làm với các mã được tạo ra công ăn việc làm quá trình, cấu hình việc làm, và đảm bảo rằng công việc chạy khi thích hợp (ví dụ như khi máy chủ nhàn rỗi ).

Thiết lập Windows Khởi công nhân

Nhiệm vụ đầu tiên là các lệnh cần thiết để chạy các máy ảo từ các cửa sổ dòng lệnh. Nếu bạn đã cài đặt VirtualBox trong vị trí mặc định và bạn đã đặt tên GridMachine nhân viên của bạn sau đó các lệnh cần thiết để tải lên nhân viên của bạn là:

  "C: \ Program Files \ CN \ VirtualBox \ VBoxManage.exe" startvm GridMachine 

Tuy nhiên để chạy các kịch bản trong một trạng thái 'không đầu', chúng ta cần phải sử dụng:

  "C: \ Program Files \ CN \ VirtualBox \ VBoxHeadless.exe" startvm GridMachine - vrdp = off 

Điều này sẽ bắt đầu các máy ảo mà không có giao diện và cho phép nó để tiết kiệm nhà nước một cách duyên dáng. Đối số thứ hai sẽ tắt RDP để nó không mâu thuẫn với các cửa sổ RDP, hoặc cung cấp cho bạn một thông điệp về lắng nghe trên cổng 3389. Tên máy ảo là trường hợp nhạy cảm!

Tiếp theo, chúng tôi sẽ cần phải thiết lập các cửa sổ để khởi động máy ảo công nhân của chúng tôi khi máy tính đã được nhàn rỗi. Để làm điều này (trên Windows XP), bạn sẽ cần phải đi Start -> All Programs -> Accessories -> System Tools -> Scheduled Tasks như sau:

dự kiến ​​nhiệm vụ

Tiếp theo nhấp vào "Add Scheduled Task, tiếp theo là trình duyệt để thêm một chương trình tùy chỉnh. Điều hướng đến kịch bản VBoxManage của bạn và kích OK. Lịch trình công việc của bạn cho bất kỳ tùy chọn (chúng tôi sẽ thay đổi điều này trong một phút) và tiếp tục. Sau khi bỏ qua màn hình kế tiếp, các cửa sổ sẽ hỏi bạn người mà bạn muốn chạy nhiệm vụ này, tôi muốn đề nghị hoặc là 'Administrator' hoặc tạo ra một người sử dụng đặc quyền mới. Hãy nhớ chúng tôi không muốn can thiệp vào các tài khoản nhân viên tiêu chuẩn trên máy tính tại bất kỳ điểm nào. Kích tiếp theo và kiểm tra hiển thị tùy chọn nâng cao cho nhiệm vụ này.

Để cuối của hộp văn bản chạy thêm chuỗi 'startvm GridMachine của chúng tôi và đảm bảo rằng chạy chỉ khi đăng nhập còn lại unticked. Truy cập vào lịch trình công việc tiếp theo và thay đổi lịch trình thả xuống tùy chọn 'nhàn rỗi', chọn số lượng thời gian bạn muốn máy tính để được nhàn rỗi trước khi chuyển tới tab tiếp theo.

Cuối cùng, bỏ chọn các tùy chọn trong đó nêu dừng nhiệm vụ nếu nó đã được chạy X số lượng thời gian, nhưng không đánh dấu vào tùy chọn để ngăn chặn các nhiệm vụ nếu máy không còn nhàn rỗi.

lịch trình

Đó là sau đó cho các cửa sổ thiết lập máy chủ!

Tóm tắt thông tin

Trong phần này chúng tôi đã thiết lập một máy ảo hoạt động như một công nhân, cũng như cách thức mà chúng ta gọi và thực hiện các kịch bản xử lý công việc của chúng tôi (cho bản thân mình một kịch bản PHP). Từ đây chúng ta nhìn vào làm thế nào để thiết lập bản sao của chúng ta về cửa sổ để bắt đầu các máy ảo trong chế độ không đầu khi máy tính trở nên nhàn rỗi, và tiết kiệm nước khi người dùng tiếp tục sử dụng máy. Hy vọng rằng vào thời điểm này bạn đang nhìn thấy cách đơn giản nó là để thiết lập một hệ thống như vậy và đang nóng lòng muốn có được một số thí nghiệm sẽ cho mình!

Tiếp theo thời gian

Trong phần 4, chúng tôi sẽ xem xét sử dụng các công cụ để đảm bảo rằng bạn đang chạy phiên bản mới nhất của các nguồn mã và dữ liệu để kết quả thu được là luôn luôn up-to-ngày với các thông tin kinh doanh mới nhất và logic.

Văn phòng lưới máy tính sử dụng môi trường ảo - Phần 2

, thứ Sáu ngày 04 tháng 12 năm 2009 11:23

Giới thiệu

Tôi làm việc trong một công ty mà chúng tôi chạy nhiều công việc hàng loạt chế biến hàng triệu bản ghi dữ liệu mỗi ngày và tôi đã suy nghĩ gần đây về tất cả các máy ngồi xung quanh mỗi ngày và không làm gì trong vài giờ. Nó sẽ không tốt nếu chúng ta có thể sử dụng những máy móc để tăng cường sức mạnh xử lý của hệ thống của chúng tôi? Trong tập hợp các bài viết này, tôi sẽ xem xét các lợi ích tiềm năng của việc sử dụng một văn phòng lưới điện bằng cách sử dụng môi trường ảo hóa.

Trong phần 1, tôi đã đưa ra một cái nhìn tổng quan của hệ thống và công nghệ sẽ được sử dụng cũng như thảo luận một số trong những lý do tiềm năng, tại sao bạn sẽ muốn tạo ra một mạng lưới văn phòng.

Công việc kiểm soát

Nếu bạn đang chạy công việc sau đó bạn sẽ cần một số cách để quản lý chúng. Hệ thống (trên máy chủ công việc của bạn) kiểm soát công việc của bạn cần được thực sự cũng nghĩ ra ngay cả trước khi cố gắng chạy một mạng lưới văn phòng. Vì vậy, trước hết, nhiệm vụ cho một hệ thống kiểm soát công việc là gì:

  • Đưa ra công việc theo yêu cầu của người lao động
  • Yêu cầu người lao động những gì loại của công việc để chạy
  • Theo dõi công việc
  • Đảm bảo rằng công việc chỉ chạy một lần
  • Cung cấp dữ liệu việc làm cho người lao động, hoặc ít nhất là nói với họ để có được nó

Hệ thống này cũng cần phải được mở rộng, một giải pháp mà làm việc cho một trường hợp duy nhất có thể được mở rộng để chạy một số loại công việc khi doanh nghiệp nhìn thấy giá trị trong một giải pháp lưới. Ví dụ, công việc có thể đạt được ưu tiên, nhiều hơn một loại hình làm việc có thể tồn tại (tức là một số cơ sở mã), cuối cùng bạn thậm chí có thể chạy một số máy công nhân khác nhau được tối ưu hóa cho từng loại công việc (mặc dù điều đó không di chuyển ra khỏi người lao động chung chung ' 'ý tưởng). Luôn luôn cố gắng để suy nghĩ về tương lai khi phát triển hệ thống, một tầm nhìn ngắn hạn có thể dẫn đến thất vọng dài hạn và tăng thời gian phát triển.

Công việc máy chủ

Chúng tôi sẽ cần một nơi nào đó để kiểm soát công việc của chúng tôi, điều này sẽ là hệ thống duy nhất trong mạng lưới của bạn có một bộ định vị tài nguyên cố định, là một địa chỉ IP, tên máy, URL (bằng cách sử dụng nội bộ DNS), ... Điều này là do người lao động cần phải biết nơi để tìm việc làm, công nhân cần phải tìm ra hệ thống kiểm soát công việc (không hệ thống điều khiển công việc tìm thấy những công nhân).

Các máy chủ bản thân công việc không thực sự có một nhiệm vụ phức tạp (trong một hệ thống cơ bản dù sao đi nữa), nó cần để lưu trữ một danh sách việc làm, bàn tay ra việc làm, nhận kết quả, và sau đó lưu trữ chúng để thu hồi sau. Làm thế nào các bộ phận này (chẳng hạn như 'tay ra công ăn việc làm ") được định nghĩa có thể là rất cơ bản. Sau đó, chúng tôi có thể mở rộng hệ thống để bao gồm một giao diện quản trị để thêm, chỉnh sửa, xóa, đình chỉ công việc nhưng điều này vượt ra ngoài tập thể dục này.

Có là không có lí do gì sau đó là máy chủ công việc của bạn không có thể là một máy ảo đang chạy trong máy chủ xử lý chính của bạn cung cấp nó không thoát nước quá nhiều tài nguyên từ nó. Tuy nhiên, các máy chủ công việc không cần sẵn sàng cao, nếu nó đi vào một buổi tối bạn sẽ mất cả một ngày cuối tuần chế biến, có khả năng chi phí cho bạn một vài tuần giá trị của thời gian xử lý (khi so sánh với máy chủ xử lý chính của bạn một mình) . Bạn có thể muốn xem xét việc đặt máy chủ công việc của bạn trên một môi trường cân bằng tải cho sẵn sàng cao.

Cơ bản cài đặt

Thiết lập cơ bản cho máy chủ công việc của chúng tôi sẽ bao gồm những gì tôi đang kêu gọi một trong các máy chủ khập khiễng của tôi (đó là Li nux, m ySql, P HP). Đang chạy trên công nhân Thea thực sự sẽ làm việc ra những công việc nó có thể chạy bằng cách tương tác với với cơ sở dữ liệu hệ thống điều khiển công việc. Sau đó chúng ta có thể tạo ra một dịch vụ web và bàn tay thực sự ra công ăn việc làm hơn là có người lao động làm các công việc khó khăn, bản thân, nhưng bây giờ chúng tôi sẽ tiếp tục sử dụng các nguyên tắc KISS (Hãy giữ nó đơn giản, Stupid).

Vì vậy, cho phép tạo ra ba bảng mySQL để đối phó với công việc. Đây sẽ là công việc `,` jobRecords `, và` jobResults `.

Việc bảng Ở đây tôi đang sử dụng SQL Buddy một chút thay thế tuyệt vời để phpMyAdmin chỉ vì nó dễ dàng hơn để cài đặt trên CentOS (đối với những người khác nhìn thấy: 10 Đại lựa chọn thay thế để phpMyAdmin )

Bảng này bao gồm 5 lĩnh vực đơn giản,

  • id: Độc đáo xác định các công việc
  • name: có thể là một tài liệu tham khảo khách hàng, hoặc bất kỳ số nào của định danh khác
  • Tình trạng: Bạn cần phải biết công việc, ví dụ như
    • 0: Không bắt đầu
    • 1: chọn
    • 2: Đã hoàn thành
  • started_by: Ai bắt đầu làm công việc? Điều này không hoàn toàn bắt buộc nhưng là một tốt đẹp để có. Tôi muốn đề nghị nhân viên theo dõi địa chỉ IP của họ trên mạng của bạn
  • started_at: Khi nào công nhân bắt đầu công việc? Bằng cách theo dõi các công việc không hoàn tất trong vòng X số lượng thời gian chúng ta biết chúng ta cần nhận công việc một lần nữa và bắt đầu chế biến bằng cách công nhân khác. Người lao động có thể ngăn chặn xử lý / đi offline cho bất kỳ số lý do mất điện, tai nạn, mất mạng.

Nó rất dễ dàng bảng này có thể được mở rộng với một vài trường bổ sung cho phép theo dõi số liệu thống kê, kết thúc cột một thời gian để xem bao lâu công việc, một truy cập để xem có bao nhiêu công nhân được các công việc (rõ ràng điều này cần phải có xu hướng 1), công việc ưu tiên, danh sách có thể đi và về. Trong kịch bản công việc phức tạp hơn, nó sẽ có thể xác định bao nhiêu bộ nhớ người lao động sẽ cần truy cập vào (và do đó chỉ sử dụng lao động thích hợp), hoặc thậm chí của người lao động sẽ được yêu cầu.

Cho phép thêm một số công việc ví dụ:

ví dụ công việc

Bảng tiếp theo lại là khá đơn giản để hiểu, đây là hồ sơ công việc của chúng tôi. Họ được liên kết với bảng công việc chính của một cột jobs_id `. Làm cho bảng này phụ thuộc rất nhiều vào dữ liệu mà bạn cần phải cung cấp cho công nhân của bạn, cho phép thực hiện một ví dụ rất đơn giản, nơi chúng tôi có bốn cột:

  • id: ID của các hồ sơ
  • tên: tên của Người
  • địa chỉ: địa chỉ của Người
  • jobs_id: ID công việc mà hồ sơ này được liên kết với

Bảng thứ ba và cuối cùng bao gồm một bảng kết quả, nó có nhiều giống như là bảng hồ sơ của chúng tôi, và với việc bổ sung một số cột có thể là một phần của bảng hồ sơ:

  • job_record_id: Liên kết kết quả các bảng công việc
  • Kết quả: dữ liệu kết quả

... Và đó là tất cả những gì bạn cần để kiểm soát công việc! (Mặc dù ở một mức độ rất cơ bản) Trong trường hợp của tôi tôi chỉ ra một bảng dữ liệu của tôi để xử lý được đặt, nhưng điều này có thể chỉ là một cách dễ dàng là một tập tin, các thông số để chạy mã mô phỏng, bạn đặt tên cho nó.

Lựa chọn một công việc

Như đã nêu trước đây, các công nhân sẽ làm quản lý công việc của chúng tôi cho chúng ta bây giờ, vì vậy tất cả chúng ta cần phải thực sự làm là tìm một công việc cần xử lý và có được thông tin. Làm thế nào chúng tôi sẽ làm điều này? Cũng chọn tiêu chí lựa chọn công việc của chúng tôi và tìm kiếm công việc, trong SQL tôi đã làm như sau:

  1. Đi bất kỳ công việc không được đánh dấu đầy đủ nhưng từ nhân viên của chúng tôi và đặt lại (thay thế ME__ __ với một định danh, đơn giản nhất sẽ là địa chỉ IP):
      CẬP NHẬT `công việc` SET `tình trạng` = 0 ở đâu `tình trạng` = 1 AND `started_by` = __ ME__; 
  2. Sử dụng các tiêu chí lựa chọn công việc của chúng tôi, chọn một công việc và cho biết hệ thống kiểm soát mà công nhân này là đối phó với nó:
      CẬP NHẬT `công việc` SET `tình trạng` = 1, `started_by` = __ ME__, `started_at` = NOW () WHERE `tình trạng` = 0 OR
     (`Tình trạng` = 1 VÀ `started_at`> DATE_SUB (NOW (), INTERVAL X Giờ)) ORDER BY `id` ASC; 

    Bởi việc làm lấy mà không trả lại kết quả trong X số lượng thời gian chúng tôi đảm bảo rằng tất cả các công việc được chạy trong trường hợp của một công nhân bị rơi hoặc đi AWOL.

  3. Tiếp theo lấy các chi tiết công việc tiếp theo là các hồ sơ tự:
      SELECT * FROM `công việc` WHERE `started_by` = __ ME__ LIMIT 1;
     Chọn * FROM `job_records NƠI` id `= __ JOBID__; 

Sau khi hoàn thành công việc, chúng tôi ghi chèn kết quả của chúng tôi và đánh dấu công việc là hoàn thành. Hãy nhớ là việc làm có thể tạm dừng / tiếp tục bất cứ lúc nào cho phép một số mạnh mẽ trong kịch bản của bạn. Nó có thể là công việc đình chỉ một nửa thông qua cập nhật hệ thống kiểm soát công việc, do đó, kiểm tra số lượng hồ sơ trong một công việc và số lượng các kết quả được lưu lại hệ thống kiểm soát công việc sẽ là một động thái khôn ngoan.

Ngoài ra, trong khi điều này chứng minh làm thế nào công việc có thể được lựa chọn và quản lý từ một khung truy vấn SQL bạn thực sự cần được trừu tượng hóa kiểm soát công việc của bạn rằng nếu bạn quyết định chuyển sang sử dụng một dịch vụ web, tập tin dựa trên hệ thống, XML , hoặc bất kỳ khác số hệ thống, nó sẽ không ảnh hưởng đến các mã trên nó.

Công việc cấu hình

Các khía cạnh tiếp theo để xem xét là việc làm kích thước và cấu hình. Bằng cách chơi với cấu hình việc làm, chúng ta có thể tấn công một sự cân bằng tuyệt vời giữa tốc độ, quá trình sao chép, và độ tin cậy. Đi một vài kịch bản OFA:

  1. Việc làm mất 1 ngày để chạy: Điều này có nghĩa rằng các nhân viên của bạn cần 15 ngày, kể từ ngày xử lý từng công việc (nhớ 10% năng lượng cho 2/3rds trong thời gian). Điều này rõ ràng không phải là một cấu hình khôn ngoan, quy mô công việc của bạn là cách quá lớn! Nó sẽ mất ít nhất là gấp đôi thời gian để có được một công việc xử lý các nhân viên ban đầu nên đi AWOL (thời gian nhận rằng nó đã không trở về một kết quả cộng với thời gian tái chế). Trong một lý tưởng, bạn muốn có ít nhất một công việc dễ dàng xóa vào cuối mỗi khoảng thời gian nhàn rỗi dài, như vậy bạn tiếp tục công việc đánh dấu trên và trường hợp xấu nhất một công việc sẽ mất hai ngày để xử lý đầu tiên phải đi mất tích.
  2. Việc làm mất 1 phút để chạy: Điều này có nghĩa rằng các nhân viên của bạn mất khoảng 15 phút để chạy từng công việc. Trong khi điều này ban đầu có thể có vẻ lý tưởng, bạn có được chế biến công việc bổ sung trong thời gian ăn trưa, nghỉ uống cà phê, các cuộc họp, kịch bản này đặt thêm căng thẳng trên các lĩnh vực khác của hệ thống của bạn và giới thiệu những vấn đề riêng của mình. Ví dụ, trước hết là thiết lập / chế biến tỷ lệ thời gian của bạn là sẽ đi xuống, do đó mất hiệu quả hệ thống. Mạng của bạn là có được công việc liên tục truyền tải thông tin cho các nhân viên khác nhau bực bội công nhân là đồng ngày của họ sang ngày làm việc. Bạn cũng sẽ căng thẳng hơn trên máy chủ xử lý công việc của bạn vì nó có món ăn ra rất nhiều và rất nhiều phần nhỏ công việc một cách thường xuyên. Cuối cùng, trong tình huống này nếu máy chủ công việc của bạn đi xuống bạn sẽ tạo ra một đăng nhập trở lại rất lớn của các công việc dở dang trong khi công việc lớn hơn có thể tiếp tục chế biến blissfully không biết rằng các máy chủ công việc đã trải qua khó khăn.

Trong thực tế sẽ có cấu hình không có một lý tưởng cho các thiết lập mạng lưới của bạn, phụ thuộc nhiều vào các nguồn lực sẵn có, loại công việc, thời gian yêu cầu thay đổi hoàn toàn công việc, năng lực mạng lưới, và như vậy. Tuy nhiên, một số hướng dẫn sẽ là:

  • Việc làm kích thước mỗi công nhân có thể nhận được thông qua ít nhất 3-4 công việc trong một khoảng thời gian 15 giờ (khoảng thời gian dài nhất có khả năng nhàn rỗi)
  • Chơi với quy mô công việc để thời gian thiết lập trở nên khá đáng kể so với thời gian xử lý (mang trong tâm trí các điểm trên).
  • Nếu một công việc không hoàn thành trong thời gian gấp đôi số tiền (có thể ít hơn), bạn mong đợi nó để hoàn thành nó giả định đào ngũ của nó đi và bắt đầu chế biến với công nhân khác. Điều này có nghĩa là bạn có thể phải chờ đến ba lần chiều dài bình thường của một công việc cho nó để hoàn thành (có thể lâu hơn nếu công việc tiếp theo không thành công). Bạn có thể muốn làm giảm thời gian này, nhưng cẩn thận không để giảm quá nhiều như bạn có thể bắt đầu sao chép các nhiệm vụ xử lý một cách thường xuyên.
  • Công ăn việc làm nên được độc lập của yêu cầu bên ngoài càng nhiều càng tốt. Các máy chủ công việc, ví dụ, chỉ nên được liên lạc ở đầu và cuối của mỗi công việc.
  • Không bão hòa mạng của bạn, điều này sẽ có hai tác động tiêu cực, nhân viên ban ngày của bạn sẽ tìm thấy bằng cách sử dụng các mạng bực bội và các vấn đề có thể được kinh nghiệm với các kết nối thời gian một vấn đề sẽ chỉ trở nên tồi tệ hơn khi bạn quy mô mạng lưới của bạn.
  • Đảm bảo việc làm có thể chạy trên các công nhân của bạn. Nếu công việc trở thành công việc quá bộ nhớ không gian đĩa thâm canh, thâm canh sẽ bắt đầu hủy bỏ và điều duy nhất bạn sẽ nhận thấy sự sụt giảm số lượng công việc xử lý với không có lý do thực sự tại sao.

Trình Kết quả của việc

Khi trình kết quả của một công việc quan trọng là phải kiểm tra rằng các kết quả đã không được cung cấp bởi công nhân khác, đặc biệt là nếu người lao động hiện nay đã không hoạt động một thời gian.

Khi kết quả được cung cấp đảm bảo rằng số lượng kết quả phù hợp với số lượng hồ sơ trong công việc.

Như đã nêu trước đó, và có thể không được trên nhấn mạnh, xây dựng khả năng chịu lỗi vào hồi kết quả công việc và trình. Các công nhân có thể (và rất có thể sẽ) đi vào chế độ đình chỉ bất tiện ở lần và điều này cần được phục vụ các thực cho. Cũng một lần nữa tóm tắt kết quả của bạn trình sẽ giúp phục vụ cho các thay đổi trong tương lai hệ thống kiểm soát công việc của bạn dễ dàng hơn nhiều để đối phó với.

Tóm tắt thông tin

Trong section này, chúng tôi đã xem xét những gì một máy chủ điều khiển công việc cần phải làm và làm thế nào để có được một hệ thống rất cơ bản thiết lập. Chúng tôi thảo luận làm thế nào để lấy một công việc từ hệ thống điều khiển và làm thế nào tốt nhất để cấu hình việc làm để có được nhất của chúng ta về hệ thống mạng lưới văn phòng của bạn. Để kết thúc, một đoạn văn hoặc trình kết quả lại cho máy chủ điều khiển công việc đã được trình bày.

  • Một máy chủ điều khiển công việc quản lý công việc và đảm bảo rằng tất cả các đơn vị công việc được hoàn thành
  • Tóm tắt công việc của bạn chọn / kết quả trình, chúng ta có thể thay đổi công nghệ của máy chủ điều khiển mà không có nhiều vấn đề
  • Cấu hình công việc của bạn để đảm bảo rằng họ đang chạy một cách nhanh chóng và hiệu quả mà không gây áp lực quá nhiều vào cơ sở hạ tầng mạng của bạn, và không có nhân bản các nhiệm vụ xử lý một cách thường xuyên.
  • Đảm bảo rằng bạn xây dựng khả năng chịu lỗi và checking lỗi vào thói quen của bạn, công nhân có thể đình chỉ và tiếp tục và hầu hết các bất tiện của thời đại. Nhớ kiểm tra nếu kết quả đã được đệ trình bởi các công nhân khác.

Tiếp theo thời gian

Trong phần 3 chúng ta sẽ tạo máy chế biến ảo của chúng tôi và thiết lập máy cửa sổ của chúng tôi để trở thành công nhân trong thời gian nghỉ.

Văn phòng lưới máy tính sử dụng môi trường ảo - Phần 5

, thứ Sáu ngày 04 tháng 12 năm 2009 11:03

Giới thiệu

Tôi làm việc trong một công ty mà chúng tôi chạy nhiều công việc hàng loạt chế biến hàng triệu bản ghi dữ liệu mỗi ngày và tôi đã suy nghĩ gần đây về tất cả các máy ngồi xung quanh mỗi ngày và không làm gì trong vài giờ. Nó sẽ không tốt nếu chúng ta có thể sử dụng những máy móc để tăng cường sức mạnh xử lý của hệ thống của chúng tôi? Trong tập hợp các bài viết này, tôi sẽ xem xét các lợi ích tiềm năng của việc sử dụng một văn phòng lưới điện bằng cách sử dụng môi trường ảo hóa.

Trong phần 4, chúng tôi đã sử dụng các công cụ để đảm bảo rằng chúng tôi đang chạy phiên bản mới nhất của các nguồn mã và dữ liệu để kết quả thu được là luôn luôn up-to-ngày với các thông tin kinh doanh mới nhất và logic.

Trước khi triển khai

Trước khi triển khai hệ thống mạng lưới của bạn nếu có một điều bạn làm và một điều một mình, nó là điểm chuẩn hệ thống hiện tại của bạn! Không có vấn đề gì bạn nói với đồng nghiệp về bao nhiêu thêm công việc hệ thống của bạn sẽ làm gì trừ khi bạn có con số để sao lưu này lên bảo lãnh của bạn là không có gì. Vì vậy,

  • có bao nhiêu hồ sơ bạn có thể xử lý hiện tại? Mỗi ngày? Mỗi giờ?
  • Làm thế nào lâu nó thường xoay quanh một công việc?
  • Nhiều hơn năng lực bạn có?

Ngoài ra còn có thêm câu hỏi:

  • Nếu máy chủ xử lý của bạn (hoặc một trong các máy chủ xử lý của bạn) đi xuống như thế nào điều này sẽ ảnh hưởng đến khả năng của bạn, bạn sẽ được làm tê liệt?
  • Lợi thế gì bạn hy vọng / mong đợi để có được từ một hệ thống lưới điện?
  • Máy văn phòng của bạn có khả năng chạy các công việc?
  • Được của bạn (hoặc bạn công việc có thể được chuyển đổi) để wrok trong phong cách của chạy?

Điểm quan trọng cuối cùng là mất thời gian của bạn trên bất kỳ sự thay đổi lớn như thế này. Cập nhật mã xử lý của bạn để làm việc bằng cách sử dụng phương pháp mới, điểm chuẩn một lần nữa. Có thể thiết lập máy chủ xử lý của bạn để chạy một máy ảo, sau khi tất cả các máy chủ xử lý của bạn sẽ chỉ là một công nhân (chỉ là một rất mạnh tương đối). Cho phép các quá trình mới để giải quyết.

Triển khai

Đề nghị của tôi sẽ được bật vào ngày cuối tuần một văn phòng thực hiện tất cả các cài đặt và thiết lập. Làm điều này trước khi một kỳ nghỉ hai tuần và để lại nên nghèo khác chap để đối phó với những hậu quả có thể không ...

Triển khai cho một hệ thống như thế này cần được làm chậm. Mặc dù nó là tương đối đơn giản để thiết lập hệ thống này sẽ ảnh hưởng đến toàn bộ cơ sở hạ tầng văn phòng của bạn (tốt kỹ thuật số). Firstly, roll out to a couple of machines at a time, monitor network traffic, how the worker hosts perform on a day-to-day basis. You may need to alter your job configuration in response to your findings.

Once the system has settled with a few machines (lets say 10% of all office machines, ie 5) keep monitoring network traffic and host machine performance. Next benchmark again, you should now be processing 33% more jobs than your first benchmarks. Check this is so, or that you're at least in this ballpark. If not, investigate what is going on before moving on. Repeat this cycle until you happily have all office machines running without killing individual machine performance or grinding your network to a standstill.

At all times keep benchmarking, even after all deployments are made. Check how new code updates affect speed of your system, check all workers are reporting in and processing jobs. Slowly (very slowly) increment your job configuration to get the best from your workers and network.

Stop!

What if you want to stop your workers from running at some time? They are all out there running, regenerating, and trying their best to process data like hungry insects. The answer may seem obvious but its worth adding just in case its overlooked. Simply edit your processing script with an exit(0) or die() or some other statement to kill your processing job. An important reason why we always try to update to the latest processing script before any run!

Demonstration System

In order to write this set of short articles I created a very small grid to demonstrate the technologies and methodologies. I read lots of articles, tutorials, and used various tools to setup and monitor what was going on. By no means have I gone out and saturated a whole office with traffic and nor have I had access to a regular staff members PC to see how host performance was affected.

My demonstration system was very humble indeed. I used my regular desktop set up as a job control server. On this I had installed mySQL server installed set up as a master in replication, PHP , and SVN linked through apache (for access via worker VM).

I then created a centOS worker machine on VirtualBox on a 6 year old windows XP laptop. I setup scheduled tasks as specified after copying the VM onto the machine and let it go.

The virtual machine was set up with PHP, subversion, and mySQL. I checked out a branch named 'worker' from my job control servers repository and made sure it could be updated using 'svn update'. Next I setup mySQL as a slave and checked that data was replicating from mySQL on the job control server down to the worker VM. After all this I setup the bash script and the cron job.

My processing script basically went along the lines of this (very simple stuff):

  • Read in the name field
  • Counted the number of similar names in a table from the data source held on the VM
  • Counted the number of names as above but splitting the name by spaces (ie forename, middle, surname)
  • Repeated this process 1,000 times

Each job took approximately 20 minutes to run. At one point I opened several copies of the worker VM on the windows laptop and watched the jobs be checked off by each of the worker IP addresses. At this point I also confirmed that replication automatically restarted.

Leaving the laptop to idle resulted in a worker starting to process jobs from the job control server. When resuming laptop usage there was a delay of about 30-60 seconds, this is a fair amount of time and staff would need to be made aware that their machine may pause for a short while when returning to the machine. Newer machines may not have a pause of this long. The benefit of the amount of processing performed by these machines during idle periods would more that outweigh staff members having to wait a short period (say 1 minute) on arriving at their machines of a morning (I frequently wait longer that this for a Windows Defender update to take place) provided they were made aware of this (useful time to grab a morning coffee!).

Overall I feel confident that I have demonstrated the technologies that could be used to create such a system. I have shown that such a system does work on a (very) small scale and with some more experimenting could be scaled up utilise the resources of an office's machines. If I don't get to the point of doing this I would be very interested to know/see when someone else does.

Conclusions / Evaluation

The next obvious step would be to actually get a real world example and start to deploy a system such as this within an office environment and see what happens. Asking a business to commit to this without a trail blazing company to prove the technology and effectiveness may be a little difficult. Grid/Distributed computing is very popular is some circles and has some large applications (BIONC, SETI@Home, Folding@Home, etc). I did not, however, find a smaller scale and simple system like this in my searches that could be rolled out within an office environment.

I created a basically free system using mostly open source software and tools available in almost any office. The technologies were basically demonstrated and show to perform and work as expected. Hopefully I have show that with not much work and with a very simple setup you can deploy an office grid computing system that is powerful, cheap, and scalable all at the same time.

Once a system is up and running there is almost no end to the amount of customisation and improvements you can make. For example statistics / benchmarking can easily be added showing the worth of such a system every day. New machines can be added quickly and easily as and when they arrive with upgrades to existing hardware bolstering your processing power.

I hope you've enjoyed reading this series of articles and its given you food for thought on running an office grid system. The solution presented here won't necessarily work in all situations but should be adaptable to allow you to get your data processing done using your own solution.

Please feel free to send me any comments, corrections, or improvements and I'll do my best to keep this article updated to match.













Panorama Theme by Themocracy

6 visitors online now
5 guests, 1 bots, 0 members
Max visitors today: 56 at 08:41 am UTC
This month: 56 at 25-04-2012 08:41 am UTC
This year: 69 at 27-02-2012 09:56 am UTC
All time: 130 at 28-03-2011 10:40 pm UTC