谈谈个人网站的建立(一)——建站历史和技术架构

个人网站的建立

首先,帮忙点击一下我的网站http://www.wenzhihuai.com/ 。谢谢啊,如果可以,GitHub上麻烦给个star,以后面试能讲讲这个项目,GitHub地址https://github.com/Zephery/newblog

大学的时候萌生的一个想法,就是建立一个个人网站,前前后后全部推翻重改了4、5遍,现在终于能看了,下面是首页。

<div align="center">

</div>

由原本的ssh变成ssm,再变成ssm+shiro+lucene,到现在的前后台分离。前台使用ssm+lucene,后台使用spring boot+shiro。其中,使用pagehelper作为分页,lucene用来搜索和自动补全,使用百度统计的API做了个日志系统,统计pv和uv什么的,同时,还有使用了JMX来观察JVM的使用和cpu的使用率,机器学习方面,使用了adaboost和朴素贝叶斯对微博进行分类,有兴趣的可以点点有点意思 这个页面。

本文从下面这几个方面来讲讲网站的建立:

  1. 建站故事与网站架构
  2. lucene搜索的使用
  3. 使用quartz来定时备份数据库
  4. 使用百度统计api做日志系统
  5. 使用jmx观察jvm和cpu
  6. 使用druid来监测数据库
  7. 使用机器学习对微博进行分析
  8. 网站性能优化
  9. SEO优化

1.建站故事与网站架构

1.1建站过程

起初,是因为学习的时候老是找不到什么好玩而又有挑战性的项目,看着struts、spring、hibernate的书,全都是一些小项目,做了感觉也没啥意义,有时候在博客园看到别人还有自己的网站,特羡慕,最终就选择了自己做一个个人网站。期初刚学的ssh,于是开始了自己的ssh搭建个人网站的行程,但是对于一个后端的人来说,前端是个大问题啊。。。。所以初版的时候差不多全是纯生的html、css、js,至少发博客这个功能实现了,但是确实没法看。前前后后折腾了一个多月,决定推翻重做,到百度看看别人怎么做的。首先看到的是杨青 的网站,已经好几年没更新了,前端的代码看起来比较简单,也是自己能够掌握的,但是不够美观,继续找,在模板之家发现了一个高大上的模板。

<div align="center">

</div>

第二版的界面确实是这样的,只是把图片的切换变成了wowslider,也是简单的用bootstrap和pagehelper做了下分页,现在的最终版保留了它的header,然后评论框使用了多说(超级怀念多说)。后端也由原来的ssh变成了ssm,之后加上了lucene来对文章进行索引。之后,随着多说要关闭了,突然之间有很多div都不适应了(我写死了的。。。),再一次,没法看,不想看,一怒之下再次推翻重做,变成了现在这个版本。

最终版本在考虑时,也找了很多模板,影响深刻的是tale欲思 这两个主题,期中,tale使用的是java语言写的,刚知道的那一刻我就没好感了,java后端我是要自己全部写的,tale这个页面简洁但是不够炫,而且内容量太低,可能就只是个纯博客,之后发现了欲思,拓展性强,只可惜没有静态的版本,后台是纯生的PHP(嗯,PHP是世界上最好的语言),看了看,没事,保存网页,前端自己改,后端自己全部重写,最终变成了现在这个版本,虽然拼接的时候各种css、js混入。。。。还好在做网站性能优化的时候差不多全部去掉了。最终版加入redis、quartz、shiro等,还有python机器学习、flask的restful api,可谓是大杂烩了。

页面看着还算凑合,至少不是那种看都看不过去的那种了,但是仔细看看,还是有不少问题的,比如瀑布流,还有排版什么的。只能等自己什么时候想认真学学前端的东西了。

已经部署在腾讯云服务器上,存储使用了七牛云的cdn。

1.2 网站整体技术架构

最终版的技术架构图如下:

<div align="center">

</div>

网站核心主要采用Spring SpringMVC和Mybatis,下图是当访问一篇博客的时候的运行流程,参考了张开涛 的博客。

<div align="center">

</div>

运行流程分析

  1. 浏览器发送http请求。/blogdetail.html?blogid=1。
  2. tomcat容器初始化,顺序为context-param>listener>filter>servlet,此时,spring中的bean还没有被注入的,不建议在此处加载bean,网站声明了两个类(IPFilter和CacheControlFilter),IPFilter用来拦截IP,CacheControlFilter用来缓存。
  3. 初始化Spring。
  4. DispatcherServlet——>HandlerMapping进行请求到处理的映射,HandlerMapping将“/blogdetail”路径直接映射到名字为“/blogdetail”的Bean进行处理,即BlogController。
  5. 自定义拦截器,其中BaseIntercepter实现了HandleInterceptor的接口,用来记录每次访问的链接以及后台响应的时间。
  6. DispatcherServlet——> SimpleControllerHandlerAdapter,SimpleControllerHandlerAdapter将HandlerExecutionChain中的处理器适配为BlogController。
  7. BlogController执行查询,取得结果集返回数据。
  8. blogdetail(ModelAndView的逻辑视图名)——>InternalResourceViewResolver, InternalResourceViewResolver使用JstlView,具体视图页面在/blogdetail.jsp。
  9. JstlView(/blogdetail.jsp)——>渲染,将在处理器传入的模型数据(blog=Blog!)在视图中展示出来。
  10. 返回响应。

