写点什么

腾讯资深架构师整理出来的 Java 高级开发需要的分布式技术,简直绝了

  • 2022-10-12
    湖南
  • 本文字数:3568 字

    阅读完需:约 12 分钟

前言

又逢“金九银十”,年轻的毕业生们满怀希望与忐忑,去寻找、竞争一个工作机会。已经在职的开发同学,也想通过社会招聘或者内推的时机争取到更好的待遇、更大的平台。


然而,面试人群众多,技术市场却相对冷淡,面试的同学们不得不面临着 1 个职位 N 个应聘者的巨大竞争。


问:在这种现状下,如何才能收获又多又好的 Offer?


答:短期准备——刷面试题;长期筹谋——巩固核心技能。


面试题怎么刷?刷高频题、有深度的题、符合时效性的题。


核心技能如何巩固?先深入理解原理,再系统应用到实践。


分布式、微服务几乎是现在的技术人员必须要了解的架构方向,从理论上来讲确实解耦了很多结构,但另一方面,又会带来更多衍生的复杂度及难点。 如何保证事物的最终一致性?如何进行性能及容量预估?如何处理分布式系统的日志?如何进行线上应急?如果你 曾有和我一样的困惑,那么相信你一定能从本文中得到非常宝贵的解答。


面对越来越复杂的系统和业务,分布式技术早已成为互联网时代的必学技术 ,然而, 如果没有经历过大公司背景的实践和历练,则我们很难接触到分布式服务的设计和架构 。


分布式和微服务技术越来越被互联网企业推崇和认可,如何将其结 业务的特点工程化地在企业中落地是每个技术人员都需要思考的问题。小编今天分享一份书籍文档:《分布式服务架构:原理、设计与实战》,本书籍对于理解分布式和微服务技术,有很好的指导和启发。



本书将分布式的原理、 实践及个人的工作经验相结合,从分布式的一致性、系统容量评估和性能保障、日志系统、服务部署、线上应急等方方面面进行了鞭辟入里的分析。


本书以一位在 IT 行业从事多年分布式服务架构工作的资深老兵的视角,剖析了针对分布式系统架构的解决方案和设计模式。 书中的每一章、每一节都是作者对多年线上系统架构设计实践的总结。


由于细节内容实在太多,所以小编只能把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容(这里只展示章节目录)!文末有资料获取方式,由于此文详细读完需要花费时间较长。时间紧迫的朋友们可以粗略看看目录移至文末。

目录

第一章 分布式微服务架构设计原理



本章总结


本章主要讲解从传统的单体架构到服务化的发展历程,并讲解从服务化到现在流行的微服务架构的演化,以及微服务架构的特点、实现原理和最佳实践,井且提出了微服务是 SOA 服务化的拓展和延续。在后续章节里不会刻意地区分 SOA 服务化和微服务,因为微服务就 SOA 服务化在全新场景下的升华和叠加。


最后再次强调微服务架构的主要特点。


  • 将传统单体应用拆分成网络服务,来实现模块化组件

  • 根据微服务架构的服务划分来分组职能团队,减少跨团队的沟通

  • 每个服务对应 个团队,团队成员负责开发、测试、运维和运营 ,开发后在团队内运维和运营,不需要交付给其他团队。

  • 去中心化、 SOA 务化的中心服务治理和去企业服务总线

  • 微服务重视服务的合理拆分、分层和构造,可建设自动化持续发布平台,井进行敏捷开和部署。

  • 具备兼容性设计、容错性设计和服务的契约设计。


第二章 彻底解决分布式系统一致性的问题



本章总结


本章从一致性问题的实践出发,对大规模、高并发服务化系统的实践经验进行总结, 列举了导致不一致的具体问题,并围绕这些具体问题,提出一致性原理如 ACID、 CAP、 BASE 等:并学习了两阶段、三阶段 TCC 一 致性协议,总结了实现最终一致性的查询模式、补偿模式、异步确保模式、定期校对模式、可靠消息模式和缓存一致性模式等 ;最后针对服务化系统中同步调用、异步调用 、消息队列等应用场景详细分析了超时发生的场景和解决方案,以供大家在开发服务化系统的过程中参考。


第三章 服务化系统容量评估和性能保障



本章总结


本章以互联网企业重点关注的非功能质量为主线,总结了非功能质量需求的整体目标,井针对不同的服务和资源列举了不同的非功能质量需求的衡量指标,帮助读者在做技术评审的过程中整理思路。本章又针对不同的系统尽量穷举评审时关注的评审点,并随后提供了一个简单有效的评审提纲,最后根据提纲实现了一个互联网容量和性能评估的经典案例,大家可以在案例中了解高并发互联网系统是如何拆分的,以及依据哪些数据进行拆分,通过对非功能质需求的评估、设计和实现,对应设计时的容量和性能评估及事后的压测,来保证互联网项目达成既定的非功能质量需求的目标。


容量和性能评估保证系统设计能够满足系统的非功能质量需求,性能测试保证系统实施按照既定目标实现项目的非功能质量目标,本章后半部分全面介绍了互联网企业里压测的全过程及方法论,并总结了压测的最佳实践 在本章末尾介绍了常用的压测工具集,读者可以根据不同的场景选择不同的压测工具来测试系统的性能指标, 保证系统的高性能。


