基于PaaS和SaaS研发的商业云平台实战

背景介绍

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实现

整体架构如图,研发重点为蓝色部分,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。这样做显然能达到隔离的效果,但是成本也有点高。

PaaS RDS

相比之下,MaxLeap的云数据源,以应用为单位,在物理和访问权限上进行隔离,应用A和B规模较小,可以使用公共服务器,但是数据和访问权限独立。应用C规模一般,使用独立的数据服务器资源。应用X规模很大,可以根据需求定制集群方案。

MaxLeapPaaS

因此,云数据源在成本和灵活性上有很大优势,小规模时期,使用共享资源,降低成本,中、大规模时变更为独享,甚至使用集群方案。

为什么服务能够做到隔离和扩展

架构图中,用户请求经过负载均衡器和网关,到达目标服务的容器,同一个服务为由多个无状态的容器组成,达到负载均衡和水平扩容的目的,通过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多个营销模块的自由组合,更多模块快速研发中,支持电商、社交、教育、餐饮等多个行业,支持上千家商户的稳定运行

链接:https://www.jianshu.com/p/d4a4acd01e86

基于PaaS和SaaS研发平台体系的更多相关文章

  1. 基于PaaS和SaaS研发的商业云平台实战 转 (今后所有的IT行业会持续集成,往虚拟化方向更快更深的发展,商业化才是这些技术的最终目的)

    背景介绍 SaaS.PaaS.IaaS等云服务模式已经被大家普遍认可,在研发过程中借力一些PaaS和SaaS平台,能够提升产品的研发速度和功能稳定程度.本文将通过真实的商业平台案例-MaxWon研发实 ...

  2. 目前国际上所用云计算平台IaaS、PaaS、SaaS简介

    随着云计算这个概念越来越为人所熟知,企业对云计算的重视程度也在日趋加深.这不仅是一种潮流,更体现了一种需求——数字化.现代化.科技化的整体需求.如今市场上云计算的运营商更是风起云涌,服务种类更是丰富繁 ...

  3. 基于React Native的移动平台研发实践分享

    转载:http://blog.csdn.net/haozhenming/article/details/72772787 本文目录: 一.React Native 已经成为了移动前端技术的趋势 二.基 ...

  4. IaaS、PaaS、SaaS介绍(非原创)

    文章大纲 一.IaaS.PaaS.SaaS介绍与比较二.参考文章 一.IaaS.PaaS.SaaS介绍与比较 随着云计算.大数据.人工智能等一批新技术的涌入,企业信息化建设速度加快,基于云计算的Iaa ...

  5. IaaS、PaaS、SaaS、DaaS都是什么?现在怎么样了?终于有人讲明白了

    导读:本文将详细科普云计算的概念.云服务的发展现状,并逐一介绍各种云服务模式(IaaS.PaaS.SaaS.DaaS),建议收藏! 作者:阿里云智能-全球技术服务部来源:大数据DT(ID:bigdat ...

  6. IaaS、PaaS、SaaS 之间的区别

    IaaS.PaaS.SaaS 之间的区别 “云服务”现在已经快成了一个家喻户晓的词了.如果你还不知道PaaS.IaaS和SaaS的区别,那就太out了. “云”其实是互联网的一个隐喻,“云计算”其实就 ...

  7. 什么是IaaS, PaaS和SaaS及其区别

    IaaS, PaaS和SaaS是云计算的三种服务模式. . SaaS:Software-as-a-Service(软件即服务)提供给客户的服务是运营商运行在云计算基础设施上的应用程序,用户可以在各种设 ...

  8. day 06云计算的三种服务模式:IaaS,PaaS和SaaS

    云计算的三种服务模式:IaaS,PaaS和SaaS ”云服务”现在已经快成了一个家喻户晓的词了.如果你不知道PaaS, IaaS 和SaaS的区别,那么也没啥,因为很多人确实不知道. “云”其实是互联 ...

  9. 云计算的三种服务模式:IaaS,PaaS和SaaS

    云服务”现在已经快成了一个家喻户晓的词了.如果你不知道PaaS, IaaS 和SaaS的区别,那么也没啥,因为很多人确实不知道. “云”其实是互联网的一个隐喻,“云计算”其实就是使用互联网来接入存储或 ...

随机推荐

  1. vs2015 编译时项目出现NuGet程序包还原失败,找不到xxx.xxx.xxx版本的程序包,怎么解决这个问题?

    vs2015 编译时出现这个NuGet程序包还原失败问题,项目还是运行得了,就是每次看到错误列表中有很多个错误,就感觉不舒服. 总算被我找到解决方法了 问题截图:

  2. BPTT for multiple layers

    单层rnn的bptt: 每一个时间点的误差进行反向传播,然后将delta求和,更新本层weight. 多层时: 1.时间1:T 分层计算activation. 2.时间T:1 利用本时间点的误差,分层 ...

  3. log4j不输出日志的解决方案

    参考:http://blog.csdn.net/qq994406030/article/details/53433159 主要是log4j.properties log权限和log输出方式没配好.

  4. java编写本月日历

    代码如下: import java.time.*; public class Main { public static void main(String arg[]){ LocalDate date ...

  5. 十七. Python基础(17)--正则表达式

    十七. Python基础(17)--正则表达式 1 ● 正则表达式 定义: Regular expressions are sets of symbols that you can use to cr ...

  6. node连接myslq

    var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : ' ...

  7. 深入理解java虚拟机---内存分配策略(十三)

    转载请注明原文地址:https://blog.csdn.net/initphp/article/details/30487407 Java内存分配策略 使用的ParNew+Serial Old收集器组 ...

  8. asp.net mvc 获取ajax的 request payload 参数

    注意事项: 传输的格式要设置城:"contentType": "application/x-www-form-urlencoded"

  9. 1.2socket服务器使用多线程

    socket服务器代码如下 # -*- coding: utf-8 -*-from socket import * import time import threading,_thread as th ...

  10. 查看电脑的IP地址及配置

    自己主机的IP地址查看cmd----ipconfig/all,如下图