Shynet 核心架构揭秘从Django应用到Kubernetes集群的弹性扩展【免费下载链接】shynetModern, privacy-friendly, and detailed web analytics that works without cookies or JS.项目地址: https://gitcode.com/gh_mirrors/sh/shynetShynet是一个现代化的、隐私友好的、无需Cookie或JavaScript的Web分析工具。这款开源自托管的分析平台为开发者和网站管理员提供了完整的网站流量监控解决方案同时保护用户隐私。本文将深入解析Shynet的核心架构设计展示它如何从简单的Django应用扩展到复杂的Kubernetes集群部署。 Shynet的架构设计理念Shynet的架构设计遵循简单到复杂的理念。它可以在单台机器上运行也可以扩展到大规模Kubernetes集群。这种灵活性使得Shynet既能满足个人项目和小型网站的需求也能应对中高流量网站的挑战。核心架构特点模块化设计- 清晰的Django应用分离无状态服务- 便于水平扩展异步处理- 使用Celery处理后台任务多数据库支持- SQLite和PostgreSQL缓存层- Redis缓存提升性能️ Django应用架构剖析Shynet基于Django框架构建采用了经典的MVC模型-视图-控制器架构模式。整个项目被划分为多个独立的Django应用每个应用负责特定的功能模块核心应用模块shynet/core/- 核心模型和业务逻辑models.py- 定义Service、User等核心数据模型views.py- 处理核心业务逻辑的视图rules.py- 权限控制规则shynet/analytics/- 数据分析与收集模块models.py- Session和Hit数据模型定义views/ingress.py- 数据入口处理tasks.py- 异步数据处理任务shynet/dashboard/- 用户界面展示仪表板视图和模板数据可视化组件用户管理界面shynet/api/- REST API接口为第三方集成提供数据接口支持程序化数据访问数据库配置策略Shynet支持两种数据库后端配置在shynet/shynet/settings.py中# 支持SQLite开发和小型部署 if os.getenv(SQLITE, False) True: DATABASES { default: { ENGINE: django.db.backends.sqlite3, NAME: os.environ.get(DB_NAME, /var/local/shynet/db/db.sqlite3), } } # 支持PostgreSQL生产环境 else: DATABASES { default: { ENGINE: django.db.backends.postgresql_psycopg2, NAME: os.environ.get(DB_NAME), USER: os.environ.get(DB_USER), PASSWORD: os.environ.get(DB_PASSWORD), HOST: os.environ.get(DB_HOST), PORT: os.environ.get(DB_PORT), OPTIONS: {connect_timeout: 5}, } } 异步任务处理架构为了处理高并发场景Shynet采用了Celery作为异步任务队列Shynet的多服务监控仪表盘展示多个服务的实时统计数据Celery配置架构在shynet/shynet/celery.py和shynet/shynet/settings.py中# Celery配置 CELERY_BROKER_URL os.getenv(CELERY_BROKER_URL) CELERY_REDIS_SOCKET_TIMEOUT 15 # Redis缓存配置 if not DEBUG and os.getenv(REDIS_CACHE_LOCATION) is not None: CACHES { default: { BACKEND: redis_cache.RedisCache, LOCATION: os.getenv(REDIS_CACHE_LOCATION), KEY_PREFIX: v1_, # 迁移时递增版本 } }任务处理流程Web请求接收- 通过shynet/analytics/views/ingress.py处理数据验证- 验证服务密钥和请求参数异步队列- 将处理任务放入Celery队列后台处理- Celery worker处理数据存储和分析结果缓存- 计算结果缓存到Redis Kubernetes集群部署架构对于需要处理高流量的场景Shynet提供了完整的Kubernetes部署方案多副本部署策略在kubernetes/deployments.yml中定义了完整的Kubernetes部署配置# Web服务器部署3个副本 apiVersion: apps/v1 kind: Deployment metadata: name: shynet-webserver spec: replicas: 3 selector: matchLabels: app: shynet-webserver template: metadata: labels: app: shynet-webserver spec: containers: - name: shynet-webserver image: milesmcc/shynet:edge imagePullPolicy: Always # Celery worker部署3个副本 apiVersion: apps/v1 kind: Deployment metadata: name: shynet-celeryworker spec: replicas: 3 selector: matchLabels: app: shynet-celeryworker template: metadata: labels: app: shynet-celeryworker spec: containers: - name: shynet-celeryworker image: milesmcc/shynet:edge command: [./celeryworker.sh]服务发现与负载均衡Shynet的详细服务分析界面展示单个服务的深度统计数据核心服务组件Redis StatefulSet- 提供缓存和消息队列Web服务器Service- 负载均衡Web请求Ingress控制器- 处理外部流量路由Headless Service- 用于Redis集群内部通信# Redis服务配置 apiVersion: v1 kind: Service metadata: name: shynet-redis spec: ports: - port: 6379 name: redis clusterIP: None # Headless Service selector: app: shynet-redis 数据收集与处理架构跟踪脚本设计Shynet的跟踪脚本位于shynet/analytics/templates/analytics/scripts/page.js这个轻量级脚本小于1KB提供了两种跟踪方式JavaScript跟踪- 现代浏览器首选1x1像素回退- JavaScript不可用时的备选方案数据模型设计核心数据模型定义在shynet/analytics/models.pyclass Session(models.Model): 用户会话模型 uuid models.UUIDField(default_default_uuid, primary_keyTrue) service models.ForeignKey(Service, on_deletemodels.CASCADE, db_indexTrue) identifier models.TextField(blankTrue, db_indexTrue) # 跨会话标识 start_time models.DateTimeField(defaulttimezone.now, db_indexTrue) last_seen models.DateTimeField(defaulttimezone.now, db_indexTrue) is_bounce models.BooleanField(defaultTrue) class Hit(models.Model): 页面访问记录模型 uuid models.UUIDField(default_default_uuid, primary_keyTrue) session models.ForeignKey(Session, on_deletemodels.CASCADE, db_indexTrue) service models.ForeignKey(Service, on_deletemodels.CASCADE, db_indexTrue) timestamp models.DateTimeField(defaulttimezone.now, db_indexTrue) load_time models.IntegerField(nullTrue) # 页面加载时间毫秒 弹性扩展策略水平扩展能力Shynet的架构支持多种扩展方式Web服务器扩展- 增加shynet-webserver副本数Worker扩展- 增加shynet-celeryworker副本数数据库扩展- 使用PostgreSQL连接池缓存扩展- Redis集群配置环境配置管理通过环境变量实现配置管理支持多种部署环境# 数据库配置 DB_NAMEshynet DB_USERshynet_user DB_PASSWORDyour_password DB_HOSTpostgres.example.com DB_PORT5432 # Redis配置 REDIS_CACHE_LOCATIONredis://shynet-redis.default.svc.cluster.local/0 CELERY_BROKER_URLredis://shynet-redis.default.svc.cluster.local/1 # 安全配置 ALLOWED_HOSTSyour-domain.com,analytics.example.com SECRET_KEYyour-secret-key 监控与维护架构健康检查机制Shynet内置健康检查端点确保服务可用性数据库连接检查- 验证数据库连接状态缓存状态检查- 检查Redis连接Celery worker状态- 监控异步任务处理服务状态监控- 整体服务健康状态日志与监控结构化日志- 便于集中日志分析性能指标- 关键性能指标监控错误追踪- 异常检测和告警数据备份- 定期数据备份策略 总结从单体到集群的演进路径Shynet的架构设计展示了从简单到复杂的优雅演进路径单体部署- 单容器运行所有组件分离部署- Web服务器与Worker分离集群部署- Kubernetes多副本部署高可用部署- 数据库和缓存集群无论你是个人开发者还是企业团队Shynet都能提供适合你需求的部署方案。它的模块化设计和灵活的配置选项使得从开发环境到生产环境的迁移变得简单而可靠。通过理解Shynet的核心架构你可以更好地规划自己的部署策略确保你的网站分析系统既高效又可靠。无论是小型博客还是高流量电商平台Shynet都能提供稳定、隐私友好的分析服务。【免费下载链接】shynetModern, privacy-friendly, and detailed web analytics that works without cookies or JS.项目地址: https://gitcode.com/gh_mirrors/sh/shynet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考