微服务之道:度量驱动开发pdf/doc/txt格式电子书下载
本站仅展示书籍部分内容
如有任何咨询
请加微信10090337咨询
书名:微服务之道:度量驱动开发pdf/doc/txt格式电子书下载
推荐语:
作者:范亚敏,傅健
出版社:机械工业出版社
出版时间:2020-05-01
书籍编号:30614148
ISBN:9787111653615
正文语种:中文
字数:345675
版次:1
所属分类:计算机-理论教程
本书赞誉
我与作者相识多年,一直钦佩他“手不释卷,永远学习”的精神。我有幸提前阅读了他们的作品,通读后深感震惊:要具备怎样的技术深度和广度才能写出这样的作品!
在微服务时代,作者根据其近20年的工作经验,在国内很少提及的微服务的度量领域构筑了一本近乎百科全书的工具书,覆盖了几乎所有度量需求,提供了很多技术方案,记录了大量最佳实践。
实际上,书中贯穿的度量思想和技术路线也不仅仅适用于微服务架构,多数和软件产品度量、运维相关的需求,都能在本书中找到解决方案。因此这本书完全有资格成为开发和运维人员书桌案头的必备书籍!
——凌浩,科大国创软件股份有限公司,行业BG研发中心技术总监
在由创新驱动的今天,开发速度越来越快,而度量驱动开发将近十年沉淀的互联网产品迭代经验,通过数据化、模型化以及各类开源工具固定了下来。这本书结合微服务介绍了度量驱动开发的全部流程,充分结合实践环境,配以GitHub上的可运行源码帮助读者理解,足见两位作者的良苦用心,非常推荐大家阅读。
——陶辉,《深入理解Nginx》作者,极客时间讲师,杭州智链达数据有限公司CTO
我与范兄共事多年,得益于范兄卓越的技术领导力,团队的微服务项目从无到有,从小到大。度量在其中起到了关键作用,微服务在产线上的运行对开发人员来说不再是个黑盒。通过各种报表和监控告警的分析,开发人员可以持续不断地对项目进行各种优化。范兄多年从事微服务度量的开发,不断地努力实践,总结经验,著成此书。这本书内容翔实,易于理解,理论结合实际,涵盖了度量在微服务全生命周期的方方面面,相信可以为正在进行微服务开发的小伙伴提供一定的帮助。
——马刚,思科系统(中国)研发有限公司开发经理
这本书是我读过的关于微服务和度量驱动开发方面的最接地气的一本书了,作者具有丰富的实时服务平台开发经验,是把企业私有云里的服务搬到公有云上的探路者,也是把有状态服务改造成无状态微服务并应用度量驱动开发的带路人。这本书倾注了作者多年的经验和心血,巧妙地将理论融入一个微服务实例中,手把手带你体会从微服务的设计、实现到运维的全过程。更有价值的是,作者在这个微服务实例实践中,充分应用和实践了度量驱动开发理论,涵盖了微服务度量的概念、设计、实现、聚合分析、展示和报警,展示了如何通过度量来推动服务的改进和完善,确实是一本值得研读和借鉴的良心作品。
——张颐武,思科系统(中国)研发有限公司技术主管
本书结合实践详细介绍了如何通过度量驱动开发来构建、监控以及维护微服务系统。阅读这本书不仅可以熟悉度量驱动开发的基本概念和常用工具,而且通过学习贯穿全书的一个真实案例,可以了解打造微服务系统的全过程。
——许彬,思科系统(中国)研发有限公司开发经理
前言
在程序员的世界里,新概念、新技术层出不穷,诚如庄子所言:“吾生也有涯,而知也无涯,以有涯随无涯,殆已!”把学习新技术当作一种乐趣,掌握其精髓,并应用到日常的开发工作中,提高开发效率,构建出更酷、更符合用户需求的产品,是一件很快乐的事。
我们所在的团队是公司的后台服务器开发部门,一直以来我们所做的系统多是传统的、基于C++的单体后台服务系统。大约在2015年,我们又承接了几个微服务系统的开发,并引入了Java和Python技术栈来提高开发效率。随着对微服务了解的深入,我们发现微服务有其适用的场景和优缺点,实践越多,越感觉到度量(metric)对于微服务的重要性。传统的单体服务当然也少不了监控与度量,然而对于微服务,度量不但是部署上线之后的必要手段,而且是整个微服务开发生命周期中不可或缺的充分必要条件。随着度量在日常工作中所占的比重越来越大,我们逐渐从实践中形成了度量驱动开发的方法。
想必大家都知道著名诗人顾城的名句:“黑夜给了我黑色的眼睛,我却用它寻找光明。”对于微服务开发者来说,度量给我们的眼睛加上了智能的“探照灯”,它在汪洋大海中照亮我们前行的路线,没有度量,就像黑夜行驶在大海中的船没有罗盘和星辰,就会迷失方向,无法到达彼岸。
我在公司内部做了几次关于度量驱动开发的分享,也在博客上记录了一些度量驱动开发的心得体会。与机械工业出版社吴怡编辑的几次讨论,使我萌生了写一本书的想法,讲一讲关于微服务与度量驱动开发的那些事儿,并邀请和我在一个团队的傅健同学加入,一起将我们积累的微服务度量驱动开发的经验和教训分享给大家。
本书共8章,基本按照我们自己的经历(从一开始接触微服务到熟练应用度量驱动开发方法),由浅入深,按照微服务开发的全过程逐步展开。
在本书主线上,我们从微服务的特点入手,引出了度量驱动开发的基本概念、内容、方法与策略,然后从度量的设计和实现开始详细讲述如何设计与实现微服务的度量,并介绍如何用度量驱动的方法和技术来改进微服务。接下来,详细阐述了度量数据的聚合与展示、分析与报警的各种方案,最后结合实例介绍了度量驱动运维和微服务的全程度量。下面简要介绍一下本书各章节的主要内容。
第1章为微服务入门,对比了单体服务与微服务的特点,讲解了我们心中的微服务之道,并介绍了一个贯穿始终的微服务实例——土豆微服务,将我们熟悉的待办事项Todo List应用拆分为土豆管理微服务、土豆提醒微服务和土豆网页微服务,并分别简述了它们的功能与设计。在技术实现上,使用Java语言基于Spring Boot进行开发,这个案例为后续的度量做了最基本的铺垫。
第2章为微服务度量的基本概念,从微服务的局限引出了度量驱动开发的基本概念,详细阐述了度量的内容、层次、方法与策略,以及度量常用的术语和指标。
第3章为微服务度量的设计,首先从微服务的协议入手,介绍了如何选用和分析微服务的协议,并对HTTP、SIP和RTP这三个微服务中常用协议的度量进行详细讲解。之后介绍了如何基于度量选用合适的存储系统,如何基于度量来提高微服务的可靠性,最后结合实例讲述了微服务度量驱动的设计。
第4章是度量驱动的微服务实现,介绍在实际的微服务过程中如何度量代码质量、开发进度、微服务的性能,并详细讲解了Java技术栈中常用的度量技术和类库,最后结合实例讲述了如何给我们的土豆微服务实现度量驱动。
第5章是度量数据的聚合与展示,首先讲述了如何聚合和存储度量数据,如何进行必要的清洗和处理。然后重点讲解了度量的可视化技术,如何选择和绘制各种图表。在具体的技术栈中,介绍了常用的TIG(Telegraf/InfluxDB/Grafana)、ELKK(Elasticsearch/LogStash/Kibana/Kafka)和Prometheus技术栈,并结合实例演示了如何有效地聚合与展示度量数据。
第6章是度量数据的分析与报警,讲解了如何分析度量数据,如何揭示隐藏在图表背后的意义,哪些需要改变配置,哪些需要调整设计,哪些需要触发报警并立刻采取行动。最后利用ELKK技术栈,从零开始用Python打造了一款实用的度量报警系统。
第7章是度量驱动的运维,讲解了如何通过度量来驱动我们进行高质量的运维,将度量驱动的方法贯穿于微服务的部署升级、配置调整与日常的运维工作,并介绍了常用的Redis、Kafka等开源组件的运维度量要点,最后结合实例讲述了土豆微服务的运维。
第8章是全链路度量,首先讨论了微服务的调用链路跟踪与度量,然后讲述了客户端应用或App端的度量数据采集与度量要点,最后对于微服务的度量驱动开发做了一个回顾与展望。
从实践中来,到实践中去。本书源自我们在工作中的心得与总结,以一个土豆微服务的实例贯穿全书,讲述从微服务开发的设计、实现到运维的全过程。书中大多数素材来自我们的工作笔记和工作实践,将其总结成一套度量驱动开发的方法。也许我们并不是度量驱动开发的首倡者,却是自觉自发、身体力行的践行者。本书偏重实战和方法,在理论方面则点到为止,有经验的开发者可以不拘于顺序,根据自己的知识背景选取感兴趣的章节阅读。对于初学者,还是建议按章节顺序循序渐进地阅读,先理解概念和方法,再实际运行和阅读示例代码。
我们公司所用的主要语言有C++、Java、Python和Go。本书仅以Python和Java语言举例,所有源代码、脚本和一些说明文档均放在网址https://github.com/walterfan/mdd中,大家可以下载参考。
如果你正在学习或实现微服务,抑或正在从传统的单体服务向微服务转型,这本书应该非常适合你。通过应用书中所介绍的度量驱动开发的概念和方法,相信你一定能构建出令自己和客户都满意的微服务,为你的团队和公司创造更多的价值。
本书面向微服务开发人员、运维和测试工程师,对于项目和技术经理亦有帮助。我们坚信,度量驱动开发(Metrics Driven Development,MDD)是微服务成功的必由之路,也相信你读过本书后,再将其应用于实践,会和我们一样深有同感。
写作这本书开始于两年前,没想到会写这么久。日常繁忙的工作、出差使得写作进度缓慢。在写作期间我还生了一场大病。病愈之后,我决心珍惜大好的时光,抓紧时间完成写作,并请傅健同学帮我一起充实和打磨书稿。通过互相的督促和鼓励,我们一起在2020年合作完成了全书。尽管如此,我们仍感时间仓促,有许多未尽之言,限于篇幅,有些框架和工具的详细用法以及大数据和机器学习的实践没有提及,希望以后能有机会与读者分享和交流。作为一线的开发者,写作时间有限,写作水平不高,难免会有偏颇和不足之处,敬请各位读者不吝赐教,多多指正。
致谢
感谢我生命中最重要的三位女性——我的母亲、妻子和女儿,你们是我最爱的人,谢谢你们对我的支持和爱。感谢机械工业出版社的吴怡老师给我鼓励,以及对我的拖延症的忍耐;感谢傅健同学的帮助与合作;感谢我的老弟张鹏和老同学陈略涛的支持与意见;还要谢谢和我们一起工作的小伙伴,在同你们一起工作的过程中我学到了很多。
——范亚敏
首先感谢范兄的邀请,我才有机会参与这本书的编写,也感谢吴怡老师的悉心指导。“罗马不是一天建成的”,写书更是一个不断打磨、完善的过程,所以非常感谢两位不遗余力地一路陪伴。最后也感谢我的家人,可以容忍我将家庭生活的部分时间抽出来投入书籍编写中。
——傅健
第1章 微服务入门
本章首先介绍微服务的基本概念、特点以及微服务设计的特点与方法,然后通过“土豆微服务”案例展示如何从零开始构建微服务。在之后的章节中,我们会详细介绍如何通过度量驱动开发的方法来改进这个微服务。
1.1 单体服务的特点
当今世界,人们很难脱离他人的服务而完全自给自足地生活。回想一下,我们在超市购物,在餐饮店吃饭,都是在接受别人的服务,在公司解决客户的问题,则是在为别人提供服务。
那么服务是什么?简单来说,服务就是为满足他人需求所做的事情。一项服务就是一个独立的功能单元,比如上菜服务、结账服务、泊车服务等。
从软件开发的角度来看,服务就是进程外的组件,与其他组件以明确的接口进行交互,类似于进程内的函数调用。从可读性、可理解性、可维护性的角度出发,我们倾向于写小函数,避免写过于复杂的大函数,因为大函数容易出错,难于维护和修改。若干功能明确、职责单一的小函数有利于重用,提高开发效率。
同理,服务也一样。比如,我们起初开一个小饭馆,老板除了兼任厨师和服务员之外,可能还负责采购、收银以及打扫店面卫生,这是一个典型的单体服务。单体服务并非不好,店小利薄,提供的菜品较为简单,一个人也应付得来。然而生意兴隆、规模扩大之后问题就来了,老板分身乏术,就需要雇用厨师、服务员、收银员、采购员、保洁员等来共同做好饭馆服务,于是一个单体服务便拆分为多个微服务。
软件服务与此类似,当服务单一、规模小、逻辑简单时,用一个单体服务就挺好。在服务多样化、规模增大、逻辑变复杂之后,单体服务就不再适合了,缺点一一呈现。
·复杂程度高。维护成本越来越高,各个模块之间边界模糊,一个模块的改动可能导致整个服务出现问题,一点内存泄漏、一处指针错误就会让整个服务停机,牵一发而动全身,更不要说共用的底层模块改动可能导致上层的异常,出现一点改动就需要做全面的回归测试,不敢漏过一个测试用例。维护成本的剧增也导致交付速度越来越慢。
·水平扩展困难。单机的容量有限,而且缺乏弹性,一荣俱荣,一损俱损。垂直扩展受到硬件约束,水平扩展也比较困难,因为单体服务内部多半都维护着多个状态,从一台扩展
....
本站仅展示书籍部分内容
如有任何咨询
请加微信10090337咨询