`

关于系统集成的一些想法,及再次讨论B/S、C/S

阅读更多
最近在罗马尼亚做需求调研,发现用户在工作中,需要频繁从10个系统查看数据,辅助决策。于是就想是否有可能做一个信息聚合的系统,让用户不需要频繁地“切换”和“根据关键字检索”

今天晚饭时和同事讨论了一下,有一些零碎的想法,在此记录

我认为这里有2个层面的问题,第一个层面是集成,第二个层面是信息搜索。分别对应用户的2个动作:“切换”、“检索”

首先谈集成层面:

问题的本质在于,这个新系统(下文简称A),需要和现有的10个系统集成起来(老系统是处于“被集成”的位置)。归纳起来,我认为一个系统是否容易“被集成”,可以分为3个层次:

1、展现层接口

第一种情况是,系统对外提供的是完整的界面,即“展现层的接口”

比如输入一个www.somesystem.com/sla/aug,某系统返回一个完整的页面。那么如果A要集成这个系统,就直接将这个页面嵌入到自己的界面中;

或者发送一个指令如“kpi=sla/aug”,某系统返回一个完整的flash。那么A也可以直接把这个flash嵌入自己的界面

这种情况在老的B/S架构应用中是比较常见的,比如我要把“博德之门2”的信息集成进来,可以直接在A的界面中嵌入http://baike.baidu.com/view/6246506.htm?fromId=2761385,集成难度非常低(当然这是盗链,只是打个比方)。另外大部分的企业B/S应用都有鉴权机制,所以也还是需要解决SSO的问题

在C/S架构中这种情况非常少见,因为client层的处理能力很强,不太需要在网络中传输这么大的流量

这次目标的10个系统中,大概有3个是这样的类型

2、业务层接口

第二种情况是,系统对外提供只是数据片段,即“业务层的查询接口”

基本上所有的C/S架构应用都是这样的,比如我在DOTA中潇洒地补刀,补刀了一个投石车,得到了70金币。server传给war3 client的只是类似“hit=yes;gold=+70;unit=destroy”的数据片段,而不是把整个补刀的动画传过来,动画是根据这些数据,在客户端上计算得到的

问题在于,这里的“接口”可以说是一厢情愿的说法,事实上大部分的C/S应用是private的,并没有打算将来给别的应用去集成,所以这个接口虽然存在,但是并不是开放的。也就是说我想要得到上面的“hit=yes;gold=+70;unit=destroy”数据,唯一的办法就是打开客户端,然后认认真真地补中一辆投石车(好吧,这也不是很难),很难通过写代码的方式来模拟这个事情。各种游戏的外挂,实际上干的就是这样的事

老的B/S应用,主要还是第一种情况,很少用第二种。主要是因为浏览器的渲染能力比较弱,计算也比较慢,所以还是把大部分的工作在server端完成,client只原样展示。但是这种情况在最近5,6年有了明显的改变。主要是由于PC的性能越来越强,js、css也赋予了浏览器足够的逻辑运算能力和界面展现能力,AJAX技术在其中也起了至关重要的作用。总的来说,现在的B/S架构应用,也越来越倾向于“薄server,厚client”,甚至很多C/S架构的老系统,也开始推行“WEB化”。这样的例子很多,比如博客园、当当网现在的首页就完全是通过ajax加载的,还有大量的网页游戏等等。其中的驱动力主要是减轻server端的压力,将计算压力分摊到client上;而client的能力和技术进步,使得这个愿望成为可能

我们以前做过的一个系统,就是这种形式,通过http://www.company.com/workorder/username这个链接,返回某用户的工单数据。浏览器拿到数据以后,刷新DOM元素;而android终端拿到数据以后,刷新手机界面。这个接口,就是典型的业务层接口,无分B/S还是C/S。Remedy也是这种做法,AR Server暴露的就是各种业务接口,并提供了SDK让客户自己去定制client;同时官方也配套提供了一个mid tier,包装出了简单的URL,初级用户可以直接用浏览器来访问mid tier

要集成这种类型的系统,就根据协议向server端发起请求,拿到数据后自行组装。然而问题在于,老系统这一层的接口,也不一定是开放的

10个目标系统中,大概有4个是这种类型

3、数据层接口

第三种情况是,系统将数据直接通过接口暴露出来,要什么就自己取。这个比较难举出例子,毕竟很少见。欧洲有些厂商的IT整体架构就是这样,底层是一个数据仓库,然后暴露了一堆查询接口。上层的应用系统是按需定制开发的,可能一个系统取了123数据来展示;另一个系统取了456数据来展示

这里的数据仓库,可以有多种形式,可能就是一个标准的RDBMS,开放了一个SQL接口(危险);也有可能是加了一层很薄的帽子,看起来类似第二种情况,但是可以更有效地做日志、权限控制、防SQL注入等

集成这种类型的系统,其实意义不大,因为对方的数据也不外乎是从数据仓库取的,既然老系统能取到,那么A当然也能取到。那么去集成老系统反而是多此一举,不如直接也从底层的数据仓库去取,关键还是搞清楚业务规则,别人为什么要这么取

10个目标系统中,最后大概有3个是这种类型

总的来说,我觉得没有明显的优劣之分

第一种方式最为省事,因为封装得最彻底最粗粒度。A要集成这种系统很简单,但是要做定制则非常难。比如对方系统提供了一个页面,如果我们只想直接复用,那就最好。但是如果我们只想要页面里3个字段的2个,那么就需要处理这个页面,从中间剥离出来,难度就很大

第二种方式只提供数据,封装程度比较弱,细粒度,就给A的定制提供了更多的可能。但是相对的,A在界面开发上就需要更多的工作量

第三种方式则更彻底,没有任何封装,相对的就连业务规则也没有了。A想要什么就取什么,相对地工作量也就最大,某种程度上算是新开发一个系统,也谈不上什么集成了

从我来看,第一种方式封装过度,客户端的自由度太小;而第三种方式的粒度又太细,定制工作量太大,也缺乏约束。这两种方式都太极端,所以折中的第二种相对是比较好的,对一个开放系统来说,现在主要也是采取这种方式,比如各种开放平台的SDK,其实就是这种方式

下面谈一下搜索层面:

相对于前面讨论的集成层面来说,搜索层面没有太多可说的,本质上取决于对方系统接口的粒度和开放程度

比如说,假设我现在想做一个书籍信息的垂直聚合应用,那么我当然要去当当、亚马逊、京东、china-pub上拿信息

某网站开放了接口(无论是上述哪一层的接口都无所谓),就比如说是web api吧,有queryByIsbn()、queryByAuthor()、queryByPrice()这3个方法,那么我就可以根据条件,去调用这些接口,来精确搜索到我想要的信息

而另一个网站则非常封闭,就希望读者到我网站来贡献流量,不要第三方应用乱戴帽子,那么就只有一个URL,www.bookshop.com/book?id=123456,那么我要在这个网站上做精确搜索“10块钱的JAVA书”就非常难,只能先向“www.bookshop/book?name=java”发请求,从拿到的结果中再解析(需要用到文本解析、正则表达式、去重等),得到我想要的数据之后,再嵌入我的系统里

从上面的例子可以看到,能不能很容易地得到搜索结果,并不是我一厢情愿的事,跟技术能力关系也不大,最关键的因素是,目标系统是否是开放的,在设计的时候是否把“被集成”纳入考虑。遗憾的是,出于商业角度和历史原因,大部分都没有

再举一个搜索引擎的例子,搜索引擎搜网页,一个重要的依据是网页的<keywords>和<title>元素。而网页本身都是很希望能被搜索引擎收录的,所以一般都尽量贴切地填写这些“搜索引擎友好”标签。尽管如此,搜索引擎要做到精确搜索仍然很困难,通过AJAX得到的动态数据基本是很难检索到的。比如试试在google里搜索“十块钱的JAVA书”,排名第一的是“买了一本二手JAVA书,三十块钱”,已经比较接近了,但是和我的原意还是差比较远,因为没有这么细粒度的接口,即使有,在没有形成标准之前,google也不可能去调用这么多不同的接口

总的来说,“能不能搜索”要看“有没有接口”,“能不能精确搜索”则要看“有没有细粒度接口”。即使非常理想,对方系统提供了细粒度接口,定制工作是必不可少的,如果自身系统设计得足够精巧的话,至少也需要写配置文件和脚本。而且这类“搜索接口”目前是没有规范的,所以每个系统都不一样

回到这次的需求,情况比google搜网页更加麻烦。因为网页好歹还填了<title>和<keywords>,可以认为是“统一的粗粒度查询接口”(当然google自己有更巧妙的算法)。而这10个老系统,则连这种粗粒度的查询接口都没有提供,所以只有两个办法:第一是逐个系统取数据,做解析,非常难实现;第二是先将数据都同步过来保存,再自己做查询,也很难实现

上面总结了关于“集成”和“搜索”的初步想法。完全割裂开来说可能不太对,比如某系统提供了细粒度的数据层接口,那么既是可以集成的,也是便于搜索的。把这2个概念分开来讲,主要是因为,集成用工作量至少是能搞定的,而搜索的目标则更加难以达成

最后,再简单总结一下B/S和C/S,其实我觉得界限是非常模糊的。B/S中的B,其实也就可以认为是client

B/S的优势主要是统一,应用层协议都走http,展现全都是html+css+javascript,就非常通用。关键是所有PC上都有浏览器,解决了分发的问题。但是B/S曾经也有很多缺陷,比如页面渲染能力太弱,javascript执行太慢,网络流量大,跨浏览器兼容很难,难以做到server push……所以才会有C/S的一席之地

而最近技能,这些问题都在逐一解决,HTML5、CSS3、V8 Engine、ajax、W3标准、web socket等,都在解决这些曾经的问题,所以B/S也就越来越流行了。或许不能说C/S正在消亡,而是B/S越来越像C/S了
分享到:
评论

相关推荐

    Delphi开发B_S数据库应用系统教程_delphi_DelPhi开发B/S_delphiBS_Delphi开发BS

    本教程主要聚焦于使用Delphi进行B/S(浏览器/服务器)数据库应用系统的开发,这在当今互联网环境中具有广泛的应用场景。 一、Delphi简介 Delphi是由Embarcadero Technologies公司开发的集成开发环境(IDE),它基于...

    基于B/S模式的在线考试系统的实现

    随着信息技术的快速发展,B/S模式因其客户端零安装、易维护和易扩展等特点,被广泛应用于在线考试系统的开发。B/S模式指的是浏览器/服务器(Browser/Server)模式,它将系统的业务逻辑集中在服务器端,而客户端使用...

    基于B/S的资料管理系统设计论文

    ### 基于B/S的资料管理系统设计论文 本文旨在探讨一种基于浏览器/服务器(B/S)架构的资料管理系统的设计与实现。随着信息技术的发展和网络技术的进步,B/S架构因其易于部署、维护成本低等优势,在各类信息系统开发...

    基于B/S库存管理系统

    【基于B/S库存管理系统】是一种采用浏览器/服务器(B/S,Browser/Server)架构的库存管理解决方案。在这样的系统中,用户通过Web浏览器进行操作,而数据处理和业务逻辑则集中在服务器端进行,大大简化了客户端的需求...

    基于B/S的餐厅点菜系统php

    【标签】中的“B/S”再次强调了系统的架构,这种架构下,用户无需安装特定软件,只需通过浏览器即可访问系统。"dreamweaver"是Adobe公司的一款集成开发环境(IDE),常用于HTML、CSS和JavaScript等Web前端技术的开发...

    B/S网盘系统

    【B/S网盘系统】是一种基于浏览器/服务器(Browser/Server)架构的网络存储系统,它允许用户通过Web浏览器访问、存储和管理自己的文件。这种系统的核心特点是无需安装客户端软件,只需要一个支持JavaScript的现代...

    b/s在线文件管理系统

    【标题】"B/S在线文件管理系统"是一种基于浏览器/服务器(Browser/Server)模式的文件管理解决方案,它允许用户通过Web界面进行文件的上传、下载、查看、编辑、删除等操作,无需安装任何客户端软件。这种系统的核心...

    小区物业管理系统源程序(java,B/S模式)

    【小区物业管理系统源程序(Java, B/S模式)】是一个基于Web的软件系统,采用Java编程语言进行开发,遵循B/S(Browser/Server)架构,即浏览器/服务器模式。这样的设计使得用户可以通过网页浏览器访问系统,而无需在...

    基于B/S的在线考试系统

    10. **持续集成与部署**:使用持续集成和持续部署(CI/CD)策略,能自动化构建、测试和发布新版本,确保系统快速迭代和稳定运行。 以上就是基于B/S的在线考试系统的关键知识点,涵盖了从架构设计、核心技术到实际...

    基于B/S的人事工资管理系统采用ASP.net(c#)编写的

    这个标题表明,我们将讨论一个基于浏览器/服务器(B/S)架构的人事工资管理系统,该系统是用ASP.NET技术,并且编程语言为C#。ASP.NET是微软开发的一个用于构建Web应用程序的框架,它提供了丰富的功能和工具,可以...

    基于C/S结构的小型餐饮管理系统设计与实现

    《基于C/S结构的小型餐饮管理系统设计与实现》 本文主要探讨了如何为酒店管理(信息工程)专业学生设计和实现一款小型餐饮管理系统,旨在帮助他们掌握旅游信息管理系统的设计方法。通过对酒店餐饮管理工作流程的...

    基本B/S的考勤系统

    【标题】"基本B/S的考勤系统"指的是基于浏览器/服务器(B/S)架构的简单考勤管理系统。这种系统主要用于记录员工的出勤情况,包括上下班时间、请假、迟到、早退等信息,便于人事部门进行管理和统计。 在描述中提到的...

    基于B-S架构的在线考试系统的设计与实现_基于B-S架构的在线考试系统的设计与实现_在线考试_

    《基于B-S架构的在线考试系统的设计与实现》 在线考试系统是现代教育技术发展的重要产物,它利用网络技术和数据库管理技术,实现了考试的信息化、自动化。本设计以B/S(Browser/Server)架构为基础,旨在构建一个...

    基于B/S的简单记账系统包含数据库

    标题中的“基于B/S的简单记账系统包含数据库”指的是一个使用浏览器/服务器(B/S)架构设计的简单记账应用程序,它集成了数据库来存储和管理财务数据。这种架构意味着用户可以通过网页浏览器访问和操作记账系统,而...

    Java网络聊天系统B/S版

    【Java网络聊天系统B/S版】是一个基于Java技术构建的在线聊天平台,主要面向大学生群体,用于实践和学习网络通信及Web应用开发。这个系统采用了B/S(浏览器/服务器)架构,用户通过浏览器即可进行实时的文本聊天。...

    图书馆管理系统(B/S)

    《图书馆管理系统(B/S)详解》 图书馆管理系统是信息化时代教育机构的重要组成部分,它通过高效地组织和管理图书资源,方便师生查询、借阅及管理图书。本系统采用B/S(Browser/Server,浏览器/服务器)架构,由...

    基于B/s的学生信息管理系统

    【基于B/S的学生信息管理系统】是一种典型的Web应用程序,它遵循浏览器/服务器(Browser/Server)架构模式,使得用户可以通过Web浏览器来访问、管理和更新学生信息。这种系统在教育机构中广泛应用,简化了对大量学生...

    HRMIS.rar_HRMIS_c/s和b/s混合_人力资源_软件体系_软件体系结构

    本系统——HRMIS(Human Resource Management Information System),就是这样一个集成了C/S(Client/Server)和B/S(Browser/Server)混合架构的人力资源管理解决方案。通过这种方式,HRMIS旨在提供高效、全面且...

Global site tag (gtag.js) - Google Analytics