1.3 日志系统

日志系统架构如下:

<div align="center">

</div>

日志系统 曾经尝试采用过ELK,实时监控实在是让人不能不称赞,本地也跑起来了,但是一到服务器,卡卡卡,毕竟(1Ghz CPU、1G内存),只能放弃ELK,采用百度统计。百度统计提供了Tongji API供开发者使用,只是有次数限制,2000/日,实时的话实在有点低,只能统计前几天的PV、UV等开放出来。其实这个存放在mysql也行,不过这些零碎的数据还是放在redis中,方便管理。

出了日志系统,自己对服务器的一些使用率也是挺关心的,毕竟服务器配置太低,于是利用了使用了tomcat的JMX来对CPU和jvm使用情况进行监控,这两个都是实时的。出了这两个,对内存的分配做了监控,Eden、Survivor、Tenured的使用情况。

1.4 【有点意思】自然语言处理

本人大学里的毕业设计就是基于AdaBoost算法的情感分类,学到的东西还是要经常拿出来看看,要不然真的浪费了我这么久努力做的毕业设计啊。构建了一个基本的情感分类小系统,每天抓取微博进行分类存储在MySql上,并使用flask提供Restful API给java调用,可以点击这里 尝试(请忽略Google的图片)。目前分类效果不是很明显,准确率大概只有百分之70%,因为训练样本只有500条(找不到训练样本),机器学习真的太依赖样本的标注。这个,只能请教各位路人大神指导指导了。

<div align="center">

</div>

总结

断断续续,也总算做了一个能拿得出手仍要遮遮掩掩才能给别人看的网站,哈哈哈哈哈,也劳烦各位帮忙找找bug。前前后后从初学Java EE就一直设想的事也还算有了个了结,以后要多多看书,写点精品文章。PS:GitHub上求给个Star,以后面试能讲讲这个网站。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT派

Python的10大集成开发环境和代码编辑器(指南)

使用IDLE或者Python Shell来编写Python是非常适合于简单程序的,但是这些工具往往将大型的编程项目变成一个个充满绝望和沮丧的“坑”。使用一款集成...

1316
来自专栏何俊林

VLC框架总结(一)初识庐山真面目

开头说三件事: 1、周末送书已全部寄出。获取者注意查收,考虑到顺丰着实贵了。发的是百世快递,已都帮大家付了邮费。北京市内6块,外省都是10块。觉得这快递价格还是...

2049
来自专栏后台开发+音视频+ffmpeg

ffmpeg视频云转拉耗时优化(续)

https://cloud.tencent.com/developer/article/1149105?s=original-sharing 上次在这里详细分析...

2445
来自专栏生信技能树

我的第一R包- 生信配置文件大全

大家好,我是李剑峰,生信技能树论坛的VIP小编,目前在上海交通大学医学院附属瑞金医院进行研究生阶段的学习,主要研究方向是生物信息学、医学信息学、大数据综合分析、...

3139
来自专栏北京马哥教育

Python的10大集成开发环境和代码编辑器(指南)

来源:Python程序员 ID:pythonbuluo 使用IDLE或者Python Shell来编写Python是非常适合于简单程序的,但是这些工具往往将大...

4099
来自专栏liukaili_666888999

iOS11新特性

903
来自专栏码神联盟

碎片化 | 第九阶段-02-互联网常见层次架构分析图概述2-视频

如清晰度低,可转PC网页观看高清版本: http://v.qq.com/x/page/s0501k7x7kr.html 互联网常见的层次架构 常见的架构模式:...

41711
来自专栏.net core新时代

数据字典生成工具之旅(1):开篇有益

       最近在做公司需求的时候,发现一个很低效的点,在建表的时候需要使用公司自己开发的建模工具进行创建表,一个字段一个字段的复制粘贴让人受不了。于是萌发了...

1859
来自专栏运维一切

镜像的自动化制作设计 原

终极的目标是为了缩短构建时间和发布时间,为此增加一些镜像层数是情有可原的,另外目前尚不清楚到底镜像可以叠加多少层,操作层数之后会有什么样的麻烦? ####技术研...

241
来自专栏逍遥剑客的游戏开发

C#脚本实践(一)

1054

扫描关注云+社区