我接触过不少做独立项目的普通开发者,第一次申请aws云服务器的时候,常会把它等同于自己改造的旧物理主机,用起来才发现很多预期之外的问题。有人觉得性能达不到预期,有人觉得配置起来比本地主机麻烦很多,其实大多是对这个产品的基础逻辑没弄清楚。
基础逻辑的简单说明
aws云服务器是通过虚拟化技术,从底层物理硬件中分割出来的独立计算单元。虚拟化技术会把单台物理服务器的CPU、内存、存储、网络资源分割成多个独立的隔离空间,每个空间就是一个aws云服务器实例,不同实例之间资源互不干扰,一个实例出问题一般不会影响同一台物理服务器上的其他实例。 使用者可以获得完整的操作系统权限,自行安装需要的软件、配置运行环境,从操作层面看,和自己拥有一台独立的物理服务器没有太大区别。和本地物理服务器不同的是,它的资源是由服务商提供托管的,你不需要自己采购硬件、搭建机房、负责日常的硬件维护,只需要根据自己的需求选择对应的配置,就能快速获得可用的计算资源。
常见的几个认知误区
很多刚接触的开发者会有两个比较普遍的误区,第一个是觉得aws云服务器的性能一定比本地物理服务器差,另一个是觉得用aws云服务器就一定比自己买硬件投入高。这两种判断都比较片面。 从性能角度说,aws云服务器的底层硬件一般是数据中心专门采购的服务器级硬件,整体稳定性和吞吐能力,比普通家用或者办公用的PC硬件要好很多,只要配置选得合适,性能不会比同规格的本地物理服务器差。如果碰到网络连通性异常的问题,大多是网络配置或者链路波动导致的,和本身硬件性能没有直接关系。 从投入角度说,资源投入的高低完全看使用场景,如果是需要长期不间断运行的固定服务,一次性采购硬件可能长期来看投入更低,但如果是临时使用、或者流量波动很大的项目,按使用量计费的模式反而能减少不必要的投入,也不需要提前投入大笔资金采购硬件。还有人觉得aws云服务器只能用来放公开的web服务,其实这个认知也是错的,只要是需要计算资源的场景,都可以根据需求使用,没有太多场景限制。
常见的适用场景
从实际使用来看,普通开发者接触最多的场景有这么几类: 第一类是开发测试环境搭建。很多开发者做项目开发,本地电脑的环境和最终线上运行的环境很难完全一致,经常出现本地跑没问题,上线就出问题的情况。如果是团队协作开发,统一的测试环境更是必须的。
这时候用aws云服务器搭测试环境就很方便,需要的时候开实例,项目结束或者不需要了就释放掉,不需要一直占用资源。我之前帮朋友排查过一个问题,他在本地开发用的是桌面系统,线上部署用的是服务器版Linux系统,本地没复现的编码问题,放到线上就出乱码,后来就是提前在aws云服务器上搭了和线上一致的测试环境,开发完直接在测试环境验证,提前解决了这类问题。 第二类是线上中小服务部署。
很多独立开发者或者小团队做的项目,初期流量不大,不需要自己搭建专用机房,用aws云服务器直接部署就可以满足需求。而且如果后续流量增长,可以随时升级配置,要是项目调整不需要这么多资源,也可以降级配置,弹性调整的空间很大。
这里要注意的一点是,很多新手刚开始做部署的时候,容易一开始就选很高的配置,想把未来几年的增长都预留出来,其实完全没必要。aws云服务器的配置调整一般都比较方便,初期选满足当前需求的配置,跑一段时间看资源占用情况再调整,反而更合理。
第三类是临时批量计算任务。很多开发者会碰到需要跑大规模数据处理、批量转码这类任务,这些任务一般只需要跑几个小时或者几天,跑完就不需要持续占用计算资源了。如果自己买高性能硬件来跑,跑完之后硬件就闲置了,很浪费。
这时候可以临时开一个配置足够高的aws云服务器,任务跑完就直接释放实例,只需要付这段使用时间的费用,成本低很多,也不用自己维护闲置硬件。
之前我认识一个做研究的开发者,需要批量处理几万份文档,他本地电脑跑要半个多月,后来临时开了一个高核心数的aws云服务器,一天多就跑完了,整体投入很低,这个场景其实很适合用这类弹性计算资源。 第四类是数据备份与容灾。
对于有一定数据安全需求的项目来说,除了本地的数据备份,还会需要把一份备份数据放到不同地理位置的存储资源上,aws云服务器可以用来承载备份程序、存储备份数据,万一本地的存储出问题,还可以从这边恢复数据。这里要注意的是,备份数据如果不需要实时访问,可以把aws云服务器设置成定时启动备份,完成后关机,只需要支付存储相关的费用,也能合理控制资源投入。
实际使用容易踩的坑
我这些年碰到过不少新手在使用aws云服务器的时候,踩过几个共性的坑,这里整理出来给大家参考: 第一个坑是安全配置不到位。很多新手刚拿到aws云服务器,为了方便调试,会把安全组的入站规则设置成允许所有地址访问所有端口,这其实是非常大的安全隐患。公开网络上随时有扫描程序在扫描所有开放的端口,弱密码或者有漏洞的服务很快就会被发现。我见过好几个刚接触的开发者,刚开的aws云服务器不到一天就被入侵,恶意程序占满了整个CPU,最后只能重置实例丢失数据。正确的做法应该是默认拒绝所有入站请求,只开放你确实需要对外提供服务的端口,比如web服务只开对应服务端口,远程管理只开你需要的那个端口,而且尽量用密钥登录,不要用密码登录,把不必要的服务关掉,这样安全风险会低很多。 第二个坑是存储配置没做好。
aws云服务器默认提供的系统盘一般是用来装操作系统的,空间通常不会太大,而且有些实例如果被释放,系统盘的数据也会跟着被清除。很多新手不知道这个规则,把业务数据直接存在系统盘里,哪天不小心重置实例或者误删了实例,数据直接就没了,找都找不回来。正确的做法是,额外挂载独立的数据盘来存业务数据,就算实例出问题,数据盘的数据还能保留,不会轻易丢失。
挂载数据盘之后也要记得正确完成格式化和挂载配置,很多新手挂载了之后找不到盘,就是没做开机自动挂载的设置,重启之后就找不到盘了,这个地方一定要配置正确,不然很容易出问题。 第三个坑是资源规划不合理。之前提到过,很多新手要么过度追求高配,造成不必要的资源浪费,要么为了控制投入选太低的配置,影响服务稳定性。
还有一种常见的情况是,开通之后从来不看监控数据,一直用初始配置,直到服务卡顿甚至中断才发现资源不够用。其实aws云服务器一般都自带基础的监控功能,可以看到CPU、内存、磁盘、网络的实时占用情况,定期查看监控数据,就能知道资源够不够用,提前调整,不会等到出问题才处理。根据使用时长调整合适的计费类型,也能更合理的控制资源投入,不需要花多余的钱。
整体来说,aws云服务器对于普通开发者是一个很实用的工具,它降低了获取计算资源的门槛,不用提前投入硬件成本就能快速启动项目。只要弄清楚基础逻辑,避开常见的坑,就能很好的用它满足自己的需求。