要实现大并发高访问的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
分享到:
相关推荐
【模拟云端系统项目】是一个综合性的IT项目,它结合了前端和后端技术,旨在构建一个功能完善的云端应用。...这样的项目实践能帮助开发者深入理解云端应用的开发流程和架构设计,提升在分布式系统中的实战能力。
在当前数字化时代,"云端第三代系统开发"是一个重要的议题,它涉及到如何利用先进的技术构建高效、易用且灵活的云服务平台。在这个系统开发过程中,Java作为主要编程语言扮演着核心角色。下面我们将深入探讨这个话题...
云端系统源码第二版是一个...综上所述,云端系统源码第二版是一个涉及多方面技术和实践的综合项目,涵盖了从底层基础设施到上层应用服务的全方位设计。深入理解和掌握这些知识点对于开发、运维和管理云端系统至关重要。
在Android开发中,结合Web服务(Webservice)可以实现丰富的云端功能,比如数据同步、远程API调用等。"android基于webservice云端运用最新代码EasyEnglish"是一个示例项目,展示了如何在Android应用中集成Webservice...
以上内容仅是对“wiki云端知识库平台项目”可能涉及的技术栈和概念的一个概述,具体实现可能根据开发团队的选择和技术栈有所不同。对于学习者来说,深入理解并掌握这些知识点,将对个人的技能提升和未来职业发展...
综上所述,这个压缩包是鸿蒙OS开发者的一站式资源库,涵盖了从系统底层到应用开发的各个环节,对于想要涉足鸿蒙OS领域的开发者而言,是一个宝贵的资料集合。通过深入学习和实践,开发者可以更好地掌握鸿蒙OS的开发...
“云端”意味着它涉及到云存储或云计算的服务。“脚本”指的是可执行的代码文件,如JavaScript、Python等,可能是网页脚本或者其他类型的程序。“获取器”和“下载器”则说明了工具的功能,即获取并下载云端的脚本...
通过研究这些源代码,初学者可以学习到实际项目开发中的最佳实践,而有经验的开发者则可以借鉴其中的设计模式和问题解决策略。无论是独立学习还是团队协作,这个资源都能提供宝贵的经验和洞察。
9. **部署与运维**: 项目可能还包含了部署和运维相关的文档,例如Dockerfile或者Kubernetes配置,帮助开发者将应用部署到云端或本地环境。 这个项目不仅提供了实际的代码实现,还可以作为学习微服务架构、前后端...
总结,SRA2021-G03-项目开发计划1.81是一个旨在构建云端知识库APP的详尽蓝图,涵盖了项目从需求分析到实施、测试、上线及后续维护的全过程。通过这个计划,团队能够有序地进行开发工作,确保知识库应用能高效、安全...
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 【实现功能】 端学习系统在...
【SRA2021-G03-项目开发计划1.71】是关于一...总之,"SRA2021-G03-项目开发计划1.71"是一个全面的项目管理文档,它涵盖了项目从启动到完成的所有关键环节,旨在确保团队高效协作,成功开发出满足需求的云端知识库APP。
《构筑大语言模型应用:应用开发与架构设计》是一份深度探讨大语言模型在实际应用中的开发和架构设计的资源集合。这份资料来源于GitHub上的开源项目phodal/aigc,旨在帮助开发者理解和利用大语言模型的技术,提升...
它的出现是为了解决软件开发和维护的成本问题,通过将软件部署到云端,提供基于互联网的软件服务,用户可以通过互联网访问和使用软件。 SAAS 架构设计模式的优势包括: 1. 用户方面:拿来即用,无须维护,按需使用...
在物联网项目开发中,可能还需要特定的物联网协议解析或设备模拟插件。 3. **物联网架构**: 物联网环境监测系统通常包含传感器节点、网关和云端平台三个部分。传感器节点负责采集环境数据,如温度、湿度、光照等...
总结,本Android项目开发报告全面展示了项目开发的各个方面,从底层的平台架构到上层的功能实现,再到数据库和项目组织,为开发者提供了清晰的开发指南。通过这样的报告,不仅可以评估项目的成熟度,也便于团队协作...
9. **版本控制**:在项目开发过程中,版本控制非常重要。微信开发者工具允许开发者进行代码版本管理,便于团队协作和回滚更改。 10. **发布与更新**:完成开发后,开发者可以在微信开放平台上提交审核,待审核通过...
本项目“springboot-netty-protobuf-master”旨在提供一个基础架构,它利用了Spring Boot的便捷性以及Netty的高效网络通信能力,同时采用Google的Protocol Buffers(protobuf)作为数据交换格式,确保数据传输的高效...