Create Service Bus


Instance Details (Chi tiết phiên bản):
- Namespace name (Tên không gian tên): Đây là tên định danh duy nhất cho Service Bus của bạn trên toàn bộ Azure. Tên này sẽ trở thành một phần của địa chỉ công khai để các ứng dụng kết nối đến (ví dụ:
your-name.servicebus.windows.net). Tên này không thể thay đổi sau khi tạo. - Pricing tier (Gói định giá): Đây là tùy chọn quan trọng quyết định đến hiệu năng, tính năng và chi phí. Azure Service Bus có các gói chính sau:
- Basic: Gói cơ bản nhất, chỉ hỗ trợ Queues với các tính năng giới hạn.
- Standard: Hỗ trợ cả Queues và Topics, cung cấp các tính năng bảo mật và độ tin cậy cao hơn. Đây là lựa chọn phổ biến cho hầu hết các ứng dụng.
- Premium: Cung cấp hiệu năng cao nhất, tài nguyên độc quyền (không chia sẻ với người dùng khác), và các tính năng nâng cao như tích hợp mạng ảo (VNet integration) và sao lưu địa lý (Geo-disaster recovery).

Khi bạn chọn Pricing tier là Premium thì nó hỗ trợ thêm vụ Availability Zones.
- Geo-replication (Sao chép địa lý)
- Enable Geo-replication (Bật sao chép địa lý): Tính năng này chỉ có sẵn ở gói Premium. Khi được bật, nó sẽ tự động sao chép siêu dữ liệu của namespace (queues, topics, subscriptions) sang một khu vực Azure khác (khu vực phụ). Điều này giúp tăng cường tính sẵn sàng và khả năng phục hồi sau thảm họa. Nếu khu vực chính gặp sự cố, bạn có thể thực hiện “failover” để chuyển sang hoạt động trên khu vực phụ.
Tiếp theo bạn nhấn next thì sẽ thấy bảng sau:

Nếu bạn chọn Premium thì bạn sẽ chọn được partitioning và messaging units.
- Partition count (Số lượng phân vùng):
- Đây là số lượng partition mà bạn muốn chia cho mỗi queue/topic. Trong hình, bạn đang chọn
2. - Lưu ý quan trọng: Như cảnh báo đã chỉ ra, bạn không thể thay đổi thiết lập này sau khi namespace đã được tạo. Vì vậy, hãy cân nhắc kỹ nhu cầu về thông lượng trước khi quyết định.
- Đây là số lượng partition mà bạn muốn chia cho mỗi queue/topic. Trong hình, bạn đang chọn
- Messaging units (Đơn vị nhắn tin – MU):
- Đây là các đơn vị tài nguyên độc quyền (CPU và memory) được cấp phát cho namespace của bạn. Càng nhiều MU, khả năng xử lý đồng thời và thông lượng càng cao. Bạn có thể chọn 1, 2, 4, 8, hoặc 16 MU.
- Mối quan hệ giữa MU và Partition: Thông báo trong hình giải thích rất rõ: “Messaging units are evenly divided among partitions.” (Các đơn vị nhắn tin được chia đều cho các phân vùng).
- Ví dụ: Nếu bạn chọn 8 MU và 2 partitions, mỗi partition sẽ được phân bổ 4 MU tài nguyên. Điều này đảm bảo mỗi phân vùng đều có đủ sức mạnh xử lý.
- Bạn có thể thay đổi số lượng MU sau khi đã tạo namespace để tăng/giảm hiệu năng một cách linh hoạt.