第四章 大数据日志系统的构建



本章总结


在一个完整的互联网服务化系统的实现中,日志系统是一个非常重要的功能组成部分。它可以记录系统产生的所有行为和信息,并按照某种形式表达出来,我们可以使用日志系统所录的信息为系统排错,并优化系统的性能,或者根据这些信息调整系统的行为,提高系统的可用性。因此,稳定的日志系统是保证系统可用性的一个重要的基础设施。


本章一开始介绍了开源日志框架的背景、实现结构、使用方式,包括 JDKLogger、 CommonLogging、 Log4j、 Slf4j、 Logback 和 Log4j2 ;然后分享了笔者在实践中积累的使用这些日 志系统的优化经验和最佳实践,先后介绍了日志级别的设置、日志的数量和大小、切割方式、 日志格式的配置,最后给出了一个由一行日志导致的线上事故的案例。


接下来分析了大数据日志系统的原理与设计,从给出构建大数据日志系统的一个通用架构开始,讲述其中各个模块的职责、设计和架构,包括日志采集器、日志缓冲队列、日志解析器、日志存储和搜索、日志展示系统和监控与报警系统等,最后给出了一个如何设计日志系统的容量和对日志系统做性能评估的例子。


最后介绍了当前最流行的开源日志框架 ELK,也介绍了 Elasticsearch 、Logstash 和 Kibana 的安装、配置和基本使用方法等,为读者构建大数据日志系统起到抛砖引玉的作用。


第五章 基于调用链的服务治理系统的设计与实现



本章小结


随着 SOA 服务化和微服务架构在互联网公司的广泛应用 ,互联网公司 的系统越来越复杂,复杂的系统会有各种各样的问题产生。


APM 系统的核心功能一一调用链跟踪系统的建设,能够帮助我们更好地治理线上服务,井解决生产环境中每天都重复发生的问题。


本章从介绍开源的 APM 项目及市场上流行的商业 APM 产品开始,介绍了 APM 的功能和特性;然后重点讲述了谷歌的 Dapper 论文提到的调用链跟踪原理,并讲解了业务链实现的原理;最后,基于调用链跟踪的原理,总结了实现调用链系统的通用架构、方法论及最佳实践。


第六章 Java 服务的线上应急和技术攻关



本章总结


本章开始介绍了线上应急和技术攻关的必要性、思路和方法论,强调了线上应急的目标是快速恢复系统,减少影响和损失,而不是彻底解决问题;也通过海恩法则和墨菲定律提出互联网行业中技术攻关的重要性。海恩法则强调,再好的技术、再完美的规章,在实际操作层面,也无法取代人自身的素质和责任心,因此,那些重要的线上应急和技术攻关问题还需要通过高级领域专家来解决,因此,本章在后面全面介绍了线上应急和技术攻关中,领域专家应该掌握的各种命令和工具。


其次,本章介绍了如何搭建示例服务 Vesta ,在配置和启动 Vesta 后,以运行 Vesta 服务为背景重点介绍了笔者积累和总结的高效应用层脚本。接下来介绍了关键的 Java 虚拟机命令,帮助大家查看 Java 虚拟机运行状态、线程堆枝、内存使用情况、 GC 频率等。这些都可以帮助读者解决服务负载高、 Jar 包冲突、验证线上服务代码、动态添加线上日志等问题 并介绍了我们不得不学的那些 Linux 基础命令,包括操控内存、 、网络和网卡、磁盘 I/O 等命令。


在本章结尾介绍、分析、定位和解决了笔者在生产中遇到的线上应急和攻关的两个典型案例,帮助读者理解如何应用线上应急和技术攻关的方法,以及如何使用这些重要的命令和脚本并提供给大家解决疑难杂症的方法论。本章介绍的应急思想、攻关方法、实践案例及解决方案能够帮助大家对自己的服务保驾护航。


第七章 服务的容器化过程



本章小结


通过本节的内容,我们了解到虚拟机与容器之间的区别,以及容器给我们带来的好处,并通过实战操作,学习了 Docker 的常用命令,本章主要介绍了镜像、容器、磁盘卷、网络、服和集群的实战操作;然后介绍了 Docker 目前主要的管理工具: Swarm、 Kubemetes 和 ApachMesos; 最后介绍了 wor press 博客系统的容器化的实现过程。


第八章 敏捷开发 2.0 的自动工具化



本章总结


通过对本章的学习,我们了解了常用的 种开发模式:瀑布式开发、法代式开发、螺旋式开发和敏捷开发;然后介绍了当下炙手可热的 DevOps 及其详细流程:最后介绍了敏捷开发 2.0 和它的优势,以及我们常用的自动化工具。

最后

需要文章中配套资料的朋友可以——点击传送门

用户头像

还未添加个人签名 2022-09-20 加入

还未添加个人简介

评论

发布
暂无评论
腾讯资深架构师整理出来的Java高级开发需要的分布式技术,简直绝了_Java_小二,上酒上酒_InfoQ写作社区