第 3 章 对构建网络 P2P 借贷平台的分析
3.1 对网络 P2P 借贷平台的需求分析。
3.1.1 平台设计原则、要求。
为满足企业在运营该平台时易于操作和管理,数据安全、更新及时,界面简洁清晰;满足用户操作简单便捷,安全、高效。须遵循以下要原则、要求:
1、系统安全、可靠性方面。
为保证借贷资金流转安全、可靠,平台须采用成熟、安全的计算机相关技术,以及完善的信誉审核机制。
2、操作安全、便捷性方面。
为实现业务操作便捷、安全,平台须具备良好的人机交互方式,以及健全的审计策略。
3、系统可维护、可持续性方面。
为实现平台运营及维护人员易于操作,平台须具备良好的系统构架模式。
3.1.2 平台性能(参考)要求。
1.数据精度要求。
(1)数据输入精度:保留小数点后2位有效数字(2)数据输出精度:保留小数点后2位有效数字(3)数据传输进度:保留小数点后2位有效数字2.时间特性要求。
(1)响应时间:0.3S以内(2)其他所有交互功能反应速度:不超过2S(3)更新处理时间:0.3S以内(4)可靠性:平均故障间隔不低于500H(5)查询速度:不超过3S(6)数据的转换和传输时间:0.5S以内3.安全、可靠性要求。
(1)对数据进行(加密等)安全保护4.灵活性要求(1)可适应同其他软件接口上的变化(2) 可适应精度和有效时限的变化3.2 对网络 P2P 借贷平台的技术选择。
商业化的网贷系统主要采用PHP、JAVA或。net三种语言开发,目前PHP和JAVA使用者较多。
PHP版本的网贷系统开发速度快、周期短、维护成本低,适合中小平台,但在2013年PHP被爆出较大的安全漏洞,如模板系统风险、后门程序设计缺陷等被利用,导致数十家平台遭受不同程度的攻击,并由此造成了部分经济损失。另一方面,因在线并发数量的激增,致使数据量越来越大,因此,致使早期的PHP系统及数据架构负载失衡。
正是基于其安全风险和技术瓶颈问题,使得很多 P2P 公司开始进行独立开发系统。JAVA 语言因其比较好的跨平台、健壮性和一定程度上可控的开源性等特点逐渐受到用户的青睐[Bruce Eckel.JAVA 编程思想。2007].
平台的安全性不在于编程语言的优劣,它是一项系统工程,涉及程序设计、服务器的维护、数据库的设计、域名等等诸多环节。
第 4 章 技术介绍
4.1 MVC 模式。
4.1.1 概述。
MVC模式是当前较为成熟的一种使用Model(模型)、View(视图)、Control(控制器)进行网络应用程序开发的模式。将用户的操作、数据的提取、信息的展示进行了分离,有利于开发中的分工和代码的重用。View是用户界面,它是面向用户的数据表示,图片、HTML页面或者其他媒体都可以成为Web的视图。
4.1.2 原理。
Model是对业务数据、信息进行处理的模块,如:数据的存取、加工等;Controller是对Model层和View层间进行流程控制的模块;View是面向用户的数据展示模块,图片、HTML页面或者其他媒体都可以成为Web的视图。
MVC模式通过层次划分将代码分解为用户输入/结果输出、业务逻辑判断/数据处理、业务流程控制,既增强了代码的稳定性,同时也使得应用程序的结构更加清晰。
一般UI/美工人员负责View层的实现;业务逻辑判断/数据处理人员负责Model层的实现;业务流程控制处理人员负责Controller层的实现。
一般Controller层代码具有通用性,可重用;View层随着用户需求变化而变化;Model层随商务流程变化而变化。
这种模块功能的划分不需要把具有不同功能的代码混杂在一起造成混乱,不仅有利于在代码修改时进行模块的相互隔离,也有利于分工协作,进行敏捷式开发。
4.2 Web Service.
4.2.1 概述。
使用Web Service技术可以使不同的运行在不同设备上的应用程序间在缺少附件/专业的第三方软件/硬件辅助的情况下,就可实现相互的数据交换或者集成。遵循Web Service规范,不论使用何种语言、平台或者内部协议,不同的应用程序间都能够进行数据的相互交换。
Web Service做为网络应用模块,它有自描述和自包含的功能。它有在工作中可以自行执行业务有能力。Web Service在使用过程中比较容易布署,WebService是在常规产业标准的基础上产生的,并且应用了以往已有的应用技术,比如集XML和HTTP等应用技术。
Web Service的应用,为庞大的工作体系及工作流程提供了一个通用平台,大大提升了工作效率,有效解决工作问题。
4.2.2 原理。
Web Service的含义有以下方面1、Web Service单一的个体进行封装成为一个功能集合体,并把这一集合体发布到网络空间。
2、Web Service把功能集合体发布到网络以后,这一集合体被调用,并为系统提代后续大量服务。
在工作过程中,如果想得到Web Service的服务,必须通过客户端的编程方式发送请求,在发送请求得到服务的过程中并不需要知道请求到服务的过程中是通过什么样的程序来实现,它做为URL资源,与一引起分布式组件对象模型不一样,比如上面所体现的请求服务方式。
Web Service的体系结构很清晰,它是通过信息提供者、信息请求者、信息中介者来进行信息的发布、信息的发现和信息的绑定[蔡月茹、柳西玲。WebService基础教程。 清华大学出版社。2005].
在此过程中信息的提供者也是服务的拥有者,在信息处理中提供自身的功能来服务于其他用户。信息服务的请求者也是信息服务的使用者,在服务过程中它通过向信息的提供者发送请求来获得其需要的服务;在系统的工作过程中,中介者所扮演的角色是管理者,它通过把请求者与合适的提供者进行信息匹配来工作,从而把二者联系在一起,以上角色在实际中没有太严格的划分工作程序,其中的一个Web Service也在工作中扮演多个角色进行系统工作。
若想实现Web Service的系统性工作,需要如下步骤:
1、发布:把Web Service通过中介者发布,为了让系统其它部门知道相关信息,并把信息及时传递出去;2、发现:请求者通过发送服务需求,通过中介者在UDDI注册中心找到适合的信息匹配,并回复WSDL格式服务请求;3、绑定:是在信息请求者与信息提供者之间建立的联系通道,提供者在接到消息后按SOAP消息执行信息服务,将有效信息返回中介者,并最终将其发送到信息请求者[蔡月茹、柳西玲。Web Service基础教程。 清华大学出版社。2005].
4.3 Quartz.
4.3.1 概述。
作业调度框架Quartz的核心就是任务日程安排,任务执行,任务持久化和事务。以下就这几个核心进行具体的分析。
1、任务日程安排(Job Scheduling):任务由创建者指定名称,并且可以加入到给定名称的任务组中,触发器(Trigger)可以通过任何种的组合方式在触发时执行时进行创建。触发器也可以通过指定名称和被分组的方式简化其在日程中的管理。任务可以注册多个触发器,但只能加入到日程中一次。其任务可以在J2EE环境中作为分布(XA)事务的一部分执行。
2、任务执行(Job Execution):任务做为实现Job接口的Java类。任务类的实例由你的程序框架实例化或者由Quartz实例化。
日程管理器在触发器被触发时通知多个或者固定的实现了TriggerListener或JobListener的对象。任务执行完毕后这些监听器将被通知。"任务完成码"用来通知日程管理器任务执行的结果,在工作完成以后它们会返回此处,相应的处理措施将由日程管理器根据结果给出。
3、任务持久化(Job Persistence):Job需要实现JobStore接口,并通过以下两种方式来实现 Job的存储:JDBCJobStore表示通过JDBC存储在关系数据库,而RAMJobStore是将所有Jobs和Triggers存储在RAM,程序的重启或者异常都可导致数据消失。
4、事务(Transactions):用提交或开始管理JTA事务或者参加JTA的各项事务,在这个过程中借助JobStoreCMT实现。
4.3.2 原理。
Quartz任务调度的核心元素为scheduler,trigger和job,其中scheduler是实际执行调度的控制器,而 trigger 和 job 是任务调度的元数据。以下是三个元素的具体分析:
trigger 用 于 定 义 时 间 调 度 的 元 素 其 类 型 有 以 下 几 种 :
DateIntervalTrigger、SimpleTrigger、NthIncludedDayTrigger、CronTirgger.
job用于表示被调度的任务。
其有以下属性:durability和volatility,其中durability表示为true的时候任务被保,在没有trigger关联的时候任务是否被保留。
volatility表示为true时任务被持久化,任务是否被持久化到数据库存储。Job的主要类型分为有状态的(stateful)和无状态的(stateless)。对于同一个trigger,如果想触发下一次执行必须在上一次触发的任务被执行完之后,有状态的job不能被并行执行。Job与trigger有以下区分:trigger只能关联一个job而job可以关联多个 trigger.
scheduler 由 scheduler 工厂(DirectSchedulerFactory 或者StdSchedulerFactory)创建,它包括 RemoteScheduler ,RemoteMBeanSchedule和 StdScheduler 三种。StdSchedulerFactory 使用较为广泛的原因是DirectSchedulerFactory 在使用时需要非常多的手工编码设置[王兵旺。Quartz 教程。百度文库。2014.5].
schedulerQuartz 核心元素关系。
4.4 数据加解密。
4.4.1 对称式加解密。
对称加密只有一份密钥,加密和解密共同使用相同的密钥来完成加密和解密过程。由于加密解密使用同一份密钥,因此进行加密通信前加密方需要将密钥传递给解密方。
缺点:破解相对较容易。
优点:加密/解密运算相对简单,耗用运算较少,加密/解密效率高。
常见算法:DES、3DES、AES、RC2、RC4等。
4.4.2 非对称式加解密。
公钥加密在加解密过程需要两把不同的密钥,所以被称为"不对称加密法",其中一份用来验证数字签名和对数据进行解密另一份密钥用来产生数字签名和加密数据。所以其加密主要用于密钥交换和身份认证。非对称加密法中,每个用户拥有一个完全属于自己独立使用的密钥对,公钥可以分发给任意人与其进行加密通信使用,私钥仅为其个人所知,须用心保管 .
双方使用"不同密钥"执行加密/解密工作又称为不对称密钥(AsymmetricKey),由一对公钥(Public Key)和私钥(Private Key)构成密钥对。
密钥对具有不可推导性和单向性(One Way Function)。
密钥的不可推导性体现在用公钥加密,用私钥解密和数字签名,想用公钥推导出私钥的密码情况基本不存在。
密钥的单性是指无论公钥和私钥加密的数据只能通过互相解密,在保管过程中私钥只能由本人保管,公钥有但可以传给通讯过程的另一方而且还可以对外公开。
缺点:加密/解密复杂,耗用较多运算,速度慢,效率相对较低等。
优点:破解困难,安全性高等。
常见算法:RSA(Rivest-Shamir-Aldeman)和DH算法(Diffie-Hellman)。
4.4 .3 哈希摘要。
哈希摘要是一种数据摘要算法。任何一个数据文件都可以通过哈希算法得到一个唯一的、长度相同的消息摘要,哈希摘要不需要密钥。哈希摘要常用于保障数据的真实性、完整性,数据盖章等方面。
哈希摘要是一种不可还原的数学运算,即通过消息摘要不可能得出原始文件数据消息摘要,双方必须在通信的两端各自执行Hash算法计算,同一种Hash运算会产生固定长度的摘要内容,原文改变则哈希运算的结果必定会是不同的。
常见算法:MD5(Message Digest Five),SHA-1(Secure Hash Algorithm)。