APP下载

基于分层架构+动态扩容的越牛新闻客户端平台

2022-09-01

中国传媒科技 2022年9期
关键词:队列客户端模块

韩 波

(绍兴市新闻传媒中心, 浙江 绍兴 312000)

导语

伴随社会的高速发展,互联网已经完全融入人们的生活中。人与人之间的社会信息交流日趋频繁,传统的报纸、广播、电视等信息传播媒介和方式已不能满足现代信息交流的需求。移动新闻客户端,凭借其信息获取及时、新闻内容丰富、浏览方便等特点,越来越受到用户的青睐。除此之外,移动新闻客户端还融合了种类多样的功能。在提升用户悦读感的同时,让用户深度参与,使用户在交流、互动中享受使用移动新闻客户端带来的乐趣。

绍兴市新闻传媒中心2019年整合了原掌上绍兴、今日绍兴客户端,打造报、台、网、端、微一体化的新型媒体服务平台。在传统移动客户端功能需求的基础上,契合用户实际,有机结合网站、直播、读报、电台、新闻资讯、政务服务及多种线上活动等栏目,力争打造绍兴龙头、省内领先、全国有影响力的新媒体平台。

本文在认真分析用户需求的基础上,结合现有新闻传媒融合发展的趋向,探索一条基于手机客户端的设计与实现方法。该系统采用分层SOA架构设计,从最底层的基础平台抽象出具体的服务层,分别提供搜索、异步任务、统计分析、审核日志、计划任务等平台API和站点API,在API层之上再封装为WEB业务层对外提供后台管理、站点浏览以及手机客户端访问等功能。整套系统基于LNMP 架构,采用PHP面向对象语言、MVC设计模式、模块化方式开发的多终端一体化的内容管理系统。事实证明,在系统运行的3年多时间里,系统代码质量健壮、运行稳定高效、界面简洁明了、操作方便快捷,用户黏合度良好,达到了预期效果,具有一定的实际应用和推广价值。[1][3]

1.需求分析

通过前期调查分析,根据用户对新闻资讯、直播、读报、电台、服务等方面的需求,本文设计的越牛新闻客户端涵盖新闻资讯模块、直播模块、读报模块、看电台模块、服务模块等。如图1所示用例图。

图1 越牛新闻主要功能模块用例图

新闻资讯模块:该模块用户可以在越牛新闻客户端上看到新闻资讯类信息、民生实事类信息以及视频内容,用户可以通过对新闻稿件进行评论、点赞,或者通过在线找小编进行反馈。

直播模块:该模块主要包括各类会议、活动、赛事等直播。用户可以通过越牛新闻客户端实时观看绍兴本土举办的会议、活动、赛事等。

读报模块:该模块主要包括在线读报功能。用户可以通过越牛新闻客户端线上阅读《绍兴日报》《绍兴晚报》《树人导报》。同时该模块还引进国内多家知名报刊供用户阅读,比如权威的《人民日报》等。

电台和广播模块:该模块主要包括电台直播、广播功能。直播主要是绍兴本土的3个电视频道在手机上直接播放。广播主要是在手机上收听广播频道。

服务模块:该模块主要包括政务、问政、生活、文化、报料、健康等方面的功能,方便用户通过越牛新闻客户端就能完成政务办理、生活缴费、文化旅游、新闻报料、健康咨询等多方面的事务。

2.总体设计

总体设计又称概要设计,用来确定软件的结构以及各组成子系统或模块之间的相互关系。主要包括:选用合适的技术方案、系统总体结构设计、队列和数据库以及缓存设计和代码规划设计。

2.1 选用合适的技术方案

越牛新闻客户端针对新闻类App的技术特点,总体采用B/S架构设计。服务端的22台云主机通过两台负载均衡分配,对外提供WEB服务。客户端选用MVC开发框架,实现了功能模块和显示模块的分离,提高了系统的可维护性、可扩展性、可移植性和组件的可复用性。为保障网络传输层的安全和稳定,Android端采用Java和Kotlin混合开发,iOS端采用Objective-C开发,客户端网络层分别采用了Retrofit + RxJava、AFNetworking网络框架,将接口的定义和实现分开,使用异步的方式实现网络请求,避免线程的转换。接口请求参数使用非对称签名算法进行加密,防止伪装攻击、篡改攻击、重放攻击。[2][6][7]

针对移动端常见的网络场景,客户端采用预加载与二级缓存机制,保证新闻能正常阅读和页面展示流畅度,在弱网络场景下通过兜底缓存保证数据能快速呈现。

客户端自定义了原生与H5交互的JSSDK框架,使得客户端能快速的与三方系统集成,快速构建新能力,更好地实现客户端与H5的交互。

2.2 选用服务分层架构

