前言
随着时代的不断发展,分布式服务架构日益流行,已经从SOA服务化发展到了微服务架构。有过惊喜,有过质疑,但这未能阻挡分布式服务架构在互联网行业里的普遍应用。然而,事物总是有两面性的,丰富的新框架及新技术层出不穷,给项目的技术决策者带来了技术选型上的困难。此外,在互联网交易越来越复杂、规模越来越庞大的背景下,解决分布式服务间的事务问题、业务一致性问题、可用性问题、稳定性问题等的困难以指数级增加。
分布式和微服务技术越来越被互联网企业推崇和认可,如何将其结合业务的特点工程化地在企业中落地是每个技术人员都需要思考的问题。
面对越来越复杂的系统和业务,分布式技术早已成为互联网时代的必学技术,然而,如果没有经历过大公司背景的实践和历练,则我们很难接触到分布式服务的设计和架构。
在这里为大家推荐一篇两位阿里P8级大佬编纂的深入学习分布式架构的秘籍**+XXX_WWW666666获取**将分布式的原理、实践及相关工作经验相结合,从分布式的一致性、系统容量评估和性能保障、日志系统、服务部署、线上应急等方方面面进行了鞭辟入里的分析。
内容简介
本篇全面介绍了分布式服务架构的原理与设计,并结合作者在实施微服务架构过程中的实践经验,总结了保障线上服务健康、可靠的最佳方案,是一本架构级、实战型的重量级著作。
全篇以分布式服务架构的设计与实现为主线,由浅入深地介绍了分布式服务架构的方方面面,主要包括理论和实践两部分。
理论上,首先介绍了服务架构的背景,以及从服务化架构到微服务架构的演化;然后提出了保证分布式服务系统架构一致性的方案和模式, 并介绍了互联网架构评审的方法论;最后给出了一个简要的非功能质量的技术评审提纲。
实践上,首先提供了一个互联网项目的性能和容量评估的真实案例,介绍了压测的方案设计和最佳实践,这些技术能够全面保证大规模、高并发项目的一致性、可用性和高并发性;然后讲解了大规模服务的日志系统的原理、设计与实践,包括ELK等框架的特点和使用方式等,并介绍了当前流行的APM系统的设计与实现,主要包括调用链和业务链的跟踪与恢复,涵盖了线上应急和技术攻关的流程及重点,也结合服务化系统线上应急过程进行分析并总结了其中需要用到的Java虚拟机、Linux和定制化脚本等命令,这些命令都是每个开发人员都会用到的解决线上问题的利器;最后,阐述了系统服务的容器化过程,并详细介绍了敏捷开发流程和实现自动化的常用工具等,让读者既能学到架构设计的基础理论,也能结合其中的原理、设计与方法论来解决大规模、高并发互联网项目中的现实问题。
第1章:分布式微服务架构设计原理
本章主要讲解从传统的单体架构到服务化的发展历程,并讲解从服务化到现在流行的微服务架构的演化,以及微服务架构的特点、实现原理和最佳实践,并且提出了微服务是SOA服务化的拓展和延续。在后续章节里不会刻意地区分SOA服务化和微服务,因为微服务就是SOA服务化在全新场景下的升华和叠加。
最后再次强调微服务架构的主要特点。
-
将传统单体应用拆分成网络服务,来实现模块化组件。
-
根据微服务架构的服务划分来分组职能团队,减少跨团队的沟通。
-
每个服务对应一个团队,团队成员负责开发、测试、运维和运营,开发后在团队内运维和运营,不需要交付给其他团队。
-
去中心化、去SOA服务化的中心服务治理和去企业服务总线。
-
微服务重视服务的合理拆分、分层和构造,可建设自动化持续发布平台,并进行敏捷开发和部署。
-
具备兼容性设计、容错性设计和服务的契约设计。
第2章:彻底解决分布式系统一致性的问题
本章从一致性问题的实践出发,对大规模、高并发服务化系统的实践经验进行总结,列举了导致不一致的具体问题,并围绕这些具体问题,提出一致性原理如ACID、CAP和BASE等;
并学习了两阶段、三阶段和TCC一致性协议,总结了实现最终一致性的查询模式、补偿模式、异步确保模式、定期校对模式、可靠消息模式和缓存一致性 模式等;最后针对服务化系统中同步调用、异步调用、消息队列等应用场景详细分析了超时发生的场景和解决方案,以供大家在开发服务化系统的过程中参考。
第3章:服务化系统容量评估和性能保障
本章以互联网企业重点关注的非功能质量为主线,总结了非功能质量需求的整体目标,并针对不同的服务和资源列举了不同的非功能质量需求的衡量指标,帮助读者在做技术评审的过程中整理思路。
本章又针对不同的系统尽量穷举评审时关注的评审点,并随后提供了一个简单有效的评审提纲,最后根据提纲实现了一个互联网容量和性能评估的经典案例,大家可以在案例中了解高并发互联网系统是如何拆分的,以及依据哪些数据进行拆分,通过对非功能质量需求的评估、设计和实现,对应设计时的容量和性能评估及事后的压测,来保证互联网项目达成既定的非功能质量需求的目标。
第4章:大数据日志系统的构建
本章一开始介绍了开源日志框架的背景、实现结构、使用方式,包括JDK Logger、Commons Logging、Log4j、 SIf4j、 Logback 和Log4j2;然后分享了笔者在实践中积累的使用这些日志系统的优化经验和最佳实践,先后介绍了日志级别的设置、日志的数量和大小、切割方式、日志格式的配置,最后给出了一个由一行日志导致的线上事故的案例。
接下来分析了大数据日志系统的原理与设计,从给出构建大数据日志系统的一个通用架构开始,讲述其中各个模块的职责、设计和架构,包括日志采集器、日志缓冲队列、日志解析器、日志存储和搜索、日志展示系统和监控与报警系统等,最后给出了一个如何设计日志系统的容量和对日志系统做性能评估的例子。最后介绍了当前最流行的开源日志框架ELK,也介绍了Elasticsearch、 Logstash 和Kibana的安装、配置和基本使用方法等,为读者构建大数据日志系统起到抛砖引玉的作用。
第5章:基于调用链的服务治理系统的设计与实现
本章从介绍开源的APM项目及市场上流行的商业APM产品开始,介绍了APM的功能和特性;然后重点讲述了谷歌的Dapper论文提到的调用链跟踪原理,并讲解了业务链实现的原理;最后,基于调用链跟踪的原理,总结了实现调用链系统的通用架构、方法论及最佳实践。
第6章:Java服务的线上应急和技术攻关
本章开始介绍了线上应急和技术攻关的必要性、思路和方法论,强调了线上应急的目标是快速恢复系统,减少影响和损失,而不是彻底解决问题;也通过海恩法则和墨菲定律提出互联网行业中技术攻关的重要性。海恩法则强调,再好的技术、再完美的规章,在实际操作层面,也无法取代人自身的素质和责任心,因此,那些重要的线上应急和技术攻关问题还需要通过高级领域专家来解决,因此,本章在后面全面介绍了线上应急和技术攻关中,领域专家应该掌握的各种命令和工具。
其次,本章介绍了如何搭建示例服务Vesta, 在配置和启动Vesta后,以运行Vesta 服务为背景重点介绍了笔者积累和总结的高效应用层脚本。接下来介绍了关键的Java虚拟机命令,帮助大家查看Java虚拟机运行状态、线程堆栈、内存使用情况、GC频率等。这些都可以帮助读者解决服务负载高、Jar 包冲突、验证线上服务代码、动态添加线上日志等问题:并介绍了我们不得不学的那些Linux基础命令,包括操控内存、CPU、网络和网卡、磁盘Io等命令。
第7章:服务的容器化过程
通过本节的内容,我们了解到虚拟机与容器之间的区别,以及容器给我们带来的好处,并通过实战操作,学习了Docker的常用命令,本章主要介绍了镜像、容器、磁盘卷、网络、服务和集群的实战操作;然后介绍了Docker 目前主要的管理工具: Swarm、 Kubernetes 和Apache Mesos;最后介绍了wordpress 博客系统的容器化的实现过程。
第8章:敏捷开发2.0的自动化工具
通过对本章的学习,我们了解了常用的4种开发模式:瀑布式开发、迭代式开发、螺旋式开发和敏捷开发;然后介绍了当下炙手可热的DevOps及其详细流程:最后介绍了敏捷开发2.0和它的优势,以及我们常用的自动化工具。
后记
自互联网诞生以来,其简单、敏捷的微服务架构开发理念和实践逐渐成为主流,在逐渐发展的环境下和技术演化的过程中,迅速突破互联网行业并波及软件行业的各个领域。然而,这种突飞猛进的表面下却是龙鱼混杂、泥沙俱下。一方面,很多人在这个信息爆炸的时代应对海量信息的处理能力比较有限;另一方面,也有人致力于将优秀的理论和实践相结合,希望运用所学的高效解决方案应对越来越复杂的问题。不论对与错,人类对技术进步的追求从未停歇。