---
title: "Nền tảng Beacon — Backend quảng cáo BLE & API — Tran Manh Tuan"
description: "Nền tảng quảng cáo theo vị trí bằng BLE/iBeacon với backend đa tenant, từng ghi nhận 761.921 lượt kết nối thiết bị trong một giờ để đối chiếu campaign và phân phối nội dung phù hợp."
canonical: "https://tmtuan.dev/vi/projects/beacon-content-platform"
language: "vi"
image: "https://tmtuan.dev/_img/projects/beacon-content-platform/beacon-content-platform-2.59f401ec-og.jpg"
tokens: 2118
---

# Beacon-based Content Delivery Platform

Đây là dự án **freelance** tôi tham gia trong giai đoạn **2023–2024**, với trách nhiệm chính là xây dựng, phát triển và duy trì **backend/API**, đồng thời hỗ trợ triển khai và vận hành các thành phần cloud liên quan.

> **Dấu ấn về quy mô:** hệ thống thống kê theo giờ từng ghi nhận **761.921 lượt kết nối thiết bị trong một giờ**. Mỗi kết nối đi vào luồng xác định campaign và nội dung quảng cáo phù hợp theo ngữ cảnh beacon, lịch phân phối và các điều kiện targeting.

## Bài toán hệ thống

Nền tảng phục vụ nhiều doanh nghiệp trên cùng một hệ thống. Admin console quản lý account, người dùng và phân quyền; ứng dụng tích hợp; địa điểm, beacon và tag; nội dung offer, quảng cáo và notification; campaign, lịch chạy, tần suất và tập người dùng mục tiêu.

Ở phía người dùng cuối, SDK trong mobile app phát hiện tín hiệu **BLE/iBeacon** rồi gọi API. Backend xác thực ngữ cảnh ứng dụng, tìm các campaign đang hoạt động, áp dụng điều kiện phân phối, trả nội dung phù hợp và ghi nhận sự kiện để phục vụ giám sát và phân tích.

## Vai trò và đóng góp chính

- Phát triển và bảo trì admin backend bằng **PHP** cùng API thời gian thực bằng **Java + Play Framework**.
- Mở rộng luồng quản lý đa tenant cho account, quyền truy cập, ứng dụng, beacon, nội dung và campaign.
- Duy trì logic đối chiếu campaign theo thời gian, nền tảng thiết bị, tần suất và targeting.
- Điều tra sự cố xuyên suốt admin, API, MySQL, cache và runtime; ưu tiên thay đổi an toàn và giữ tương thích với các SDK/API consumer đang hoạt động.
- Hỗ trợ vận hành hạ tầng cloud có load balancing, managed database, Memcached và pipeline dữ liệu phân tích sang BigQuery.

## Kiến trúc hệ thống

```mermaid
flowchart LR
  accTitle: Nền tảng nội dung beacon — kiến trúc hệ thống
  accDescr: Đội vận hành dùng admin backend PHP, lưu account, ứng dụng và campaign trong MySQL. Ứng dụng di động phát hiện tín hiệu BLE hoặc iBeacon rồi gọi API Java Play; API xác thực request và chuyển cho bước đối chiếu campaign theo lịch, tần suất và targeting. Bước đối chiếu dùng Memcached cho dữ liệu tra cứu nóng và MySQL cho dữ liệu campaign, trả nội dung về ứng dụng và đẩy sự kiện phân phối vào pipeline sự kiện và thống kê, nguồn cho báo cáo BigQuery. Mọi thành phần server chạy trong môi trường cloud có load balancing. Mức cao nhất ghi nhận là 761.921 lượt kết nối thiết bị trong một giờ.

  Ops["Đội ngũ vận hành<br/><small>quản lý campaign và nội dung</small>"]
  Mobile["Mobile app + SDK<br/><small>phát hiện BLE/iBeacon</small>"]

  subgraph Cloud["Môi trường cloud có load balancing"]
    Admin["Admin backend PHP<br/><small>vận hành đa tenant</small>"]
    API["API Java + Play<br/><small>xác thực và xử lý request</small>"]
    Match["Đối chiếu campaign<br/><small>lịch · tần suất · targeting</small>"]
    Cache[("Memcached<br/><small>dữ liệu tra cứu nóng</small>")]
    DB[("MySQL / managed DB<br/><small>account · app · campaign</small>")]
    Events["Pipeline sự kiện + thống kê<br/><small>delivery · click · device</small>"]
    Analytics[("BigQuery / báo cáo<br/><small>phân tích vận hành</small>")]
  end

  Scale["Mức tải cao nhất ghi nhận<br/><small>761.921 lượt kết nối / giờ</small>"]

  Ops --> Admin
  Mobile --> API
  Admin --> DB
  API --> Match
  Match --> Cache
  Match --> DB
  Match -- "nội dung" --> Mobile
  Match --> Events
  Events --> Analytics
  Scale -.-> API
```

_Sơ đồ được dựng lại ở cấp độ thành phần để mô tả trách nhiệm backend và dữ liệu, không công khai host nội bộ, repository hay chi tiết triển khai độc quyền._

## Luồng phân phối quảng cáo

