近期做SaaS应用的非常多,这样的模式是未来的一种趋势,这样的模式的最大优点就是云计算的优点--节约资源。网上有非常多人觉得SaaS非常easy,就是一个多用户租赁模式。这样的认识也不能说不正确。由于SaaS确实一般都採用多用户租赁模式。但这样的说法非常的不全面。是一种盲人摸象。并且非常多人觉得SaaS模式的架构非常easy,那就仅仅能说他没有真正做过SaaS模式或者他们做的SaaS应用是一种非常低级的模式,根本谈不上是云计算的范畴,就是一个把局域网的东西放到了公网而已。

作为一种云计算模型,一个典型的SaaS模式须要下面三种计算模型支撑:
1)分布式计算模型
      这是主要的模型。也是后两种模型的基础;如今非常火的Hadoop事实上仅仅是分布式计算模型中一种,并且并非特别的复杂;
2)分布式数据存储和訪问模型
      这样的模型非常多。GFS。HFS。TFS都属于这类,当然一些分布式数据库包含阿里的Ocean数据库都属于这一类。分布式数据库訪问和存取模型是SaaS企业应用的基础,对于企业级的应用底层数据节点不採用数据库当然是能够的,但假设採用数据库。优点也是非常多的。至少要简单非常多。现有的分布式数据库对于SaaS应用,特别是SaaS企业应用来说採用GreenPlum这类数据库并非不能够。但须要依据你的SaaS应用的业务本身进行权衡(主要是数据分离方式和效率的问题)。

特别是牵扯到关联查询的时候。对于一个按用户分离和隔离的企业应用,假设数据节点採用关系数据库,那么80%的企业应用的关联查询都会落到一个节点中,查询的效率会比較高。假设採用分布式数据库,一般都非常难做到这点,由于分布式数据库处理这类查询的时候,都须要把数据集中到一个节点进行处理。尽管能够採用一些策略来降低无效数据的传输。但往往效果不大。(分布式数据库中的A表和B表并不一定在一个数据节点的),这也是我一直以来的观点:对于分布式计算,通用往往代表着效率更低。

我比較认同Google的GFS设计理念:面向应用设计接口。
3)分布式部署与运维模型
     作为云计算下的SaaS应用,必须是能够支撑横向扩展(Scala out)的,而这些节点(包含应用节点和数据节点)的添加和管理全然靠人力去完毕。基本是不可能的事情。因此仅仅要是云计算模型下的SaaS应用,分布式部署与运维支撑模型就是必须的:应用程序节点的实时监控,管理和部署。数据节点的实时监控和部署,缓存节点的监控。管理和部署,文件server的监控。管理和部署等等。

以上三种模型就构成了SaaS应用的基础。但SaaS应用又有自己的特殊性。由于牵扯到商务逻辑、事务处理(高一致性和准确性)以及数据的整理和分离等。SaaS应用的分布式数据存储和訪问往往不能简单的採用已有的一些开源分布式系统,或者一些开源的分布式数据库系统。由于在大型的SaaS应用中,数据的切割(分布的基础)往往也不能做到单一,而数据的切割又会影响数据訪问的路由策略。这就导致通用型的做法不太适合详细的需求。

SaaS的这样的基础实际上就已经非常具有技术含量了,而SaaS业务应用本身,在逻辑上就更难了。并非訪问数据库加上一个隔离字段那么简单。

一般SaaS系统除了主要的多用户租赁(注意,设计SaaS的时候一定要以软隔离为基础。这样能够做到最大化的自由,并且不会影响数据库隔离和数据库实例隔离的需求 )还会牵扯到在线许可,多时区,多语言,以及功能、页面、流程的可配置。特别是更深层次的应用更会涉及到在线跨企业资源共享和流程协作的问题,处理这类问题会非常棘手。

特别是SaaS在线企业级应用,你须要面对的问题会更加复杂(业务规则的分与合)。

假设在做架构的时候。假设没有考虑到这些问题,后面的噩梦会非常多。

甚至你可能玩不转。

SaaS应用事实上并不简单,哪怕就是一个CRM在线应用。也是非常具有业务和技术含量的。依据我的分析,纷享销客和销售易尽管融了不少的资。但他们的系统架构还算不上真正意义下的云计算模式下的SaaS。金蝶,用友。速达的在线应用尽管没有深入研究,但通过他们用户的一些反馈,我感觉60%的可能性是伪云计算SaaS应用。当然。假设知道内幕的,能够告诉我。

SaaS企业应用涉及的点非常多。并且非常多点之间是有关联的,因此你必须在这些问题点的处理中不断地进行平衡,进行取舍。比方,採用面向服务(SOA)的架构,在一定程度上是能够降低一些复杂性,但这样一来也降低了应用系统的总体性,SOA的粒度和边界的划分就是非常重要的权衡点。

在进行企业SaaS应用架构的时候,最好先弄清下面几个点:
1) 数据隔离和数据分布的路由策略。
2) 须要做哪些业务,是否须要做用户间进行资源共享和流程协作;
3) 假设须要资源共享和协作。那么这个过程中的用户数据归属问题。
4) 企业数据的规范性和统一性问题(这会涉及到參照,统计等兴许一系列问题点);

......