项目良好的分层可以解耦系统,同时可以保证提供高效稳定的服务响应能力。

2.2.1 交互展示层

系统客户端与用户交互的展示层均使用服务提供数据,客户端渲染界面的方式完成,避免直接与数据层交叉混合,在展现层充分从人类的感知系统考虑,优先响应人类可感知的元素,界面采用渐进式加载,用户未浏览到的位置不进行数据加载及界面渲染,节省了服务资源也保证了界面的流畅度。在加载耗时较长的界面提供视差动画过渡以降低用户感知等待时间,有效提升了用户感观体验度。

2.2.2 网关控制层

代理层除完成正常的反向代理、合法性校验等工作外还会完成以下工作:

●缓存数据接口,使用nginx+lua自研的缓存系统针对不同类型的接口有效的结合系统业务实现高效率、高响应速度、低成本的服务响应。

●服务降级,在极端情况下系统需要考虑放弃低优先级针对高优先级的服务提供稳定服务,针对媒体单位的服务特点,cmstop采用了自研的风控系统,为业务定义响应等级,在系统运行中动态监控系统负载情况,当资源负载急剧升高时会自动控制低优先级服务的响应频率以保证优先级高的服务正常访问。同时系统会自动检测慢接口,如果在短时间内同一个业务出现大量的慢响应影响了其他业务的响应,系统会自动屏蔽问题业务并发出通知警告,然后根据负载情况尝试恢复标记的问题业务,当感知到响应正常后会逐步自动恢复业务以提供服务。

2.2.3 应用层

应用层按业务类型分为不同的模块,业务模块之间采用接口交互,无交叉访问,避免了出现牵一发动全身的情况出现,增加了业务的稳定性,同时也保证了业务可以按需调整迭代。

2.2.4 服务层

系统中有很多的服务是通用类型的,例如发送邮件、发送短信验证码等,系统在设计之初考虑了服务化,将通用的服务进行了服务化供系统其他模块通过rpc或接口化调用,业务系统通过组合提供多样化的服务,避免了重复造轮子,降低开发成本,也保证了核心服务的稳定性。

2.2.5 数据访问层

数据访问层定义了数据模型,封装了数据访问,对访问的合法性进行了校验,同时提供了轻量级的数据缓存,统一了数据访问口径,保证了数据合理访问及高效访问。

图2 服务分层结构图

2.2.6 数据存储网关层

系统存储网关主要是实现了接口化的数据存储能力,包含关系型、非关系型数据的存储能力,使得上层无需关注低层而实现接口化编程,同时这种架构能力也为存储实现的升级切换提供了良好的保证。

2.3 选用动态扩容架构

系统的架构需要考虑用户体验以及经济成本,需要在用户体验与成本之间达到一个很好的平衡,系统在架设之初就考虑了在低峰期使用较低的硬件支撑日常运行,并根据需要动态增减系统各环节的资源。主要分为两类型服务的资源。

2.3.1 无状态服务

无状态服务是具备秒级自动伸缩能力的,在系统资源足够时会自动部署新的服务节点并加入负载均衡,当业务流量下降会自动减少节点。极端情况如果资源无法提供会使用云服务商提供的sdk增加ECS部署无状态服务,然后使用智能DNS解析将部分流量自动导流到云环境进行服务响应,当总体流量下降时自动销毁云服务以降低成本。

2.3.2 有状态服务

图3 动态扩容架构图

在状态类服务需要保证数据的完整性,目前系统主要的有状态服务主要是数据存储实例,由于架设了数据网关层,能很好地监控存储实例资源情况,在数据存储层cmstop实现了动态扩展能力,当系统负载升高时会动态添加实例节点以应对流量增长,在系统负载降低后会动态回收数据实例以保证资源的合理使用。当系统负载急剧升高系统无法提供充足资源数据存储能力时,系统将结合云服务商提供的sdk自动同步数据到云服务商,借用云厂商强大的资源提供服务,在数据网关层自动切换后端对应的存储实例,做到了业务无感知下切换存储能力。当系统负载降低会自动切换回本地服务并关闭云服务以降低成本。

2.4 队列、数据库和缓存设计

系统提供一套用于向全平台提供统一的集群化的队列服务,可支持对多种应用的异步任务进行处理,比如可以用来做邮件发送,也可以用来做资源分发、数据库入库等,并可以灵活地更换底层系统支持。

平台中需要进行定时、周期、异步处理的数据,都可以使用队列完成。如计划任务、NLP服务、审核推送等。

图4 队列服务的功能结构图

队列服务的核心是使用Redis的list实现的。整个的服务可以分为3个部分:业务客户端、队列执行端、服务提供商。

业务客户端:负责向队列中写入合法的数据,在写入队列前应先进行基本过滤,除去本身就非法的数据。

