通用基础项目

    2. 有关技术选型(修)

    发布时间
    April 26, 2025
    阅读时间
    1 min read
    作者
    Felix
    访问
    公开阅读

    在我经过了这两天的实践和经历各种报错之后那,需要纠正一下第一章的技术选型结论。

    ServerLess部署整体性考虑

    我想明白了这样一件事,大家不可能有我一样的开发资源,而在中长期最快、最便宜、一体化可复制的方案,可以把业务玩起来的,只能是全生态走cloudflare。

    价格因素

    我们先谈谈推倒出这个结论的核心因素价格,这下面是我用过的所有产品系列:

    - 数据库:Supabase、Aws Rds、服务器自建、MongoDB Atlas、CockroachDB、Firebase Firestore等。 - ServerLess:Aws S3、Railway、Vercel、Netlify等。 - 内存kv: 自建Redis、Upstash Redis、AWS ElastiCache、Memcached等。 - 队列:RabbitMQ、Kafka、AWS SQS、Upstash Kafka、Google Pub/Sub、Azure Service Bus等。

    我得出了一个结论:Cloudflare生态的D1、Pages、Workers、KV、Queues、R2是整个市面上最便宜的在长远看来,没有之一。

    所有推荐Vercel、Supabase、Upstash的人必会在他的业务有起色的时候付出代价!当然只是做Demo肯定是可以的。

    生态统一因素

    除了价格优势外,Cloudflare生态的统一性是另一个重要考量因素:

    1. 单一控制面板:所有服务都在同一个Dashboard中管理,不需要在多个平台之间切换。

    2. 无缝集成:Cloudflare的各个服务之间设计为无缝协作。例如,Workers可以直接访问KV、D1和R2;Pages可以自动触发Workers部署;Queues可以与Workers直接集成处理异步任务。

    3. 统一的开发模型:所有服务都遵循相似的开发范式,一旦学会了Workers的开发方式,其他服务的使用也变得简单。

    4. 边缘优先设计:所有服务都设计为在边缘网络运行,这意味着你的应用天然具备全球分布式特性,无需额外配置CDN或地理路由。

    5. 统一的安全模型:可以为整个应用栈配置相同的安全策略,包括WAF、Bot管理、DDoS防护等,而不是为每个组件单独配置。

    生态可操作性

    当我们把cloudflare玩熟了,我们可以非常简单、快速完成批量的页面部署、数据库部署~

    问题

    - 生态侵入性强 - 极其难适配 - 日志不好排查问题 - 没有外部社区生态,只能当原始人 - 多余的学习成本

    但没有办法,这就是穷鬼要接受的,因为它能给你节省的费用是W级别的。

    Cloudflare生态核心服务介绍

    让我们详细了解一下Cloudflare生态中的这些核心服务,它们共同构成了一个完整的应用开发平台:

    Cloudflare Workers

    Workers是Cloudflare生态的核心计算平台,它是一个基于V8引擎的Serverless JavaScript/TypeScript执行环境,运行在Cloudflare的全球边缘网络上。

    - 特点:冷启动时间极短(<1ms),全球分布,支持ES模块 - 用途:API开发、动态内容生成、请求转发、身份验证、A/B测试等 - 定价:每天前100,000请求免费,之后$0.50/百万请求 - 限制:免费计划单次执行限制为10ms CPU时间,付费计划为50ms

    Cloudflare Pages

    Pages是Cloudflare的静态网站托管和Serverless前端应用平台,支持从Git仓库自动构建和部署。

    - 特点:自动CI/CD、预览部署、自定义域名、全球CDN分发 - 用途:托管静态网站、SPA应用、SSG网站、Next.js应用等 - 定价:无限部署和带宽完全免费,仅对Pages Functions(基于Workers)有使用限制 - 集成:可以与Workers、D1、KV等无缝集成

    Cloudflare D1

    D1是Cloudflare基于SQLite构建的Serverless SQL数据库,完全集成到Workers生态中。

    - 特点:无需管理服务器,全球分布,兼容SQLite - 用途:存储结构化数据,适合中小型应用的主数据库

    Pg的替代品

    Cloudflare KV

    KV是Cloudflare的全球分布式键值存储服务,专为高读取、低写入场景设计。

    - 特点:全球一致性,低延迟读取,直接从Workers访问 - 用途:缓存、配置存储、会话管理、特性标志等 - 定价:免费计划包含1GB存储和10万次读/1000次写操作,之后$0.50/百万读和$5/百万写 - 限制:单个值大小限制为25MB,不适合频繁写入的场景

    Redis的替代品

    Cloudflare R2

    R2是Cloudflare的对象存储服务,兼容S3 API,但没有出站数据传输费用。

    - 特点:无出站费用,全球分布,S3兼容API - 用途:存储用户上传文件、静态资源、备份、日志等 - 定价:每月前10GB存储和1000万次Class A操作免费,之后$0.015/GB存储 - 优势:相比AWS S3等服务,没有昂贵的数据出站费用

    S3的替代品

    Cloudflare Queues

    Queues是Cloudflare的分布式消息队列服务,用于异步任务处理和系统解耦。

    - 特点:全球分布,与Workers无缝集成,FIFO保证 - 用途:异步任务处理、系统间通信、事件驱动架构等 - 定价:每月前100万次操作免费,之后$0.50/百万操作 - 限制:消息保留时间最长为24小时,单条消息大小限制为128KB

    Kafka的替代品

    这些服务共同构成了一个完整的应用开发平台,从前端到后端,从计算到存储,从同步到异步处理,几乎涵盖了现代Web应用开发的所有需求。最重要的是,它们都是按使用量计费,这个免费额度非常的大。讲真,一个月2000$的服务,10$在cloudflare就送你了,属实赛博菩萨了。

    显然,对于我们的项目中除了Cloudflare Queues其他都可以用到。

    关于ORM的选择

    本来我是想选Prisma的,但问题是在于它对于D1数据库适配和支持比较的差(要改晕了,工作量太大就放弃了),最后逛了一圈只能选择drizzle这个orm。

    选它的主要依据是:它没有任何三方依赖!(依赖问题是在ServerLess中最痛苦也是最难以解决的问题)。

    并且比较接近主流数据库的方言sql写法,但是有类型提示和函数提示。

    结束

    而对于D1drizzle会有一篇文章解析它们的写法和操作(很难过,这个系列市面上真没人合在一起写了,所以会给大家补充一些基础信息,可以在后面项目的数据库操作的时候进行对照)。

    评论

    加入讨论

    0 条评论
    登录后评论

    还没有评论,来占个沙发吧。