`
timeson
  • 浏览: 146412 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

从项目开发到云端架构(18)

 
阅读更多

5.3 扩展PaaS

       Paas平台的奴隶时代,平台的分布和管理都是基于操作系统的层面来处理的,指令由脚本来调用,利用操作系统提供的网络能力,进行应用/通用服务的远程处理;业务和系统的状态的存储和查询采用的关系数据库;并利用现有或改进的工具对系统和应用进行监控,检查系统的健康状况。这是一种行之有效的方法,并肯定在众多网络公司也或多或少的得到了有效的应用。

       但这种架构模式较为简单,扩展性有限,在解决了Paas平台有和无的问题后,就要着手解决Paas平台好不好用的问题,在这个阶段就需要有强有力的语言(非类似shell脚本)来通盘处理网络,分布式,部署,管理,监控等能力,构建强有力的PaaS平台的cloudControl,通过cc来统一协调和处理Paas内部事务,从一盘散沙过渡到高度集中,统一协调的阶段中,由此我们diyPaas平台也就从奴隶时代,逐渐过渡到封建时代。

       Cloudfoundry 是用ruby开发的,openshift是用python开发的,cloudify是用java开发的,所以说用合适的构建方法,用哪种语言都是可以的,我相信此时此刻c++的拥趸会跳出来说要做过paas平台,这是可以的,但互联网的应用和需求,瞬息万变,朝三暮四,相比之下动态语言rubyphthon就更有优势,这也是cloudfoundryopenshift选择它们的原因;至于cloudify,是基于gigaspaces的产品而开发的paas云平台,已经在业界有了10多年的沉淀和积累,属于家大业大,改弦更张不容易。

       Paas平台最主要的是解决了分布式计算的能力,通过对应用的分布式部署,为各个被拆分的模块提供了区别对待的容器,容器之间彼此隔离并能相互通信,并提供了可操纵的接口,另外作为paas平台需要有对Iaas层可迁移的能力,这样具有一定生产力的Paas平台的需求大体可以描述出来。如果采用Java如何来实现?

 

A、基础技术的改进

       Java里面分布式的基础就是rmi,所有的分布式技术都是在这里衍化,但rmi技术太底层,对于diy paa而言需要更高级的分布式平台,需要在分布式环境中提供寻找/注册等服务,以及对分布式对象的统一处理界面,而Java业界中,JiniJava Intelligent Network Infrastructure)和JavaSpaces技术正好能满足这些功能:

  • Jini 提供了分布式环境中寻找(look-up)、注册(registration),租借(leasing)等服务,具有自动配置,自我管理,自我恢复,代码移动以及相互间自由通讯能力,提供了计算单元在网络中的即插即用能力;
  • JavaSpaces 提供了对象的提供者和请求者可用来方便地进行通信的共享虚拟空间,允许以Java对象的形式对任务、请求和信息进行简单的交换,如提供了处理(processing),分享(shareing),以及迁移(migration)等能力,为java对象提供了可在网络中迁移的存储能力,以及基于属性的查找方式。之所以在这里采用JiniJavaspaces技术,因为可以产生类似网格计算能力,彼此处理单元的地位平等,并可以相互迁移,位置感知。
  • 当然还有其他的技术表现形式,比如corba/ice,web service等,技术上稍许有些差异,采用这些技术实现上有些不同,这里不展开讨论。

      

       如果把我们的处理单位(Process Units à PU)进行抽象,可以是一堆的Service JavaBeans,或者是具有某些状态的POJOs,或则是Service JavaBeans + POJOs进行在网络上按照一定规则得到一系列部署方式,通过部署的不同从而形成不同的计算能力。

 

图例

说明

 



 

53-01JavaSpacesbean的交互

应用程序组件与空间交互(使用读,写,并通知操作),并实现一定的功能。

 



 

53-02JavaSpaces内容

缓存实例保存在内存中的数据对象。

 

 

 



 

53-03JavaSpaces提供的接口

一套用于读,写,走,和注册的通知,在空间中存储的对象的方法。执行允许发送的空间内执行任务。阅读并采取判据可以通过指定的查询或模板(例如对象)。

 

53-1 JavaSpaces技术能力

 

图例

说明

 



 

53-04:空pu

Service Bean/JavaSpace实例相结合。PU在容器内运行。

 



 

53-05:包含了JavaSpacesPU

实例化JavaSpace实例。

 



 

53-06:各自独立的PU调用

一个部署包包含一个或多个服务。通常作为与其他PU进行交互的客户端,利用空间的消息传递功能。

 



 

53-07:包含beanspacesPU

部署独立可伸缩的PU

53-2:PU的基本组成形式

 

图例

说明

 



 

53-08:包含beanspacesPU

Space集群的实例,运行在各自的处理单元实例。空间实例相互连接,形成集群。

 



 

53-09:包含beanspacesPU

与主实例和一个或多个备份实例的数据网格。

其他略。。。

 

53-3:数据网格拓扑结构

 

     

  从下图看,很像应用服务器的session分区备份的集群机制图,如果把session看成JavaSpacesServcie Beans看成servlet容器,pu看成应用服务器实例,所以说技术都是相通的。

 

 



 

53-11:基于JiniJavaSpaces的架构体系

  1. 每个处理单元实例拥有一个分区的空间实例和一个或多个特定分区上的事件注册的服务,同构成一个应用集群。如果群集需要高度可用,每个主分区可有一个或多个备份的分区,当主分区失败的时候,备份分区变迁为活跃状态。
  2. 每个处理单元实例只处理各自空间的数据。
  3. 该系统可以通过简单地增加空间分区和其相应的处理单元实例的数量缩放。
  4. 当部署到服务网格,具备自我修复能力和SLA功能。
  5. 管理UI都可以通过在运行过程中的全程监控和管理。

 

 

 

B、部署能力的改进:

       传统的开发模式:开发->测试-> 部署-> 扩展,需要自己搭建web容器,部署应用服务器,配置数据库,如果涉及到集群方式,更加复杂,需要在指定的时间之前创建服务器,建立apachetomcatmysql等。而且架构也在不断的扩展和迭代,还需要分布式的服务器,模块化的组件,异步的架构;数据库的分片,以及多数据的来源。借助paas平台以及paas平台提供的架构模式和组件,业务系统的架构被逐渐拆解:从单一WARà 核心业务拆分,异步通讯 à 多库多表 à 大文件系统,noSql系统 à 结合MapReduce,实现完整的互联网分布式系统体系。部署的方式也要极大的简化,从人工干预到自动处理,最好是智能处理。

 

C、并发能力的改进:

  • 应用无状态:web系统的伸缩性的好坏取决于应用的session如何管理。通常通过集群来解决这个问题,有几种模式:广播复制,分区复制,以及共享缓存服务器模式。Session分区复制+Route粘性会话是一种免编程的模式,如果需要更大的并发量的支持,的修改程序采用共享缓存服务器的模式。
  • 有效使用缓存:从浏览器缓存,反向代理缓存,页面缓存,局部页面缓存,对象缓存等等都是缓存应用的场景。缓存分为读缓存和写缓存。对于一些读写比不高,同时对数据安全性需求不高的数据,将其缓存起来从而减少对底层数据库的访问。
  • 应用拆分:典型有的前后端拆分,后端也可进一步拆分,各个系统都可以独立维护和独立的进行水平伸缩,从而提高系统的扩展性和可维护性,同时系统的水平伸缩性也极大的提升。但是拆分也给系统带来了问题,就是子系统之间如何通信的问题,数据一致性的问题。
  • 数据库拆分:数据库是系统中最不容易扩展的,之前讨论过数据库分区的事宜,这里略。
  • 异步通信:采用异步通信也是关系到系统的伸缩性,以及最大化的对各个子系统进行解耦.。通常适合异步的场合是一些松耦合的通信场合,而对于本身业务上关联度比较大的业务系统之间,我们还是要采用同步通信比较靠谱。 根据以往经验得知,在同等环境,同步异步的调用,性能差异在一个数量级上。

 

D、其他改进:

  • 非结构化数据存储:在互联网应用当中,不是所有的数据都是结构化的,典型的有mongodbcassandra等,平台需要能支撑。
  • 监控、预警系统:利用监控系统以后,并与预警结合起来,能快速响应系统出现的问题,提高系统的稳定性和可用性。
  • 配置统一管理:大型的分布式应用,通过一个统一的配置管理可以使得这些问题得到很好的解决,当有新的节点加入或者删除的时候,配置管理系统可以通知各个节点更新配置,从而达到所有节点的配置一致性,这样既方便也不会出错。

 

通过前面的几个改进要求,结合Paas平台的应该具备的生产能力,整理如下:

  1. 支持更多的服务,典型的内建服务需要MQ服务,内存服务器,nosql数据库
  2. 支持业务的分离部署(war+zip
  3. 支持自定义脚本模式
  4. 支持多iaas模式(iaas不锁定)
  5. 提供使用良好的交互式接口(控制台,web管理界面)
  6. 提供更加丰富的应用和服务的运行时状态的查询
  7. 监控和预警机制,对于常见情况能进行通用方式的处理

 

结合之前的技术背景,一个可能的部署模式如下,

  • PU作为独立和拆分的业务单元,可在多处部署。
  • PU可以是业务逻辑单元,也可以是缓存服务,消息服务等通用业务逻辑单元。
  • PU在部署在容器内(contrainer),容器为受控的JVM
  • 提供对容器的管理接口(servcie manaer),以及发现接口(lookup servcie)。

 

 



 

53-12:采用PU模式的部署

 

5.3.1 架构和组件

       通过CC作为整个云端的中心和枢纽,把网格节点被虚拟化为可使用的计算单元,使用Jclouds部署pupu是按照业务需求设计的业务单元)到container,而containerservcie managerlookup servcie管理和发现,实现container的生命周期管理和对外的服务提供。

       整个paas平台分为3大部分,服务适配器(service adapter),云端控制器(cloud controller),和云端驱动(cloud driver),整体部署分为C/S模式,分为计算节点和服务节点,服务节点为server端,计算节点为client端,服务适配器是部署在计算节点,云端控制器在服务节点。底层依赖iaas系统来管理vm的生命周期,以及基础的网络控制,所以这里抽象出一层,用来处理各个的iaas的实现。

 

       通过下图的paas系统架构,能看到在标准的paas平台的架构中,没有严格的apps池和服务池的边界,因为这里采用的是具有状态的cc,它能知晓被部署的apps应用集合和servcie集合,不需要特定的边界来声明部署的位置,但在下个章节中阐述在无状态的cc,就需要声明应用的边界。在这里通过cc的部署模块 + service adapter 的安装模块来部署应用,也就是说在创建业务应用和服务的时候并不是透明的,还需要程序员在DSL中收工控制vm的地址/os规格等参数,与之对应也不要有个paas中转的“订阅发布”模块。整个paas平台分为2个层面:管理节点(服务端)和计算节点(客户端),所有的节点都在网络节点中,并受管理节点监控和控制,整个paas模式类似于网格模式。至于cloud driver是用来屏蔽各个iaas层的抽象层,对于kvmopenstackcloudstack,都有统一的api调用。

 

 



 

53-13 系统架构

 

DSL

       DSLDomain-specific language,领域特定语言),侧重特定领域的表达有限的计算机编程语言,在这里专门来描述云端的部署。之前在基本型paas中,对应用和服务的管理是通过简单的设定,并有一定的先后次序来表示依赖关系。在这里,把这块功能进行扩展,结合部署,依赖管理,脚本控制。典型的,需要:

  •  应用的管理,是多个服务打包的地方。
  • 服务的管理,这里包括tomcatmysqlmongodb等,都统称为服务,包括安装,管理。
  • 对脚本语言的调用和执行
  • 参数文件的读取
  • 应用和服务的依赖,绑定
  • 负载均衡的规则
  • 扩展点的管理:以后这里可以加入maven + jenkins,实现持续交付等扩展功能,这个在健壮型paas中会阐述,在这里是预留一个扩展点。

 

       语言一般用动态语言,比如rubypython均可,如果paas平台基于java语言开发,用groovy也是一种好的方式。

 

Cloud driver

       处理对多个iaas层的调用,在这里是paas平台的抽象层,提供对多个iaas底层的调用,从而避免对iaas的锁定,并提供对DSL的统一的调用接口。

 

 

universal service manager

把对服务(tomcatmysqlmongodb等)的管理,以及安装,部署等,都统一成服务模式。

 

5.3.2 业务流程

       因为在标准paas平台的规划中没有涉及到对apps池化和服务池化进行管理,所以这样的paas平台的结构相对简单,没有这么多的组件和模块,业务应用部署也容易,整个paas平台理解为网格系统,分为管理节点和计算节点2层即可。paas平台的管理工作由cc进行处理。

       业务流程很简单:

  1. 开发人员代码测试通过后,编写recipe(使用dsl语言),描述整个应用的部署,比如启动3tomcat,并依赖1mysql1mongodb实例。
  2. 通过cli发布,cc读取相关目录下代码以及recipe文件。
  3. CC根据recipevm的申请(非透明,需要在文件中注明os规格,版本,以及ip),cc透过cloud dirver获取该vm的使用。该vm需要吻合最低要求,包括缺省用户名,端口以及jdk等。
  4. CC通过ftp穿agent,业务系统文件,等其他。
  5. CC引导业务系统文件,根据recipe的步骤,按部就班,先后次序引导服务。

 

5.3.3 实现方式

 

 



 

53-14 标准型paas平台的物理部署

 

       和基本型paas平台类似,整个系统分为管理节点,计算节点和路由节点,在这里不对appsservice的池化进行管理,不同的是对配置和部署进行了深化,并对虚拟机的处理采用了抽象层,实现去IaaS层的锁定。

  1. 路由节点:实现2级域名的定向和请求的分派
  2. 计算节点:Service poolapps pool里面的机器都是计算节点,假设都是有vm组成,如果是db池的,每个vm启动一个mysql的实例,缺省不启动;如果是apps池的,每个vm安装统一的jdk,允许启动3jvm,并部署好了tomcat实例,可使用统一的定好好的文件系统。缺省不启动。不同的是每个vm都有agent来监控,vm的生命周期有cc通过cloud driver来统一处理。
  3. 管理节点:cloud controller,管理节点是整个系统的核心,,包括数据库,以及存储服务模板和应用模板。这里的数据库是提供管理节点使用,用来存储整个管理系统的中间状态和元数据信息。

 

关键的数据

  1. 基础数据:包括ip地址,servcie id/apps idip的对应关系,2级域名对应的ip
  2. 状态数据:服务和应用的当前状态,通过agent定时更新信息。
  3. 历史信息:服务和应用的状态轨迹,用户处理的信息,动作的处理等

 

核心的软件

  1. DSL:提供一种针对云端部署的领域特定语言,通过该语言来设定业务应用的recipe,并随业务模块同步提交。
  2. USM:统一服务管理,管理tomcat/mysql等服务,并提供应用实例的启动/停止等处理。
  3. 云驱动:通过虚拟层去iaas的锁定,实现在kvmopenstackcloudstackvm部署

 

上一篇 从项目开发到云端架构(17)  :http://timeson.iteye.com/blog/1707071

下一篇 从项目开发到云端架构(19)  : http://timeson.iteye.com/blog/1729079

 

  • 大小: 3.2 KB
  • 大小: 4.2 KB
  • 大小: 8.5 KB
  • 大小: 2.3 KB
  • 大小: 2.8 KB
  • 大小: 5.5 KB
  • 大小: 3.9 KB
  • 大小: 8.5 KB
  • 大小: 6.2 KB
  • 大小: 44.7 KB
  • 大小: 86.4 KB
  • 大小: 19 KB
  • 大小: 48.5 KB
0
0
分享到:
评论

相关推荐

    模拟云端系统项目

    【模拟云端系统项目】是一个综合性的IT项目,它结合了前端和后端技术,旨在构建一个功能完善的云端应用。...这样的项目实践能帮助开发者深入理解云端应用的开发流程和架构设计,提升在分布式系统中的实战能力。

    云端第三代系统开发

    在当前数字化时代,"云端第三代系统开发"是一个重要的议题,它涉及到如何利用先进的技术构建高效、易用且灵活的云服务平台。在这个系统开发过程中,Java作为主要编程语言扮演着核心角色。下面我们将深入探讨这个话题...

    云端系统源码第二版

    云端系统源码第二版是一个...综上所述,云端系统源码第二版是一个涉及多方面技术和实践的综合项目,涵盖了从底层基础设施到上层应用服务的全方位设计。深入理解和掌握这些知识点对于开发、运维和管理云端系统至关重要。

    android基于webservice云端运用最新代码EasyEnglish

    在Android开发中,结合Web服务(Webservice)可以实现丰富的云端功能,比如数据同步、远程API调用等。"android基于webservice云端运用最新代码EasyEnglish"是一个示例项目,展示了如何在Android应用中集成Webservice...

    wiki云端知识库平台项目

    以上内容仅是对“wiki云端知识库平台项目”可能涉及的技术栈和概念的一个概述,具体实现可能根据开发团队的选择和技术栈有所不同。对于学习者来说,深入理解并掌握这些知识点,将对个人的技能提升和未来职业发展...

    鸿蒙Linux+项目文档+开发工具+harmonyOS+在线开发地址.rar

    综上所述,这个压缩包是鸿蒙OS开发者的一站式资源库,涵盖了从系统底层到应用开发的各个环节,对于想要涉足鸿蒙OS领域的开发者而言,是一个宝贵的资料集合。通过深入学习和实践,开发者可以更好地掌握鸿蒙OS的开发...

    自制云端脚本获取器

    “云端”意味着它涉及到云存储或云计算的服务。“脚本”指的是可执行的代码文件,如JavaScript、Python等,可能是网页脚本或者其他类型的程序。“获取器”和“下载器”则说明了工具的功能,即获取并下载云端的脚本...

    C#项目开发全程实录-源代码

    通过研究这些源代码,初学者可以学习到实际项目开发中的最佳实践,而有经验的开发者则可以借鉴其中的设计模式和问题解决策略。无论是独立学习还是团队协作,这个资源都能提供宝贵的经验和洞察。

    悟空项目管理-基于Spring Cloud Alibaba微服务架构 +vue ElementUI的前后端分离项目管.zip

    9. **部署与运维**: 项目可能还包含了部署和运维相关的文档,例如Dockerfile或者Kubernetes配置,帮助开发者将应用部署到云端或本地环境。 这个项目不仅提供了实际的代码实现,还可以作为学习微服务架构、前后端...

    云计算系统架构文档 汇总上

    DevOps 从云端到地面 熊节 pdf DevOps 让持续交付成为可能 乔梁 pdf eBay技术平台:掌控十亿级交易数据 Tony Ng pdf Facebook大数据实时分析案例分享 Uri pdf Java EE 7 平台:应云而生 Tyler Jewell pdf JS ...

    SRA2021-G03-项目开发计划1.81

    总结,SRA2021-G03-项目开发计划1.81是一个旨在构建云端知识库APP的详尽蓝图,涵盖了项目从需求分析到实施、测试、上线及后续维护的全过程。通过这个计划,团队能够有序地进行开发工作,确保知识库应用能高效、安全...

    JSP+SSM项目-云端学习系统的Java毕业设计.rar

    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】是关于一...总之,"SRA2021-G03-项目开发计划1.71"是一个全面的项目管理文档,它涵盖了项目从启动到完成的所有关键环节,旨在确保团队高效协作,成功开发出满足需求的云端知识库APP。

    SAAS架构设计模式SAAS架构设计模式

    它的出现是为了解决软件开发和维护的成本问题,通过将软件部署到云端,提供基于互联网的软件服务,用户可以通过互联网访问和使用软件。 SAAS 架构设计模式的优势包括: 1. 用户方面:拿来即用,无须维护,按需使用...

    构筑大语言模型应用:应用开发与架构设计.zip

    《构筑大语言模型应用:应用开发与架构设计》是一份深度探讨大语言模型在实际应用中的开发和架构设计的资源集合。这份资料来源于GitHub上的开源项目phodal/aigc,旨在帮助开发者理解和利用大语言模型的技术,提升...

    Android-物联网环境监测数据中心-物联网项目开发

    在物联网项目开发中,可能还需要特定的物联网协议解析或设备模拟插件。 3. **物联网架构**: 物联网环境监测系统通常包含传感器节点、网关和云端平台三个部分。传感器节点负责采集环境数据,如温度、湿度、光照等...

    Android项目开发报告 (2).pdf

    总结,本Android项目开发报告全面展示了项目开发的各个方面,从底层的平台架构到上层的功能实现,再到数据库和项目组织,为开发者提供了清晰的开发指南。通过这样的报告,不仅可以评估项目的成熟度,也便于团队协作...

    微信小程序项目源码云开发cloudtest.zip

    9. **版本控制**:在项目开发过程中,版本控制非常重要。微信开发者工具允许开发者进行代码版本管理,便于团队协作和回滚更改。 10. **发布与更新**:完成开发后,开发者可以在微信开放平台上提交审核,待审核通过...

    springboot集成netty,使用protobuf作为数据交换格式,可以用于智能终端云端服务脚手架

    本项目“springboot-netty-protobuf-master”旨在提供一个基础架构,它利用了Spring Boot的便捷性以及Netty的高效网络通信能力,同时采用Google的Protocol Buffers(protobuf)作为数据交换格式,确保数据传输的高效...

Global site tag (gtag.js) - Google Analytics