背景介绍
SaaS、PaaS、IaaS等云服务模式已经被大家普遍认可,在研发过程中借力一些PaaS和SaaS平台,能够提升产品的研发速度和功能稳定程度。本文将通过真实的商业平台案例-MaxWon研发实战,分享一下我们在项目研发过程使用SaaS和PaaS服务的技术要点和心得。 MaxLeap是一个为企业提供移动业务研发与运营的一站式云服务平台,提供云数据库、云容器、云代码等PaaS服务,云支付、云即时通信、云社交、云分析、云参数、推送营销等SaaS服务。
案例介绍
先介绍实践的案例,MaxWon一站式移动营销平台,案例有如下特点。
快速搭建全网营销平台
能够提供20多个营销模块灵活组合,个性化配置风格和首屏,一键生成App + 微信商城 + PC网站。
全网多渠道营销
能够让营销人员同时在App,微信商城,手机网站,PC网站平台展开营销,提升企业的业绩。
一站式管理,最小运营成本
有统一后台,同时管理多端营销,使用最小人员配置,获得最大运营效率。
数据驱动运营
提供多维度运营分析,快速反馈运营效果,数据驱动高效运营。
精准营销,高效转化
大数据分析全面洞悉客户消费行为,精准广告投放,提升销售转化。
案例模型
整个案例项目由“三端四平台”组成。“三端”指创作端、管理端和服务端。创作端负责生成各个平台应用,包括Android、iOS、网站、微官网。管理端用于管理应用、用户、权限, 管理后台数据和重要的信息设置等。服务端提供移动应用和后台管理所需的所有的API接口。“四平台“指iOS、Android、微信和移动官网。商户通过创作端生成各端应用和网站,营销和管理人员通过管理端运营和管理后台数据, 形成了制作、运营、营销的闭环。
接下来我们一起梳理下功能需求。创作端需要包含模板管理、布局管理、配置管理、构建应用等功能。管理端需要包含用户组织、权限、账户、数据、设置管理等功能。 组件服务部分,需要提供三大类别的服务,覆盖电商、设计、营销领域的二十多个功能组件。
接着梳理下架构上的需求,着重从数据和服务两个角度来看。数据对于商户至关重要,也是用户最关注的点,因为是多租户系统,商户的数据首先要做到隔离,并且当商户规模不断扩大时能够支持不断的扩容, 对于个别商户有数据迁出需求的也需要满足。服务是另外一个要点,如何在确保商户间服务不相互影响的前提下,合理控制资源,降低用户成本,是我们面临的挑战。服务需同时支持多租户共享模式、单租户独享模式、私有部署。
其它方面也有些要求,时间上,需要3个月左右上线运行,上线后能够快速迭代新功能。安全上,要支持数据容灾、传输加密、防止一些基层的网络攻击。
方案介绍
了解完需求后,就是方案选型阶段。实现这样的SaaS系统面临两种选择,一种方案是所有功能独立研发,保障整个系统的可控和灵活性。另一种方案是借力PaaS或者SaaS服务,提高研发速度,利用SaaS/PaaS的自适应、安全、专业等优势,降低研发难度和成本。
确定实施的最终方案如图所示,独立研发部分包括,创作端、管理端和服务端的多数电商类服务。确保核心业务系统的灵活性和可控程度,这部分功能的特点是业务具体、需求繁琐、定制性比较强。通过调用后发现,没有成熟的方案能直接满足项目需求, 并且这部分需求也会根据市场反应做出适当调整,因此保证研发的灵活和可控度非常重要。 使用的SaaS服务包括,即时通讯、推送、支付、客服系统、统计分析和社交/圈子等,这部分功能的特点是需求广泛存在,也有公认统一比较成熟的解决方案,单独实现却要花费不小精力,并且通用和扩展性很难做到非常成熟的程度,通过集成第三方SDK和API接口能够满足研发需求。 使用的PaaS服务包括,MySQL云数据库、MongoDB云数据库,使用统一的数据访问层,研发人员可以无需考虑数据库的底层架构、可用性、扩展等问题,完全透明,将精力专注在项目研发即可。
整体架构如图,研发重点为蓝色部分,MaxWon的API层和业务逻辑层。API层整合MaxWon的服务和MaxLeap的SaaS服务,实现具体接口功能,提供给各个终端,主要是各种接口业务实现,工作量大、业务需求多。 MaxWon的服务层,整合MaxLeap PaaS和SaaS的功能,并实现具体的业务需求。基础存储、缓存、全文检索、大数据计算由MaxLeap云的PaaS和SaaS服务提供。从架构图中可以发现,PaaS服务标准化了MongoDB、MySQL、缓存、队列等复杂的存储系统, SaaS服务封装了大数据计算,Hadoop、Spark等复杂的计算系统。整个项目在实现的过程中,专注于业务模块的研发即可,节省了去研发、研究这些基础组件的时间和资源。
关键设计
为什么存储能够做到隔离、扩展
先看架构图,我们的数据库服务器主要采用两种。事物依赖或者强一致性要求的数据,用MySQL来存储。用户的数据库访问请求经过负载均衡和代理,到达目标数据库服务器和对应DB。 MySQL和MongoDB均是类似,差别在于MySQL和MongoDB的集群组织方式差别比较大。MySQL采用主备读写分离方式,我们通过MHA实现集群的高可用和Master节点的监控、故障自动转移,大型应用采用代理加数据分片。 MongoDB采用复制集方式,一个集群的最小组成是一个Master节点、一个Slave节点和一个Arbiter节点,通常情况下Master承担读写任务,通过oplog保证数据的最终一致性,Slave和Arbiter保证了系统的高可用和故障自动转移。 大型应用采用Mongos、MongoConfig和数据分片方案。 设计上遵循三个设计原则:第一个原则,一应用一库;第二个原则,一库一账户;第三个原则用户需求分级。通过分库将数据在物理上隔离,且方便扩展和迁移。 通过一库一账户原则,区分数据的访问权限。通过用户需求分级,规模比较小的用户可以共享数据库服务器资源,规模慢慢增大时,可以独享资源,继续增大是可以独享更多的服务器资源。
PaaS服务对数据接入进行了抽象。商户规模小的时候,使用共享的数据库资源,通过代理层控制数据请求的服务器,规模慢慢扩大后,使用独立的数据资源。我们通过自研的数据迁移工具,实现数据的平滑迁移。 MySQL实现的代理叫Circe,完全兼容MySQL5.7版本协议。MongoDB代理叫Pandora,兼容MongoDB3.0以上协议。在数据代理层实现了数据访问路由,鉴权,Metrics采集,流控能力,能够支持共享、独享、定制多种部署模式支持迁出。
和主流PaaS的云数据库对比
以AWS的RDS为例,资源申请以RDS实例数为单位,每个RDS是由两个配置相同的EC2实例以及运行在EC2上的主备数据库组成,在成本上也是按照两台EC2响应配置的主机来计算。如果做到应用间数据和权限的隔离,并且对应用代码透明、无侵入, 需要每个应用单独申请一台RDS。这样做显然能达到隔离的效果,但是成本也有点高。
相比之下,MaxLeap的云数据源,以应用为单位,在物理和访问权限上进行隔离,应用A和B规模较小,可以使用公共服务器,但是数据和访问权限独立。应用C规模一般,使用独立的数据服务器资源。应用X规模很大,可以根据需求定制集群方案。
因此,云数据源在成本和灵活性上有很大优势,小规模时期,使用共享资源,降低成本,中、大规模时变更为独享,甚至使用集群方案。
为什么服务能够做到隔离和扩展
架构图中,用户请求经过负载均衡器和网关,到达目标服务的容器,同一个服务为由多个无状态的容器组成,达到负载均衡和水平扩容的目的,通过Docker容器技术处理服务间的资源隔离,Docker的资源隔离使用了Linux Kernel中的Namespaces功能。 Namespaces主要是通过Linux的clone内核调用来使用,根据传入的不同参数组合来启用对应的Namespace隔离。通过cgroup控制不同Container之间抢夺CPU、IO、磁盘等资源。 可扩展性通过网关和容器技术同时保障,小规模的应用共享服务资源,规模扩大后可以启动独立的服务,并可以根据场景决定需要的资源数量。网关会根据用户的设定,动态路由请求到对应容器实例。 整个Docker容器环境,基于Mesos构建,Mesos是Apache基金会下的集群资源管理工具,它通过抽象主机的 CPU、内存、存储等计算资源来搭建一套高效、容错、弹性的分布式系统。Mesos生态本身支持水平无线扩展,通过Marathon对容器的资源调度进行管理。 Marathon是Mesos生态圈里的一个轻量级、扩展性很强的调度long-running service的调度框架。支持RESTful api来创建和管理app,自动为app做容错迁移,凡是能用shell起的任务,理论上都可以通过Marathon在Mesos上简单地启动和管理起来。 从底向上,IaaS层、Mesos层、Docker层,每层都可以水平扩展。
对架构进行总结和梳理。整个服务基于Docker容器构建,达到资源隔离、快速扩展的特性,Docker容器基于Marathon和Mesos构建,管理、调度、监控、Failover等方案成熟, 支持水平扩展。网关支持服务的路由。整个架构支持多租户共享服务和独享模式。
安全设计也非常重要。网络通过https对请求进行加密,针对DDOS对整个网络基础架构进行了部署,VPC内部对防火墙进行规划。服务中对不同级别的请求进行分级和鉴权操作, 服务针对不同领域进行了拆分,在设计和部署上相互独立。对敏感数据加密、数据访问支持ACL、应用分库物理隔离、每个度权限独立,访问隔离。业务数据进行容灾备份。
总结
基于MaxLeap一站式研发和云平台之上,构建MaxWon云平台,在短短的3个月,产品第一个版本上线,稳定运行至今。有效解决掉了隔离和扩展问题,降低运维团队的压力。MaxWon现在支持20多个营销模块的*组合, 更多模块快速研发中,支持电商、社交、教育、餐饮等多个行业,支持上千家商户的稳定运行。