Giải phápBackend cho từng người dùng
Mỗi người dùng một instance
Khóa trong yêu cầu đưa mỗi người dùng, tenant hay agent tới instance riêng của mình; instance đó giữ bộ nhớ, đĩa và ngủ giữa các yêu cầu.
from glac import Glac
glac = Glac()
app = glac.cube.deploy(
"ghcr.io/acme/notes:2", name="notes", port=8080,
keys={"from": {"header": "X-User"}, # the key
"delete_after_idle_ms": 30 * 86_400_000},
scale={"suspend_after_ms": 1000}) # sparse traffic: asleep a second after
# a request with X-User: ada reaches ada's own instance
ada = app.instance("ada") # or make or wake it from codeMỗi người dùng một tiến trình, giờ nào cũng tốn tiền
Mỗi người dùng một tiến trình là thiết kế đơn giản nhất, nhưng nếu cứ để chạy thì bạn vẫn trả tiền khi họ vắng mặt. Ở đây instance của mỗi khóa ngủ giữa các yêu cầu, và bạn chỉ trả cho những gì nó lưu giữ.
Định tuyến theo khóa hoạt động thế nào
Đặt keys.from là một header hoặc một đoạn của đường dẫn. Yêu cầu đầu tiên của một khóa mới tạo instance của nó; mọi yêu cầu sau đó tới đúng instance đó, với bộ nhớ và đĩa của nó. Các yêu cầu không có khóa dùng chung các instance của ứng dụng.
Instance của mỗi người dùng nhận được gì
Chọn mô hình: instance dùng chung, hoặc mỗi khóa người dùng một instance.
Khóa lấy từ yêu cầu, trong một header hoặc đường dẫn; yêu cầu đầu tiên tạo instance của nó.
Trạng thái riêng từng người dùng: bộ nhớ được giữ cả khi ngủ, đĩa riêng, và một ổ đĩa.
Chi phí: khi ngủ, không tốn CPU, chỉ tính những gì nó lưu giữ.
Vòng đời do bạn chọn: bị xóa sau khi ngủ quá thời gian đó, rồi được tạo lại khi khóa của nó quay lại.
Mức sử dụng theo từng khóa, từ khóa mà mỗi instance mang làm nhãn.
Hình minh họa
Đo thực tế, không phải hứa hẹn
Trung vị trên máy chủ vật lý khi không có gì khác chạy: trường hợp tốt nhất, và chúng tôi nói rõ như vậy. Instance của một khóa cùng loại với sandbox, nơi các số này được đo. Cách chúng tôi đo
- để đánh thức một instance đang ngủ2
- 3.5 ms
- cho lệnh gọi đã đánh thức nó, từ lúc gửi đến lúc được trả lời2
- 6.7 ms
- để đưa nó vào trạng thái ngủ, cùng bộ nhớ và tiến trình2
- 2.3 ms
Khi dịch vụ mở, bạn có thể tự kiểm chứng với các khóa của mình: dòng log của yêu cầu nào đã đánh thức instance sẽ cho biết việc đánh thức mất bao lâu.
glac cube logs notes -f
# one line a request; one that woke an instance says how long it tookCác sản phẩm được dùng
- KhốiBiến mọi container image thành ứng dụng ngủ giữa các yêu cầuỨng dụng, với khóa: mỗi người dùng, tenant hoặc agent một instance.
- Ổ đĩaĐĩa của Khối, tồn tại lâu hơn instance của chúngĐĩa cho những gì cần tồn tại lâu hơn instance của người dùng.
- SandboxMột máy tính riêng cho mỗi agentMỗi người dùng một agent, điều khiển qua API.
Tính thử một tháng
Mười nghìn người dùng, mỗi người một instance riêng, theo giá niêm yết. Tự ước tính chi phí của bạn
Kịch bản sử dụng
- 10 000 người dùng, mỗi người một instance riêng, dùng 256 MiB.
- Mỗi người dùng gửi 300 yêu cầu mỗi ngày trong 30 ngày, mỗi yêu cầu 20 ms CPU và phản hồi 5 KB, vào thời điểm ngẫu nhiên.
- Ứng dụng được đặt để ngủ hẳn một giây sau khi instance dừng (scale.suspend_after_ms 1000), đúng cài đặt cho lưu lượng thưa như thế này: các yêu cầu của một người dùng cách nhau vài phút, và instance nào được giữ tạm dừng trong bộ nhớ giữa các yêu cầu thì bị tính phí bộ nhớ suốt thời gian đó. Vì vậy mỗi instance thức khi trả lời và thêm 1 giây sau đó, tạm dừng thêm 1 giây, rồi ngủ với bộ nhớ đã được lưu lại, giữ khoảng 100 MB.
- Cái giá phải trả: yêu cầu gặp instance đang ngủ được trả lời sau 6.7 ms, còn instance đang tạm dừng thì trả lời trong 0.43 đến 1.72 ms; và mỗi lần ngủ rồi thức dậy tốn 25.6 ms CPU, đã tính vào CPU của tháng.
Chi phí một tháng theo giá niêm yết
- CPU4.3 tỷ mili giây CPU × $0.01 / triệu$42.95
- Bộ nhớ12 581 GiB-giờ × $0.008$100.65
- Yêu cầu90 triệu × $0.30 / triệu$27.00
- Lưu lượng ra450 GB × $0.004$1.80
- Lưu giữ khi ngủ1 000 GB-tháng × $0.02$20.00
Trên gói Trả phí, tháng này hết $189.60: phí $5, cộng $184.60 cho phần vượt lượng đi kèm, trừ vào số dư theo cùng mức giá.
Cho mỗi người dùng một instance riêng
Một khóa, rồi một ứng dụng với keys.from, triển khai chỉ bằng một lệnh gọi.