微服务架构介绍

微服务架构介绍
微服务架构介绍

微服务架构介绍

微服务是个说的挺长时间的概念,也是比较成熟的技术体系。像Spring Cloud,甚至提供了微服务所需要的全套框架,包括注册中心(Eureka)、配置中心(Config)、断路器(Hytrix)、API 网关(Zuul) 等组件。微服务体系庞杂,每个组件都能独自成章。

微服务与更早就起来的SOA 是什么关系? 个人觉得如果从概念上来说,微服务和SOA 都是一回事,强调把整个系统,按照多个服务的方式去组合及通信,而不是揉合在一起,但它们的内涵有很大的区别。

SOA 诞生在早期企业级的应用,其业务复杂、技术体系多样,SOA 强调的是各个服务之间,尤其是异构系统、遗留系统之间,建立起一套统一的协议和通信(SOAP),以及寻址服务(UDDI),它的侧重点在集成和兼容;与SOA 同期的另一种概念ESB(企业总线),强调通过一根总线服务,把所有服务串联起来,由ESB 总线来屏蔽各种不同业务系统自身业务/ 语言/ 协议的特殊性,各服务以一种统一的方式,与总线相连,从而降低接入成本。

这两种概念,我感觉在国内没有太发展起来。一是国内的软件起步相对较晚,系统的整体复杂度——多厂商、多语言/ 技术栈、历史遗留系统的问题,还不算突出。而对于公司内部的产品系,又没有必要使用SOA、UDDI 来做复杂的集成。随着互联网的兴起和用户量的迅速爆发,企业自身的产品的微服务化的需求,快速发展起来,而与此同时SOA 这种以XML 为基础的SOAP 协议、以寻址为主要作用的UDDI,不能使用互联网产品的发展——SOAP 的XML 协议内容太多,造成性能明显下降;HTTP 协议的效率不如RPC;UDDI 只有寻址,缺少服务治理等功能。

在此种大背景下,以服务切分+ 服务注册+ 服务治理+ 限流降级+RPC+ 监控等为主要内涵的微服务,就快速发展起来的。国内的阿里巴巴走在前列,以Dubbo 为代表在国内互联网企业中得到广泛应用;后来Spring 官方发布Spring Cloud,揉合了一系列自研或其他企业捐赠的开源项目,发布微服务领域的Spring Cloud 产品。各自都有各自的优势和劣势,而

随着这些年来,微服务的继续下沉(sidecar 和service mesh) 到基础设施层,给微服务的治理带来了新的方向。

微服务的关键特性服务粒度

服务的粒度,切分到多大算合适? 太粗的话,这服务就涵盖过多的业务逻辑,从而难维护、易出错;太细了,就会搞出很多的工程,造成很大的工程维护和通信成本。

主流说法是依据康威定律——团队的交流机制应该和组织机构相匹配。应用到软件领域来看,如果某个应用,需要多个组织之间一起交流和修改,那么它的交流机制就大于组织机构了,出现了不匹配的情况,那么这个应用很可能就太粗而需要拆分。

这里有个不太好懂的地方——既然系统架构和团队组织机构想匹配,那我们是先定系统架构呢,还是先定团队组织机构呢? 这有点类似先有鸡还是先有蛋。我觉得可以这么来理解:无论是团队怎么定、还是架构怎么定,这都是跟着业务的发展而发展的,可以说都是业务的衍生发展而来。所以系统架构设计,首要做的还是业务理解和切分——业务切分决定了服务切分、业务切分也决定了团队组织。

业务切分有两种简单办法:

1.参照业内同类公司的划分:比如电商,业内比较成熟的:支付、库存、订单、搜索、用户等;

2.将自身业务的主要信息流画出来,先找出其中的名词或动名词,它就可能是个服务

eg:在我们的线上贷款业务中,典型的user case 是这样:

1.用户导入几项金融资料数据

2.系统根据信息清洗出部分衍生变量

3.系统跑欺诈规则

4.系统计算授信,给出额度

5.用户试算得到月费率和利息

6.系统人工信审

7.系统放款

8.到还款日时用户还款或者我们系统主动扣款

将其中的名词整理出来,整理流程大概就是如下图:

这些都是候选服务。根据其复杂度和相关性,做适当的拆解和合并,形成了如下几个子系统及服务。

治理范围

从服务的角度来看,对外公开的是契约——即我们系统提供哪些特性,而内部算法/ 数据都应该隐藏起来,而在不同服务间“是共享数据库还是独享数据库”上,实践中的冲突和困惑,体现地比较明显。

我们假想个流程,ServiceA 的李雷需要更新User 表的某个字段,如果大家数据库表都共享的,李雷只要写个SQL 就解决了。但一旦把User 表服务化后,归到UserCenter 这个服务自治之后,问题就麻烦了:

1.李雷要去找UserCenter 团队——假设是韩梅梅接了这个需求,好在是个女生,男女搭配干活

不累——讲清楚他的需求或提供需求文档;

2.韩梅梅理解了需求,设计接口、提供文档、评审并准备开发;

3.韩梅梅可能手里有其他事,所以这个需求大概要等几天才能开发;

4.终于韩梅梅开发完了,她要自测、部署;上游李雷开始联调,如果有问题,需要双方再沟通解

决;

5.联调完毕上线,韩梅梅的UserCenter 先上,李雷的业务系统再接着上;

从这可以看到,一旦一个人、一个系统做的事,变成了 2 个人、两个系统来做,那要多出多少麻烦了。所以我完全理解,在公司早期,所以业务系统共享一套数据库表,是多么地务实。我们功夫贷在创业之初也是这么做的,在创业2 年后,它的弊端开始密集体现,而服务化改造过程中,我们也是付出了相当大的代价。

随着用户量和数据量的上升,这种共享数据库表的最明显的弊端就是慢查询越来越多——因为谁都可以操作任何一张表、而开发过程中或者是对业务理解不够、或者是SQL 能力不足,很容易写出慢SQL 来,其结果就是导致DB 的CPU 飙升到100%、或者是IOPS 被打满,从而全APP 被拖慢甚至无法提供服务。这种危害是相当巨大的。

所以,从运行时的慢SQL 带来的巨大杀伤力来说,数据库应该是隐藏在服务内部,该服务由熟悉该业务的固定团队维护、也会做很多优化。虽然开发阶段慢了,但是运行时稳定了、系统的可用性得到了保障。只是这件事,不应该在创业初期就做,那样会比较严重地放缓系统迭代速度、更应该在系统规模相对较大的时候来改造。

当然,我们说改造是要付出代价的。不仅之前的一个库中的表,要分成不同的库,各服务的程序要做不小的改造,其中最困难的是,同一张表的字段,可能会属于各个不同的应用。看下面这个User 表。

开始的时候,User 表只包含了完全业务无关的属性,但随着系统的发展,一些和业务相关的字段(上图红色部分) 逐渐地被加进来——这也不完全是决策时犯的错误,而是本身这属性是否和业务有关,也不是很容易界定。所以逐渐会发现,很多系统都会依赖这张表,从而交织难以拆分。各个服务可能都需要有这张表,而各自维护自己所关心的那部分字段及功能。

在我们的实践中,服务化的过程以及数据迁移,大约是这样的步骤(以“用户中心”应用为例):

1.创建新应用UserCenter,梳理清楚其的业务边界和所涉及的数据表;

2.收集和分析其他系统对这些数据表的需求,并在UserCenter 中开发接口,以备上游系统调用;

3.逐渐改造上游系统,使其由原先的读取数据库,修改为调用UserCenter 接口。由于有多个上

游系统和功能需要改在,因此这个阶段会比较长,上游系统在这个时间周期内,也会“访问接口服务”和“直接访问数据库”这两种形态并存;

4.检查并确认上游系统都改造完毕上线,此时理论上应该没有上游系统直接读取UserCenter 的

表了,都通过接口了,此时准备迁移UserCenter 的表数据;

5.建立New UserCenter DB,并通过DB 同步机制,实时地将UserCenter 的表数据由老库

同步到新库。在新库同步完成之前,UserCenter 的应用仍然使用的是老库里的表;

6.新库同步完毕,UserCenter 应用切换到新库,此时所有的新数据都会进新库,而老库理论上

是不用了;

7.断开新老库的同步链,同时rename 老库的表(先不删,同时在rename 前一定要断开同步

链,否则新库也会被同步rename 掉了)。如果此时万一有某个系统的功能,在之前的系统改造/ 测试中遗漏了没被发现,仍然是直接读取的数据库表,那么这时候就会报错(因为表名被rename 掉了,找不到了)。此时就是个恢复窗口,赶紧把表rename 回来,减少损失,然后再继续处理。这也是前面千万不能直接把老表删除的原因;

8.运行几天没问题之后,再把老库的表删除,整个服务化过程结束;

服务组合

在微服务之后,各个系统只对某一块业务负责,那么就有可能需要对服务做一些聚合。下面是常见的两种模式:

这是聚合服务的模式,由web 应用去负责聚合后端服务或做个性化处理,这是它的好处——可以根据自身的业务做任何组合和处理,而它的坏处也很明显——对于不需要特殊处理的,也得过它一道。

这是后台服务自包含的模式。某个后台应用,依赖于其他服务,于是就将其他服务的相关调用都处理完了,或者这么理解——后台服务也有多个层次:库存服务、支付服务、发票服务是最

底层的,交易服务是更上层一些的共享服务,从而达到封装细粒度服务的目的,与此同时,它的个性化也就丧失了。假如有个交易,是不需要发票服务的,那么这种模式就不是太灵活。

从我个人的经验来看,我是倾向于聚合服务这种模式。每个前端应用,还都是应该有个自己的后台服务,去完成很多小的功能(比如更新APP 版本、展示首页广告、记录埋点等APP 特有feature)、以及聚合。而对于不需要App-Server 处理、直接使用后台服务的,应该能够通过gateway 直接调用,而不需要App-Server 来做代理转发。

容错

容错的目的就是在出现问题的时候,仍然能够正常提供服务,其具体表现形式有这么几种:

?当调用下游服务 B 出错的时候,可以在安全的情况下考虑重试;

?当调用下游服务 B 出错的时候,可以调用替代服务B';

?当调用下游服务 B 出错的时候,是否可以返回某个默认值、或者返回最近一次的值?

?当调用下游服务 B 超时的时候,如果超时请求达到一定数量,则需要熔断,以保证自身其他服务能正常提供服务,而不会被拖垮;

?当调用下游服务 B 出错的时候,能否以异步+ 定时任务补偿的方式代替?

上面这些特性,有些是通过RPC 框架来实现(重试)、有些是应用控制(调用替代服务、异步+ 定时补偿)、有些可以通过Hytrix 这样的断路保护框架来实现。容错也比较简单,但为了容错确实也需要增加不少开发工作量,它就像买保险,有的人看重风险、愿意付出一些代价来买一份适合的保险;有的人比较乐观,不相信灾难会降临到自己身上,所以这就看一个公司对自己的要求了。从我个人的观点来看,公司到达千万用户级以上,就需要比较严肃地考虑这个了,因为一次全局事故,带来的损失就会是不小。

限流

限流主要有两种算法:令牌桶算法和漏桶算法。

对于很多应用场景来说,除了要求能够限制数据的平均传输速率外,还要求允许某种程度的突发传输。这时候漏桶算法可能就不合适了,令牌桶算法更为适合。如下图所示,令牌桶算法的原理是系统会以一个恒定的速度往桶里放入令牌,而如果请求需要被处理,则需要先从桶里获

取一个令牌,当桶里没有令牌可取时,则拒绝服务。

从互联网实践的角度看,我觉得这两种方法都不是很理想。主要原因是看我们怎么理解流量控制这个事情。在互联网领域,系统的最大处理能力,是一个比较核心的指标。假设系统(或某接口服务) 只能同时支撑10000 个请求同时处理(这也是非常容易模拟测试的),那么它所关心的,就是在任何一个时间点的执行中任务,是否超过了10000,而这是令牌算法和漏桶算法都提供不了的。

?令牌算法:单位时间内生产的令牌是固定的,而令牌桶就相当于一个蓄水池。如果令牌不被马上用完,令牌桶可以存储一部分。它是从请求数(开始处理的) 的角度,随着蓄水池中的令牌多少,而相应请求多或者少。它不能衡量当前有多少请求正在进行中。且蓄水池的大小,并不是它自己可以说的算,虽然它有令牌,也还需要系统能处理才可以。

?漏桶算法:单位时间内可以处理的请求是固定的,持续恒定,没有令牌桶来做蓄水池。它同样是从请求的角度出来,无法衡量“当前的并行处理任务”。

所以这两种算法,我认为它都不是从精确的系统承载量角度出发,更像是一些预估或外界因素所引发的流控——比如该系统1 分钟只允许处理100 个请求,以一种比较粗略的方式、来保护系统不过载;该系统依赖的第三方不能超过每天XX 次的请求量;

从请求出发的角度,还有令牌算法的优化版——滑窗模式。以X 个滑窗作为一个周期,比如1 秒作为1 个窗口,3 个窗口作为一个周期,在这个周期内令牌蓄水池。3 秒到了则在排队等待令牌的请求都置拒绝。这样防止在流量阻塞的时候,随着时间推移,很多用户已经等不及离开了,而他们的请求还在这里排队,导致最新用户的请求无法获得令牌。

而如果从系统承载力的角度,既能最大发挥系统能力,又不会过载,个人认为最好的方法“响应模式——在访问开始前,计数器+1;访问结束,计数器-1;保证计数器不超过阀值,也就是当前系统正在处理的任务,不超过阀值”。

从另一个角度看,令牌算法和漏桶算法被很多框架完好支持,比如Nginx,这样对于大部分接口,尤其是处于安全角度考虑的限流,就是个很好的策略。在Nginx 中配下就可以了,不需要业务去衡量自身负载、再开发相应代码。所以这也是种取舍——如果要快速覆盖、尤其在产品初期,尽量地保护自己的系统,尤其是安全原因,那么令牌或漏桶算法是很好的选择;如果针对一些核心接口,希望能在保护自己系统的同时、尽量多地发挥系统潜力,那么就开发“响应模式”是更好的选择。

一致性

CAP(Consistence、Available、Partition) 理论是很熟悉的分布式理论——在同一时间CAP 不能全部满足、只能满足其中两个。而由于分布式系统的特点,Partition 是必须要满足的,所以只能要么CP、要么AP,即要么系统可用,但数据可能不一致;要么数据一致,但系统不可用。

这里对“为什么Partition 必须要满足”解释一下。CAP 主要是针对有状态、即有数据的,典型形态就是存储类产品。因为数据才有一致性、分区同步这样的场景。在存储类产品中,为了避免单点故障,都是需要主从结构、或者集群结构,这就势必有相互之间的数据复制——主从的话,是主向从复制;集群的话,是多副本复制。这就必然涉及到网络通信,而网络我们说不是非常稳定的,“满足Partition”就是在网络不稳定的时候,比如主和从网络短时不通了,这时候产品还能够正常提供服务。这就是“Partition 必须要满足”的原因,否则就有较大的单点风险。

既然P 必须要满足,则只能选AP 或者CP 了。就互联网企业来说,保证服务可用性更为重要,所以AP 往往是主流选择。在我的经验中,金融财务相关领域可能会用到AP 这样的强一致,这往往是通过有ACID 特性的RDMS(Oracle、MySQL) 来实现的。

前面我们提到,分布式的服务治理,数据被隐藏到服务内部了,那么对数据的修改就由原先的直接操作变成了接口调用,原先可能可以通过Transaction 来实现多表更新的ACID,现在实现不了了,那在保证AP 的同时,Consistence 怎么办呢? 此时BASE 理论也就应运而生。BASE(Base Available、Soft State、Eventually Consistence)——基本可用、暂时不一致、最终一致。短时间内数据不一致,可能会造成一定的脏读,但最终会达成一致,而达成一致的速度窗口,也就是个比较重要的指标。Paxos 和Raft 算法是两个主流的最终一致性的算法。从BASE 的定义来看,对于准确性高度敏感的金融财务领域,可能就不合适。

在存储类产品中,使用Paxos 或Gossip 算法,主要是用于协调各个节点的状态和版本,以完成同步。而在微服务领域中,我们面对的是各个RPC 或http 通信的不同类的应用服务(可能使用这些算法也可以,复杂度应该是比较高,反正我是没试过),那么又怎么做到最终一致? 主要策略有两个:撤销、补偿。前者是努力恢复到操作前的一致状态,后者是努力保证成功、达到操作后的一致状态。看下图,Server 的某个业务操作中,要分别调用Service-X、Service-Y、

Service-Z 三个服务,才能完成。此时如果调用Service-Z 的过程中出现错误了,怎么保证最终一致性?

按照上面的撤销或者补偿,就有两个策略:

1.撤销:Service-X 和Service-Y 提供反向的撤销接口。如果调用Service-Z 失败,则调用

Service-X 和Service-Y 的反向撤销接口,以恢复到操作前的状态。如果撤销的过程中失败?

呵呵,那又要补偿了。

2.补偿:Service-X 和Service-Y 都执行成功了,那么Service-Z 调用失败,在“确保

Service-Z 只要恢复正常、必然能执行成功的前提下(无论是系统自动还是人工)”,通过定时任务重试或者MQ 的机制,补偿重试,再不行人工处理,直到Service-Z 成功,以达到都成功的状态。这里“确保Service-Z 必然能执行成功”非常重要。以账户转账举例,如Service-Z 的操作是从账户上扣100 元,但他的余额只有10 元,那无论怎么重试、人工,都是不可能

成功的,也就不可能达到最终都操作成功的一致性状态,此时要么提前校验、锁定,要么就采用前面的撤销的思路。

在实际的实践中,除了类似Service-Z 的环节失败,还有入库失败、网络通信失败、发送MQ 失败等各种可能失败的环节,我在后面一篇《功夫贷的支付服务,是怎么实现最终一致性的》这篇文章里,拿一个具体的case 详细地介绍了它的实现,供参考。要实现一个严谨的最终一致性,还是比较复杂的,所幸在全系统中,真正要保证绝对最终一致性的功能点,还是比较少的。

容量评估/ 测试

容量评估后续会专门拿个case 来介绍实践,我们主要是强调拿线上环节通过路由、监控等策略,在线测试评估容量。搭建性能测试环境,在现在已经是相对落后的手段。

支撑系统

对于如今的互联网系统来说,越来越复杂,支撑系统必不可少,每一章都可以单独列文章来分析其原理,这里只列出些目录。

?业务监控系统:如订单量、转化率、各类报表等,以及相应的预警子模块。这主要是从业务视角来看的监控,很直接有效;

?日志系统:开源的选择之一就是ELK 套装,在数据量大的情况下,如果要把这三个搞稳定运行,工作量也是不小的;

?分布式调用链系统:跟踪请求在全系统中的去向、以及快速定位出问题的地方;

?服务设施监控系统:传统的CPU、Memory、Disk 这个很多产品都提供,但还不够,应用内的情况,我们也要知道,主要包括:线程池使用情况、GC 的频率和时间、线程栈

?技术指标监控系统:Error 率、Latency、Exception 统计等

?运维支撑系统:资源管理、容器化、部署、灰度、可用性指标等

测试平台:接口测试、MQ 测试、集成测试、性能测试、测试环境构建、持续集成

基于SpringCloud 微服务系统设计方案

微服务系统设计方案 1.微服务本质 微服务架构从本质上说其实就是分布式架构,与其说是一种新架构,不如说是一种微服务架构风格。 简单来说,微服务架构风格是要开发一种由多个小服务组成的应用。每个服务运行于独立的进程,并且采用轻量级交互。多数情况下是一个HTTP的资源API。这些服务具备独立业务能力并可以通过自动化部署方式独立部署。这种风格使最小化集中管理,从而可以使用多种不同的编程语言和数据存储技术。 对于微服务架构系统,由于其服务粒度小,模块化清晰,因此首先要做的是对系统整体进行功能、服务规划,优先考虑如何在交付过程中,从工程实践出发,组织好代码结构、配置、测试、部署、运维、监控的整个过程,从而有效体现微服务的独立性与可部署性。 本文将从微服务系统的设计阶段、开发阶段、测试阶段、部署阶段进行综合阐述。 理解微服务架构和理念是核心。 2.系统环境

3.微服务架构的挑战 可靠性: 由于采用远程调用的方式,任何一个节点、网络出现问题,都将使得服务调用失败, 随着微服务数量的增多,潜在故障点也将增多。 也就是没有充分的保障机制,则单点故障会大量增加。 运维要求高: 系统监控、高可用性、自动化技术 分布式复杂性: 网络延迟、系统容错、分布式事务 部署依赖性强: 服务依赖、多版本问题 性能(服务间通讯成本高): 无状态性、进程间调用、跨网络调用 数据一致性: 分布式事务管理需要跨越多个节点来保证数据的瞬时一致性,因此比起传统的单体架构的事务,成本要高得多。另外,在分布式系统中,通常会考虑通过数据的最终一致性来解决数据瞬时一致带来的系统不可用。 重复开发: 微服务理念崇尚每个微服务作为一个产品看待,有自己的团队开发,甚至可以有自己完全不同的技术、框架,那么与其他微服务团队的技术共享就产生了矛盾,重复开发的工作即产生了。

微服务框架的设计与实现

微服务框架的设计与实现① 张晶1, 黄小锋2, 李春阳3 1(北京中电普华信息技术有限公司, 北京100192) 2(中国电建集团国际工程有限公司, 北京100048) 3(国网信息通信产业集团有限公司, 北京100031) 摘 要: 相对于传统单块架构, 微服务框架具有技术选型灵活, 独立部署, 按需独立扩展等优点, 更适合当前互联网时代需求. 但微服务架构的使用引入了新的问题, 如服务注册发现、服务容错等. 对微服务框架引入的问题进行分析, 并给出了微服务框架的一种实现方案, 在框架层面解决服务注册发现、服务容错等共性问题, 使业务系统开发人员专注于业务逻辑实现, 简化系统开发的难度, 提高开发效率. 关键词: 微服务框架; 服务注册; 服务发现; 服务容错 Design and Implementation of Microservice Architecture ZHANG Jing1, HUANG Xiao-Feng2, LI Chun-Yang3 1(Beijing China Power Information Technology Co. Ltd., Beijing 100192, China) 2(PowerChina International Group Limited, Beijing 100048, China) 3(State Grid Information & Telecommunication Industry Group Co. Ltd., Beijing 100031, China) Abstract: Compared with traditional single block architecture, microservice architecture has many advantages, such as flexible technology selection, independent deployment, and independent scalability more suitability for the current needs of the internet age, etc. But microservice architecture also introduces new problems such as service registration, service discovery, service fault tolerance. On the basis of the analysis for problems mentioned above, this paper proposes one implementation of microservice framework, which can solve service registration, service discovery, service fault tolerance and other common problems. Based on this, developers only need to focus on the development of business functions, so that it can simplify the difficulty of system development and improve development effectiveness. Key words: microservice architecture; service registration; service discover; fault tolerance 传统信息化系统的典型架构是单块架构(Monolithic Architecture), 即将应用程序的所有功能都打包成一个应用, 每个应用是最小的交付和部署单元, 应用部署后运行在同一进程中. 单块架构应用具有IDE友好、易于测试和部署等优势, 但是, 随着互联网的迅速发展, 单块架构临着越来越多的挑战, 主要表现在维护成本高、持续交付周期长、可伸缩性差等方面[1]. 微服务架构(Microservices)的出现以及在国内外的成功应用, 成为系统架构的一种新选择. 很多大型宝等都已经从传统单块架构迁移到微服务架构[2]. 微服务架构提倡将单块架构的应用划分成一组小的服务, 互联网公司如Twitter、Netflix、Amazon 、eBay、淘服务之间互相协调、互相配合, 为用户提供最终价值. 1 微服务架构 微服务架构是一种架构模式, 采用一组服务的方式来构建一个应用, 服务独立部署在不同的进程中, 不同服务通过一些轻量级交互机制来通信, 例如RPC、HTTP等, 服务可独立扩展伸缩, 每个服务定义了明确的边界, 不同的服务甚至可以采用不同的编程语言来实现, 由独立的团队来维护[3]. 相对于传统的单体应用架构, 微服务架构具有单个服务易于开发、理解和维护; 复杂度可控; 技术选 ①收稿时间:2016-09-18;收到修改稿时间:2016-11-03 [doi: 10.15888/https://www.360docs.net/doc/363790917.html,ki.csa.005796]

基于微服务架构的基础设施设计

基于微服务架构的基础设施设计 摘要:本文首先分析传统的单体架构进而解释微服务架构以及分布式环境下四层架构,详细分析了迁移需解决的关键问题如服务间通信机制、数据最终一致性等;然后分析了分布式系统核心问题和DevOps基本原则,以此为设计依据提出微服务架构基础设施总体设计,并且对其关键组件如服务注册与发现、持续交付平台、服务网关的实施提出具体方案;最后针对微服务架构基础设施在运维管理中的应用场景进行了探讨,说明了微服务架构设计思想优于单体架构设计思想。 关键词:软件工程;微服务;服务注册与发现;持续交付 中图分类号:TP311.5 文献标识码:A DOI: 10.3969/j.issn.1003 6970.2016.05.023 本文著录格式:蒋勇.基于微服务架构的基础设施设计卟软件,2016,37(5):93-97 0.引言 理论上任何业务系统如果长期存在的话,随着此系统业务变更、功能增加必然会不断演变,在一个更大的分布式环境中,这种改变尤其明显,那么就需要架构分析设计时更多的考虑系统所处的生态环境建设,这样才能使得整个系统不

断进化。随着虚拟化技术的发展以及docker容器实践逐渐完善,微服务架构的设计思想逐渐浮出水面,形成分布式环境下新的最重要的设计思想。文献对分布式环境下资源及应用平台进行了研究,但对于应用自身依赖的基础设施建设没有讨论。本文将详细探讨如何基于微服务架构进行基础设施建设的设计与分析。 1.从分布式单体架构到微服务架构迁移 1.1分布式单体架构 分布式单体架构指的是在分布式环境下直接部署运行 一个整体开发的应用,由整体应用来提供系统所需的服务,它在技术上通常采用分层实现,大致分为表现层、应用层、数据层,它有天然的优势:它是模块独立无关的,各层之间是技术分离的;它有统一的技术栈和开发标准;它通常在一个进程中运行,模块相互之间协同消耗极小。 但是,在分布式环境下,随着系统功能的增加,系统越来越复杂,单体架构存在一些必然的缺陷:首先,由于整个系统是一个完整整体,必须重复部署多个才能提高系统性能,而往往系统瓶颈仅仅由于其中某一个或几个功能过载产生,这就极大浪费了运行环境资源;其次,由于系统功能的变更和演变,某一个功能的变化可能影响其它功能的正常结果,也带来重新部署和运维管理的复杂性,持续集成变得极为困难;最后,由于整个系统采用统一的技术栈和开发标准,必

微服务架构介绍

微服务架构介绍

微服务是个说的挺长时间的概念,也是比较成熟的技术体系。像Spring Cloud,甚至提供了微服务所需要的全套框架,包括注册中心(Eureka)、配置中心(Config)、断路器(Hytrix)、API 网关(Zuul) 等组件。微服务体系庞杂,每个组件都能独自成章。 微服务与更早就起来的SOA 是什么关系? 个人觉得如果从概念上来说,微服务和SOA 都是一回事,强调把整个系统,按照多个服务的方式去组合及通信,而不是揉合在一起,但它们的内涵有很大的区别。 SOA 诞生在早期企业级的应用,其业务复杂、技术体系多样,SOA 强调的是各个服务之间,尤其是异构系统、遗留系统之间,建立起一套统一的协议和通信(SOAP),以及寻址服务(UDDI),它的侧重点在集成和兼容;与SOA 同期的另一种概念ESB(企业总线),强调通过一根总线服务,把所有服务串联起来,由ESB 总线来屏蔽各种不同业务系统自身业务/ 语言/ 协议的特殊性,各服务以一种统一的方式,与总线相连,从而降低接入成本。 这两种概念,我感觉在国内没有太发展起来。一是国内的软件起步相对较晚,系统的整体复杂度——多厂商、多语言/ 技术栈、历史遗留系统的问题,还不算突出。而对于公司内部的产品系,又没有必要使用SOA、UDDI 来做复杂的集成。随着互联网的兴起和用户量的迅速爆发,企业自身的产品的微服务化的需求,快速发展起来,而与此同时SOA 这种以XML 为基础的SOAP 协议、以寻址为主要作用的UDDI,不能使用互联网产品的发展——SOAP 的XML 协议内容太多,造成性能明显下降;HTTP 协议的效率不如RPC;UDDI 只有寻址,缺少服务治理等功能。 在此种大背景下,以服务切分+ 服务注册+ 服务治理+ 限流降级+RPC+ 监控等为主要内涵的微服务,就快速发展起来的。国内的阿里巴巴走在前列,以Dubbo 为代表在国内互联网企业中得到广泛应用;后来Spring 官方发布Spring Cloud,揉合了一系列自研或其他企业捐赠的开源项目,发布微服务领域的Spring Cloud 产品。各自都有各自的优势和劣势,而

微服务架构技术规范-第一版V2.2

微服务架构技术规范(试行稿) 1总则 目前研发中心的后台开发中,基于Java/Spring MVC/Spring Boot框架开发,每个部门引入的支撑组件却各异,缺乏统一性,甚至每个部门都维护着一堆非业务组件,影响开发人员对快速变化业务支持的专注性。 这套方案的具有较好的可扩展性、可维护性、及良好的代码风格,可以为公司各类型的应用开发提供统一、通用、而强大的基础架构,完全能支持公司所有后台服务沉淀和演化出一个稳健企业中台。 2适用范围 本规范适用于创维数字本部及各分子公司,在使用微服务技术架构进行系统开发时,需遵循此技术规范 3微服务概述 3.1微服务定义 什么是微服务? 1.微服务- 也称为微服务架构- 是一种架构风格,它将应用程序构建为一组服务 2.高度可维护和可测试 3.松散耦合 4.可独立部署 5.围绕业务能力进行组织。 6.微服务架构支持大型复杂应用程序的持续交付/部署。它还使组织能够

发展其技术堆栈。 Chris Richardson 世界著名软件大师 3.2使用微服务 传统的单体服务,或者模块化不彻底的项目可能存在以下弊端:1.团队职责不清晰 2.构建和部署耗时长 3.全量部署耗时长、影响范围广 4.单体只能按整体横向扩展,无法分模块垂直扩展 5.受技术栈限制,团队成员使用同一框架和语言 6.升级和变革技术框架变得困难 随着软件行业的发展和演变,服务器软件进入了微服务化阶段。对服务的可维护性、可扩展性、可用性这些维度更加让从业人员关注。而微服务化正是解决这些观注的良好的解决方案。所以微服务化正是软件发展演化的结果。在新的目项目应该微服务化解决方案。微服务化的程度可以具体项目具体场景决定。 4开发规范 4.1基本理念 4.1.1无状态服务(Stateless) 无状态就是一次操作,不能保存数据。

微服务架构技术要求规范-第一版V2.2

微服务架构技术规(试行稿) 1总则 目前研发中心的后台开发中,基于Java/Spring MVC/Spring Boot框架开发,每个部门引入的支撑组件却各异,缺乏统一性,甚至每个部门都维护着一堆非业务组件,影响开发人员对快速变化业务支持的专注性。 这套方案的具有较好的可扩展性、可维护性、及良好的代码风格,可以为公司各类型的应用开发提供统一、通用、而强大的基础架构,完全能支持公司所有后台服务沉淀和演化出一个稳健企业中台。 2适用围 本规适用于创维数字本部及各分子公司,在使用微服务技术架构进行系统开发时,需遵循此技术规 3微服务概述 3.1微服务定义 什么是微服务? 1.微服务- 也称为微服务架构- 是一种架构风格,它将应用程序构建为一组服务 2.高度可维护和可测试 3.松散耦合 4.可独立部署 5.围绕业务能力进行组织。 6.微服务架构支持大型复杂应用程序的持续交付/部署。它还使组织能够

发展其技术堆栈。 Chris Richardson 世界著名软件大师 3.2使用微服务 传统的单体服务,或者模块化不彻底的项目可能存在以下弊端:1.团队职责不清晰 2.构建和部署耗时长 3.全量部署耗时长、影响围广 4.单体只能按整体横向扩展,无法分模块垂直扩展 5.受技术栈限制,团队成员使用同一框架和语言 6.升级和变革技术框架变得困难 随着软件行业的发展和演变,服务器软件进入了微服务化阶段。对服务的可维护性、可扩展性、可用性这些维度更加让从业人员关注。而微服务化正是解决这些观注的良好的解决方案。所以微服务化正是软件发展演化的结果。在新的目项目应该微服务化解决方案。微服务化的程度可以具体项目具体场景决定。 4开发规 4.1基本理念 4.1.1无状态服务(Stateless) 无状态就是一次操作,不能保存数据。

支付场景的微服务架构介绍

支付场景的微服务架构介绍

目录 一、SOA与微服务 (3) 二、老支付架构遇到的挑战 (7) 三、基于微服务怎么做的改造 (9) 四、未来规划 (21)

一、SOA与微服务 在我看来,微服务虽是国外传进来的技术,却和咱们中国的一些理论是挂钩的。所以在正式进入主题之前,先给大家简单介绍一下麦田理论。 1.关于麦田理论 古代周朝时期,老百姓种地实际是没有任何规划的,也没有任何区域的限制,一般来说在地里一会种水稻,一会种小麦,一会种蔬菜地交叉来种,可收成之后发现庄稼受阳光程度非常低,营养非常不均

衡,后期维护成本非常高。直到战国时期,有一位农业专家把地划分为多个区域,每一个区域种一种庄稼,地跟地隔开,形成最初的微服务理念。 过去我们看到的很多文章都只是讲到SOA和微服务之间的比较,我今天在这个基础上加了一个DDD。下面就DDD、SOA以及微服务的演进过程先做个引子。 2.DDD、SOA与微服务

SOA架构 SOA是上一个时代的产物,大概是在2010年之前出现的,最早提出时是提供给传统行业计算领域的解决方案,当时Oracle、IBM也提了很多方案,包括出现的很多流程引擎。

它的思想是将紧耦合的系统,划分为面向业务的粗粒度、松耦合、无状态的服务。在这之后,微服务的提出者基于SOA做了一个改进,就把它变成单一职责、独立部署、细小的微服务,是一个相反的概念。 微服务与DDD 今天我们一说到微服务就会想到DDD,有不少朋友认为DDD就是为微服务而生的。其实不是这样的,我在接触DDD时它最早是用来做UML设计、领域建模的。 DDD讲究充血模型,而J2EE模型以传统的分层架构和Spring架构捆绑在一起形成了以贫血模型为主的架构模式,贫血模型的优点是容易入门、分层清晰,而充血模型要求设计者前期对业务理解较深,不然后期项目会产生混乱。 另外就是DDD思想比较宽泛,导致形成百家争鸣的姿态,没有形成一套固定的方法论。开发者不容易理解,所以后面关注DDD的人变少了,而微服务的提出巧妙地借鉴了DDD里面的限界上下文、子域、领域事件等关键词,在微服务得到越来越多业界认可的情况下,也给DDD带来了重新的焕发。

微服务架构的部署

微服务架构的部署本文从以下几个方面简要说明微服务架构项目的实践经验:架构选型、开发测试环境下的相关工具支持、人员分工及开发部署流程、相关设计及注意事项。最后,将根据实践经验讨论提高微服架构下的开发和运维效率的切实需求,进一步理清本项目所实现的容器服务管理平台的完善性需求。 本项目是一个企业级的容器服务管理平台,该平台的功能是基于容器实现的应用运行环境管理,以及应用开发阶段的持续集成和持续发布。简单的理解该平台的核心功能之一就是管理复杂应用的开发和运维环境,提高微服务架构下的开发和运维效率。项目的开发背景如下: 首先,该系统具有典型分布式应用系统特征: 该平台所运行的服务器配置不高,例如华为RH1288这类低配置服务器,允许硬件失败; 系统平台要求可根据实际用户数的规模进行伸缩部署,保证硬件资源的合理利用; 由于系统平台之上需要运行若干企业应用的开发和运行环境,可靠性是非常重要的,不允许单点失效。 其次,本系统功能复杂,从架构的角度需要将系统分成多个层次和若干个子系统。不同的层次、子系统根据具体情况需要采用不同的开发语言,由不同的开发小组完成。 第三,项目组成员由几个城市的异地团队协同开发,统一的开发环境和协同工具是必不可少的。 针对上述项目背景的考虑,本项目选择基于微服务架构进行项目开发。 开发、测试、部署使用到的工具集 “工欲善其事、必先利其器”,借助适合的流程和相关工具集,才能提高微服务架构下的应用开发效率。本项目利用DevOPs流程并选用一套相关工具集实现应用开发管理,提高开发、测试、部署的效率。 代码库:本项目使用分布式代码库Gitlab,它的功能不限于代码仓库,还包括reviews(代码审查), issue tracking(问题跟踪)、wiki等功能,是代码管理和异地团队沟通、协作工具的首选。 Docker镜像仓库、Docker:本项目用容器贯穿整个软件开发流程,以容器作为应用发布的载体,应用的开发环境和测试发版环境都运行在Docker容器中。对于复杂的开发和运维环境管理Docker具有先天的优势,目前国内外的互联网公司有大多数都已经将Docker应用到了他们的开发或者生产环境中了。 K8s:本项目采用Kubernates作为容器调度管理的基础环境,开发环境、测试环境的Docker容器都由K8s负责调度管理。 Jenkins:快速的部署发布离不开老牌持续集成明星Jenkins,本项目通过Jenkins任务构建代码、将应用打包成Docker镜像,最终发布到K8s环境中将容器运行起来。 Shell脚本:编写Shell脚本将项目打分支、发布应用等开发阶段的配置管理工作自动化,降低运维门槛、提高配置管理和运维的效率。

基于微服务体系的服务框架的设计

2019年第6期信息通信2019 (总第198期)INFORMATION&COMMUNICATIONS(Sum.No198) 基于微服务体系的服务框架的设计 周素青 (福建信息职业技术学院,福建福州350003) 摘要:与传统的单体架构相比,微服务架构有着基于独立服务、按需收缩、易于开发和维护等优点。文章针对传统单体架构和微服务架构的优劣对比的基础上,提出了如何从零开始构建微服务以及如何将现有的单体应用改遥成微服务的实施方案,通过该方案实现快速有效的模型迁移O 关键词:伸缩立方体;微服务;API Gateway;服务发现 中图分类号:TP39文献标识码:A文章编号:1673?1131(2019)06-0069-04 Title IWIWIWIWIWIWIWIWIWTmeTmeTmeTme Zhou Suqing (Fujian Polytechnic oflnfimnation Technology,fuzhou350003,China) Abstract:Compared with traditional monolithic architecture,micro-service architecture has many advantages,such as indepen-dent service,shrinkage on demand,easy development and maintenance.Based on the comparison of t he advantages and disad-vantages of t raditional monolithic architecture and micro-service architecture,this paper proposes how to build micro-services from scratch and how to transform existing monolithic applications into micro-sravices,through which to achieve rapid and ef-fective model migration. Key words:Scale Cube;micro-service^PI Gateway;Service discovery 1微服务的介绍 1.1微服务的定义 微服务(Microservices)概念的版本很多,这里选取维基百科上的定义作为本文的标准:微服务是一种软体架构风格,它 是以专注于单一责任与功能的小型功能区块为基础,利用模 组化的方式组合出复杂的大型应用程式,各功能区块使用与语言无关的API集相互通讯叫 1.2Scale Cube 说到微服务不能不提到Martin L.Abbott所提出的的三维 图]伸缩立方体(ScaleCube) X轴伸缩是指通过部署多个相同的应用来实现事务的快速扩展。以餐厅厨房为例说明X轴扩展:厨师为了做出一道美食,需要经历选择食材、处理食材、调配酱料、烹饪食材、成品装盘五个步骤。餐厅为了更高效的服务顾客,请来了多名厨师来的完成这些过程,厨师之间制作美食的过程是相互独立的。显而易见,虽然餐厅服务顾客的效率变高了,但是餐厅的成本也大大提高了,同时厨师完成这些过程的复杂度并没有改变,而且为了让厨师提供无差别服务,就需要在厨师之间 “同步数据”,这就需要保持数据的一致性。所以X轴伸缩的不足在于每份都克隆需要访问所有数据,这就需要更多内存实现缓存,运维的成本过高叫 Z轴伸缩,也称为分片,指根据用户的属性对服务进行拆 分。它与X轴伸缩有些许类似,不同之处在于Z轴伸缩只对应用和数据进行分片,每个应用负责对应属性的数据子集。还 是餐厅厨师的例子,厨师制作美味还是需要上面五个步骤,但 是不需要每个厨师都要会做川菜、粤菜、湘菜,根据客户喜好 合理的分配不同菜系的厨师的数量。Z轴伸缩常用在大型数据类集或者差别服务,它不仅提高了缓存的利用率,还提升了 事务的可伸缩性,实现了不同客户群体的故障隔离。这样在 一定程度上提升了餐厅的效率并且减少了餐厅的成本,但是 还是没有减少单个厨师的工作复杂程度,并且对于顾客点单 到分配到具体厨师的过程也提高了复杂度,所以Z轴伸缩不仅没能降低开发和应用复杂度,反而在路由策略上还提高了系统的复杂度,并且涉及到数据重新分区的时候,又将会是一个令人头疼的事情。 与X轴和Z轴的“复制”的做法不同,Y轴伸缩按功能将应用分解成一组具有一定松散耦合度的协作服务,每个服务 实现单个或多个相关的功能。Y轴伸缩基于不同的业务来分解工作职责。比如餐厅老板意识到降低厨师的工作流程的复 杂度才是提高效率、降低成本最有效的手段,于是请来配菜师 傅员责选择食材、调配酱料,砧板师傅员责处理食材,这样厨师就只需要烹饪食材和成品装盘两个步骤了。这样就降低了厨师的工作复杂度,同时对于餐厅也可以减少一定量的厨师,增加的只是薪资远低于厨师的配菜师傅和砧板师傅,餐厅的成本也就降低了,大家都能更专业更有效的完成自己的工作。 三个维度特点各不相同,各自独立,但每个维度都可以按 各自的需要扩展。X轴扩展能够解决系统的事务员载压力,但是如果系统的复杂度或面对的吞吐量不断增加,或者需要差 异化服务时,X轴扩展就无法满足需求了。此时可以分别通过 69

微服务架构设计方案

微服务架构设计方案

引言:“微服务”是当前软件架构领域非常热门的词汇,能找到很多关于微服务的定义、准则,以及如何从微服务中获益的文章,在企业的实践中去应用“微服务”的资源却很少。本篇文章中,会介绍微服务架构(Microservices Architecture)的基础概念,以及如何在实践中具体应用。 1.单体架构(Monolithic Architecture ) 企业级的应用一般都会面临各种各样的业务需求,而常见的方式是把大量功能堆积到同一个单体架构中去。比如:常见的ERP、CRM等系统都以单体架构的方式运行,同时由于提供了大量的业务功能,随着功能的升级,整个研发、发布、定位问题,扩展,升级这样一个“怪物”系统会变得越来越困难。单体架构的初期效率很高,应用会随着时间推移逐渐变大。在每次的迭代中,开发团队都会面对新功能,然后开发许多新代码,随着时间推移,这个简单的应用会变成了一个巨大的怪物。 图1:单体架构 大部分企业通过SOA来解决上述问题,SOA的思路是把应用中相近的功能聚合到一起,以服务的形式提供出去。因此基于SOA架构的应用可以理解为一批服务的组合。SOA带来的问题是,引入了大量的服务、消息格式定义和规范。 多数情况下,SOA的服务直接相互独立,但是部署在同一个运行环境中(类似于一个Tomcat实例下,运行了很多web应用)。和单体架构类似,随着业务功能的增多SOA的服务会变得越来越复杂,本质上看没有因为使用SOA而变的更好。图1,是一个包含多种服务的在线零售网站,所有的服务部署在一个运行环境中,是一个典型的单体架构。

单体架构的应用一般有以下特点: ?设计、开发、部署为一个单独的单元。 ?会变得越来越复杂,最后导致维护、升级、新增功能变得异常困难 ?很难以敏捷研发模式进行开发和发布 ?部分更新,都需要重新部署整个应用 ?水平扩展:必须以应用为单位进行扩展,在资源需求有冲突时扩展变得比较困难(部分服务需要更多的计算资源,部分需要更多内存资源) ?可用性:一个服务的不稳定会导致整个应用出问题 ?创新困难:很难引入新的技术和框架,所有的功能都构建在同质的框架之上 2.微服务架构(Microservices Architecture) 微服务架构的核心思想是,一个应用是由多个小的、相互独立的、微服务组成,这些服务运行在自己的进程中,开发和发布都没有依赖。 多数人对于微服务的定义是, 把本来运行在单体架构中的服务拆分成相互独立的服务,并运行在各自的进程中。在我看来,不仅如此。最关键的地方在于,不同的服务能依据不同的业务需求,构建的不同的技术架构之上,并且聚焦在有限的业务功能之上。 因此,在线零售网站可以用图2的微服务架构来简单概括。基于业务需求,需要增加一个账户服务微服务,因此构建微服务绝不是在单体架构中把服务拆分开这么简单。