非常多企业喜欢利用面试的方式来偷师,用处事实上并非非常大,SaaS应用的单个问题点都并非非常复杂,关键在于这些点放到一起的时候。你怎样依据你自己的业务进行取舍才是关键,而这样的东西。靠拉再多的人来面试都是解决不了问题的。原因非常easy:不懂的人跟你讲。你会被误导,而真正懂的人给你讲的也未必适合于你的应用。假设你结合你的问题去问别人,别人也未必是hellokitty。




浅谈SaaS应用开发的难度的更多相关文章

  1. 浅谈iOS视频开发

     浅谈iOS视频开发 这段时间对视频开发进行了一些了解,在这里和大家分享一下我自己觉得学习步骤和资料,希望对那些对视频感兴趣的朋友有些帮助. 一.iOS系统自带播放器 要了解iOS视频开发,首先我们从 ...

  2. 浅谈Android样式开发之布局优化

    引言 今天我们来谈一下Android中布局优化常用的一些手段.官方给出了3种优化方案,分别是</include>.</viewstub>.</merge>标签,下面 ...

  3. 浅谈移动Web开发(上):深入概念

    PPI 什么是PPI PPI的复杂之处在于如果他所属的上下文环境不同,意义也会完全不一样. 当我们在谈论显示设备的PPI时,它代指的屏幕的像素密度:当我们在谈论和图片相关时,我们谈论的是打印时的分辨率 ...

  4. 浅谈Bluetooth蓝牙开发

    前言:项目用到蓝牙开发,具体蓝牙获取硬件传感器中的数据. 因为没有蓝牙开发的相关经验,决定先了解一些蓝牙开发的知识,再去看之前同事写的蓝牙相关代码. ------------------------- ...

  5. 浅谈 Linux 内核开发之网络设备驱动

    转自http://www.ibm.com/developerworks/cn/linux/l-cn-networkdriver/ 网络设备介绍 网络设备是计算机体系结构中必不可少的一部分,处理器如果想 ...

  6. 浅谈Android系统开发中LOG的使用

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6581828 在程序开发过程中,LOG是广泛使用 ...

  7. 浅谈web前端开发阅历

    WEB前端研发工程师,在国内算是一个朝阳职业,这个领域没有学校的正轨教育,大多数人都是靠本人自学成才.本文次要引见本人从事web开发以来(从大二至今)看过的书籍和本人的成长过程,目的是给想了解Java ...

  8. NIO原理剖析与Netty初步----浅谈高性能服务器开发(一)

    除特别注明外,本站所有文章均为原创,转载请注明地址 在博主不长的工作经历中,NIO用的并不多,由于使用原生的Java NIO编程的复杂性,大多数时候我们会选择Netty,mina等开源框架,但理解NI ...

  9. 【Unity游戏开发】浅谈Unity游戏开发中的单元测试

    一.单元测试的定义与作用 单元测试定义:单元测试在传统软件开发中是非常重要的工具,它是指对软件中的最小可测试单元进行检查和验证,一般情况下就是对代码中的一个函数去进行验证,检查它的正确性.一个单元测试 ...

随机推荐

  1. 转:IOS远程推送通知

    在ios系统中,app应用程序无法在后台完成较多的任务,仅仅允许程序做一些有限的任务(如音视频播放.地理位置信息.voip).然而,如果你想做 一些有趣的事情,并且告知用户,甚至用户没有使用你的app ...

  2. DELL灵越 n4030笔记本安装win7之无线网卡驱动安装

    本人安装的是win7 32位专业版,安装完成后发现无线网卡找不到了.DELL灵越 n4030自己带无线网卡的.问题的根源在于无线网卡驱动没有安装或没有安装匹配的无线网卡驱动. 那么问题来了.什么无线网 ...

  3. poj--1383--Labyrinth(树的直径)

    Labyrinth Time Limit: 2000MS   Memory Limit: 32768K Total Submissions: 4062   Accepted: 1529 Descrip ...

  4. poj--1236--Network of Schools(scc+缩点)

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 14062   Accepted: 56 ...

  5. Spring mvc 实现jsonp和json数据类型

            在使用springmvc开发rest接口的时候很方便,可以直接使用@ResponseBody注解,直接加在springmvc的控制器类的方法上,springmvc会直接为我们将返回的对 ...

  6. python初始面向对象

    阅读目录 楔子 面向过程vs面向对象 初识面向对象 类的相关知识 对象的相关知识 对象之间的交互 类命名空间与对象.实例的命名空间 类的组合用法 初识面向对象小结 面向对象的三大特性 继承 多态 封装 ...

  7. 整理windows相关软件的环境变量

    java: JAVA_HOME    [安装java的home目录] PATH              [在最后添加] ;%JAVA_HOME%\bin; CLASSPATH    [文本框的起始位 ...

  8. Rabbit MQ 学习 (一)Window安装Erlang环境

    之前也没有用过Rabbit MQ ,最近正在学习中,记性不好,特意记一下. 百度一下 先得 安装 Erlang 并且 设置环境变量. 在Erlang 官网去下载,那个慢呀... 还好CSDN 里有人提 ...

  9. zset 有序集合

    zadd key score1 value1 score2 value2 .. 添加元素 redis 127.0.0.1:6379> zadd stu 18 lily 19 hmm 20 lil ...

  10. 分布式memcache

    使用多台memchache服务器,形成memchache集群.目的是为了提升memchache所能使用的硬件资源数量.多台memcached服务器之间不相互通讯.分布式算法由客户端实现,(php来说, ...