本文分享自天翼云开发者社区《全栈混合云综合架构方案研究和落地》,作者: y****n
随着云服务的便利性日益被市场接受,企业客户越来越倾向采用公有云服务补充其现有的企业内部部署的数据中心和私有云基础架构的不足。因此,混合云成为云服务市场的重要发展趋势。广义上讲,混合云的形态可以包括云与云的组合、云与传统IT系统的组合、云与虚拟化技术的组合等,它们可根据具体业务场景需求使用混合IT方式解决具体问题;狭义上讲,混合云指的是至少使用了两种不同部署模式(公有云、私有云、社区云)的云服务。当前,应用较多的混合云形式为公有云+私有云的组合。
现有混合云管理方法主要解决以下四方面痛点问题:
(1) 资源管理:将物理上分散的资源构建成逻辑上统一的云资源池,进行计算、存储及网络资源的统一管理和监控。面临异构兼容,控制融合的挑战。
(2) 运维管理:对所有数据中心的资源进行统一运维,提供集中的告警、日志分析等故障定位手段,提供性能、报表、仪表盘等监控方式。
(3) 服务运营管理:将云资源包装成服务,提供基于服务目录的端到端的服务开通、服务监控、服务计量等一系列服务运营支撑能力。
(4) 统一门户:管理员门户提供资源管理和运维管理的统一界面,对云资源进行统一管理和维护,包括虚拟资源和物理资源。自服务门户提供用户订购云服务,并对已有的虚拟化资产进行管理,包括虚拟资源的使用和释放等。
天翼云全栈混合云云采用原生云架构,以分布式技术和产品为基础,一套体系支撑所有云产品和云服务,提供完整的云平台开放能力,具备完善的企业级服务特性,具备完善的容灾和备份能力,是一个完全自主可控的云平台。面向企业客户提供资源统一开通、统一运营、统一运维等能力,简化云管理,满足企业容灾备份、应用弹性扩展等场景需求;整合天翼公有云、第三方公有云、私有云能力,提供混合多云管理能力。

高可用性(High Availability)通常来描述一个系统经过专门的设计,从而减少停止服务的时间,而保持其服务的高度可用性的状态。全栈混合云平台,基于资源冗余,故障转发得轻量级策略,在保证从底层资源池到上层接入层得全链路高可用得前提下,资源得使用率是最低的,满足部分资源敏捷化的场景,并且资源在云上和云下均可弹性扩展。

资源高可用:底层的自研的CNP 资源池,均以集群的方式进行部署,包含不限于控制器组件,网元组件,计算组件,存储组件等,保证了底层资源池的可用性和可靠性。
数据高可用:云管平台的控制面数据采用数据持久化到数据库中, 并且数据库采用PXC 模式多主集群提供数据层面服务,每个数据节点均可单独提供数据服务,即使部分节点宕机,其他节点仍可对外提供数据持久化服务,保证业务连续性。
服务高可用:云管平台后台服务单元采用微服务的架构,提供服务集群的方式提供管理服务,包括登录服务,资源开通,平台运营,系统管理,统计监控等。
平台高可用:云管的前端控制台采用双活的方式,保证业务用户使用平台的稳定性,减低平台单点故障带来的业务阻塞的风险,同时提供健康检查的机制,能够及时发现不稳定的前端服务,并做熔断处理。降低业务处理的错误率和异常率。
转发高可用:采用高性能的HaProxy 反向代理和负载均衡软件。进行业务流量的服务代理转发。基于双活的架构,对业务流量进行自动负载转发。并可以配置后端服务健康检查探针,及时洞察后端服务健康状态,根据预置策略,自动进行相关处理。
入口高可用:基于虚拟IP方式,采用业界比较流行的方式Keepalive工具,双机主备的部署,保证流量转发到稳定和高可用,主节点例外宕机, 备节点秒级接管转发流量,保证流量高效稳定的转发。
全栈混合云部署架构采用分层部署的架构,入口组件,云管组件,资源池基础组件,安全组件分开部署的模式。在保证每层高可用的前提下,保证组件之间的逻辑/物理隔离,最大程度减轻组件耦合。提高业务的运维的效率,同时提高系统的可维护性,可扩展性。

