如今非常多企业都在搭建自己的私有PAAS平台,当然也有非常多大型互联网公司搭建共同拥有PAAS平台(比如SAE/BAE/JAE(jae.jd.com))。那么使用PAAS平台来部署SAAS应用有哪些优点呢?除了大家都知道方便部署管理,节约资源和成本,今天我主要给大家介绍还有一个优点就是让部署在PAAS平台上的应用非常easy做到7×24小时不server执行(哪怕须要又一次部署和更新应用),这个对于一般的企业和普通开发人员来说是非常难办到的。当然假设要在PAAS平台做到事实上也不是那么简单的。须要非常强的技术力量。以下就主要介绍一下在PAAS平台如何实现让部署在PAAS平台上的应用达到7×24小时执行的方案。

在介绍方案设计之前须要强调一下,这个前提是PAAS平台本身是7×24小时高可靠的。

本方案设计主要涉及以下几方面的改进:

(1)应用执行调度模块:能够将应用的多个实例调度到不同的server和机架上进行执行;

(2)应用执行状态的监控模块:相应用的执行状况进行监控;

(3)优雅重新启动应用模块:能够在应用又一次部署和升级时不停服务;

一,首先我们来看看调度模块

调度模块应该是PAAS平台(无论是私有还是共同拥有的)标配,仅仅是不同的PAAS平台有自己特色的调度方法和策略,比如依据server资源使用来调度(这个里面有涉及到各种资源的调度。比如依据CPU或者内存等),或者依据部署的应用个数来调度。

当然好的调度策略绝对不仅仅使用一种评判标准来作为调度的策略,肯定是结合各种情况考虑。由于今天主要介绍的是应用的高可靠性,所以主要介绍如何通过调度算法保证应用的高可靠性。

假如应用为了提高自己的服务能力和可靠性执行了3个实例。那么怎么的调度算法是最佳的(仅仅针对高可靠性这一点来说的)?我们都知道设计一个高可靠性系统都会考虑到server出问题和网络(交换机)出问题。所以调度模块为了保证这个应用的高可靠性应该须要保证这三个实例应用不在同一个server上执行,同一时候保证三个实例不应该在同一个机架下执行,当然假设有条件的PAAS平台能够考虑跨数据中心调度(只是应该没有几个PAAS平台能够做到跨数据中心部署PAAS平台上的应用)。

要做到上面说的调度结果。调度模块应该能够知道全部部署应用的server的部署情况,或者至少能够通过某种方法查询到。我相信全部的PAAS都应该有资源管理模块(或者叫做PAAS平台的server监控模块)能够提供这些信息。除了知道server的部署情况,调度模块应该还须要能够知道或者查询到某一个应用实例执行在哪一台server上,由于仅仅有这样调度模块才干够保证不会把后面的实例调度到同一个server上。比如应用启动三个实例,已经启动2个实例了。还须要启动第三个实例。那么调度模块启动第三个实例之前须要知道其它连个实例执行的server和机架,这样才干保证把第三个实例调度到其它机架上去执行。相同假设应用执行的三个实例,突然某个时候其中一个实例挂掉了,那么须要把第三个实例又一次执行起来,还是须要使用调度模块来完毕不同server和不同机架的调度。至于调度模块怎么知道挂掉了一个实例。这个不是调度模块关心的事情。以下介绍的应用执行状态监控模块会非常好的解决问题。

二,应用执行状态的监控模块

打造7×24小时高可用的应用,假设连应用执行的状态都不知道,还怎么谈做到7×24小时的执行。说的简单一点,应用执行状态的监控模块就是实时的监控应用各个实例的执行状态(存活还是挂掉了)。然后依据监控的结果进行兴许处理。

监控模块须要达到的结果非常简单:就是应用的执行状态和用户期望的执行状态是否一致。

比如用户期望这个应用是执行的,可是此时执行状态却是挂掉的。肯定是不合理的,又比如用户期望此时不想对外提供服务了,希望应用是停止执行的,可是假设应用还是在执行也是不合理的。再比如用户期望应用眼下应该是须要执行三个实例的。可是仅仅有两个实例执行,也是没有满足用户需求的。

监控模块就是发现这些和用户期望不一致的情况。并处理。

那么如何做?以下我就结合开源PAAS平台cloudfoundry的解决方式来介绍应用执行状况的监控模块的方案设计,cloudfoundry眼下为止已经将原来的ruby版单进程单点监控模块改造成了go版高可靠多进程的监控模块。预知详情请到官方站点查询相关资料。今天主要结合最新版本号的监控模块来介绍怎么设计监控模块:

最新版本号的cloudfoundry的应用执行状态监控模块又划分为非常多的子模块,每个子模块都能够执行一个主进程和多个备进程进行高可靠部署(这些进程能够部署在不同的server和机架上。仅仅要网络能够通)。

