Lựa chọn IaaS nào luôn là trăn trở của công ty cung cấp dịch vụ cloud-based (SaaS) như mình vì vấn đề cân đối giữa giá và performance hệ thống, người dùng luôn được cân nhắc. Vừa chuyển về cloud của Việt Nam (VCCloud, không có quảng cáo, cái nào tốt thì xài) thấy giá không như xưa, có thể nói là ngang ngửa giá với cloud thuộc dạng rẻ nhất của nước ngoài (Linode, mình sử dụng Linode vì chính sách giá cũng như support khá tốt, và có data center ở Singapore), nếu biết tweak có thể có một số cấu hình rẻ hơn nước ngoài về memory. Được cái cloud ở VN thì performance là tốt nhất so với nước ngoài vì độ trễ thấp hơn nhiều (trừ những lúc mấy ông nội VN cấu hình sao đó mà truy cập site ở VN mà chậm hơn ở Sing ^^!). Sau khi đo đạc, nghiên cứu thì sau 10 ngày, tức là hôm nay thì data center của Teamcrop đã về với đất mẹ.
Nội dung bài viết chia sẻ một số cách tiếp cận của mình khi phân tích performance và quyết định dời nhà hệ thống về Việt Nam.
Về giá cả
Trước đây, khi quyết định chuẩn bị một hệ thống scale thì đã quyết định không sử dụng bare metal server mà xem xét nâng cấp lên cloud server để scale cho dễ. Thời điểm cách đây nửa năm các dịch vụ cloud ở Việt Nam còn khá mơ hồ về chất lượng và giá cả, còn về mảng dịch vụ VPS hoặc Dedicated server thì chi phí khá cao.
Mình đã quyết định chuyển toàn bộ hệ thống sang Singapore và sử dụng dịch vụ server của Linode. Linode là một trong những nhà cung cấp có tiếng trên thế giới về hạ tầng Cloud server và giá thì rất cạnh tranh so với Amazon Web Service (AWS), vì dùng AWS tính toàn giá trên trời và giá của Linode cũng rẻ gần như bằng 1 nửa so với các server cùng cấu hình ở VN.
Về performance
Khi chuyển Data center ra ngoài Việt Nam thì một trong những vấn đề performance lớn nhất là tốc độ kết nối, kéo theo khá nhiều thứ bị chậm lại theo. Do hệ thống sử dụng HTTPS và đặc thù của HTTPS là cần 3 RTT (round-trip time) nên nếu 1 RTT chậm thì sẽ kéo theo https sẽ rất chậm. Còn về performance của server thì hầu như không có sự khác biệt về CPU, Memory, HDD.
Mình có cung cấp 1 số thông tin mình test và quyết định chuyển hệ thống về Việt Nam bên dưới.
Về kiến trúc ứng dụng
Do đặc thù định hướng xây dựng theo kiến trúc Microservices và Single Page App (SPA) nên một trang trong tương lai sẽ gọi khá nhiều web service và đồng thời mở ra các web service cho 3rd-party khiến cho việc di chuyển về VN sẽ có nhiều lợi thế về tốc độ hơn, kẻo đã chậm lại càng thêm chậm khi chuyển sang kiến trúc mới.
Khảo sát & so sánh
Một số kết quả khảo sát của mình thực hiện trước khi ra quyết định chuyển về dùng Cloud ở Việt Nam. Thời điểm khảo sát là ngày 29/9/2015 và thực hiện tại TPHCM. Mình có benchmark kết nối với Redis server vì hệ thống mình dùng chủ yếu là Redis cho layer cache.
1. VCCloud – SAS – 1CPU, 2G RAM
– iperf3 giữa 2 server là ~380Mbits/sec. Metric này khá quan trọng nếu bạn xây dựng microservice vì tốc độ giữa 2 server nội mạng là cực kỳ quan trọng vì các server sẽ request lẫn nhau khá nhiều. Do data center trong nước chưa đầu tư các đường truyền hoành tráng nên có vẻ metric này khá thấp so với data center của quốc tế.
– PING RTT giữa 2 server là: 0.578ms
– PING RTT từ Client Viettel đến server: 50.913
– PING RTT từ Client FPT đến server: 26.558ms
– PING RTT từ Client VNPT đến server: 31.834ms
– PING RTT từ Client 3G Mobifone đến server: 105ms
– Redis benchmark
Without pipeline:
./redis-benchmark -h redis.server.lan.ip -n 100000 -t get,set -q
SET: ~ 44K requests per second
GET: ~ 48K requests per second
With pipeline -P 1000
./redis-benchmark -h redis.server.lan.ip -n 100000 -t get,set -q -P 1000
SET: ~ 550K – 610k requests per second
GET: ~ 560K – 610k requests per second
2. Linode – SSD – 2CPU, 2G Ram
– iperf giữa 2 server là 5.78Gbits/sec
– PING RTT giữa 2 server là: 0.508ms
– PING RTT từ Client Viettel đến server: 49.015
– PING RTT từ Client FPT đến server: 160.753ms
– PING RTT từ Client VNPT đến server: 306.097 ms
– PING RTT từ Client 3G Mobifone đến server: 311ms
– Redis benchmark
Without pipeline:
./redis-benchmark -h redis.server.lan.ip -n 100000 -t get,set -q
SET: ~ 33K requests per second
GET: ~ 32K requests per second
With pipeline -P 1000
./redis-benchmark -h redis.server.lan.ip -n 100000 -t get,set -q -P 1000
SET: ~ 790k – 950K requests per second
GET: ~ 1100K requests per second
—
Một số lưu ý là Cloud server ở Việt Nam nếu bạn dùng nhiều ổ cứng, SSD thì giá sẽ khá cao nên cần tối ưu giữa sử dụng nhiều ở cứng hay không vì mình không dùng nhiều ổ cứng mà dùng nhiều memory, nên một số server cache memory thì cứ để memory mong muốn, hdd và cpu ở mức chạy được là sẽ tiết kiệm hơn khá nhiều so với cloud ở quốc tế.
Hy vọng một số chia sẻ ở đây sẽ giúp các bạn có một số góc nhìn về hệ thống cũng như hạ tầng cloud và ra quyết định sao cho có lợi cho sản phẩm của mình trong quá trình triển khai và scale phục vụ nhiều người dùng.