入口组件: 主要提供管理流量的过滤和转发,基于虚拟IP 和 Keepalived的组合模式,后端级联路由组件Haproxy,保证流量正确的分发到云管区域。组件基本采用双活的部署模式。
云管组件: 主要部署全栈混合云管理平台,全部采用虚机/容器化部署模式,包括前台web组件, 中台Java组件, 后台的混合云适配组件,缓存Redis组件,RabbitMQ 组件和数据库PXC集群组件等,每个组件采用多活的方式,对外提供服务,降低单点故障
CNP资源池组件:标准的CNP组件的部署模式,典型的组件,包括管理组件,网元组件,计算组件,存储组件。根据天翼云深耕多年的技术沉淀,采用慧匠自动化部署工具,根据业务需求,一键式部署底层全部组件。极大提高了部署交付的效率
安全组件:保证平台基本的安全,包括典型的下一代防护墙,抗Dos设备,堡垒机,密码机等。采用硬件,软件,或者软硬融合的组件,在保证业务高效的前提下,达到内部业务系统的审计和安全防护技术要求并且更好的保障系统的安全稳定运行。
全栈混合云多Region场景下,支持地域内同城容灾、跨地域异地容灾和跨地域备份,可满足不同行业的灾备等级要求。
(1)同城/异地容灾
同城容灾:是在同城或相近区域内 (<=200K M )建立两个数据中心 : 一个为数据中心,负责日常生产运行 ; 另一个为灾难备份中心,负责在灾难发生后的应用系统运行。同城灾难备份的数据中心与灾难备份中心的距离比较近,通信线路质量较好,比较容易实现数据的同步 复制 ,保证高度的数据完整性和数据零丢失。同城灾难备份一般用于防范火灾、建筑物破坏、供电故障、计算机系统及人为破坏引起的灾难。
异地容灾:主备中心之间的距离较远 (>200KM ) , 因此一般采用异步镜像,会有少量的数据丢失。异地灾难备份不仅可以防范火灾、建筑物破坏等可能遇到的风险隐患,还能够防范战争、地震、水灾等风险。由于同城灾难备份和异地灾难备份各有所长,为达到最理想的防灾效果,数据中心应考虑采用同城和异地各建立一个灾难备份中心的方式解决。

同地域:采用多AZ 方式保证业务和数据的相关备份,保证区域内高可靠。
DC之间:采用私有云为生产站点主中心,提供服务,同城/异地数据中心为灾备中心,基于云专线异步的方式进行数据同步,底层存储数据(弹性文件,云盘,对象存储)可以利用CDP/Relication工具进行同步,系统故障最大数据丢失量趋于0(RTO≈0),系统故障最长停机时间在5分钟到几小时不等。满足系统容灾要求。
(2)公有云容灾
概念:为企业提供业务容灾的灾备方案,相比传统容灾具备了多方面的优势。公有云容灾允许用户将传统的采购模式转化为按服务交付使用的方式,云数据中心的各种资源即开即用,能够快速部署,大幅缩短了灾备中心建设的进程,节约了建设传统灾备中心的时间和金钱成本。让云容灾成为一种普惠型的灾备服务,中小型企业也可以享受到灾备服务,让大型企业可以摆脱传统灾备的高成本负担。