首先须要获取每个应用的用户期望状态。那么我们就须要单独一个模块来获取这些用户的期望状况。而且把这些状态存储在某一个地方(共享存储,cloudfoundry使用的etcd)以便其它模块使用。

当然用户期望的状态通常存放在数据库其中,这个用户期望状态的获取模块能够通过直接读取数据库或者通过其它服务模块得到。

这个模块相应cloudfoundry的hm9000中的fetch_desired模块。

用户期望的执行状态有了,那么就还须要应用真实的执行状态,那么这个状态怎么来获取了。这个模块就叫做应用真实状态获取模块,相同将获取的数据存放到共享存储上。有两种方案能够获取。一种是主动去获取全部应用的执行状态,通常就是去訪问应用提供的一个服务。另外一种方案就是全部应用定时上报心跳,假设没有即使上报就觉得应用执行状态有问题了。

cloudfoundry採用的另外一种方案,只是它不是应用自己上报。而是管理一台server上全部应用的组件(dea)统一上报这台server全部应用的心跳。

这个模块相应cloudfoundry的hm9000中的listen模块。

用户期望的状态和应用真实状态都有了,那么我们就能够開始分析了,究竟哪些应用的执行状态和用户期望的执行状态不一致了。

然后将分析的结果相同存放在共享存储上,后面其它模块会使用这个分析结果的数据。这个模块相应cloudfoundry的hm9000中的analyze模块。

我们都知道了哪些应用的状态和用户期望的状态不一致。那么我们就能够把这些不一致的应用让他们一直。这就须要一个模块专门来给调度模块发送调度命令。比如用户期望应用是执行的,可是真实的状态是这个应用挂掉了,那么这个模块就能够发送一个调度命令让调度模块把这个应用启动起来。相同假设用户期望停止,假设应用是执行的那么就发送调度命令让这个应用停止掉。还有执行实例少了就在多调度一个起来。执行实例多了就停止掉多余的实例。这个模块相应cloudfoundry的hm9000中的send模块。

通过上面的4个模块基本上完毕了应用执行状态监控模块,而且维护了应用执行状态不一致的应用。

当然cloudfoundry的hm9000还提供了其它工具模块,感兴趣能够自己去深入研究。

三。最后一个模块就是优雅重新启动模块

为什么须要这一个模块呢?由于不论什么一个应用都不可能不更新,除非废掉的应用。那么更新这个应用的时间可大可小。那么由于更新期间导致应用不可用时间也服务预计。当然更加达不到题目所说的打造7×24小时的高可用应用了。

事实上这个模块是最简单的,可是达到的效果也是最明显的。只是也正是PAAS平台的特性才easy完毕。由于PAAS平台的应用更新和执行是两个分离的任务。我们全然能够一边更新应用一边继续让应用提供服务。而且在新更新应用没有全然能够提供服务曾经一直让老服务继续提供服务。全然不影响应用对外提供的服务。

这个模块实现还须要通过调度模块来完毕。在应用更新期间,我们一直让曾经执行的实例继续执行。一直到更新的应用已经正常执行了,才停止掉老的执行实例。这些启动或者停止动作都交给调度模块完毕,这个模块主要就是控制逻辑就能够了。

上面介绍的模块有一个缺点就是在新应用启动成功并对外提供服务以后去停止老实例的时候,用户可能感受到不一致的服务状态。由于在老实例还没有全然停止掉曾经可能还有请求达到实例,可是又可能偶尔到新实例,由于新老实例可能同一时候存在一个非常小的时间段,只是这对大部分应用应该是能够忽略的。

假设你全然不能忍受这短暂的不一致状态,那么还能够在路由那一块做。保证用户请求到达要么全部到老实例要么全部到新实例,详细做法就是新实例和老实例的路由地址不会同一时候存在路由程序的路由表里面。

第四,总结

通过上面的三种模块的设计基本上能够打造7×24小时的应用了。尽管方案设计完毕了,可是真正的实施了还会遇到非常多意料不到的情况,要正在打造7×24小时的应用执行环境还须要非常多其它方面的考虑。比方说每个模块执行的稳定性,假设应用执行状态监控模块都挂挂了还怎么启动应用程序。所以,好项目还需要好的做法,通过对调整方案的做法。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/yxwkf/p/4748937.html