```mermaid
flowchart TB
  accTitle: Luồng phân phối quảng cáo qua beacon
  accDescr: SDK di động phát hiện beacon, tạo API request kèm ngữ cảnh app, thiết bị và beacon, xác thực tenant và ứng dụng, tìm các campaign đang chạy tại beacon hoặc địa điểm đó, áp dụng luật phân phối theo khung giờ, nền tảng, tần suất và target, chọn offer, quảng cáo hoặc notification, trả về cho app hiển thị, ghi nhận sự kiện phân phối và tương tác, rồi tổng hợp thành thống kê theo giờ. Mức cao nhất ghi nhận là 761.921 lượt kết nối thiết bị trong một giờ.

  Detect["1. Phát hiện vùng gần<br/><small>SDK nhận tín hiệu BLE/iBeacon</small>"]
  Request["2. Tạo API request<br/><small>ngữ cảnh app, device và beacon</small>"]
  Auth["3. Xác thực ngữ cảnh<br/><small>xác định tenant và ứng dụng</small>"]
  Candidates["4. Tìm campaign phù hợp<br/><small>campaign đang chạy tại beacon/địa điểm</small>"]
  Rules["5. Áp dụng luật phân phối<br/><small>khung giờ · platform · tần suất · target</small>"]
  Content["6. Chọn nội dung<br/><small>offer, quảng cáo hoặc notification</small>"]
  Response["7. Trả response<br/><small>app hiển thị nội dung</small>"]
  Events["8. Ghi nhận kết quả<br/><small>sự kiện phân phối và tương tác</small>"]
  Stats["9. Tổng hợp thống kê<br/><small>báo cáo theo giờ và analytics</small>"]
  Peak["Mức cao nhất ghi nhận<br/><small>761.921 lượt kết nối thiết bị trong một giờ</small>"]

  Detect --> Request --> Auth --> Candidates --> Rules --> Content --> Response --> Events --> Stats
  Peak -.-> Stats
```

_Luồng request tách phần chọn campaign thời gian thực khỏi bước tổng hợp sự kiện phía sau, giúp response cho mobile gọn trong khi vẫn giữ đủ dữ liệu cho vận hành và báo cáo._

## Luồng quản trị và vận hành

```mermaid
flowchart TB
  accTitle: Luồng quản trị và vận hành nền tảng beacon
  accDescr: Đội vận hành quản trị hệ thống và tenant, quản lý account với phân quyền theo vai trò, cấu hình tích hợp SDK và API cho từng ứng dụng, duy trì địa điểm, tag và kho beacon, chuẩn bị offer, quảng cáo và notification, thiết lập campaign với target, lịch và tần suất, publish và vận hành, cuối cùng theo dõi sự kiện, thống kê theo giờ và export.

  Ops["Đội ngũ vận hành<br/><small>quản trị system và tenant</small>"]
  RBAC["Account + RBAC<br/><small>user, role và permission</small>"]
  Apps["Ứng dụng<br/><small>cấu hình tích hợp SDK/API</small>"]
  Beacons["Địa điểm + beacon<br/><small>facility, tag và kho beacon</small>"]
  Content["Kho nội dung<br/><small>offer, quảng cáo và notification</small>"]
  Campaign["Thiết lập campaign<br/><small>target, lịch và tần suất</small>"]
  Publish["Publish + vận hành<br/><small>kiểm soát trạng thái và phân phối</small>"]
  Monitor["Theo dõi + phân tích<br/><small>event, thống kê giờ và export</small>"]

  Ops --> RBAC --> Apps --> Beacons --> Content --> Campaign --> Publish --> Monitor
```

_Admin console đóng vai trò control plane vận hành, nối quản trị tenant, kho beacon vật lý, cấu hình campaign và giám sát sau phân phối trong một luồng thống nhất._

Ba sơ đồ trên được dựng lại từ tài liệu kỹ thuật và giao diện quản trị ở mức thành phần. Chúng tập trung vào cách hệ thống vận hành, không chứa URL nội bộ, credential, source code độc quyền hay dữ liệu production thô.

## Thông tin

- **Vai trò:** Backend · Hạ tầng cloud · Vận hành production

## Công nghệ

- PHP
- Java
- Play Framework
- MySQL
- Apache
- Linux
- Memcached
- AWS EC2
- Elastic Load Balancing
- Amazon RDS
- BigQuery
- BLE
- iBeacon

## Dịch vụ thể hiện qua dự án

- [Hệ thống quản lý nghiệp vụ](https://tmtuan.dev/vi/services/business-systems)
- [Hệ thống Backend & API](https://tmtuan.dev/vi/services/backend-development)
- [Hạ tầng Cloud](https://tmtuan.dev/vi/services/gcp-cloud-infrastructure)

## Bài viết liên quan

- [Truy vết HTTP 500 chỉ xảy ra với Googlebot, xuyên Next.js, Cloud Run và hosting edge](https://tmtuan.dev/vi/articles/googlebot-500-firebase-hosting-nextjs)

## Structured data (JSON-LD)

```json
{"@context":"https://schema.org","@graph":[{"@type":"WebPage","@id":"https://tmtuan.dev/vi/projects/beacon-content-platform#webpage","url":"https://tmtuan.dev/vi/projects/beacon-content-platform","name":"Nền tảng Beacon — Backend quảng cáo BLE & API","description":"Nền tảng quảng cáo theo vị trí bằng BLE/iBeacon với backend đa tenant, từng ghi nhận 761.921 lượt kết nối thiết bị trong một giờ để đối chiếu campaign và phân phối nội dung phù hợp.","inLanguage":"vi","isPartOf":{"@id":"https://tmtuan.dev/#website"},"about":{"@id":"https://tmtuan.dev/#person"}},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Trang chủ","item":"https://tmtuan.dev/vi"},{"@type":"ListItem","position":2,"name":"Dự án","item":"https://tmtuan.dev/vi/projects"},{"@type":"ListItem","position":3,"name":"Beacon-based Content Delivery Platform","item":"https://tmtuan.dev/vi/projects/beacon-content-platform"}]}]}
```
