微服务架构-笔记


以《Building Microservices》一书的封面开篇。
感性上讲,微服务是一个个小的独立的服务,就像蜂窝里的每个眼儿,一个完整而庞大的应用,由若干小服务组成。但从理性观点,微服务跟蜂窝并无相通性。比如蜂巢相邻的cells,一旦破坏其中一个,旁边的必然受到影响,如果杀死了蜂王,蜂窝大乱,整个工蜂体系都可能瘫痪,这些情况都不同于微服务架构所描述的特性。

背景

这份笔记是以Martin Fowler的《Microservices》一文为基础的发散阅读体会。但要说明的是,这是面向后端的技术架构,设计上是以业务功能为导向的。

回忆传统 —— 单体架构风格

单体,可以换理解为“非常庞大的系统”。通俗讲,“客户端 + 服务端应用程序 + 数据库”就是单体架构风格的一类标准范式。其中:
客户端:承载用户访问的功能界面以及发起接口请求。
服务端应用:处理HTTP请求、执行逻辑、检索更新数据库数据、将数据渲染到模板再发送到浏览器视图(当然也可能只返回数据)。
数据库:关系型数据库,由很多表组成。

这里的服务端应用,就被视作单体。处理请求的逻辑都允许在单一进程中(有些地方将这个单一进程划分为一个web容器)。
这就意味着,当系统发生任何改变,都涉及服务端新版本构建和部署(Java服务中显而易见的事情)。
单体的扩展方式非常简单:
对于应用服务:只需要在负载均衡后面运行多个实例(web服务器)。
对于数据库:分库分表。分库是将关系紧密的表放在一台数据库服务器上,分表是因为一张表的数据太多,需要将一张表的数据通过hash放在不同的数据库服务器上。

why 微服务?

在读到微服务的细节之前,还是吐槽一下单体。
– 单体难以应对业务快速的变化。对于新增业务需求,特别是一些临时的,短暂的,往往需要用到系统本身的数据。这时候就得在原始系统服务里动刀。等到系统功能发版后,才能使用其扩展功能。
– 单体一旦发展到特别庞大的地步,很难再整体更新与修复。

Here they are! Microservices

单体存在的问题是显而易见的,微服务可以解决这些问题。
1. 服务组件化(Componentizationvia Services)
就是将整体应用拆分成可独立部署和升级的组件。
组件与组件之间一定是松耦合的,但也同时强调了组件的接口实现方式,通用做法是RESTful HTTP API。采用统一接口的实现而不是简单的靠文档、约定来定义,恰恰满足了规范性和松耦合的要求。
当然,现实中组件与组件间,也是需要协同更新来支持新的业务,但这都可以通过合约演进机制来最小化实现。

  1. 围绕业务能力组织服务
    理解这句话,事实上就是如何开展工作的一个过程。
    打造微服务一方面是技术成本,另一方面也是资源成本。Martin Fowler提倡团队具有跨职能的能力。通常团队可以管理应用与数据库。
    这样做是必要的。现实中,很多团队按负责的职能来划分,开发应用涉及到给数据库提需求,流程上就是先碰需求,等待数据库开发,测试、部署。每个环节都会占用不同的资源。微服务建立在整合这些资源之上。

  2. 端点智能化
    端点可以理解为业务逻辑,或者简单视为微服务接入的点。
    这是源于微服务的通信方式,就像网络中不同的端点,通过某种通信机制彼此交互。
    每个微服务组件都暴露一个API(RESTful),一个给定的服务器和外部客户端都可以通过API调用微服务。
    这种通信方法通常是建立在消息总线机制上。比如利用RabbitMQ、Kafka。
    对比单体应用中,组件都在同一进程内执行,它们之间通过方法调用或函数调用通信。

有了端点智能化,微服务可以实现很多事情,比如微服务的管理(注册、访问)。

  1. 去中心化
    语言层面:微服务架构则鼓励使用合适的工具完成各自的任务,每个微服务可以考虑选用最佳工具完成(如不同的编程语言)。微服务的技术标准倾向于寻找其他开发者已成功验证解决类似问题的技术。
    数据层面: 微服务架构倡导采用多样性持久化(PolyglotPersistence)的方法,让每个微服务管理其自有数据库,并允许不同微服务采用不同的数据持久化技术。

以上其实是对 Martin Fowler 总结出微服务架构特性的简单解读。
微服务架构的设计难点在于如何针对业务划细分服务。这与以往划分业务模块并不相同。特别地,划分原则是“低耦合,高内聚”。
微服务架构也同样关心组织特性,微服务组件的颗粒度决定了团队的划分,也就是说12个人维护一个服务还是1个人维护12个服务,这是需要实践探讨的。
另外,从技术本源触发,微服务架构已经很成熟,在于网络、基建(容器)、工具(DevOps、TDD……)、持久化数据模型(MapReduce、NoSQL……)的快速发展。

关于微服务实践,推荐一点干货:
《微服务在微信的架构实践》- 许家滔 文章
[《微服务在微信的架构实践》- 许家滔 音频](http://www.infoq.com/cn/presentations/practice-of-micro-services-in-wechat-architecture)

参考

Microservices

发表评论

电子邮件地址不会被公开。 必填项已用*标注