How to define the reasonable value for Messaging units (Đơn vị nhắn tin – MU)
Khuyến nghị chính: Bắt đầu nhỏ và theo dõi
Cách tiếp cận tốt nhất là không cố gắng dự đoán một con số hoàn hảo ngay lập tức. Thay vào đó, hãy bắt đầu với một số lượng MU tối thiểu, sau đó theo dõi hiệu suất và điều chỉnh khi cần.
Dựa trên tài liệu của Microsoft, đây là điểm khởi đầu được khuyến nghị : https://learn.microsoft.com/en-us/azure/service-bus-messaging/service-bus-premium-messaging
- Bắt đầu với 1 hoặc 2 Messaging Units cho namespace của bạn.
- Một quy tắc chung khác là bắt đầu với 1 MU cho mỗi partition mà bạn cấu hình. Ví dụ, nếu bạn chọn 2 partition, hãy bắt đầu với 2 MU.
Phương pháp xác định và tinh chỉnh
Đây là quy trình từng bước để bạn tìm ra số lượng MU phù hợp cho hệ thống của mình:
- Bắt đầu với cấu hình tối thiểu: Khi tạo namespace, hãy chọn 1 hoặc 2 MU như khuyến nghị ở trên. Đây là cách tiếp cận an toàn và tiết kiệm chi phí nhất ban đầu.
- Thực hiện kiểm thử tải (Load Testing):
- Trước khi đưa vào môi trường production, hãy tạo ra một kịch bản kiểm thử mô phỏng gần đúng với tải làm việc dự kiến của bạn (số lượng tin nhắn mỗi giây, kích thước tin nhắn, số lượng người gửi/nhận).
- Chạy kịch bản này và bắt đầu theo dõi các chỉ số của Service Bus.
- Giám sát chỉ số CPU Usage:
- Trong Azure Portal, vào namespace của bạn và xem mục Metrics. Chỉ số quan trọng nhất để quyết định số lượng MU là CPU Usage.
- Nếu CPU Usage > 70%: Đây là dấu hiệu cho thấy namespace đang hoạt động gần hết công suất. Bạn nên tăng (scale up) số lượng MU để đảm bảo hiệu suất ổn định và tránh bị nghẽn.
- Nếu CPU Usage < 20%: Namespace đang có nhiều tài nguyên dư thừa. Bạn có thể cân nhắc giảm (scale down) số lượng MU để tiết kiệm chi phí.
- Sử dụng tính năng Autoscale (Tự động mở rộng):
- Đây là cách làm tốt nhất để quản lý MU một cách tự động và hiệu quả. Thay vì phải theo dõi và thay đổi thủ công, bạn có thể thiết lập các quy tắc để Azure tự động tăng hoặc giảm số lượng MU.
- Ví dụ về quy tắc Autoscale:
- Tăng thêm 1 MU khi CPU Usage trung bình trong 10 phút vượt quá 75%.
- Giảm đi 1 MU khi CPU Usage trung bình trong 30 phút dưới 25%.
- Bạn có thể thiết lập số lượng MU tối thiểu và tối đa để kiểm soát chi phí và đảm bảo hệ thống luôn đáp ứng được tải đột biến. https://learn.microsoft.com/en-us/azure/service-bus-messaging/automate-update-messaging-units
Và để setup được auto scale cho servise bus bằng UI thì anh em cần phải create service bus xong mới change được.
Phần network mình sẽ để là Public về sau các bạn có thể set lại là Private.


Sau khi nhấn create the chúng ta có 1 service bus như hình:

Tiếp theo để authentication with Service Bus
Bạn vào Settings -> Shared access Policies:

Provisioning Azure Service Bus with Terraform.
Public service bus for internet access from anywhere.
Đầu tiên là netword mode là public:
module "service_bus" {
source = "azure-terraform-module/vnet/azure"
version = "0.0.2"
resource_group_name = "Nim"
location = "westus2"
tags = {
service = "servicebus"
owner = "Nim"
ManagedBy = "Terraform"
}
namespace = "mdaaas-servicebus-namespace"
network_mode = "public"
sku = "Premium"
premium_messaging_partitions = 1
capacity = 1
}
Connect to Azure Service Bus via Private Links.
Nếu deploy với network mode là private:
module "service_bus" {
source = "azure-terraform-module/vnet/azure"
version = "0.0.2"
resource_group_name = "Nim"
location = "westus2"
tags = {
service = "servicebus"
owner = "Nim"
ManagedBy = "Terraform"
}
namespace = "mdaaas-servicebus-namespace"
network_mode = "private"
sku = "Premium"
premium_messaging_partitions = 1
capacity = 1
vnet_ids = [module.vnet.vnet_id]
subnet_ids = module.vnet.subnet_ids
}