CodeSnippet.info整体技术构架
CodeSnippet.info整体架构
服务器端
Asp.NET MVC5
考察过MVC6,但是现在MVC6还不成熟,技术上不稳定,很多资料也比较少。
所以网站暂时使用MVC5.当然网站的大部分业务逻辑是和MVC框架脱离的,以后升级也应该不会出现很大问题。
数据库选择
数据库暂时使用MongoDB,使用MongoDB纯粹是站长的个人兴趣爱好。
(MongoDB 3.2.4 WireTiger数据库引擎)
MongoDB的优点和缺点十分明显
优点
1.使用MongoDB的C#官方驱动程序,天然的ORM。
2.文档化的数据结构,简化了设计
3.使用MongoDB的TTL索引,可以实现定时缓存功能,数据经过指定时间后就自动从数据库里面删除。
TTL Indexes 官方说明
下面对于CreateDateTime字段设置了一个TTL索引,900秒后自动过期
4.自带GridFileSystem,可以在数据库里面存放文件
GridFS官方说明
缺点
当然,最大的缺点就是对于内存消耗实在太大了。MongoDB就是一个消耗内存的怪兽,如果没有取之不竭的内存,千万不要将文件放在数据库中。
插入17万条数据:每条数据平均大小 0.8K
数据大小144M,压缩存放后占用磁盘空间42兆
整体的索引大小2.34M。
占用内存是多少呢?初始状态:214M,然后随着时间的推移,一直会飙升到600M,很有可能造成服务器内存不足,Mongod线程意外终止。
文件保存
方案1 七牛存储
七牛存储作为一个提供存储的空间,文件的上传下载在编码层面非常方便。
从成本上看,存储 10G 以下是免费的,当然10G以上的收费也还可以,但是成本的大部分还是在流量上面。
方案2 MongoDB
MongoDB自带的GridFileSystem,使用非常方便,数据都保存在本地,安全性是最好的。但是对于内存的消耗实在太大了。
方案3 操作系统的FileSystem
本网站暂时使用这种方案,在网站规模不大的时候,性价比是最高的。
全文检索
ElasticSearch
整个网站虽然使用的是ASP.NET,但是并不妨碍使用Java阵营的产品。
现在网站使用的是ElasticSearch引擎,通过NEST这个Net的客户端类库操作ElasticSearch。
(暂时仅仅对标题进行了索引,没有对于文档内容进行索引)
使用NEST操作ElasticSearch进行全文检索
第三方验证
Github OAuth
由于IT技术人员大都有Github账号,同时为了防止本网站被攻击造成账号泄露,本网站现在使用Github的第三方验证。
使用Github网站OAuth系API进行第三方验证
PDF输出
Spire.Pdf
.NET PDF Component
使用的是免费版本,每个PDF最大页数为10页,如果需要可以考虑购买许可证,599美元。
生成的PDF效果一般,支持HTML中外部图片的抓取,支持简单的CSS和Javascript.
(注意:Microsoft.mshtml.dll 这个动态链接库必须放到网站的Bin目录中。这个插件的本质就是通过内置的浏览器抓取截图
如果有复杂的Javascript生成界面的话,可能抓取的瞬间很多界面都没有完成)
MarkDown编辑器
Editor.md
(该项目很久没有更新了,或多或少存在一些BUG)
备用MarkDown编辑器:https://github.com/yutuo/mdeditor.yt