要实现大并发高访问的web系统,不仅只是paas平台事情,业务系统的架构才是关键作用。在本篇章中尝试讨论一种比较通用的业务架构模式,并且该模式和paas提供的能力较为匹配,在部署和管理上能相得益彰。
首先会先阐述一下架构师在面对普通的业务系统(普通的围绕数据库的增删改查应用以及一些外延扩展)的通用处理,然后是阐述在不同的业务规模中的架构的不同,架构被人为的分解为普通和扩展的模式,另外会说明一下多租户的概念,因为这是系统扩展后的一种发展趋势。一般来说小项目的部署和维护比大项目要简单得多,很多开源的paas(包括去年湖南移动演示的paas系统)对这种web系统有较好的支撑,但对大型web系统的支撑才是paas的真正能力体现。
首先我们对系统进行架构上的分析,然后在高并发大访问的情况下如何设计和部署我们的应用,阐述系统在通用情况下的解决方案,为后续把系统映射到云端平台,以及如何利用云端平台如何实现高并发的机制作好铺垫。
每个项目在开发之前都会进行设计和架构的阶段,这也是我们架构师要重点关注的地方,这里会提供一个架构范例文档,可以借鉴和参考。
我认为架构无非关注几点:1、数据的载体和共享方式、2、模块和层次之间的接口、3、业务流程以及部署模式。
系统都是围绕数据来运行的,尤其是我们的项目,基本都是围绕数据做的增删改查,所以总是被人认为没有什么技术含量,也的确如此,所以把这些没有技术含量的东西归并整理,做的尽可能的规范化和流程化。
系统数据的设计,其实已经涉及到设计的方法,是从前往后,还是从后往前。有几种设计的方式,总结起来有:1、表驱动;2、页面驱动;3、领域驱动;4、POJO驱动,这么几种方式,在不同的场景都有适用的场景。
表驱动是从后往前的设计方式,数据库的表结构一般来说比业务系统的生命周期更加长久,也更加稳定,获取了业务模型就设计表结构,也就相对获取了相对稳定的业务系统的数据结构信息,所有的业务处理都是围绕表结构来运行,理解业务关系就是理解表和表之间的关联关系。
典型的联创移动事业部的开发方式代表了这种模式,提倡了表驱动的设计理念和前后端分离的开发体系,前端是使用tapestry实现的web展现,中间层应用逻辑搭建在tuxedo服务器之上,使用joit或者wtc进行前后端的关联,并能多台部署,后端是Oracle。Web只能通过调用中间层的服务访问数据,不能直接访问数据库,这样有几个特点:
-
- 中间服务器层可均衡访问,并通过tuxedo把并发访问削峰填谷,提高系统的健壮性,并利用tuxedo的事务传播性,实现数据的一致性。
- 前端开发和后端开发分离,开发速度快,行业经验能有效固化。在特定的行业应用中,后台服务大体是稳定的,变化的只是前端展现,通过后端服务的编排/编制(提供了可视化工具),能快速提供前端展现所需要的服务,前端人员不需要了解后端逻辑,只需要知道是哪个Api。在boss1.5升级中,每个省boss系统在3个月左右即可上线,效率极大的提升。
- 数据的安全,所有的数据访问,被限定在有限的通道中,非后台人员无法知道后端表结构和数据。
页面驱动是从前往后的模式,比较的敏捷和贴切互联网的应用,强调快速开发,简略一些中间过程,推崇界面(界面原型)即需求,并有此来生成表结构的信息。很多的互联网公司催推崇这种方式,但这样主要有点,生成的表结构不是很稳定,随着界面的调整和迭代改进,总是要对后端表结构作修改。
有的工具还能提供界面生成工具,通过代码自动生成工具生成部分逻辑,并提供一些管理工具和管理途径。在2010年的项目中中尝试用页面驱动模式,使用到了动量(ODE)和天翎(teamlink,myApps)。
领域模型是对领域内的概念类或现实世界中对象的可视化表示,属于从中间往2头发展的模式,往下从而生成表结构信息,往上能生成页面的数据表现方式。
领域驱动简单的说根据领域建模的类中,有属性和行为,按照面向对象的模式来说是最匹配的,也是《POJO in action》作者推荐的,但是我们在实际的项目中应用的不多,原因如下:
-
- 数据库采用的是关系数据库
- 持久采取的是类jdbc的模式
-
Spring推荐service+dao+orm是贫血模式,自身提供了基于多线程的良好支撑。
- 领域见面对程序员要求较高
组件级别的开发,如果是从设计到开发是自己或者同一个团队来设计,用领域模式是很合适的,只是一点,需要和总体service+dao+orm模式来匹配,就是组件内部中贫血/充血的相互转换,在后续的章节,阐述组件开发的时候,会有讨论。
在研讨整个业务模式的时候,把领域模型弱化为纯粹POJO,强调属性,弱化行文,按照《POJO in action》作者所述,为transaction script,这也是下个就要阐述的POJO驱动模式。
POJO相比领域模型而言,很轻薄,也是属于从中间向2端发展的模式。从POJO à 数据库作数据映射很方便,用POJO来规划页面的数据展现也很容易,并且通过POJO的序列化或者转JSON的方式能很方便做到模块的拆分,并且POJO方式吻合基于spring推荐的贫血模式的设计。
建议项目的数据实体设计采用POJO驱动,之前还有采取map的方式,这其实是一种把设计的工作延后到开发的模式,利用map的特点,把数据作扁平化处理,以期获得一定的数据通用性,但这样本来在设计阶段就要规划的数据模型延后到开发中,而开发的程序员人数多,能力参差不齐,又没有利用Java的强制检查的特性,造出程序在运行时容易报错,得不偿失。
模块的接口,在系统中多为service部分,在这个层面上关注出参入参和异常定义。在开发过程中已经在考虑使用单独的工程来作为接口的实现,即openAPI工程。
业务的流程,贯穿系统的多个模块。可以有3个层面来支持流程化的应用,webflow,apiflow,workflow
这里要分2种基本的程序框架和传统部署和基于云部署的模式来分别讨论,按照各自特点,就有4种基本模式来讨论:
图21-01 部署象限
基于传统模式,都需要对生产环境和网络情况非常的了解,并且需要书写部署文件以及设定参数信息,以及一些脚本的编写,基础的服务也需要自己实现搭建好,并设定好负载均衡方式。
而基于云端部署的方式,基础服务和负载均衡方式是已经部署好的,只需要上传war/zip即可,有的paas平台能自行产生简单的部署文件,有的则是需要自己去编写,实现自我控制。
附加文档中《补充资料_xx项目-总体设计说明书_20120521.doc》是之前生活易项目的整体设计文档,属于普通项目具有一定的代表性,作为通用的架构文档模板,我们的架构师在项目阶段中,会要求出具一份架构文档,此文档具有参考价值。
因为作为模板,需要架构师在使用的时候,替换部分文字说明和图片,其中如果是红色字体和蓝色字体,则是附加说明,在正式成文的时候需要删除。架构师在文档中
- 需要出具4张图:系统架构图,功能架构图,软件部署图,硬件部署图。其中硬件部署分为软部署和硬部署。
- 主要的类设计(静态类),关键流程出具时序图(主要模块给一个时序图,用一个demo,走敏捷方式)
- 主要的POJO类
- 主要的组件说明
上一篇 从项目开发到云端架构(01) :http://timeson.iteye.com/blog/1683579
下一篇 从项目开发到云端架构(03) :http://timeson.iteye.com/blog/1683590
- 大小: 22 KB
分享到:
相关推荐
DevOps 从云端到地面 熊节 pdf DevOps 让持续交付成为可能 乔梁 pdf eBay技术平台:掌控十亿级交易数据 Tony Ng pdf Facebook大数据实时分析案例分享 Uri pdf Java EE 7 平台:应云而生 Tyler Jewell pdf JS ...
JSP+SSM项目-云端学习系统的Java毕业设计.rar 【项目技术】 开发语言:Java 框架:ssm+jsp 架构:B/S 数据库:mysql 【演示视频-编号:345】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 端学习系统在...
基于PHP、MySQL等技术构建的web系统,框架,PHP学习,课程设计作业,可用于毕业设计,源码项目,可直接运行,实测! 基于PHP、MySQL等技术构建的web系统,框架,PHP学习,课程设计作业,可用于毕业设计,源码项目,...
自2007年3月份首次举办以来,已经有包括传统制造、金融、电信、互联网、航空航天等领域的近万名架构师、项目经理、团队领导者和高级开发人员参加过QCon大会。 更多其他QCon大会PPT:...
①兼容市面上主流的多家相机,理论上兼容所有硬件,可灵活扩展,②相机识别后数据自动上传到云端并记录,校验相机唯一id和硬件序列号,防止非法数据录入,③用户手机查询停车记录详情可自主缴费(支持微信,支付宝,...
该网上商城系统采用了JavaWeb、JSP和Servlet作为开发技术,基于MVC设计模型进行构建。MVC(Model-View-Controller)是一种软件设计模式,将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller...
同时我们也提供了对应的源代码,可以查看源代码,克隆或下载项目到本地进行修改,在本地通过CloudBase CLI进行一键部署。 Daruk是一款基于Koa2,使用Typescript开发的轻量级web框架,使用。 ThinkJS是一种可以使用...
支持数据采集写入到HDFS、HBase、Hive等大数据库中。 支持准实时数据的采集和处理。 数据存储处理: 支持原来BW数据仓库的数据逐层转换处理。 支持Hadoop大数据库中进行分布式海量数据的并行处理。 ...
《Android开发案例驱动教程》 配套代码。 注: 由于第12,13,14章代码太大,无法上传到一个包中。 这三节代码会放到其他压缩包中。 作者:关东升,赵志荣 Java或C++程序员转变成为Android程序员 采用案例驱动模式...
基于SSM+JSP的云端学习系统毕业设计.rar 【项目技术】 开发语言:Java 框架:ssm+jsp 架构:B/S 数据库:mysql 【演示视频-编号:345】 https://pan.quark.cn/s/b3a97032fae7 【实现功能】 端学习系统在Eclipse...
软件开发设计:应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#等语言的项目开发与学习资料 硬件与设备:单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备...
基于Java智慧校园云端管理系统的设计和实现源码(毕设源码).zip 【资源说明】 该项目是个人毕设项目源码,评审分达到97分,都经过严格调试,确保可以运行!放心下载使用。 该项目资源主要针对计算机、自动化等相关...
基于云开发的校园服务项目,简单易上手的wx校园服务小程序,服务广大大学生练手项目,完全开源 软件架构: 前端应用wx原生的weui组件库 后台基于云开发技术生成可视化管理后台 安装教程: 源码下载后解压至电脑...
目录:网盘文件,永久连接 01. 01-1华为端到端DevOps概览-1软件产业和交付模式发展趋势 ...53.-55 03-1DevOps实践与转型路径-1华为云端到端DevOps实践 56-57. 03-1DevOps实践与转型路径-2.1DevOps转型路径
专为开发者提供稳定、高效、安全的云端软件开发协作平台 无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 https://gitee.com/enterprises} 软件架构 软件架构说明 ...
资源包含STM32源码,ESP源码,原理图,PCB,项目描述说明,PPT,前后端架构图,架构设计,数据库设计,使用SpringBoot框架开发的服务端源码,Android手机APP源码 后端采用SpringBoot开发,Android客户端采用MMVM...
DiyGw是一个基于TwoTHink开源的内容管理框架,由Onethink基础上升级到最新的ThinkPHP5.0.6版本开发,提供更方 便、更安全的WEB应用开发体验,采用了全新的架构设计和命名空间机制,融合了模块化、驱动化和插件化的...
专为开发者提供稳定、高效、安全的云端软件开发协作平台 无论是个人、团队、或是企业,都能够用 Gitee 实现代码托管、项目管理、协作开发。企业项目请看 } 软件架构 软件架构说明 安装教程 xxxx xxxx xxxx 使用说明 ...