基于 Laravel 5.6 重构的新版 Laravel 学院正式发布了!
经过近一个月时间紧锣密鼓的重构开发,基于 Laravel 5.6 内核的新版本 Laravel 学院如期出现在大家面前,虽然正式上线过程中出了一些小意外,但好在有惊无险,这些问题一一被处理掉,这充分说明了一个道理:上线有风险,测试需谨慎!在正式给大家呈现新版本功能之前,先对近两天出现的学院崩溃问题做一个简单的复盘:
- 7月17号(昨天)学院首页502,不能访问的原因,是负载均衡配置域名有问题导致的;
- 7月18号(今天)学院访问速度很慢,这是因为为了节省带宽成本,学院选择的是1M带宽,静态资源如CSS、图片很耗带宽,在较大的访问量下,网卡被打满,导致大家无法进入,故而速度很慢,图片CDN处理开发过程中已经想到,没想到后来CSS、JS等静态文件成了瓶颈,所以也一并通过CDN访问,这样下来,学院瞬间恢复正常访问。
- 搜索功能不可用,原因是新版学院基于迅搜作为搜索引擎,但是异步队列构建索引时由于权限问题,写入不了索引文件,所以查询一直为空,通过排查日志发现问题处理后,搜索功能恢复。
- GitHub 登录异常问题则完全是代码bug了
现在的 Laravel 学院除了具备之前的功能和性能外(这充分证明了 Laravel 通过优化也能达到等同于静态页面缓存的性能),还新增了如下功能模块:
- 用户系统:注册、登录、发布主题、提问、评论、积分等
- 问答模块:将之前的 forum.laravelacademy.org 一并重构整合到新学院里,实现用户体验的一致性
在支持这些上层功能的底层,学院君使用了以下框架&扩展包:
- Laravel 5.6 最新版作为底层驱动框架
- Laravel Horizon 作为队列系统实现方案(基于Redis)
- Laravel Notification 作为通知系统解决方案(数据库+邮件)
- Laravel Event 系统解耦业务模块
- Laravel Cache 作为缓存解决方案(基于Redis)
- Laravel Scout 作为全文搜索解决方案(基于Xunsearch引擎)【讲解教程】
- 通过自带的认证脚手架代码 + Laravel Socialite 作为用户认证解决方案
- 基于 Laravel 自带的 Policy 机制实现简单的权限管理
- 通过 Laravel 自带的任务调度管理机制实现定时任务执行
- 系统架构使用了改良的MVC架构:控制器->服务层->模型->视图
- 使用 Laravel Admin 扩展包快速实现管理后台,选择它的原因是对系统侵入性最小,也够用
除此之外还有一些其他的有用的工具包:
- 通过 erusev/parsedown 实现 Markdown 语法解析【讲解教程】
- 通过 intervention/image 实现图片处理
- 通过 predis/predis 实现对 Redis 的调用
- 通过 qiniu/php-sdk 实现对七牛 SDK 的调用(自己实现一个文件系统扩展作为云存储方案)
- 通过 mews/purifier 避免富文本编辑器XSS攻击【讲解教程】
- 通过 roumen/sitemap 实现站点地图生成【讲解教程】
- 通过 sentry/sentry-laravel 实现异常在线实时监控【讲解教程】
前端用到的值得推荐的组件:
- 类目、标签设置:select2
- 富文本编辑器:summernote
- 主题样式:bootstrap 3
- 图片异步上传:jQuery Fileupload
- 社会化分享:share.js
除此之外还有一些与语言无关的技术方案分享给大家:
- 通过CDN加载静态资源可以极大提高网站吞吐,用低配网卡撑起更大访问量
- 学院目前通过七牛云存储的镜像存储+CDN方案实现静态资源的云储存和访问
- 学院目前后台通过两台阿里云ECS驱动,通过Nginx实现简单的负载均衡
- Session 存储在 Redis 里面从而实现两台机子的共享
- 图片资源通过 NFS 实现共享,解决存储在不同机器的图片在同一域名下的访问问题
- 相关文章推荐基于余弦定理算法生成
以上,暂时就写这么多吧,以后想起来了再补充一些细节,目前会在这种系统架构下运行一段时间并进行功能迭代。也欢迎大家参与到新学院的建设中来,遇到问题及时向我反馈。
22 Comments
没有 响应式的
学院君,您说使用了nfs系统,具体是使用的哪个nfs系统呢