PAAS平台7#215;24小时可用性应用设计相关推荐

  1. 全站写作平台疯传24小时删除

    在腾讯工作了5年,工作压力大,节奏快,但是从技术上确实得到了成长,尤其是当你维护与大促相关的系统的时候,熬到9级也费了不少心思,小编也是个爱学习的人,把这几年的工作经验整理成了一份完整的笔记.此笔记已 ...

  2. 对《GitHub服务中断24小时11分钟事故分析报告》的分析

    对<GitHub服务中断24小时11分钟事故分析报告>的分析 声明 本文是根据公众号"高效开发运维"翻译整理的GitHub服务中断分析报告的信息进行分析.可能存在某些观 ...

  3. 福州24小时图文打印店在哪里?

    在福州想找一家打印店并不难,地图上搜索打印店大家就可以一目了然城市中的打印店,还可以致电打印店咨询打印的价格:打印店找起来并不难,但是并不是所有的打印店都可以24小时进行打印,在福州24小时图文打印店 ...

  4. 24小时网络测试软件有哪些,24小时监测分析的互联网舆情分析系统

    网络杂音.信息泛滥等现象的出现,促使互联网舆情的频繁突发,再加上互联网所形成的多元信息传播途径和渠道,所形成的海量信息对主流信息产生了巨大的解构效应,并对公众的判断和认识起到了巨大影响作用.所以,当前 ...

  5. 微信平台全面封杀UBER的24小时里,优步做了什么

    微信的"大清洗" 微信对优步的"大清洗" 2015年12月3日晚,微信公众平台对UBER所有城市的公众号进行了全面封杀,无法申诉,永久封禁. 微信对UBER微信 ...

  6. 北鲲云超算平台为生命科学的发展赋能,24小时完成10亿规模分子库筛选全流程

    据国际数据公司IDC等机构最新发布的< 2021-2022全球计算力指数评估报告>显示,除五大行业之外,疫情之后医疗行业的数字化进程尤为值得关注,其中算力助力疫苗(新药)研制和疫情防控的社 ...

  7. 大数据24小时:地质局发布地质大数据共享平台,科大讯飞将语音识别植入腾讯小Q机器人

    地质调查局发布首个地质大数据共享服务平台"地质云":华为与华制智能合作,共同发布制造业解决方案"智造云":科大讯飞与腾讯联手,将语音识别技术植入腾讯小Q机器人- ...

  8. 大数据24小时:众安推出汽车大数据平台“数据魔方”,国内首个新能源大数据线下创新园区落户青海

    [数据猿导读] DeepMind开发新款人工智能产品,可用于诊断眼底疾病:众安保险推出汽车大数据平台"数据魔方":国内首个新能源大数据线下创新园区在青海开园--以下为您奉上更多大数 ...

  9. 哪个线上打印平台属于24小时营业的打印店?

    在许多校园内的打印店经常被学生挤得水泄不通,校园内的打印需求量是非常大的,而遇到考研复习时,很多学生需要打印许多学习方面的资料,到校园的打印店排上半小时.一小时是时常的事情. 不仅学生排队等候等的着急 ...

  10. 大数据24小时:百度推出区块链项目“莱茨狗”,腾讯与阿斯利康合作共建医药打假平台

    [数据猿导读] 百度推出区块链项目"莱茨狗",目前正在内测中:秦淮数据投资60亿元打造新媒体大数据产业基地:腾讯与阿斯利康合作,共建医药打假平台--以下为您奉上更多大数据热点事件 ...

最新文章

  1. Android游戏开发指南lt;一gt;背景地图
  2. C 整数反转
  3. Dos批处理常用命令大全扫盲篇
  4. 正则表达式-匹配数字范围
  5. Silverlight 打印
  6. 大学刚毕业,零基础大数据如何入门?
  7. matlab画圆的命令_matlab画半圆
  8. iOS 如何在一个应用程序中调用另一个应用程序
  9. 修改android的wifi客户端名称的两种方法
  10. 所有表单对象_表单太多汇总太累?请看这里,我们带你一键汇总
  11. 陈式新架一路八十三式口诀
  12. 会议OA项目之我的会议排座批审功能
  13. [转载]dilated conv带孔卷积、pooling层提高感受野 反卷积 的理解
  14. PHP事务数据库写法,PHP 操作 MySQL 执行数据库事务
  15. 小学生Python编程 ----- 打鸭子
  16. Linux下nginx编译安装,重新添加模块
  17. 非线性方程求解 :二分迭代法和牛顿迭代法
  18. 刚子扯谈:神马网络营销
  19. FND_GLOBAL.CONC_REQUEST_ID = -1
  20. 比利时银行集团KBC创建基于区块链的硬币

热门文章

  1. 编译OpenJDK8:No CONF given, but more than one configuration found in
  2. 介绍一些预言性质的梦
  3. 创业失败的内因分析及避免办法
  4. unrecognized selector sent to instance的一类解决办法
  5. linux中posix共享内存,Linux 共享内存(POSIX)
  6. vs code为什么不出现小黑框_为什么越来越多商家开通微信小程序商城?
  7. python的序列类型包括_python基础之常用序列类型(字符串)
  8. python 图表_python可视化入图表|贵州茅台净利润分析
  9. python如何输入n个数字_python如何一次性输入多个数
  10. mysql的读写分离工具_mysql 读写分离工具