2011-12-31 38 views
29

Chúng tôi chỉ có các máy chủ mới cho hệ thống mới của chúng tôi và tôi muốn biết tôi nên làm gì để làm cho mã mới của mình hiệu quả nhất có thể và cách tổ chức nó.tổ chức mã php

Tôi muốn một giải pháp tốt vì vậy tôi không phải tổ chức lại nó 1 năm kể từ bây giờ (ví dụ) và tôi muốn các phương pháp và kỹ thuật tốt nhất để đảm bảo mã của tôi sẽ tồn tại đủ lâu để tránh làm lại nó một lát sau. không khuôn khổ sử dụng ở đây

Dưới đây là env tôi mới:

  • 8 máy chủ web LAMP (apache2, php 5.3.5, phần trăm os 5) - (xeon E5645, 32g ram, cuộc đột kích 10 1T 15k) - 1 cân bằng tải để quản lý chúng
  • 12 cơ sở dữ liệu mysql 5,5 máy chủ (tương tự như trên) với bản sao (4 master, 8 nô lệ)
  • 1 svn máy chủ (server cũ chúng tôi sử dụng)

ý tưởng của tôi là để phản ánh chúng (các máy chủ web) và chúng đẩy mã từ SVN đến tất cả các máy chủ. Cái này tốt không?

+2

là máy chủ svn trên cùng một mạng với máy chủ web? hoặc bạn có svn được lưu trữ trên một tên miền riêng biệt mà không thuộc về bạn? –

+0

máy chủ svn nằm trong cùng phạm vi ip để có trên cùng một mạng với máy chủ nhưng không thể truy cập từ bên ngoài –

Trả lời

36

Bạn có thể tập trung mã của mình vào một thư mục chung (hoặc tạo tập lệnh sao chép tất cả mã vào 8 máy chủ hoặc sử dụng NFS).

Mã tập trung này có thể nằm trong một hoặc nhiều kho lưu trữ trong SVN của bạn. Vì vậy, khi bạn đẩy, bạn chỉ đẩy những gì bạn cần để đẩy.

Ví dụ: bạn có thể tạo 1 kho lưu trữ cho thư viện PHP của riêng bạn (lớp cơ sở dữ liệu, xml, imap, v.v ...). Trong cấu trúc đơn giản và khi bạn gọi những tệp này bạn chỉ cần thực hiện:

require('/web/lib/DatabaseMySQL.class.php'); 

Bằng cách này, bạn biết tất cả các tệp cần thiết ở cùng một nơi và rất dễ bảo trì. Đặc biệt nếu mã của bạn yêu cầu các tệp yêu cầu yêu cầu tệp.

Bạn có thể tạo bao nhiêu kho lưu trữ tùy thích và lặp lại điều này nếu bạn không muốn trộn các tệp - ví dụ như bên thứ ba (Smarty, phpmailer) với mã bạn tạo.

Điều khác là, không sáng tạo lại bánh xe. Có rất nhiều mã tốt ở đó có thể làm những gì bạn đã cần phải làm. Giống như gửi email (phpmailer hoặc bất kỳ người nào khác) hoặc hệ thống mẫu (Smarty hoặc bất kỳ người nào khác). Bằng cách này bạn cùng một thời gian phát triển và khi một bản cập nhật nếu có, bạn chỉ cần tải về, sao chép (cam kết nếu bạn có nó trong một kho lưu trữ) và đẩy.

Tập lệnh VS NFS.

Tạo tập lệnh để đẩy tất cả mã của bạn vào 8 máy chủ web dễ thực hiện. Mặt trái của điều này là bạn cần phải chắc chắn rằng tất cả các thư mục và tất cả các tập tin bạn có trên mỗi máy chủ là giống hệt nhau để tránh lỗi. Ngoài ra, nếu có sự chậm trễ trên mạng của bạn hoặc thả kết nối trong khi đẩy một số máy chủ sẽ không có cùng một mã. Một lần nữa, nhiều lỗi hơn. Đây là một chút nhanh hơn để chạy so với các giải pháp NFS.

Tạo NFS khắc phục vấn đề ở trên vì bạn chỉ sử dụng 1 vị trí nhưng nếu vị trí đó thả tất cả các máy chủ của bạn sẽ không chạy chính xác. Vì vậy, khi bạn đẩy mã, bạn chỉ đẩy tới 1 địa điểm và tất cả các máy chủ khác sẽ tự động có mã mới. Một cái gì đó bạn cần phải biết cũng có, điều này sẽ chậm hơn một chút so với nếu mã trực tiếp trên ổ đĩa cứng.

Dưới đây là một kịch bản mẫu mà bạn có thể sử dụng:

Bạn có thể tạo một kịch bản sh sẽ sao chép mã từ kho lưu trữ của bạn (ví dụ, mã bạn kiểm tra ra từ kho lưu trữ) cho tất cả các máy chủ như thế này:

// file: pushcode.sh 
#!/bin/bash 
/usr/bin/rsync -avz --exclude='.svn' -e ssh /path/to/code/checkedout/ [email protected]:/path/to/code 
/usr/bin/rsync -avz --exclude='.svn' -e ssh /path/to/code/checkedout/ [email protected]:/path/to/code 

làm kịch bản này thực thi và chạy nó:

./pushcode.sh 

để đảm bảo bản sao mã một cách chính xác mà không nhắc mật khẩu mỗi lần, bạn sẽ phải bypass the ssh login.

Đây là một tài khoản tốt bạn có thể thích: https://serverfault.com/questions/195035/linux-nfs-performance-vs-other-fss

+0

cảm ơn bạn vì điều này, rất hữu ích. tôi nghĩ rằng bị bệnh đi với kịch bản một để bắt đầu, có vẻ dễ dàng hơn lúc đầu tiên sau đó, bất kỳ đề nghị về kịch bản? tôi làm nó như thế nào? –

+0

Tôi đã cập nhật câu trả lời của mình –

+0

cảm ơn bạn rất nhiều vì sự giúp đỡ của bạn –