《springboot揭秘》读后感兼谈微服务

先谈下书,要说“揭秘”,大概就是第二章 spring 的原理和第三章 spring boot 启动过程算是,这两章我觉得分析的比较透彻,也是最切题的。后面的章节都是总结性的概述,所以看有评论说只是大篇幅的拷代码,代码还只是构想,倒也没全错,但因为书里提到的大部分技术点都是生产上已经在用的,所以只是跟着读一遍过一下思路就行。这里提供一个[github库](https://github.com/wacai),上面有几个 spring-boot-starter 的项目,是当时作者所在团队的,也是我们生产环境在用的一些功能组件的 fork 的库。这些代码是经过实际验证过的,对书中例子有敲代码欲的可以参考。

springboot 框架的理念是自动配置(Auto Configuration),将 spring 传统的约定优先配置的思路(Conversion Over Configuration)进一步发扬,看懂以上部分会发现 springboot 在源码实现上也没什么稀奇的。但 springboot 提供的还是基础能力和总体构建应用的思路,只有 spring 社区快速跟进,各种各样的 spring-boot-starter 不断涌现,进而形成生态才是这个框架能够持续的关键。

第四五六章对涉及到的相应技术点都是蜻蜓点水般的入门介绍,其实本来这些也不是 springboot 的核心,要理解 springboot 所要解决的痛点是原先 spring 集成各种框架时的繁琐配置和版本库的依赖问题。我认为这三章的内容不能孤立的看,而是要放到微服务的架构风格之下,其所在的整个技术栈体系里才能更有收获。

微服务这 buzz word 我印象中大概喊两年多了,当时还在前公司做通信行业软件的一个SOA 项目,那会儿看了一阵介绍文章,没觉得和 SOA 有多大区别,仅从抽象的理解上更小一点,但对怎么落地没具体思路,更谈不上采用微服务体系之后一系列的自动化工具和平台的打造。直到去年来到一家做电商的互联网公司,用的是 springboot + dubbo 的微服务架构,其间除了日常业务开发外,也参与了一些自动化工具的搭建,走过弯路也有点心得,回过头再看[马丁福勒大叔的那篇文章](https://martinfowler.com/articles/microservices.html)境界又不一样。

微服务定义:

In short, the microservice architectural style is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services, which may be written in different programming languages and use different data storage technologies.

简而言之,微服务架构风格是就是开发一个单独的应用程序作为一系列小的服务的方法,每一个服务运行在自己的进程中,并使用轻量级机制通信,通常是 HTTP API 。这些服务围绕业务能力来构建并通过全自动部署机制独立部署。它们有最低限度的集中管理,可能会采用不同的编程语言和数据存储技术。

说白了就是尽量将功能拆分,服务粒度做小,可以让这些服务独立对外提供功能,按这种思路开发交付软件的就是微服务。其背景是单体应用(monolithic application,就是以前那种将很多功能打包成一个大的服务单元整体进行交付的应用)不能满足更高复杂度下对服务治理、运维、自动化基础设施的要求。因为随着系统复杂度的持续升高,需要支持在整个软件交付链路上更高效扩展,势必将独立的功能和服务进行拆分,从而演化成一个个微服务。这种思路带来的好处就是独立,跳出了原来大一统的王国统治,可以从开发、编译部署、发布、监控等各个层面打造自己的独立的能力,从而保障自己持续稳固的运行。

那么怎么独立,springboot 提供的就是一种将该思路落地的方案。通过它来将概念上拆分后的服务单独开发测试部署,但这只是微服务理念实践的起点,微服务的核心竞争力是围绕整个软件交付链路提供一整套支撑工具和平台。包括开发阶段的标准化的开发体验、统一的发布和管理、进而通过标准化的方式统一维护数量庞大的服务等等。这些涉及应用间的通信机制,应用的发布、部署、监控、运维等一系列自动化工具平台的打造。将服务拆解,复杂度降低只是面对更高复杂度应用的解题思路,而如何运用计算机将重复的事情变成自动的,用电力来节省人力,能提供一套在软件生命周期各个节点自动化的方案才是微服务理念真正落地。也只有实现了这些基础设施,微服务的理念才显现出威力。

关于实践中的一些坑:

1.分布式事务问题。应用拆分之后难免会碰到一些场景需要跨服务但又需要保证事务一致性,所以大叔才说分布式事务非常难以实施,因此微服务架构强调服务间事务的协调,并清楚的认识一致性只能是最终一致性以及通过补偿运算处理问题。(Distributed transactions are notoriously difficult to implement and and as a consequence microservice architectures emphasize transactionless coordination between services, with explicit recognition that consistency may only be eventual consistency and problems are dealt with by compensating operations.

这点可以参考之前谈过的[分布式事务问题的一次讨论](http://www.jianshu.com/p/b5e3e2385d04)

2.自动部署的问题。现在很多中小企业基于云上构建应用,这降低了构建、发布、运维微服务的复杂性,微服务的理想目标便是持续集成、持续部署,哪个应用需要升级了直接推到master 上,自动化测试跑通后就发布到生产。但这个目标涉及应用(或者说是进程、微服务)的优雅停止启动,springboot 本身提供了一些优雅关闭的方案,但它只是对自身(由springboot)产生线程的资源释放和应用关闭的方案,如果应用所处的网络层架构比较复杂,还涉及到与整体架构最前端的负载均衡通知停止发送请求、应用集成的分布式服务(比如dubbo)降权、应用自身产生的定时任务线程的监控与关闭、应用与消息队列的启停通信等,需要对所有涉及应用的线程做整体的梳理、区分,才能实现真正的优雅启停,进而达到持续部署的效果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,598评论 18 139
  • 微服务最近非常流行,各大互联网公司纷纷采用微服务架构体系,微服务架构模式正在为敏捷部署以及复杂企业应用实施提供巨大...
    Sting阅读 9,055评论 0 57
  • “微服务架构”这一术语在前几年横空出世,用于描述这样一种特定的软件设计方法,即以若干组可独立部署的服务的方式进行软...
    ThoughtWorks阅读 16,889评论 1 71
  • 一、微服务将变得轻量级 架构需要由人去设计,这些人被称为架构师。或许很多人并未授予架构师的头衔,但自己却从事着架构...
    justmilkrain阅读 5,415评论 10 109
  • 《天空与望远镜》堪称美国业余天文学爱好者的“圣经”,书中有这样一句话:“专业者和业余者之间永远存在一道界线,但在未...
    云丹风卿阅读 200评论 0 1