为我的SaaS软件产品选择Python的原因 - Reddit


我的Saas是一个构建自己的软件产品的单人秀。它目前拥有 11,000 名注册用户,每月收入约为 1,500 美元。在这篇文章中,我将探讨我选择 Python 来构建它的原因。

但首先,什么是 SaaS 产品?
SaaS 代表软件即服务。SaaS 产品是人们付费使用的基于 Web 的软件产品。小型 SaaS 产品的一个示例是帮助您安排社交媒体帖子的工具。大型 SaaS 产品是 Salesforce 或 Google 办公产品套件(Google Docs、Google Sheets 等)。
我正在构建的产品允许您创建记分牌和排行榜并通过链接共享它们。5 年前,我开始将它作为一个玩具项目进行构建,从那时起它已经转变为一个成熟的业务。您可以在此处查看包含我所有公共指标的仪表板。

我最初为什么选择Python?
当我第一次开始这个项目时,我并不打算建立一个企业。相反,我想建立一个小的网络应用程序来学习全栈开发。

我最终选择了Python作为开发语言。我已经涉足Python一段时间了,用它来做一些小任务,比如批量重命名文件或从网站上刮取一些数据。

这种最初的接触让我对这门语言有了感觉,而且感觉很好。人们经常说Python对初学者非常友好,他们是对的。但随着我对这门语言了解的增多,我发现它对中级用户也非常友好。

一般来说,Python 非常善于隐藏它的高级特性,直到你需要它们。
这里有一个 Java 的例子,它绝对不善于隐藏它的 "高级 "特性。

public class HelloWorld {
       public static void main (String[] args) {
             System.out.println("Hello World!");
       }
}

要用Java写Hello World,你已经面临着对象和面向对象的编程,以及那个绝对可怕的方法签名。这对初学者并不友好。

在Python中,输出Hello World是:
print("Hello world")

Python 有一条非常平缓的学习曲线,它超出了初学者的阶段。例如,我在使用Python多年后才知道,更不用说使用dunder方法(例如__init__)。现在我已经达到了中级水平,我仍然在学习新的东西,但我也对我所知道的东西感到自信。对于 JavaScript,情况就不一样了:尽管我不再是一个 JavaScript 傻瓜,但我经常觉得有一些黑暗的、不可言喻的秘密在躲避着我,而且有一天,这将导致我的代码崩溃。而Python则不是这样。

当我决定用Python构建我的项目时,这种语言已经在机器学习和数据科学的世界中占据了很大的优势。致力于使用一种被广泛使用的语言并不是一个艰难的决定。

我必须做出的下一个基本决定是使用哪个 "网络Web框架"。

什么是网络Web框架?
网络框架是一个现成的模块或库,使你的代码在互联网上可用。作为互联网的一部分,意味着你需要遵守各种规则,并在某些事情或某些人向你的程序索取信息时以预先定义的方式作出反应。网络框架为你分担了大部分的工作。

有大量的Python web框架,包括Flask、Django和FastAPI。Django可能是其中最成熟的一个,被Spotify、Instagram和Pinterest等重量级公司使用。

选择Python Flask
我选择了Flask。主要原因还是因为它对初学者来说非常容易上手。你可以找到一个flask教程,并在5-10分钟内拥有你的第一个工作代码。

Python Flask是一个微型框架,这意味着它被剥离到了最基本的东西。有些人认为这是一个缺点:这意味着一旦你需要扩展基本功能,你就必须手工添加额外的模块。与之相反的设计范式是Django,它以 "包含电池 "为荣。

我认为使用微框架实际上是一种优势。它意味着开始时的认知开销要低得多,因为需要理解的东西太少了。随着你的产品的发展,你会在开发过程中添加新的模块,并希望对你为什么要包含每一个模块有坚实的理解。

微框架的一个缺点是,你必须管理大量的依赖关系。这可能是很痛苦的,我在很多场合都有过这样的经历。

服务器端渲染的胜利
Python Flask的另一个优点是,它使用了良好的旧式服务器端渲染。这有很多(经常被遗忘的)优点。在我看来,最主要的是你的应用程序的复杂性要低得多,而且更加健壮。缺点是,应用程序的某些部分可能不会像使用Angular或Vue等花哨的Javascript框架的应用程序那样感觉很流畅。

我的产品的第一个版本几乎完全是用最少的 Javascript 呈现在服务器端的。您可以在此处查看此版本的完整工作版本(我已将其保存在琥珀色码头工人)。我最终让步了,并且在产品上使用了更多的 JavaScript (Vue.js)。由于 Flask 的模块化,这没什么大不了的。
服务器端渲染的另一个优势是 SEO 开箱即用,这对我的产品至关重要。

最后要注意的是,有像HTMXAlpine.js这样的项目可以为您的应用程序提供现代和反应式的感觉,同时避免向您的应用程序添加大量 JavaScript。这些解决方案正在引起一些关注,实际上正在为 Flask、Django、Ruby on Rails 等服务器端框架带来某种复兴。

使用 Python 进行缩放
到目前为止,我的产品在缩放方面没有重大问题。实际上,缩放不再是曾经的问题。除非您正在构建具有“全球规模”要求的应用程序(免费建议:您不是在构建这样的应用程序),并且您还没有掉入微服务兔子洞,否则扩展应该相对容易。

当今的许多云服务都包含自动缩放功能,这意味着理论上您根本无需担心缩放问题。

您的 SaaS 产品中最大的扩展瓶颈可能是您的数据库。但是,一旦达到 Postgres 数据库所能做的极限,您将经历一段漫长而传奇的旅程。在你这样做之前,你应该担心其他事情。

如果您正在使用 Python 构建 SaaS,请尽可能长时间地保持它的整体性并通过 Docker 运行,这样就可以了。

我的 Python 应用程序托管在 DigitalOcean 上。我的数据库也托管在那里。我离做任何花哨的扩展工作还有很长的路要走,我希望永远——永远——不必使用 Kubernetes。