小公司的技术栈该如何选择?
过早优化是万恶之源。
-- Donald Knuth(高德纳)
起因
因为有粉丝点赞投币并且问了这个问题,正好我也有点想分享这个点,所以赶了一个视频出来。
问题分析
新手在第一次做项目时,还没有动手写代码之前,就会考虑「三高(高并发、高可用、高性能)」问题,然后导致项目不断延期。当然其中也包括我自己。
等到后面做了几个项目之后,才发现并不需要那么复杂。只要人与项目有一个能够跑就可以了。并且大多数中小公司根本遇不到 C10K 问题。一些很多中小公司的业务需求,可能一天也就百十来个人访问。
TIP
C10K:c 是指 client,而 10k 则是一万的意思,c10k 就是单机同时并发一万个请求。
现在因为计算机技术的发展,c10k 不管是使用什么语言与框架都是很好解决的问题,因为只要加机器就可以了。
可能有少部分公司是真的需要高并发,但是绝大部分公司都用不上。并且一开始就处理三高问题会给开发成本、运营成本带来很多的负担。
软件开发最重要的是迭代思想,先做一个 demo 出来,然后再不断优化。尤其是当 demo 能够盈利之后,说不定可以找更厉害的程序员来帮你赚钱。
粉丝留言中主要是以下两个问题
- 云数据库费用问题,以及如何替代
- 云数据库是否比自己部署更安全
我看了之后,觉得他想问的应该是「小公司的技术栈该如何选择」,所以我以此为标题展开讨论。
服务器的选择
首先思考一下为什么会有云服务器?以及云服务器如果卖不出去他们会亏本吗?
其实一开始都没有云服务器,全部都是自己买硬件、拉商宽(网络运营商给 IPV4 地址)自己搭建服务器。 但是一些大的公司,为了应对一些重要节日的高峰流量,一般会准备很多的机器。 在淡季的时候这些机器就闲置下来了,为了不亏本,于是自己便做成了云服务器卖给普通用户。 因为云服务器资源都是虚拟出来的,可以动态调整,所以不仅可以应对高峰期的流量,同时还能大赚一笔。
当我们在购买服务器的时候,一般有两种服务器。分别是云服务器与轻量级云服务器,这两种类型的服务器下还有很多的型号,如果是同价位对比大概就会如下面这个情况。
配置 | 带宽 | 流量 | |
---|---|---|---|
轻量级服务器 | 尚可 | 带宽尚可 | 定额 |
云服务器 | 低一个档次 | 带宽固定且小 | 免费 |
自己搭建服务器,就与云服务器提供商差不多,但是需要自己弄一个 IPV4 地址,同时需要做灾容备份之类的,技术难度不小,复杂度高,在项目达到一定规模的时候可以尝试。自己运维,没有专业的人士不可取。
对于安全性问题,自己搭的只要学一下 Linux 的防火墙设置,注意一下密码强度,其实都差不多。只是云服务器在使用的时候更方便,例如重装、重启机器。
云服务器,与自己搭建的服务器是差不多的,只是配置很差,或者说价格很贵。但是使用没有什么限制,蛮方便。
轻量级云服务器,阉割版云服务器,但是给更多的峰值带宽、峰值性能。适合个人网站、创业初期使用。流量费用超额之后贵。
数据库选择
因为我自己有过项目删库、被脱裤的经验,如果是能够承受费用的话无脑云服务器就好了,只有在自己搭建服务器的时候考虑附带搭建数据库,不然不推荐。
如果是用户不是很多,考虑使用 sqlite 数据库,对于 orm 工具来说,后续可以无缝切换 MySQL。
技术栈选择
这里我想再说一句:过早优化是万恶之源。
可能是因为不良媒体宣传的原因,很多编程新手一上来就是高并发、高可用、高性能,动不动就分库分表,以及各种容器技术。 这些技术不必说,自然是极好的。对于很多行内人士,他们能够分辨那些技术的使用场景,以及自己是否需要。但如果对这块不是很熟,就很容易被带偏。
这里说一下我的观点,在钱包不允许的情况下,根本不需要考虑三高问题、容器技术。 需要的仅仅是熟悉项目的开发技术,然后是买一台还行的轻量级服务器,验证你的项目是否可以赚钱。有了钱之后再考虑其他的东西。
一个人做全栈项目:一门编程语言 + mysql + linux + 一个 web 框架 + 前端技术(html + css + jquery + bootstrap 或 layui 就可以了)。
如果有两个人,那就直接前后端分离,上 vue 就可以了。