在独立商城这块,大家多多少少,应该都听说过 ecshop,这款十来年前的老商城,虽然没有昔日的辉煌,但基于其庞大的用户量,还是有不少的老用户的。
由于其年代远、技术旧、版本低、缺维护等等原因,对业务造成了不小的负面影响。所以很多客户都想花较低的成本对其进行一个优化。
最近就遇到了一个 8 年前的老客户,现用较低的成本,把系统改造一下。以下是我给他改造的方案,仅供大家参考:
- 数据库迁移
这个客户是单机架构,PHP和MYSQL、NGINX都在一台服务器上,由于当年的预算不高,而且年代也比较远,又没有技术人员维护,所有表都使用的是MYISAM,MYSQL都是默认配置,日志表、日志文件超级大,所以每次有流量来的时候,服务器负载就比较高,访问速度也直线下降。虽然升级mysql、修改存储引擎、调整mysql配置、清理日志等操作都可以起到优化的作用,但是人力的成本,远高于机器,所以我推荐他们,直接迁移到阿里云RDS上去,一步到位。在这个过程中,有两个注意点,一是rds只支持InnoDB,必须先修改一下存储引擎; 二是检查一下有没有开启自动提交(autocommit
)。
- session优化
因为ecshop默认是把session存储到数据库中一张名为session_data的表里,频繁的对数据库进行操作,当然会增加服务器的负载呢,并且效率也很比较低,所以较理想的方式,就是把session放到memcache里面来存储和管理,这种改造,成本也比较低,在init.php里面注释掉session相关的代码,然后安装memcache扩展,搭建memcache服务,配置php.ini,重启一下fpm就可以了
。不过这里也有一个坑,需要注意,就是字符串转义问题,如果不解决,商城后台的权限就会有问题。
- php 和 nginx 调优
一般来说,调优都是先看看慢日志,再看看目前的配置,fpm慢日志,它没有配置,但是错误日志里面经常有很多以下的提示,所以我在看了它的fpm配置之后,在基于它的服务器配置和业务情况,将pm=dynamic改成了pm=static,再把pm.max_children=50改成了pm.max_children=200
,然后为了防止第三方库中的内存泄漏将pm.max_requests=1000
,这样一来,以下的提示就再没有出现过了。nginx优化了转发规则和进程数量。
- 静态文件缓存
因为预算有限,客户没有CDN, 所有静态文件都在服务器上,带宽也比较低,所以页面加载比较慢,在启用了压缩的情况下,又配置了缓存,以此增加了些许访问效率,但效果其实不大。
- 商品点击量优化
点击量它原来的逻辑是直接在商品详情页面 UPDATE 'ecs goods' SET click count = click count + 1 WHERE goods id = id
这样做的弊端不言面喻了。比较好的做法很多,但是因为预算有限,加上业务也不关心,所以直接注释了。
- https 证书自签
本来上线那一会儿,他是买了证书的,现在是过期了,没有续。所以直接在NGINX之前加了一层caddy。可能很多人对caddy了解不多,其实Caddy是一个支持 HTTP/2 的跨平台 Web 服务器,使用和配置都非常简单。 它最大的亮点就是支持自动https续签。这种算是最低成本的改造了,所以没得挑。当然这种证书有些浏览器可能无法验证,使用的时候要注意一下。
以上就是本次最低成本的优化方案了,仅供参考,当然还有很多的小细节,就没有一一举例了。
–end–