一种可行的企业级服务架构

微服务下的视角

拆分微服务的目的,目前的企业服务架构下,除了应对量大而设计的分层过滤,还有就是中台建设。从阿里巴巴中台战略中了解到,早起的淘宝系统,是“烟囱型”架构,从业务侧垂直往下构建服务,而同属阿里集团的其他服务是不存在互通的。我们可以想象,用户体系、订单体系、优惠券等几十个公用服务每个业务都有一套,还不互通,这样造成的问题是:一、同一集团产品账号体系不互通,会员体系相互割据;二、同一个用户的数据需要到两个不同系统进行查询;三、功能浪费。
还有一个重要的原因,是中台建设之后,前台业务是十分灵活的,便于短期产生产品进行市场试错,如果是属于每套系统都是独立的,那么每次有新产品或者内部创业的时候,就要从轮子开始造起,不仅引起工程人员加班几点,还会使得错过市场最佳时机;商场如战场,一分一秒的领先都将带来巨大的利润。

一般性企业级服务使用的组件

Java以非常齐全的生态圈制霸服务端开发领域,无论是阿里开源的dubbo还是spring cloud,其配套的组件亦是开源的,使得企业在构建微服务架构的时候多了很多便利。所以,时下的互联网企业大多关注业务本身,如何更好地进行业务扩展,适应新的市场需求是企业的核心诉求。
中台建设,可以使得企业将关注点彻底关注在业务扩展上,不仅使得技术人员脱离一些重复编码的劳动,还可以制造更多产值。

企业级协作模型

企业协作.png

在中小型企业的实践中,微服务必须的jar包存在自建的私库中,需要使用别的业务团队的产品,则只需要导入对方的dependency就好了;而业务团队的迭代、业务文档、以及服务器运维系统,为团队效率做了支撑。

企业级微服务结构

微服务.png

在使用spring cloud进行微服务实践的时候,我们总结出了一套类似这样的架构。在我们业务域中的抽象模型如图所示。
我们对服务进行垂直切分,根据业务特性划分为若干个核心服务,而核心服务只提供能力,在能力的组合上我们产生了规则引擎。规则引擎的主要工作是组合若干个业务并封装成一个特定的流程,并管理流程的进度、校验、完成等工作。在规则引擎之上,我们称之为产品层,属于我们业务域在公司层面的可用产品,比如对外售卖的接口、售卖的整个服务、以及业务上下游的交互。
在这套体系结构中,合法性、权限校验的工作交给了网关层,网关的请求必须通过鉴权,才能进入我们的业务产品。而由于产品形态的原因,若是API的产品,则直接携带鉴权信息请求网关即可;若是我们的整套解决方案的售卖(包含页面)的时候,鉴权我们采用了webserver作为鉴权参数转发的中继。
在这套服务架构下的优势,就是规则引擎与核心服务的改变是非常少的,而业务是千变万化的,因此对于场景化、定制化的需求我们只需要在webapplication中完成就好了。规则引擎因什么而改变?比如我需要新增规则,提供新的能力的时候我们可以在规则引擎中进行配置。规则引擎的设计应该是可以通过配置化实现新增规则的功能,但很可惜我们实践的规则引擎是静态规则引擎,需要进行硬编码提供接口的方式来新增流程。核心能力何时改变?在我们的一个核心服务中,它的功能是对接三方进行数据验证,当我们需要对接新的三方供应商的时候,这样就需要去改变它了。我提到的改变,大多数都是横向扩展、增量改变。
这套结构的好出就是,我们建立了一个中台的模型,上层的业务改变,内核只做配置或者少量的新增。

企业级实践的关注

无论是传统IT还是互联网企业,在提供服务的时候最核心的考虑点,就是服务的可用性。在我们的实践中,总工的要求是99.95%,大概一年的业务中断实践仅4个小时。因此,我们需要了解高可用的技术方案与思路。
(1)基于负载均衡的高可用方案
实践中我们使用的eureka作为注册中心,而每一个服务都是集群配置。通常的LB的算法配置,是加权轮询,并且注册中心有定时探活的机制,如果某台服务器挂了,那么这个ip列表将会从eureka中移除,使得其他服务的rpc调用不会走到这个有问题的服务器上。
我们知道eureka是AP系统,所以不是立马就能同步所有的节点,在rpc发起的时候,依然可能走到这台挂的服务上造成故障。因此我们配套了服务告警系统,可以使得owner第一时间知道问题并着手处理。
(2)rpc调用超时设置
中台服务间的交互,使用的是rpc的方式,如果一个服务响应时间过长,再量增长的场景下,有可能使得web服务的线程耗尽,造成业务等待或者中断的情况。所以我们设置了rpc超时时间,但这仅仅解决了服务向下游服务产生调用防御自身的效果,有时候下游服务处理完成发现超时了,就会导致一些数据不一致问题,因此还需要配套一些补偿或者分布式事务的机制。
(3)基于QPS的拒绝方案
阿里提供的中间件,Sentinel使用滑动窗口的机制对每秒的qps进行统计,如果达到阈值就进行限流拒绝的策略。如果业务不发起,则就不会有数据不一致的问题,所以我们应用在了网关上。
(4)流量削峰
假如数据库的写入量限制是2000,而写入忽然大到10000,那怎么办。这种写入或者说业务峰值,不是常有的,所以我们使用消息队列进行削峰。在业务执行的时候,我们将写入请求存入消息队列,使用适合数量的消费者,去进行库的写入,这样就像是生产者再怎么大量生产,写入速度依然是恒定的,这个方案对消息队列的可用性要求很高。
(5)数据灾备
业务数据需要进行分时、分日或者一个周期进行冗余备份,加入发生了意外可以采用备份恢复。

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

推荐阅读更多精彩内容