社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
项目使用微服务已有两年多了,一直停留在使用层面,无意间发现这本书,想对其理论方面进行学习,以此读书笔记做简要记录。
作者:王磊
成书时间:2015年10月7日
示例代码语言:Ruby
运行环境:Mac OS(或Linux)
结构:
第一部分为基础部分。包括第1章和第2章,概述了三层应用架构以及微服务架构。
第二部分为实践部分。包括第3章至第10章,通过一个具体的实例,从头到尾介绍了一个服务从需求到实现,再到构建、部署以及运维的整个过程。
第三部分为进阶部分。包括第11章至第14章,讨论了微服务的持续交付、测试策略、通信机制,并描述了一个使用微服务改造遗留系统的真实案例。
三部分见相互独立,但各章节之前有前后依赖。
软件三层架构:
虽然三层架构将系统的逻辑分成了三层,但他并不是物理上的分层。也就是说,对于不同层的代码而言,经历编译、打包、部署后,所有的代码最终还是运行在同一个进程中。
对于这种功能集中、代码中心化、一个发布包、部署后运行在同一进程的应用程序,我们通常称之为单块架构应用。
对于微服务,目前业界还没有一个严格的定义。不过,ThoughtWorks的首席科学家——马丁·福勒(Martin Fowler)先生,对微服务的这段描述,似乎更加通俗易懂:
微服务是一种架构模式,他提倡将单一应用程序划分成一组小的服务,服务之间互相协调互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务之间采用轻量级的通信机制互相沟通(通常基于HTTP的RESTful API)。每个服务都围绕着业具体业务进行构建,并且能够独立的部署到成产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。
代码行数:不同语言不同特点,代码行数无法衡量
重写时间:跟个人能力强相关,重写时间无法衡量
团队觉得好才是真的好:需要团队和组织找到平衡点,但应遵循以下两个基本原则
独立性是指在应用的交付过程中,开发、测试以及部署的独立
理论上能够将多个服务部署到同一个节点,并让他们运行在不同的进程中,但并不推荐这个做。一方面增加了部署和扩展的复杂度,另一方面会给水平扩容带来麻烦。
容器虚拟化技术
Docker是一个开源的应用容器(Linux Container)引擎。
优势:
SOA(Service-Oriented Architecture):面向服务架构,早在1996年由Gartner提出。对于复杂的企业IT系统,应按照不同的、可重用的力度划分,将功能相关的一组功能提供者组织在一起为消费者提供服务。
SOA与微服务的区别
SOA实现 | 微服务实现 |
---|---|
企业级,自顶向下开展实施 | 团队级,自底向上开展实施 |
服务由多个子系统组成,粒度大 | 一个系统被拆分成多个服务,粒度细 |
企业服务总线,集中式的服务架构 | 无集中式总线,松散的服务架构 |
集成方式复杂(ESB/WS/SOAP) | 集成方式简单(HTTP/REST/JSON) |
单块架构系统,互相依赖,部署复杂 | 服务能独立部署 |
微服务架构是传统SOA的一个子集
You build it, you run it. --Werner Vogels, CTO of Amazon
银弹:是指一项可使软件工程的生产力在十年内提高十倍的技术或方法
优势:
需要考虑的因素:
后两部分,待续。。。
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
大的系统组织总是比小系统更倾向于分解
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!