2029年大选技术架构深度解析

本文详细剖析了2029年大选网站的技术架构,涵盖ASP.NET Core前端框架、Google Cloud Run无服务器托管方案、Firestore文档数据库等技术选型,并阐述了纯只读架构设计思路与数据更新策略。

技术概览

本文主要作为技术背景介绍。虽然内容没有特别突出之处,但在深入探讨真正有趣的设计细节之前,先了解基本事实非常有用。

提醒:如需查看当前网站效果,请访问 https://election2029.uk

需要始终牢记的是,该网站具有一些相对罕见的特点:

  • 纯只读架构:用户输入仅用于改变显示内容
  • 全内存数据:数据量较小,可全部加载至内存
  • 渐进式数据更新:大选夜之前数据变化缓慢。选举公告前每日最多2-3次数据更新,竞选期间每日可能新增多个民调和MRP数据。大选夜将尽可能快速提供最新结果

技术栈选择

大部分技术栈基于Google Cloud。我承认存在偏好,但并未比较在Azure或AWS构建相同功能的难易度或成本。更重要的是,我喜欢作为自己的客户:使用为GCP构建的库,遇到问题时可以提交功能请求并自行修复。同时也能向同事反馈Cloud Run和Cloud Build的使用体验。虽然该网站可在任何云平台构建,但当前选择令人满意。

前端:ASP.NET Core与Razor

网站使用Razor进行HTML格式化,但未采用标准的MVC或Razor Pages模式。极少页面使用代码后置文件,更接近MVVM模式(或至少是我理解的MVVM)。后续文章将详细说明其与依赖注入的集成方式。

当前使用.NET 9,计划随新版本发布持续升级,但绝不使用预发布版本。预计大选夜将运行.NET 13。

仅使用少量JavaScript库进行图形展示,未采用Bootstrap、Angular、React等框架,目前手工编写的CSS已满足需求。

托管:Google Cloud Run

2024年大选网站运行于GKE集群,现已转为全量托管至Cloud Run。虽然花时间才适应无服务器概念,但现在非常满意。尽管存在设计挑战(将另文说明),但自定义域名和HTTPS证书等原本复杂的功能现在变得简单,这对业余项目至关重要。

目前仍享有GCP承诺使用折扣(关闭GKE集群前购买),2027年折扣到期后预计每日运营成本低于1美元。若网站访问量激增,可能需要扩展实例规模,但预计成本仍在可控范围。

构建部署:Google Cloud Build

Cloud Run与Cloud Build无缝集成,后者又与GitHub紧密对接。代码提交后可通过推送触发部署流程,具体环境配置将在后续文章中详述。

数据存储:Firestore

Firestore作为文档数据库,在本项目中查询功能使用较少。当前使用方式其实也可通过Google Cloud Storage(Blob存储)实现,未来可能尝试比较两种方案在代码复杂性和性能方面的差异。目前Firestore完全满足需求且成本极低。

源码管理:GitHub

所有代码存储于GitHub私有仓库。主要原因包括政策因素和民调原始数据(Excel/PDF文件)的存储考虑。虽然这些数据可公开获取,但不宜在其他平台分发。未来可能调整数据文件存储策略,例如迁移至GCS。

数据来源

当前使用的数据源包括:

  • Democracy Club:候选人、选票、结果等数据
  • 议会成员API:政党变更数据
  • 国家统计局:邮编信息
  • 维基百科下届大选民调页面:新民调数据监测
  • 多家民调机构:已获授权使用其民调和席位预测数据
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计