海底暴风雪

富在术数不在劳身,利在局势不在力耕

将个人站从Python后端迁移到Go后端

首先是迁移后的效果对比,在我的2C,2G服务器上,个人站点服务的内存占用从0.8G降到了0.5G,当然这其中可能有一部分原因是缺少了Redis做缓存,减少了内存占用。但是仅从首页压测的情况看,服务可承受的并发比python多出一个数量级,这可能也和django老旧的并发模型有关,不使用异步的django需要使用uwsgi等提供高并发,uwsgi中可以设置进程数量,当然进程数量越多,并发能力越强。但这只是其中的一个因素,影响性能的其他因素往往不止这一个,还与数据库等方面相关。

但是就目前来看,服务器运行压力小了很多,这不仅仅体现在个人站本身上。在迁移博客站之前,我还有一些服务是用django编写运行的,这其中包括套壳的gpt,还有rss的定时爬取。其中rss的爬取每半个小时就会进行一次,不过rss的的定时爬取是使用go写的,不得不感叹go得并发,数据库确实顶不住,其中有一个单表需要频繁的查询数据并插入并更新数据,其中有两个字段保存的是很长的字符串,这导致数据库没多长时间其中的数据就会很多,应用的性能产生问题。导致其他的单个服务都会因为数据库而没有响应,也偶尔会出现内存满了服务器连ssh都连不上的情况。这种时候只能在云服务的控制台强制重启服务器。并且在rss每高并发的时候,由于每个服务都要进行守护,开启uwsgi,这就导致很多不必要的冗余,在一般情况下,服务器内存占用会到达1.1~1.3G之间。

在进行站点迁移的过程中,我将上面服务都放到了同一个项目中,统一管理。使用Go之后,所有的服务不但简洁清晰,而且性能还好,并且在定时任务方面,得益于go的goroutine,可以依据自己的实际需要进行配置,不用再外挂一个三方工具去实现相关功能。

最终整个站点的性能都得到了很大的提升,后续还需要做的就是加入缓存,进一步提升系统的响应速度。

性能和开发速度从来都是一个事务的两面,快速开发的代价就是牺牲部分性能。甚至被一些不需要的需求拖垮项目整体的速度。再后面的不断的迭代中,可以简化需求和逻辑,封装方法,甚至重构,来达到提升性能的目的。

搜索

文章分类