几个经常听见的名词

对于偶这种并非 CS 科班出生的同志,最恨的莫过于听见一群人大谈特谈一堆 acronym 而完全摸不着头脑了,而事实上就是有很多人特别喜欢谈论这些东西。记得某个搞笑贴 bs 了一下(业余、群众)摄影界的这种丑(恶)习:某个镜头,比如 Nikkor AF-S 70-200/2.8G ED,千万不要这样称呼,一定要说大竹炮,或者写缩写更好 DZP,要是能开玩笑一般的写成“大猪跑”那就更能显得专业了。

这次关注的几个名词起源于 REST/RESTful,顺便了解了几个相关的词。

  • COBRA(Common Object request BRoker Architecture )是为了解决软件(可能是不同的语言编写的)之间互相通讯的问题而诞生的一个解决方案。举个例子,实现一个桌面环境的时候,比如有人实现了播放器,有人实现了桌面通知,有人实现了聊天工具,那么我们怎样让聊天工具拿到正在播放的曲目显示在状态条上,而收到消息的时候在桌面上显示一条通知呢?这些软件往往是不同的人、组织开发的,他们怎么协调互相通讯的的 protocol,这导致了产生软件中间件(middleware)的需求,大家都通过与中间件的交互来更新自己的状态,获得需要其他程序的状态,等等。历史上 GNOME 为此开发了一个叫  bonobo 的库,KDE 开发了一个叫  DCOP 的库,但是现在大家都开始用 d-bus 做这件事了;Windows 里面类似的技术是 COM 和 CLI,Mozilla 有所谓的 XPCOM。他们都不见得实现了完全的 COBRA。
  • COBRA 标准的讨论是 committee 完成的,这导致规范复杂繁琐,实现起来困难,这种时候一般都有一小撮自视为精英的人协作搞一个简化的版本,这就是 ICE(Internet Communications Engine),相对而言实现起来更为简单,通讯代价也相对较低。
  • COBRA 的通讯往往并不依赖 HTTP 等现有协议,但是很多情形下由于 firewall 的要求可能只能通过 HTTP 访问某些资源,这导致了一些通过 web service 来实现交互、数据获得的方式,其中比较常见的 OO 策略就是 SOAP(Simple Object Access Protocol),常见的实现都是通过 HTTP 获得 XML 格式的消息,指明什么对象调用什么方法,传递什么参数这样的东西。
  • 对 SOAP 的一种改变就是 REST(REpresenational State Transfer),这时并不强调对象概念,而是强调资源的获得,URI 变成了资源的地址,通过 HTTP 的 GET、POST、PUT 与 DELETE 实现获得信息、发送消息、更新数据与删除数据的行为。有人比较 REST 和 SOAP 比较常见的说法就是 REST 是名词(交互的主要是数据),而 SOAP 强调的是动词(消息的核心是干什么)。

现在很多互联网公司的 infrastructure 里面很重要的就是为自己的 web service 提供一致的实现以便减少重复的工作。比如你有一个数据库,可以满足某些查询需求,在此基础上并不是直接提供数据的访问,而是通过 web service 将查询结果提供给感兴趣的部门,为此很可能就是实现一个简单的 REST API 提供给第三方,这样做有一些好处:

  • REST 比较容易做 caching,与连接形式无关(gateway、proxy 等产生的影响)
  • 能控制数据库的连接数,通过 web service 本身的 thread pool 大小就能控制到数据库的连接数,避免连接过多造成不好结果

那么实现一个 REST API 往往需要两部分:服务器和客户端,很自然这要求能够通过某种语言的对应库 serialize/deserialize 这种语言里面的对象,通过 HTTP 将数据传输;当然考虑到以上关于性能方面的要求,就会有一些类似的辅助库来实现限制、认证等。这样如果你有了这样一个 framework,实现一个 web service 就只需要专注于实现自己的逻辑(比如上述例子里面只需要关心如何设计自己的数据库,如何递交 SQL query 等)。

——————
And the man bowed down his head, and worshipped the LORD.

Advertisements
几个经常听见的名词

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s