SOA初探

背景

曾今SOA的概念犹如今日“云计算、大数据”一样,被炒得火热,不少企业便纷纷响应,并宣称会拥抱和实施SOA.而事实上,业界出现了两种极端:一种是由于各类文章和书籍关于SOA的描述往往太过抽象,再加上各大厂商的呼吁,使得SOA往往显得“高大上”,令不少企业和架构师们望而却步.第二种恰好相反,有部分人却认为SOA无非是“新瓶装旧酒”.

个人理解,SOA在宏观上确实太复杂,因为它涉及到的不仅仅是技术和架构本身.而从技术的视角来看,并非难以落地.

SOA全称“面向服务架构”,它提供的是一种架构风格和理念,而并非是一种技术或者产品.并不是说项目中用了WebService、WCF、Hessian、RMI之类的就是SOA了.

通俗点来讲,SOA提倡将不同应用程序的业务功能封装成“服务”并宿主起来,通常以接口和契约的形式暴露并提供给外界应用访问(通过交换消息),达到不同系统可重用的目的.

流行的WebService等可以看作是实现SOA基础设施的技术方法.当然,实践SOA不仅需要解决服务调用的问题,还包括服务编排、服务治理、服务路由、服务监控等一系列的问题.在大型分布式系统中,SOA被广泛实践,但是在不同的应用场景中,设计方法也大不相同.

SOA是一个组件模型,它能将不同的服务通过定义良好的接口和契约联系起来.服务是SOA的基石,在开始服务设计和SOA实践之前,有必要先了解服务的概念以及服务的常见特性.

阅读全文 »

理解RMI中的Stub

背景

以前编程时也碰到过Stub这个名词, 但没关注, 今天研究Paypal Rest API又碰到到这个词, 决定探查个究竟.

通俗解释

Stub 跟 Proxy 是一对,俗称代理-桩,一般用在远程方法调用.

Proxy 相当于是拿在手里的遥控器,而 Stub 相当于长在电视机里的遥控接收器,它们有着一一对应的接口方法.

Proxy 的接口供客户端程序调用,然后它内部会把信息包装好,以某种方式(比如 RMI)传递给 Stub,而后者通过对应的接口作用于服务端系统,从而完成了远程调用.

阿里巴巴分布式服务框架-Dubbo问与答

背景

Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,每天为2000+ 个服务提供3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo自2011年开源后,已被许多非阿里系公司使用。

项目主页:http://dubbo.io/Home-zh.htm

先来个自我介绍吧!

我叫梁飞,花名虚极,之前负责Dubbo服务框架,现已调到天猫。

我的博客:http://javatar.iteye.com

Dubbo是什么?能做什么?

Dubbo是一个分布式服务框架,以及SOA治理方案。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等。

可参见:http://alibaba.github.io/dubbo-doc-static/Home-zh.htm

Dubbo适用于哪些场景?

当网站变大后,不可避免的需要拆分应用进行服务化,以提高开发效率,调优性能,节省关键竞争资源等。

阅读全文 »

前后端完全分离之API设计

背景

API就是开发者使用的界面。我的目标不仅是能用,而且好用, 跨平台(PC, Android, IOS, etc…)使用; 本文将详细介绍API的设计及异常处理, 并将异常信息进行封装友好地反馈给前端.

上篇文章前后端完全分离初探只是讲了些宽泛的概念, 接下来的文章将直接上干货, 干货的源码会挂在github上.

前后端完全分离后, 前端和后端如何交互?

答: 通过双方协商好的API.

接下来我分享我自己设计的API接口, 欢迎各位朋友指教.

API设计理念

  1. 将涉及的实体抽象成资源, 即按id访问资源, 在url上做文章, 以后再也不用为url起名字而苦恼了.
  2. 使用HTTP动词对资源进行CRUD(增删改查); get->查, post->增, put->改, delete->删.
  3. URL命名规则, 对于资源无法使用一个单数名词表示的情况, 我使用中横线(-)连接.
    • 资源采用名词命名, e.g: 产品 -> product
    • 新增资源, e.g: 新增产品, url -> /product , verb -> POST
    • 修改资源, e.g: 修改产品, url -> /products/{id} , verb -> PUT
    • 资源详情, e.g: 指定产品详情, url -> /products/{id} , verb -> GET
    • 删除资源, e.g: 删除产品, url -> /products/{id} , verb -> DELETE
    • 资源列表, e.g: 产品列表, url -> /products , verb -> GET
    • 资源关联关系, e.g: 收藏产品, url -> /products/{id}/star , verb -> PUT
    • 资源关联关系, e.g: 删除收藏产品, url -> /products/{id}/star , verb -> DELETE

目前我API的设计只涉及这两点, 至于第三点HATEOAS(Hypermedia As The Engine Of Application State)那就由读者自己去选择了.

阅读全文 »

SpringSecurity-AntPathMatcher-Rest-Match

简介

使用Spring的AntPathMatch对RESTful的URL进行匹配.

匹配规则

ANT方式的通配符有三种:

  • ? 匹配任何单字符
  • * 匹配0或者任意数量的字符
  • ** 匹配0或者更多的目录

注: 所有的通配符均不包含路径分隔符/.

阅读全文 »

前后端完全分离初探

核心思路

后端负责业务逻辑处理, 前端负责展示逻辑的处理.

背景

  • 2013年3月,首次接触了underscore.js这个区区45k大小的js库, 在使用其提供的简单模板完成表格异步分页后,从此我开始慢慢践行前后端完全分离的架构.

  • 2013年7月,我接触到了REST这种重用HTTP应用协议的架构, 更坚定了我践行前后端分离的决心.

  • 2014年3月,国内刮起了nodeJS的风暴, 此时我采用国外的一个开源项目MEAN开发了一套完整的CMS系统, 此次开发学习到了API接口如何标准化, API具体的设计参考了github API, Instagram API.

  • 2015年1月, 公司开发新产品, 需要新开发一套支持平台及数据下发平台, 在该产品中我主要参与API的设计, 并主导开发支撑平台, 下面我就介绍下这套支撑平台.

阅读全文 »

冒泡型事件和捕获型事件

冒泡型事件的基本思想是、事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。

1
2
3
4
5
6
7
8
<html>   
<head>
<title></title>
</head>
<body onclick="theClick()">
<div onclick="theClick()">点击</div>
</body>
</html>
阅读全文 »

致我们即将逝去的高中

看见一位朋友画了这篇漫画, 深有体会, 特此转载到该博文, 其实除了高中, 我们的初中又何尝不是如此呢!

以前我们嚷着不想上课,以后,我们再也不用上课了……

三年前,懵懂的我们踏进了校园。

不解释。

阅读全文 »

图集

今天看了些图片, 觉得很唯美, 特制作该图集, 用于收集唯美之图

妈妈(这个世界上最美的女人)

人生最可悲的事情,莫过于胸怀大志,却又虚度光阴。

用叶子来诠释生命的循环,从诞生到死亡,直至腐烂,人生如是。

阅读全文 »

Git-简明指南

助你入门 git 的简明指南,木有高深内容 ;)

安装

下载 git OSX 版

下载 git Windows 版

下载 git Linux 版

工作流程图

概要

阅读全文 »