微服务:通用接口设计

什么是微服务

微服务(Microservice)这个概念是2012年出现的,作为加快Web和移动应用程序开发进程的一种方法,2014年开始受到各方的关注,而2015年,可以说是微服务的元年;

越来越多的论坛、社区、blog以及互联网行业巨头开始对微服务进行讨论、实践,可以说这样更近一步推动了微服务的发展和创新。而微服务的流行,Martin Fowler功不可没。

微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。你可以将其看作是在架构层次而非获取服务的类上应用很多SOLID原则。微服务架构是个很有趣的概念,它的主要作用是将功能分解到离散的各个服务当中,从而降低系统的耦合性,并提供更加灵活的服务支持。

概念:把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。

定义:围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。

本质:用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。

背景

现在有一个用户服务User service,该服务主要提供登陆、注册、注销等一系列跟用户相关的服务,随着业务的发展,订单服务和产品服务需要向User service 定制各种各样的新功能,此时User service的接口会变得越来越多,如下图所示:

随着定制需求越来越多,其他服务也会遇到接口泛滥同样的问题。

通用接口设计

为了解决上述接口泛滥问题,我们提出了一个通用接口的概念,那么什么是通用接口?通用接口也就是使用一个接口,搞定所有业务需求。

实现方式一:入参和出参都采用Object形式

为了解决一个接口搞定所有业务,一开始我们想到了,入参和出参都采用Object的形式,代码如下:

1public Object common(Object param){

2 //...

3 return obj;

4}

Java中的Object是一个神奇的类,它是所有类的父类,所以在Java中它能代表一切,but,当初看到这个接口的定义的时候,你肯定想骂人了,这是什么鬼,我怎么能看出人参和出参是什么,而且在实际的代码设计过程中,面对如何取object中的field也是一个难题,并且你上游的调用方肯定会抓狂忍不住会飚出WTF三个字。所以这样的接口设计被我们pass了。

实现方式二:采用Map的形式

1public Map common(Map param){

2 //...

3 return map;

4}

采用Map的好处是,如果知道key的形式,可以通过key获取入参的value,从而做出相应的逻辑处理,缺点是无法知道key的定义,也无法对入参进行校验。

实现方式三:采用Map + zk + 视图的形式

先看整体架构:

视图中心的设计非常关键,它需要非常直观的展示出入参、出参、业务方三者之间的关系;因此视图中心抽象如下:

1、params,代表入参

2、event,事件类型,代表是属于哪一个业务方调用的

3、result, 返回值

添加完接口的入参和出参关系后,需要将参数关系写入到zk,写入zk的目的是在通用接口中校验参数类型,从而避免上游的参数类型不正确。

我们看下修改后的code:

1public Map common(Map param){

2 //获取所属event

3 String event = param.get("event");

4 //获取zk参数关系数据

5 Map paramFromZk = getParamFromZk(event);

6 //参数校验

7 checkParam(param, paramFromZk);

8 // 执行相应的业务逻辑

9 Map result = doExecute(param);

10 return result;

11}

逻辑图如下:

这样每次新的需求,只需要在视图中心做配置,就可完成功能的开发了,开发周期也可以大大的缩短;对于不同的业务,执行的业务逻辑是不同的,如果做的更抽象点,可以将业务逻辑部分抽象成一个业务引擎服务,对于相同的代码部分写一份即可,对于不同的逻辑部分,可以采用dsl语言进行动态配置,这样,每次新需求,只需要在视图中心配置参数关系,在业务引擎服务中配置dsl业务逻辑,就可以彻底完成一个功能的开发到上线了,开发效率将大大提高。

1、具有1-5工作经验的,面对目前流行的技术不知从何下手,

需要突破技术瓶颈的可以加。

2、在公司待久了,过得很安逸,

但跳槽时面试碰壁。

需要在短时间内进修、跳槽拿高薪的可以加。

3、如果没有工作经验,但基础非常扎实,对java工作机制,

常用设计思想,常用java开发框架掌握熟练的,可以加。

4、觉得自己很牛B,一般需求都能搞定。

但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。

5. 群号:高级架构群 Java进阶群:180705916.备注好信息!送架构视频。

6.阿里Java高级大牛直播讲解知识点,分享知识,

多年工作经验的梳理和总结,带着大家全面、

科学地建立自己的技术体系和技术认知!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容