+2

So sánh giữa Capistrano và Mina.

Sau khi phát triển 1 ứng dụng Rails, việc tiếp theo ta cần làm là deploy nó lên server cho tất cả mọi người cùng truy cập. Bài trước mình đã hướng dẫn các bạn deploy bằng Capistrano. Tuy nhiên, việc deploy bằng Capistrano khá tốn kém thời gian (Mình sẽ phân tích rõ phía dưới.), và mình đi tìm một cách deploy khác nhanh hơn, và mình đã phát hiện ra Mina.

Bài này mình sẽ làm 1 phép so sánh giữa Capistrano và Mina. Mình lấy 1 dự án hoàn chỉnh để deploy, để nhận biết được sự khác nhau về tốc độ, chứ nhanh quá thì thằng nào cũng như thằng nào.

Tiêu chí so sánh:

- Tốc độ deploy
- Deploy đa môi trường.

Bạn nào chưa biết cách deploy Rails app với Capistrano và Mina có thể tìm hiểu: http://capistranorb.com/ http://nadarei.co/mina/

So sánh về tốc độ deploy

Mình sẽ thử 2 lần deploy

- Lần 1 là deploy tất cả file.
- Lần 2 là deploy những file thêm mới vào.

Lần 1:

Sau khi deploy lên server mình nhận được 2 kết quả như sau:

Capistrano:

INFO [08016a87] Running /usr/bin/env mkdir -p /tmp/capistrano/ on capistrano.nhatnh.com
DEBUG [08016a87] Command: /usr/bin/env mkdir -p /tmp/capistrano/
INFO [08016a87] Finished in 1.236 seconds with exit status 0 (successful).
DEBUG Uploading /tmp/capistrano/git-ssh.sh 0.0%
INFO Uploading /tmp/capistrano/git-ssh.sh 100.0%
INFO [b1b91149] Running /usr/bin/env chmod +x /tmp/capistrano/git-ssh.sh on  capistrano.nhatnh.com
DEBUG [b1b91149] Command: /usr/bin/env chmod +x /tmp/capistrano/git-ssh.sh
INFO [b1b91149] Finished in 0.172 seconds with exit status 0 (successful).
...
INFO [9a6ef5d6] Running /usr/bin/env echo "Branch master deployed as release 20170830155724 by appconus; " >> /var/www/c/ capistrano.nhatnh.com/revisions.log on  capistrano.nhatnh.com
DEBUG [9a6ef5d6] Command: echo "Branch master deployed as release 20170830155724 by appconus; " >> /var/www/c/ capistrano.nhatnh.com/revisions.log
INFO [9a6ef5d6] Finished in 0.228 seconds with exit status 0 (successful).

Mina:

-----> Creating a temporary build path        
-----> Cloning the Git repository        
       Cloning into bare repository '/var/www/m/mina.nhatnh.com/scm'... 
-----> Using git branch 'master'        
       Cloning into '.'... 
       done. 
-----> Using this git commit        
 
       Gabrijel Skoro (f78408d): 
       > initial commit
 
-----> Symlinking shared paths        
-----> Installing gem dependencies using Bundler        
       Fetching gem metadata from https://rubygems.org/.......... 
       Fetching gem metadata from https://rubygems.org/.. 
       Installing rake (10.1.0)  
       Installing i18n (0.6.9)  
       ...
-----> Migrating database        
-----> Precompiling asset files   
-----> Build finished        
-----> Moving build to releases/1        
-----> Updating the current symlink        
-----> Launching        
-----> Done. Deployed v1        
       Elapsed time: 660.90 seconds

Theo kết quả như trên ta nhận thấy, với Capistrano nó không trả về tổng thời gian công việc, cho nên mình đo thủ công và thấy mất khoảng >902s (~15 minus) cho lần deploy đầu tiên. Còn Mina tổng thời gian thực hiện chỉ là 660s (>11 minus), nhanh hơn so với Capistrano rất nhiều. Tất nhiên kết quả trả về còn phụ thuộc vào tốc độ mạng tại thời điểm deploy.

Lần 2:

  • Lần 2 khác rất nhiều so với lần 1: Lần đầu tiên nó phải bundle, migration các kiểu. Nhưng lần 2 thì nó chỉ chạy những cái được thay đổi so với lần 1 nên tốc độ nhanh hơn.

Kết quả:

Tốc độ của Mina đáng kinh ngạc. nhanh hơn Capistrano rất rất nhiều

Vậy lý do vì sao Mina lại nhanh hơn hẳn Capistrano như vậy.

  • Vì cơ chế deploy của Capistrano theo dạng: Tạo ssh session mỗi khi chạy 1 lệnh nên sẽ mất rất nhiều thời gian. Còn Mina thì nó chỉ mở 1 lần khi bắt đầu và đóng khi kết thúc công việc nên tốc độ rất nhanh.

Về tốc độ Mina ăn đứt Capistrano, vậy về deploy đa môi trường thì sao

So sánh deploy đa môi trường.

Với Capistrano bạn chỉ cần tạo file tương ứng với mỗi môi trường trong thư mục config/deploy. (Ví dụ: staging.rb, test.rb, production.rb) Nhưng bất lợi ở 1 chỗ là khi bạn cần deploy chỉ 1 môi trường bạn cũng phải config cho cả 2 file là deploy.rb production.rb.

Còn với Mina việc deploy lên 1 môi trường thì khá đơn giản, mặc định nó là production, nên chỉ cần config trong file deploy.rb là được. Thì nó lộ ra nhược điểm, bạn sẽ phải tạo thêm các file cho các môi trường, sau đó chạy lệnh:

$ mina deploy -f path/to/environment/config

Hoặc là tạo 1 file config, sau đó load nó lên, và viết 1custom script để cấu hình cho tất cả các môi trường trong deploy.rb

Vậy bạn nên chọn thằng nào.

Nếu bạn không quan tâm đến tốc độ deploy, việc phải cấu hình tới 3 file mới deploy được, bạn muốn một sự đảm bảo chắc chắn vì nhiều người tin dùng, hãy chọn capistrano như hầu hết số đông.

Nếu bạn muốn việc deploy được nhanh chóng mà vẫn đảm bảo sự ổn định, cấu hình để deploy 1 server với chỉ 1 file, chịu khó custom 1 chút để deploy đa server, đa môi trường thì mina là sự lựa chọn hợp lý.


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí