微服务设计笔记(1)——概述

微服务就是一些协同工作的小而自治的服务。

1 微服务

1.1 很小,专注于做好一件事

在一个单块系统内,通常会创建一些抽象层或者模块来保证代码的内聚性,从而避免上述问题。内聚性是指将相关代码放在一起,在考虑使用微服务的时候,内聚性这一概念很重要。

单一职责原则很好地强调了内聚性这一概念,它是这样讲的:“把因相同原因而变化的东西聚合到一起,而把因不同原因而变化的东西分离开来。”

服务专注于某个边界之内,因此可以很好地避免由于代码库过大衍生出的很多相关问题。

微服务足够小即可,但不要过小。

服务应该多小的关键因素是,该服务是否能够很好地与团队结构相匹配。

使用的服务越小,独立性带来的好处就越多。

1.2 自治性

一个微服务就是一个独立的实体。它可以独立部署在 PAAS(Platform As A Service,平台即服务)上,也可以作为一个操作系统进程而存在。

服务之间均通过网络调用进行通信,从而加强了服务之间的隔离性,避免紧耦合。

这些服务应可彼此间独立修改,并且某个服务的部署,不会影响该服务的使用者。

服务会暴露出 API(Application Programming Interface,应用编程接口),然后服务之间通过这些接口进行通信。API 接口的实现技术应避免与使用者相耦合。所以,我们应该使用与具体技术不相关的 API 实现方式。

2 好处

微服务的好处,也适用于任何一个分布式系统。

2.1 技术异构性

在一个由多个服务相互协作的系统中,可以在不同的服务中使用最适合该服务的技术。

如果系统中的一部分需要性能提升,那么可以使用性能更好的技术栈来重新构建该部分。系统中的不同部分也可以使用不同的数据存储技术。比如以下的社交网络:

微服务可以帮助我们更快地采用新技术,为我们带来这些新技术的好处。

我们可以选择一个风险最小的服务来采用新技术,这样即使出现问题,也容易处理。

但同时使用多种技术,也需要付出一些代价。比如 Twitter 选用的技术大多基于 JVM(Java Virtual Machine,Java 虚拟机),因为他们了解 JVM 的稳定性与性能。他们还在 JVM 上开发了一些库与工具,使得大规模运维变得更加容易,但这同时也使得他们更难采用 Java 之外的技术来编写服务与客户端。

这就是转换代价。

服务的大小也会影响多技术栈的选择。比如一个两周内即可重写的服务,我们就会试着尝试使用新技术。

2.2 弹性

微服务具有很好的弹性。比如,系统中的某个组件不可用,但没有导致级联故障问题,即系统的其它组件仍可正常运行。微服务就是通过服务边界来避免级联故障的。

2.3 扩展

如果使用了较小的多个服务,那么我们只需要对需要扩展的服务进行硬件升级,而把那些对性能要求没有那么高的服务,运行在更小、性能稍差的硬件上。

2.4 简化部署

一个几百万行代码的应用,即使只修改了一行代码,也需要重新部署整个应用,才能发布。这种部署影响很大、风险很高。而且,两次发布之间的差异越大,出错的可能性也就越高!

微服务架构中,各个服务之间的部署是独立的,这样就可以更快地对特定部分的代码进行部署,客户也可以更快地使用我们开发的功能。。即使出了问题,也只会影响一个服务,并且可以实现快速回滚。

2.5 匹配组织结构

因为小团队更加高效。

2.6 组合性

分布式系统和面向服务架构的目标是:易于重用已有功能。
微服务架构的目标是:根据不同目的,我们可以通过不同方式使用同一个功能。

整体化应用,只能提供一个粗粒度的 API 供外部使用;而微服务架构,会开放很多细粒度的 API 。

2.7 很容易替换

当一个代码库只有几百行,我们就不会对它有太多的情感依赖,因此也会很容易替换它。

3 面向服务的架构

SOA(Service-Oriented Architecture,面向服务的架构)是一种设计方法,这种架构内部包含许多服务,服务之间通过相互配合,提供一系列功能。

微服务架构是 SOA 的一种特定方法。

4 其它分解技术

4.1 共享库

将整个代码库分解为多个库,这些库由第三方或者自己组织内部提供。比如,创建一系列的集合操作类工具等。

缺点如下:

  1. 无法选择异构技术。因为这些库只能使用同一种语言,或者至少在同一个平台使用。
  2. 无法对系统某一部分进行独立扩展。
  3. 当更新库时,需要重新部署。

4.2 模块分解技术

有些编程语言,可以对模块进行生命周期管理,这样就可以把模块热部署到生产上。

OSGI (Open Source Gateway Initiative,开放服务网关协议)就是具体的模块分解技术。它的缺点是:编程语言本身没有对其提供足够的支持,这样就必须做很多工作对模块进行隔离。独立的模块会慢慢地与其它代码耦合在一起,所以我们需要界定好边界。

5 没有银弹

微服务系统,就像分布式系统一样复杂。除了得到微服务架构所带来的好处之外,我们还需要在部署、测试和监控方面做很多工作。而且还需要考虑如何扩展系统,并保证它具有足够的弹性。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值