微服务架构与实践--读书笔记

2020-01-05  本文已影响0人  AllenWang0217

项目使用微服务已有两年多了,一直停留在使用层面,无意间发现这本书,想对其理论方面进行学习,以此读书笔记做简要记录。
作者:王磊
成书时间:2015年10月7日
示例代码语言:Ruby
运行环境:Mac OS(或Linux)

结构:
第一部分为基础部分。包括第1章和第2章,概述了三层应用架构以及微服务架构。
第二部分为实践部分。包括第3章至第10章,通过一个具体的实例,从头到尾介绍了一个服务从需求到实现,再到构建、部署以及运维的整个过程。
第三部分为进阶部分。包括第11章至第14章,讨论了微服务的持续交付、测试策略、通信机制,并描述了一个使用微服务改造遗留系统的真实案例。

三部分见相互独立,但各章节之前有前后依赖。

第一章 单块架构及其面临的挑战

软件三层架构:

虽然三层架构将系统的逻辑分成了三层,但他并不是物理上的分层。也就是说,对于不同层的代码而言,经历编译、打包、部署后,所有的代码最终还是运行在同一个进程中。

对于这种功能集中、代码中心化、一个发布包、部署后运行在同一进程的应用程序,我们通常称之为单块架构应用

单块架构的优势

单块架构面临的挑战

第二章 微服务架构综述

什么是微服务

对于微服务,目前业界还没有一个严格的定义。不过,ThoughtWorks的首席科学家——马丁·福勒(Martin Fowler)先生,对微服务的这段描述,似乎更加通俗易懂:

微服务是一种架构模式,他提倡将单一应用程序划分成一组小的服务,服务之间互相协调互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务之间采用轻量级的通信机制互相沟通(通常基于HTTP的RESTful API)。每个服务都围绕着业具体业务进行构建,并且能够独立的部署到成产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。

https://martinfowler.com/articles/microservices.html

多微才够微

代码行数:不同语言不同特点,代码行数无法衡量
重写时间:跟个人能力强相关,重写时间无法衡量
团队觉得好才是真的好:需要团队和组织找到平衡点,但应遵循以下两个基本原则

独立性

独立性是指在应用的交付过程中,开发、测试以及部署的独立

进程隔离

理论上能够将多个服务部署到同一个节点,并让他们运行在不同的进程中,但并不推荐这个做。一方面增加了部署和扩展的复杂度,另一方面会给水平扩容带来麻烦。

诞生背景

容器虚拟化技术
Docker是一个开源的应用容器(Linux Container)引擎。
优势:

微服务架构与SOA

SOA(Service-Oriented Architecture):面向服务架构,早在1996年由Gartner提出。对于复杂的企业IT系统,应按照不同的、可重用的力度划分,将功能相关的一组功能提供者组织在一起为消费者提供服务。
SOA与微服务的区别

SOA实现 微服务实现
企业级,自顶向下开展实施 团队级,自底向上开展实施
服务由多个子系统组成,粒度大 一个系统被拆分成多个服务,粒度细
企业服务总线,集中式的服务架构 无集中式总线,松散的服务架构
集成方式复杂(ESB/WS/SOAP) 集成方式简单(HTTP/REST/JSON)
单块架构系统,互相依赖,部署复杂 服务能独立部署

微服务架构是传统SOA的一个子集

微服务的本质

微服务不是银弹

银弹:是指一项可使软件工程的生产力在十年内提高十倍的技术或方法
优势:

需要考虑的因素:

后两部分,待续。。。

附:

康威定律

Conway’s law 最初来自于Conway在1967年发表的论文《How Do Committees Invent?》,之后在《人月神话》这本书中引用了论文的结论,并命名为康威定律(Conway’s law)得以推广。

Conway’s law: Organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations. - Melvin Conway(1967)

我的翻译:设计系统的组织形式受制于产品设计,沟通结构也等价于该组织形式。

我的理解:团队划分或者项目组织需要根据设计的产品进行组织,而一旦该组织形式确定,其沟通成本也随之确定。
在文章中,Mike Amundesn总结了一些核心观点:

Communication dictates the design组织沟通方式会通过系统设计表达出来

There is never enough time to do something right, but there is always enough time to do it over

时间再多一件事情也不可能做的完美,但总有时间做完一件事情

There is a homomorphism from the linear graph of a system to the linear graph of its design organization

线型系统和线型组织架构间有潜在的异质同态特性

The structures of large systems tend to disintegrate during development, qualitatively more so than with small systems

大的系统组织总是比小系统更倾向于分解

上一篇 下一篇

猜你喜欢

热点阅读