同地域:采用多AZ 方式保证业务和数据的相关备份,保证区域内高可靠。
公有云为灾备中心:采用私有云为生产站点主中心,提供服务,公有云数据中心为灾备中心,基于云专线异步的方式进行数据同步,最大利用公有云资源巨大弹性和免运维的巨大优势,保证了业务连续性。
经过一年多团队的刻苦攻坚,目前全栈混合云1.0版本的方案已经落地多个场景,包括(政务云,一城一池,企业云,能源云)等多个场景,已经有超过近百个客户的实践经验,未来全栈混合云将从“可纳管”到“智能纳管”全面迭代,整体架构将想云原生的方向进行全面转化。行而不辍,未来可期。
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我有一个应用程序正在从Ruby迁移到JRuby(由于需要通过Java提供更好的Web服务安全支持)。我使用的gem之一是daemons创建后台作业。问题在于它使用fork+exec来创建后台进程,但这对JRuby来说是禁忌。那么-是否有用于创建后台作业的替代gem/wrapper?我目前的想法是只从shell脚本调用rake并让rake任务永远运行......提前致谢,克里斯。更新我们目前正在使用几个与Java线程相关的包装器,即https://github.com/jmettraux/rufus-scheduler和https://github.com/philostler/acts
我是一名决定学习Ruby和RubyonRails的ASP.NETMVC开发人员。我已经有所了解并在RoR上创建了一个网站。在ASP.NETMVC上开发,我一直使用三层架构:数据层、业务层和UI(或表示)层。尝试在RubyonRails应用程序中使用这种方法,我发现没有关于它的信息(或者也许我只是找不到它?)。也许有人可以建议我如何在RubyonRails上创建或使用三层架构?附言我使用ruby1.9.3和RubyonRails3.2.3。 最佳答案 我建议在制作RoR应用程序时遵循RubyonRails(RoR)风格。Rails
我有一个模块:moduleMyModuledefdo_something#...endend由类使用如下:classMyCommandextendMyModuledefself.execute#...do_somethingendend如何验证MyCommand.execute调用了do_something?我已经尝试使用mocha进行部分模拟,但是当未调用do_something时它不会失败:it"callsdo_something"doMyCommand.stubs(:do_something)MyCommand.executeend 最佳答案
所以我只是对此感到好奇:DataMapper为其模型使用混合classPostincludeDataMapper::Resource虽然active-record使用继承classPost有谁知道为什么DataMapper选择这样做(或者为什么AR选择不这样做)? 最佳答案 它允许您从另一个不是DM类的类继承。它还允许动态地将DM功能添加到类中。这是我正在处理的模块中的类方法:defdatamapper_classklass=self.dupklass.send(:include,DataMapper::Resource)klass
如何用HAML编写这个ERB:#OR我可以:=some_ruby_code+":"#and=some_ruby_code%br但我不想在这里连接,我想将它写成内联:(=some_ruby_code):#and(=some_ruby_code)%br 最佳答案 =some_ruby_code+":"-#and=some_ruby_code+""编辑1:我不确定您在寻找什么。你想要其中之一吗?==#{some_ruby_code}:-#and==#{some_ruby_code}或==#{some_ruby_code}:-#and=so
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭9年前。Improvethisquestion我想知道是否有人知道Ruby的rubyzip替代品,它可以处理各种格式,特别是zip/rar/7z?我知道libarchive,但它对我的目的来说并不完整(它是一个很好的gem)。(澄清一下,libarchive-对我不起作用-因为
我爱Sanitize.这是一个了不起的实用程序。我遇到的唯一问题是,它需要永远准备一个开发环境,因为它使用Nokogiri,这对编译时间来说是一种痛苦。是否有任何程序可以在不使用Nokogiri的情况下执行Sanitize的操作(如果没有别的,只是温和地执行它的操作)?这将以指数方式提供帮助! 最佳答案 Rails有自己的SanitizeHelper。根据http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html,它将Thissanitizehe
我尝试用Ruby设计一个基于Web的应用程序。我开发了一个简单的核心应用程序,在没有框架和数据库的情况下在六边形架构中实现DCI范例。核心六边形中有小六边形和网络,数据库,日志等适配器。每个六边形都在没有数据库和框架的情况下自行运行。在这种方法中,我如何提供与数据库模型和实体类的关系作为独立于数据库的关系。我想在将来将框架从Rails更改为Sinatra或数据库。事实上,我如何在这个核心Hexagon中实现完全隔离的rails和mongodb的数据库适配器或框架适配器。有什么想法吗? 最佳答案 ROM呢?(Ruby对象映射器)。还有