ruby-on-rails server - It costs 2 mins to read

Hiện tại, mình đang phụ trách việc chuyển Server từ Linode sang sử dụng hệ sinh thái của AWS, đồng thời thiết lập cân bằng tải nhằm tránh tình trạng quá tải vào lúc cao điểm như giai đoạn vừa qua.

Multiple Load Balancer

Dự phòng khi 1 Server Load Balancer bị sập hoặc quá tải - chưa cần thiết.

Setup CDN for Assets

OK (Đang dùng S3 nhưng S3 không có chức năng của một CDN, có thể chuyển sang Cloudfront)

http://thachpham.com/hosting-domain/cdn-la-gi-va-khi-nao-nen-dung-cdn-cho-website.html

Application Server

Unicorn vs Puma vs Passenger

Quyết định vẫn dùng Passenger (Và tiếp tục dùng bản OSS).

Web Server (Nginx 1.9.x )

TODO: Tìm hiểu các thủ thuật để Improve Performance của Nginx.

Cân bằng tải

Load Balancing bằng Nginx hay dùng Haproxy, hay dịch vụ Load Balancer của Amazon

http://cloudacademy.com/blog/aws-elb-vs-haproxy/

Quyết định dùng Dịch vụ Load Balancing của AWS (Vì tuy không thể cấu hình linh hoạt, cũng không có nhiều lựa chọn về thuật toán như HaProxy nhưng rất tiện lợi).

Database Server

Dùng dịch vụ của Amazon RDS (và Replication + Multiple A-Z nếu cầu thiết để phòng rủi ro)

http://www.laurencegellert.com/2013/05/pros-and-cons-of-rds-vs-ec2-for-mysql-with-aws/

Redis Server

Tách ra một Server riêng và dùng dịch vụ của AWS.

Caching

https://github.com/Shopify/identity_cache để cache ActiveRecord (cụ thể là Course, Unit, Lesson, Exam…)

https://devcenter.heroku.com/articles/caching-strategies#fragment-caching

http://guides.rubyonrails.org/caching_with_rails.html

Action Controller Caching - https://github.com/rails/actionpack-action_caching

Fragment Cache? - Không dùng, Vì UBrand sẽ cache trên Front-End (AngularJS)

Deployment Progress

Mina, Capistrano, CodeDeploy của AWS

Automated Server Configuration

Chef, Puppet…

Chưa có thời gian tìm hiểu, tạm thời cài đặt thủ công và dùng chức năng Clone Server của AWS

Background Jobs Processing Framework

Sử dụng Redis làm Sessions Store

http://www.justinweiss.com/articles/how-rails-sessions-work/

https://www.happybearsoftware.com/almost-protect-yourself-from-cookie-session-store.html

http://blog.togo.io/introducing/redis-store/

Lợi ích?

ElasticSearch

Hiện tại, chắc vẫn để ElasticSearch ở một con có cấu hình cao thay vì tách riêng (sử dụng dịch vụ của AWS) vì chưa có nhu cầu dùng nhiều.

Slow SQL Query

(>100ms), Viết lại Query khác hoặc bí lắm là Caching Results.

References

http://www.slideshare.net/kigster/12step-program-for-scaling-web-applications-on-postgresql

http://www.slideshare.net/kigster/from-obvious-to-ingenius-incrementally-scaling-web-apps-on-postgresql

http://www.slideshare.net/pgconf/five-steps-perform2009

http://www.slideshare.net/kigster/scaling-wanelocom-100x-in-six-months

http://nickcraver.com/blog/2016/02/17/stack-overflow-the-architecture-2016-edition/?utm_source=twitterfeed&utm_medium=facebook