队列执行端:负责从队列中读取数据,发送给服务提供商执行具体的任务,如:邮件发送,从队列中取出一个数据,发给后端的SDS、mail provider。

服务提供商:负责具体的业务执行。如:转码、邮件发送、审核消息推送,服务提供商负责具体的逻辑与数据处理。

支持主从同步。数据可以从主服务器向任意数量的从服务器上同步,从服务器可以是关联其他从服务器的主服务器。数据间隔短时间存盘,保证了数据的完整性及故障出现时快速恢复的能力。同步机制可以轻松扩容读服务规格,能轻松应对流量增长,同时多实例的存在大大降低出现单点故障的可能。[2][5]

3.详细设计与实现

根据总体设计完成用户模块、新闻资讯模块、直播模块、读报模块、电台和广播模块、服务模块的详细设计。

3.1 用户模块

用户模块设计主要包括报料、积分排名、邀请码、会员码、消息、注销、越牛商城、推送消息等。其中报料:可实时查看网友的公开报料信息,并为用户提供报料入口。积分排名可实时查看当前用户的积分排名和积分获得情况,可参与月度积分抽奖。邀请码:注册用户可以生成邀请码,并邀请用户加入越牛新闻。会员码是注册用户可以生成动态会员码,用于越牛消费券核销,用户线下签到等场景。消息可实时查看用户自己的历史评论信息、其他人@用户的消息、小编互动的对话消息。越牛商城:提供越牛商城入口,并通过免登处理,实现越牛账户在客户端内进行物品的积分兑换和购买。注销为用户提供一键删除在越牛客户端的用户留存记录的功能。关于我们提供越牛版本升级的快捷入口,并可查看越牛用户协议和隐私政策。推送消息可实时查看越牛新闻热门推送稿件。[4]

3.2 新闻资讯模块

图5 越牛新闻客户端新闻列表界面

新闻资讯模块是对发生的新闻进行浏览,包含音视频、文字和图片,也可以对新闻进行评论与回复。用户打开越牛新闻客户端(调用新闻列表接口),以置顶和时间倒序的形式在客户端展示新闻列表。点击进入某条新闻时(调用获取新闻详情页的接口),获取到新闻的详细信息。登录用户(调用用户登录接口)可以在底部输入评论内容,在页面的评论区追加内容(调用评论和回复接口)。

系统还结合地理位置,优先筛选并为用户推送用户所在地的相关新闻,提高用户关注度。用户可根据 LBS定位查看当前所在区域的本地化内容,也支持手动选取更改城市。后台可以对本地栏目配置对应区域的内容列表,用户可以全平台上跨站点绑定本地栏目。

3.3 直播模块

直播模块包括直播和回放两大功能。直播主要针对各类会议、活动、赛事的直播。回放是对直播节目的回看。点击直播页面后,请求服务器直播信息,客户端收到信息后进入直播间观看,同时可以在聊天室进行互动,回放过程与直播类似,不再一一赘述。

3.4 读报模块

读报模块主要涵盖绍兴本地的《绍兴日报》《绍兴晚报》《树人导报》的在线阅读功能,以及包括人民日报等权威报纸在内的多家报刊的在线阅览。该模块中的所有报纸均通过数字报纸平台反解生成H5页面形成,在客户端中接入数字报纸平台页面。

图6 读报纸

3.5 看电台、听广播模块

该模块主要涵盖绍兴本土的3个电台和广播,经过编码器采集电台和广播的视音频信号,通过网络将码流上传至服务器进行转码,形成最终的播放文件。

图7 看电台

图8 听广播

3.6 服务

该模块主要涵盖政务、问政、生活、文化、报料、健康等方面,对接市级有关负责部门,向用户集中开放接口,为用户提供使用便利。

图9 服务模块

结语

在信息技术迅猛发展的大背景下,为更好地发展新闻事业,更深入地做好媒体融合,满足用户对信息获取的良好体验。该系统基于LNMP架构,使用PHP、Nginx、Redis、MySQL和队列等技术,采用标准MVC开发模式,模块化方式开发的多终端一体化信息系统,设计并实现了集新闻资讯、直播、读报、看电台、听广播、服务等于一体的客户端系统。通过近3年多的实践使用,系统运行平稳、界面简洁、操作便捷,满足了用户的阅读需求,用户黏合性强,具有一定的实际应用和推广价值。

猜你喜欢

队列客户端模块
你的手机安装了多少个客户端
你的手机安装了多少个客户端
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
28通道收发处理模块设计
“选修3—3”模块的复习备考
队列队形体育教案
队列里的小秘密
基于多队列切换的SDN拥塞控制*
在队列里
新华社推出新版客户端 打造移动互联新闻旗舰