微服务核心架构梳理

微服务核心架构梳理

目录 1.什么是微服务 (3) 2.微服务的利与弊 (5) 3.什么组织适合使用微服务? (6) 4.微服务技术架构体系 (10)

本文从头到尾梳理一下,有关微服务架构的核心内容。阅读本文你将看到业界主流微服务框架的核心原理,包括服务发现,网关,配置中心,监控等组件,功能和架构原理的简单介绍。 1.什么是微服务 微服务之父Martin Fowler,对微服务大概的概述如下: 就目前而言,对于微服务业界并没有一个统一的、标准的定义(While there is no precise definition of this architectural style ) 。但通常而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API ) 。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务。可以使用不同的语言来编写服务,也可以使用不同的数据存储。 根据Martin Fowler的描述,我总结了一下几点:

?小服务,没有特定的标准或者规范,但他在总体规范上一定是小的。 ?进程独立,每一组服务都是独立运行的,可能我这个服务运行在Tomcat容器,而另一个服务运行在Jetty上。可以通过进程方式,不断的横向扩展整个服务。 ?通信,过去的协议都是很重的,就像ESB,就像SOAP,轻通信,着意味着相比过去更智能更轻量的服务相互调用,就所谓smart endpoints and dumb pipes,这些Endpoint都是解耦的,完成一个业务通信调用串起这些micro service就像是Linux系统中通过管道串起一系列命令业务。过去的业务,我们通常会考虑各种各

微服务架构概述

1.微服务架构概述 1.1.单体应用架构存在的问题 1.2.如何解决单体应用架构存在的问题 1.3.什么是微服务 1.4.微服务架构的优点与挑战 1.4.1.微服务架构的优点 1.4. 2.微服务架构面临的挑战 1.5.微服务设计原则 1.6.如何实现微服务? 1.6.1.微服务技术选型 1.6. 2.微服务架构图及常用组件 2.微服务开发框架—— 2.1.简介及其特点 2.2.的版本简介 3.开始使用实战微服务 3.1.实战前提 3.1.1.需要的技术储备 3.1.2.使用的工具及软件版本 3.2.服务提供者与服务消费者 3.3.编写服务提供者 3.3.1.手动编写项目

3.3.2.使用快速创建项目 3.4.编写服务消费者 3.5.为项目整合 3.6.硬编码有哪些问题 4.微服务注册与发现 4.1.服务注册与发现简介 4.2.简介 4.3.原理 4.4.编写 4.5.将微服务注册到上 4.6.的高可用 4.7.为添加用户认证 4.8.理解的元数据 4.9.的端点 4.10.的自我保护模式 4.11.多网卡环境下的选择 4.12.的健康检查 5.使用实现客户端侧负载均衡 5.1.简介 5.2.为服务消费者整合 5.3.使用代码自定义配置

5.4.使用属性自定义配置 5.5.脱离使用 6.使用实现声明式调用 6.1.简介 6.2.为服务消费者整合 6.3.自定义配置 6.4.手动创建 6.5.对继承的支持 6.6.对压缩的支持 6.7.的日志 6.8.使用构造多参数请求 7.使用实现微服务的容错处理 7.1.实现容错的手段 7.1.1.雪崩效应 7.1.2.如何容错 7.2.使用实现容错 7.2.1.简介 7.2.2.通用方式整合 7.2.3.断路器的状态监控与深入理解 7.2.4.线程隔离策略与传播上下文 7.2.5.使用

微服务架构

什么是微服务?就目前而言,对于微服务业界并没有一个统一的、标准的定义。但通常在其而言,微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分成一组小的服务,每个服务运行独立的自己的进程中,服务之间互相协调、互相配合,为用户提供最终价值。服务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP 的 RESTful API ) 。每个服务都围绕着具体业务进行构建,并且能够被独立地部署到生产环境、类生产环境等。另外,应尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务。可以使用不同的语言来编写服务,也可以使用不同的数据存储。 总结了以下几点: ①小服务 小服务,没有特定的标准或者规范,但他在总体规范上一定是小的。 ②进程独立 每一组服务都是独立运行的,可能我这个服务运行在 Tomcat 容器,而 另一个服务运行在 Jetty 上。可以通过进程方式,不断的横向扩展整 个服务。 ③通信 过去的协议都是很重的,就像 ESB,就像 SOAP,轻通信,这意味着相 比过去更智能更轻量的服务相互调用,就所谓 smart endpoints and dumb pipes。

这些 Endpoint 都是解耦的,完成一个业务通信调用串起这些 Micro Service 就像是 Linux 系统中通过管道串起一系列命令业务。 过去的业务,我们通常会考虑各种各样的依赖关系,考虑系统耦合带来 的问题。微服务,可以让开发者更专注于业务的逻辑开发。 ④部署 不止业务要独立,部署也要独立。不过这也意味着,传统的开发流程会 出现一定程度的改变,开发的适合也要有一定的运维职责。 ⑤管理 传统的企业级 SOA 服务往往很大,不易于管理,耦合性高,团队开发 成本比较大。 微服务,可以让团队各思其政的选择技术实现,不同的 Service 可以 根据各自的需要选择不同的技术栈来实现其业务逻辑。 微服务的利与弊 ?优点是每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务功能或业务需求。 ?开发简单、开发效率提高,一个服务可能就是专一的只干一件事。 ?微服务能够被小团队单独开发,这个小团队是 2 到 5 人的开发人员组成。?微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。 ?微服务能使用不同的语言开发。 ?易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如 Jenkins,Hudson,bamboo。 ?微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。微服务允许你利用融合最新技术。 ?微服务只是业务逻辑的代码,不会和 HTML,CSS 或其他界面组件混合。?每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一数据库。 总的来说,微服务的优势,就是在于,面对大的系统,可以有效的减少复杂程度,使服务架构的逻辑更清晰明了。 但是这样也会带来很多问题,就譬如分布式环境下的数据一致性,测试的复杂性,运维的复杂性。 什么组织适合使用微服务? 微服务带了种种优点,种种弊端,那么什么组织适合使用微服务? ①墨菲定律(设计系统)和康威定律(系统划分) 设计系统的组织,其产生的设计等同于组织之内、组织之间的沟通结构。

