— 剑气纵横三万里,一剑光寒九百州
前言:Java语言开发的后台系统(VUE架构),整合Swagger API,相较其他框架结构,有着语言简单,配置方便,轻量化,结构安全稳定的优点。今日头条在这3-5年内迅速崛起,在移动端新闻领域占到60%-90%。除去内容为王,头条新闻的标杆效应,在技术上也是可圈可点。这里立哥结合相关开发经验,就带大家领略下相关风采。
用户建模
今日头条客户端开发采用kafka通讯架构与Hadoop大数据分析工具。对用户产生的偏好数据等信息,MySQL/mongoDB,以及Redis中。按照以下方法进行建模:
用户订阅、标签、部分文章打散推送。都由AI算法计算并采取策略实施。
系统架构
文章抓取与分析
今日头条每天产生的原创新闻篇数,在1万以上,但是在这个信息爆炸时代,人人个性化订阅的需求是无穷无尽的。所以爬取其他渠道的新闻非常重要,笔者自己写过爬虫程序,很是简单,对于Baidu沙盒,非常友好。然后,审核这里,今日头条是机器结合人工。对文章按照标签、主题、新闻所在地、热度等维度,进行权重统计计算。
微服务系统
推荐引擎
推荐引擎是今日头条技术架构的核心,包括自动推荐系统和半自动推荐系统。技术划分,包括分类频道、兴趣标签、关键词频道、文本分析、语义分析等。数百个分类器,每天依然增加不少新的数学模型。收集用户动作日志、用户兴趣列表、用户习惯模型。虚拟化Paas技术,将Cloud资源整合起来。
API接口开发
Java语言在框架中,主要用在接口开发中。VUE后台框架是一个复杂的系统,后台与前端双向传输绑定。立哥开发主要用注解结合class等方法,CRUD的需求是基础,需要特别重视。目前适配VUE,有很多轮子可以用。笔者结合自己正反两方面经验,给出经验是能用GitHub等可以用的开源轮子,就不要自己造。这是出于系统稳定性和减少开发测试工作量的考虑。立哥认识的每一位资深开发工程师都认同,系统必须要往简单方向做,我也非常认同。而且在实践中,更是体会到“少既是多”的真理。像简单的查询,不用Sort,就不用。遍历算法实在不行,或者你开发的方法用的是枚举,那就是适用的。千万不要追求“高精尖”,基础不稳,地动山摇。而且代码结构越复杂,需要解耦的工作就越多,占用的资源就越大。立哥在实际开发中,总结出80法则,系统调用的资源不能超过资源总量的80%,这是一条红线。剩下20%,作为预备队,防止载荷过载情况。这和军事作战,一个道理,一定要有预备队,否则必然打败仗,关键时刻肯定怂。咱们做技术踏踏实实,一步一个脚印。今日头条每分钟的点击量超过1亿次,是属于典型的高并发大型系统。虽然在各个数据中心站点进行分流,配置多个数据库,但是对接口压力依然非常大,Redis缓存的压力也很大。所以开中,强壮API,多采用注解和继承方法。