浅谈温州都市报百万级分类系统架构实现
温为锋
(温州日报报业集团)
摘 要:温州都市报在利用自主开发的分类广告系统进行业务管理已有多年,其间随着广告业务的不断变化系统也经历多次升级改版,从而应对每年百万级订单、6000万级广告额的业务需求。本文以此为实践基础,从“业务需求分析”、“系统架构实现”、“数据安全”、“财务审计”、“方正排版系统无缝结合”等方面进行分析描写。本文不涉及具体的程序代码,只谈理论架构实现及实际业务操作心得。 关键词:温州都市报 分类广告 百分级 地方报社系统 数据安全 财务报表 多终端 一键排版
- 前言
对一个地方报社而言,面对每年百万级订单千万级广告额的业务需求时,软件系统的选择方案无非有两种:一种是以外包委托第三方公司开发;另一种是完全根据自我报情自主开发。前者优势是报社不必过问技术细节,提出业务需求后由第三方专业实现。劣势是后期维护、业务规模扩展、广告个性发展等将受限。而后者方案需报社承担起软件技术开发的各类风险,技术人才引荐等等工作。为迎合当前新媒体发展大势,为从同城多家报纸广告竟争中脱颖而出,使报纸数字化发展步伐更快、我们选择了后者。事实上后来证明这种选择正确的。这种前端面向客户、中间涉及财务、后端涉及排版印刷的业务规模,首先我们对业务进行模型分解,然后从软件架构的角度逐一解决.最终完成一套拥有自身软件协议的标准工作流平台。由于本文并非技术代码性文章,我们主要思考以下几个问题?: 1、该采用何种架构模式,用B/S还是C/S,分析优略? 2、如何利用架构解决业务上的数据和行为错误? 3、如何快速实现当日数千级订单在方正飞腾软件中的无错排版,人工吗? 4、如何管理分布在各市县地区的门市点终端,有效形成工作网络? 5、架构中如何体现财务审计环节,该怎么监督订单? 6、如何避免善自修改业务数据问题? 7、如何避免历史业务修改与历史财务审计互斥问题? 8、如何满足大客户房源类批量刊登需求? 9、如何维护业务售后跟踪与提醒工作? 11、如何使业务接口向第三方系统开放,进行业务合作? 12、如何使业务服务看上去更加丰富多彩?
- 业务需求分析
2.1业务基本需求 2.1.1业务规模 数量百万级、金额千万级,每年以此递增。 2.1.2 业务形态符合传统、互联网多样现接稿;系统能与第三方公司合作,全媒体接稿形态存在。 2.1.3 业务流程用户->刊登申请->审核->收款->排版->见报.其间另涉及财务、排版多系统合作. 2.1.4 业务效率 软件订制标准作业下能够快速吞吐大量订单、自动降低出版错误、节约人力等成本。 2.1.5 业务容错率 是指在某个体系中能减小一些因素或选择对某个系统产生不稳定的概率。这儿指的是广告的文字错误、刊期错误。在标准软件作业下能够有效避免这种错误的发生. 2.1.6 敏捷业务 敏捷业务主要指系统能够迅速处理来自大量用户的订单请求,如批量房源信息。 2.1.7 查询业务 业务查询是广告型系统重要组成部分,提供参数多样化查询、报表生成服务等. 2.1.8 业务安全安全包括人员权限安全、数据存储安全、操作类型安全、逻辑正确性等。 2.1.9 业务审计财务通过业务报表对业务行为的合法性、数据的正确性等进行多方面审计。 2.2业务的模型分解 2.2.1 组成对象 客户、客服、审核员、排版人、财务、管理员、软件体系共同组成。 2.2.2 行为分析 客户:新增/查询/修改/核对/作废/付款等业务申请; 客服:处理客户申请、打印、审校客户资历、收款、上缴。审核员:审核订单的合法性、排除错误等。 排版人员:获取见报订单数据、传方正飞腾排版系统。财务:审计各类报表的正确性及实际上缴款与见报订单是否一致性。系统管理员:整个系统的分配与维护。软件体系:构架的实现。 2.2.3 模型解耦 耦合是指两个或两个以上的体系或两种运动形式间通过相互作用而彼此影响以至联合起来的现象。这儿的解耦主要指将各个对象尽最大化的分解,每个对象只负责自我行为,从而划分起权限标准、避免业务操作交叉的发生,使整个流水线强健运作。 2.2.4 细化种类分类业务种类众多;采用二级归类法。如:招聘à美容、光学、营业员等。 2.2.5计费算法 实现包年/半年/包月;30天X折、半年X年、全年X折,12字/30元等多样性算法;实现不同业务种类自由组合计费算法。 2.2.6 数据模型数据模型指对客观事物及其联系的逻辑组织描述.我们根据业务状态、业务权限、业务角色、业务表单、业务报表、业务流程、业务资源为出发点,进行数据模型实现,为构建项目作充分准备。 2.2.7用户UI模型 根据数据模型我们分解出一个个面向用户操作的UI模型。其间涉及到UI模型的布局、窗口建立、窗口调用关系、窗口美化、报表中间件的选择等。
- 系统架构实现
3.1软件采用何种架构模式,用B/S还是C/S? 先分析架构的具体情况: A、软件面向的用户群是已知的. B、界面和操作必须要丰富、将涉及各类报表呈现与分组. C、响应必须快、基本算法可以在本地预先计算. D、能够与Win系统无缝交互,如时间上的同步问题. E、数据能够大量在窗口中处理、并且以文件方式进行. F、安全的权限验证、数据操纵与认证在服务器上进行. G、客户端与服务端能够进行代码重用、有时候算法是双重验证. (什么是B/S C/S、及它们的区别不在本文讨论范围之内) 在区别B/S 、C/S的优劣后,我们采用了B+C/S相结合的模式。客户端采用winform、服务端采用webserver,实现webservice。双端通过SOAP协议进行通讯。 3.2 再谈B+C/S模式的具体应用 3.2.1 B+C/S的优势 B+C/S的模式的最大好处是即有桌面应用程序的优点,也有服务端快速开发部署的特点。这种通信方式在项目开发效率、代码重用、WEB接口开放、升级部署上都有极高的效率。由于Server端看起来像个对象,所以它拥有一系列的行为和属性,而这个抽象特性将大大简化Client端开发时对Server端的依赖实现.同时这种架构它符合任何路由器、 防火墙或代理服务器的数据传递要求。 3.2.2 B+C/S模式的实现 平台语言采用C#,它即能同时开发桌面端又能同时开发服务端,将共用的项目代码进行双端重用,而且它拥有快速集成开发环境、对企业数据型产品应用是一件利器。在一个解决方案下,我们首先建立数据实体模型、建立数据实体操纵模型。然后建立双端(WinForm+WebServer)项目,至此初步的B+C/S解决方案已形成。 3.2.3 中间通信层的介入 在实际开发中,为了能简化客户端对服务端的逻辑依赖,在开发客户端时我们中间加入一层中间通信,对原本在本地执行的数据逻辑转发至服务端,然后将结果返回。对客户端开发人员而言是透明的,它好像看起来数据所有操作都在本地完成一样,因而他不需要关心服务端的实现,只管调用伪数据操纵层。使程序编码工作真正得到分解,对后期测试与整合提供了有效的过渡。 3.2.4代码构建的技巧在采用B+C/S模式后,我们可以利用项目分层进行快速开发。如用户在发起一次操作时、 Client直管调用伪数据操纵模型、通信中间层将会把这个请求自动映射到Server端。Server端我们采用映射机制,直接将参数与类行为方法捆绑,利用反射机制实现,统一开放一个数据操纵接口, 大大简化Server与Client的协同实现工作。否则你还将要逐一过问Client发起的请求,Server采用大量判断去做什么事情。这种方法只需要对不同的逻辑一一实现好OPP放着,等着接口的映射即可。例:请求将操作Member表的Add方法。那么Client端只需要调用项目Model.Member.LocalDAL.Add(),中间通讯层则会去调用Server的统一接口,对所有调用而言,它只需要把命名空间、类名、方法名、参数告诉给这个接口即可,接口智能反射出Model.Member.ServerDAL.ADD(),实现逻辑与代码的映射关系。至此,我们构造出一个完整的项目解决意示图: 3.2.5 客户端文件的安全 项目部署时,只需把数据模型描述文件、主程序文件、通讯层文件、配置文件部署到本地。涉及到SQL操作、逻辑判断均在服务端执行。程序员在构建的过程其实可以无视服务端,中间层帮他传达了调用。对破坏者而言它只能得到一些描述性的数据结构。 3.2.6 数据模型的对象传递 在传统C++下开发socket服务端,往往采用struct作为数据传递结构,或利用通用描述语来进行数据描述,如:msgPacket、google protobuf等序列化机制。在本平台中,由于SOAP的特性,Server对调用者而言就像个对象机,双方传递时都采用序列化机制,然后以HTTP+XML方式进行传递,它能跨防火墙、跨路由器。 3.2.7 代码标准化生产 确定快速开发框架后,如何使多人书写代码具有标准性是提升开发质量的关键手法。采用代码生成器来生成一些共性的数据模型、数据模型操纵.通过代码格式模版,使我们的编码工作在多人协同下看上去很是规范与统一;而且能够解决大量重复敲键。 3.3 百万级数据快速查询问题 分类订单主体以汉字组成、查询以内容为主参数。SQL采用全文检索方式进行,除了数据库系统的优化之外,其间还可以作些逻辑优化。如今年的查询肯定不会去找前年或者去年的,采取默认优化策略进行。如何建立SQL全文检索和SQL高性能脚本编写不在本文范畴。 3.4 如何管理分布在各市县地区的门市点终端 编写升级程序来解决client端的统一维护工作,主程序有弹出窗口通知机制。 3.5如何利用架构解决业务上的数据和行为错误? 利用软件标准协议来约束各类对象的行为而杜绝错误发生。如客户发起接稿申请时,工作人员录入系统并打印核对单供客户签对,客户签字后系统再作更改模型状态。只有经过严格的一录一审制,系统才能受理存储。同样跨权操作、金额低开等行为也是非法的,因为它不受作业协议承认。 3.6如何避免善自修改业务数据问题? 跨权修改金额、跨权修改订单、跨权伪造订单都是业务系统必须避免的。对数据模型操纵进行多级权限设计,赋予不同的角色不同的权限,每个角色只能执行自己的对象行为。从而避免此类问题的发生。如:接稿组无法虚开订单、虚降总金额等操作。它的设计可以详细到一个行为操作的多个子行为属性。 3.7如何快速实现当日数千级订单在方正飞腾软件中的无错排版? 每天数千条的订单、有排版字体加粗、字体放大等要求,软件中必须有兼容方正飞腾排版软件的批处理能力。系统根据业务数据的类型直接导出特定格式文件,再导入方正系统;完成一键排版工作。 3.8如何满足大客户房源类批量刊登需求? 订制导入格式来支持批量处理。开发Win桌面小plugs部署到中介桌面,直接自主在线提交订单。 3.9如何维护业务售后跟踪与提醒工作? 系统每日统计将结束的订单、并以短信友情提醒续刊或订制其它节日通知。短信系统也可以单独作为通讯应用来使用。 3.10如何使业务接口向第三方系统开放,进行业务合作? 架构实现是采用B+C/S模式,S端单独继承出一个接口供第三方系统接入,并提供好参数调用说明、对接口进行授权验证。它本身是HTTP+XML的,是跨平台跨语言的,可以与第三方系统的业务对接合作。 3.11如何使业务服务看上去更加丰富多彩? 订单拥有人工固顶、排名优先策略、加粗放大字体、折扣实现等机制,给客户带来更多的体验乐趣。 3.12时间同步问题的考虑 Client是采用Win应用程序作为运行环境,需要考虑到界面与服务器的时间同步问题,因此在登录时系统会自动较正本地时间。 4 数据安全 数据安全包括文件安全、数据传递安全、数据库安全、备份机制等。由于B+C/S模式的应用,S端的安全采用基于WEB服务器安全管理方式、C端的安全主要是文件安全和数据传递安全为主。C端作为结果呈现端,并无涉及具体的数据逻辑操作,因此也是较安全的。由于两端传递时已经采用序列化对象技术,传输被窃取到的信息在没有数据模型的前提下也是不可见的。这一环节加固工作可以融入不对称与对称加密的双重结合使之更加安全。不对称加密与对称加密的双重结合模式不在本文谈论范围,简单的说就是一个用于私钥发放时一个用于实际数据加密时。数据备案采用定期定时备份、有同城异地备份机制。 5 财务审计 财务审计是整个广告系统的重要环节。系统开放按个人、日期、业务种类、见报数量等方式供查询统计。报表有一键导出xls,html等功能。 5.1如何避免历史业务修改与历史财务审计互斥问题? 简单的说就是因分类订单的特殊性、客户往往不定期提出对订单的修改申请、而过去的订单已经过财务审计,假如这个时候去更改订单,那么之前的所有财务归档将失效。因此采用退销款的方式进行,凡涉及到旧订单金额异样修改时,均要通过退销款方式进行,保证财务制度的正确性以及后期业务的修改合法性。 5.2 财务如何有效监督与审计软件作业标准? 由于分类业务的特性拥有接稿日期、刊登日期;两类日期为一对多的对应关系。那么财务在审计每日业务人员上缴金额时可以与系统呈现的当日报表进行核对。因为系统已经严格受限于标准作业协议,理论上只存在漏收金额或多收金额的情况,不会出现系统数据与实际报表错乱现象,从而规范了财务制度安全。
6 总结 整个系统从需求分析、架构编码,再应用于实际。经过多年的操作总结,已成功订制出符合自身需求的软件体系。它大大提高了广告业务生产力、解决繁重的文字重复工作。为报社数字化经营提供了高效的平台服务。由于篇幅有限,诸多细节实现本文未涉及到。
评论 点击评论