微服务技术架构深入解析

微服务技术架构深入解析

导语:微服务架构如何与更广泛的软件架构概念相结合?什么是服务?服务的规模有多重要?为了回答这些问题,我们需要退后一步,看看软件架构的含义。 软件的架构是一种抽象的结构,它由软件的各个组成部分和这些部分之间的依赖关系构成。正如你将在本文中看到的,软件的架构是多维的,因此有多种方法可以对其进行描述。架构很重要的原因是它决定了应用程序的质量属性或能力。传统上,架构的目标是可扩展性、可靠性和安全性。但是今天,该架构能够快速安全地交付软件,这一点非常重要。你将了解微服务架构是一种架构风格,可为应用程序提供更高的可维护性、可测试性和可部署性。 我将通过描述软件架构的概念及其重要性来开始本文。接下来,我将讨论架构风格的概念。然后我将微服务架构定义为特定的架构风格。让我们从理解软件架构的概念开始。 1 软件架构是什么,为什么它如此重要 架构显然很重要。至少有两个专门讨论该主题的会议:O’Reilly的软件架构会议和SATURN会议。许多开发人员的目标是成为一名架构师。但什么是架构,为什么它如此重要?

为了回答这个问题,我首先定义术语软件架构的含义。之后,我将讨论应用程序的架构是多维的,并使用一组视图或蓝图进行描述。然后我将强调软件架构的重要性,因为它对应用程序的质量属性有显著的影响。 软件架构的定义 软件架构有很多定义。例如,维基百科上列举了大量的定义。我最喜欢的定义来自卡耐基梅隆大学软件工程研究所的Len Bass及其同事,他们在使软件架构成为一门学科方面发挥了关键作用。他们定义的软件架构如下: 计算机系统的软件架构是构建这个系统所需要的一组结构,包括软件元素、它们之间的关系以及两者的属性。 这显然是一个非常抽象的定义。但其实质是应用程序的架构是将软件分解为元素(element)和这些元素之间的关系(relation)。由于以下两个原因,分解很重要: 它促进了劳动和知识的分工。它使具有特定专业知识的人们(或多个团队)能够就应用程序高效地协同工作。 它定义了软件元素的交互方式。 将软件分解成元素以及定义这些元素之间的关系,决定了软件的能力。 软件架构的4+1视图模型 从更具体的角度而言,应用程序的架构可以从多个视角来看,就像建筑架构,一般有结构、管线、电气等多个架构视角。Phillip Krutchen在他经典的论文《Architectural Blueprints —The 4+1 View Model of Software Architecture》中提出了软件架构的4+1视图。图1展示的这套视图定义了四个不同的软件架构视图,每一个视图都只描述架构的一个特定方面。每个视图包括一些特定的软件元素和它们相互之间的关系。

论微服务架构及其应用

论微服务架构及其应用 摘要 2016年7月,我所在的公司为全国各级人民检察院开发了行贿犯罪档案互联网查询系统的产品,我担任系统架构师职务,主要负责软件架构和安全体系设计的工作,该项目是基于互联网,为单位、企业和个人等公众群体提供7*24小时的查询申请服务,同时兼顾行贿犯罪预防宣传。本文结合作者的实践,以行贿犯罪档案互联网查询系统为例,论述微服务架构及其应用。首先概述我参与管理和开发,并采用微服务架构开发的工作,然后具体描述微服务架构的特点,最后结合项目描述软件的架构,说明该系统是如何采用微服务架构模式的,并说明采用微服务架构模式后,在软件开发过程中遇到的实际问题和解决方案。经过项目组近一年的努力,本产品已顺利开发完成,目前,已在浙江、云南等多省上线使用,取得客户和公司领导的一致好评。 正文 近年来,随着互联网行业的迅猛发展,公司或组织业务的不断扩张,需求的快速变化以及用户量的不断增加,传统的单块(Monolithic)软件架构面临着越来越多的挑战,已逐渐无法适应互联网时代对软件的要求。在这一背景下,微服务架构模式(Microservice Architecture Pattern)逐渐流行。它强调将单一业务功能开发成微服务的形式,每个微服务运行在一个进程中;采用HTTP等通信协议和轻量级API实现微服务之间的协作与通信。这些微服务可以使用不同的开发语言以及不同数据存储技术,能够通过自动化部署工具独立发布,并保持最低限制的集中式管理。 2015年7月,我所在的公司为全国各级人民检察院开发了行贿犯罪档案互联网查询系统的产品,我担任系统架构师职务,主要负责软件架构和安全体系设计的工作。本文结合作者的实践,论述微服务架构及其应用。首先概述我参与管理和开发,并采用微服务架构开发的工作,然后具体描述微服务架构的特点,最后结合项目描述软件的架构,说明该架构是如何采用微服务架构模式的,并说明采用微服务架构模式后,在软件开发过程中遇到的实际问题和解决方案。

微服务架构评述

第!卷第1期 2019 $ 1 月网络新媒体技术Vol. 8 No. 1 Jan. 2019 ?经典评述! 微服务架构评述 赵然1’#朱小勇1 C1中国科学院声学研究所国家网络新媒体工程技术研究中心北京100190 2中国科学院大学北京100049) 摘要:微服务架构在2012年开始出现技术雏形,并逐步取代传统的单体式架构。2014年学者M atin F o w l?正式提出微服务 架构的概念,与此同时,容器技术的快速发展为微服务架构的大规模使用提供了基础支撑。2014年至今,微服务架构已成为 行业内最流行的服务架构。本文首先介绍了微服务架构的概念和主要特点;然后详细描述了国内外学术界对于微服务架构 的学术论文与研究工作;最后介绍了微服务架构的优点和缺点以及与传统的单体式架构特点的对比。 关键词:微服务,服务架构,综述 AReviewof the Microservice Architecture Z H A O Ran1 2,Z H U Xiaoyong1 (1National Networls New Media Engineering Research Center,Institute of Acoustics, Chinese Academy of Sciences,Beijing,100190,China, 2University of Chinese Academy of Sciences,Beijing,100049,China) Abstract:The microservice architectiure started to appear in technology prototypes in 2012,and it gradually replaccd the traditional monolithic architecture. Martin Fowler proposed the concept of the microservice architectiure in 2014. At the same tim e,the rapid de-velopment of the c ontainer technology provided the foundation for the large - use of the microservice architectiure. Since then,the mi-croservice architectiure has become the most popular service architectiure in the industry. This paper first introduces the concept and the main characteristics of the microservice. Then the literatures and the research about the microservice at home and aboard are described specifically. At l ast,the advantages and disadvantages of the microservice architectiure are introduced,and they are compared with the traditional monolithic architecture. Keywords:microservice,service architecture,review 〇引言 随着互联网时代的到来,云计算技术和物联网技术快速发展,互联网应用提供商的硬件资源与软件资源越来越多地以服务的形式提供给用户[1]。越来越大的用户体量、越来越复杂的服务内容对互联网公司和 服务提供商的可扩展性、敏捷性、容错性等方面的能力提出了越来越高的要求,这也促使后台网络应用服务 的架构形式在不断地演进,从早期的单体式架构(monolithic architecture)到后来的面向服务架构S O A(serv-ice-oriented architecture)。 在这个演进过程中,微服务架构(microservice architecture)由面向服务架构S O A慢慢发展而来。微服务 架构于2012年开始出现技术雏形,并逐步取代传统的单体式架构。2014年学者Martm Fowler正式提出微 本文于2018 -08 - 12收到,2018 - 12 -04收到修改稿。

相关文档
最新文档