华为18级大牛整理总结:微服务设计和分布式服务框架原理实践文档
前言
==
分布式服务框架不仅仅包含核心的运行时类库,还包括服务划分原则、服务化最佳实践、服务治理、服务监控、服务开发框架等,它是一套完整的解决方案,用来协助应用做服务化改造,以及指导用户如何构建适合自己业务场景的服务化体系,将服务化的价值发挥到极致。.
基于分布式服务框架,业务终于可以把全部精力都放到应用层的逻辑开发,研发效率、系统可靠性都得到了极大的提升。目前,华为电信软件主要解决方案几乎所有的Java系统都基于分布式服务框架构建,底层的基础框架实现了统一。
近年来,随着DevOps和以Docker为首的容器技术的发展,微服务架构逐渐流行起来,微服务架构的流行有其必然的历史原因,它是敏捷开发、基础设施服务化、DevOps和互联网行业快速发展的综合产物。亚马逊AWS、Netflix 等都是微服务的成功实践者,相信未来国内越来越多的大型应用也会演进到微服务架构。
华为软件公司的Java架构经历了传统的MVC垂直架构-RPC框架-分布式服务框架,目前正在向Docker+微服务方向演进,整个服务化架构的演进历程也是业界技术变迁的一个缩影。

所以说,分布式服务框架和微服务,都是成为架构师之路的重要基石,不可或缺的技术,小伙伴们要重视这一块儿内容的学习。
今天刚好,就给大家准备了这两块儿的技术知识,希望大家能够喜欢多多转发让更多人受益!
咱们将把这两部分知识从目录、内容和具体章节逐一介绍,大家要仔细研读!
首先,给大家介绍的第一块儿内容是——分布式服务框架原理实践
=============================
1.目录

2.主要内容
第1章,应用架构演进,
随着业务的发展,应用规模不断扩大,系统内部的巨无霸应用越来越多,常规的垂直应用架构已经无法应对复杂业务带来的各种挑战。通过将业务公共能力抽象成原子服务,对复杂应用进行水平拆分和服务化,实现服务消费者和提供者的解耦。公共能力抽取和复用,可以有效降低公共模块重复开发建设的成本。
传统垂直架构改造的核心就是要对应用做服务化改造,服务化改造使用到的核心技术架构就是分布式服务框架。
本章对应用架构的演进历史进行剖析,使读者能够更清晰和全面地了解应用架构的历史演进过程以及未来架构的发展方向。

第2章,分布式服务框架入门
在一个不断发展的大型应用中,新的业务需求和功能不断增加,技术也在不断演进,不同团队构建的功能子系统采用的技术架构五花八门,子系统之间的开发、部署和运维模式也存在较大差异。如果企业内部没有统一的服务框架进行技术层面的拉通,开发和运维效率都将受到很大制约。
传统垂直架构改造的核心就是要对应用进行服务化,服务化改造使用到的核心技术就是分布式服务框架。

第3章,通信框架
单机版的本地方法调用变成远程服务调用之后,一个高性能的通用通信框架成为分布式服务框架必不可少的有机组成部分。
通信框架涉及到Socket通信、多线程编程、协议栈等相关知识,这部分在Java 技术堆栈中属于偏难掌握的部分。本章将对通信框架的原理和设计重点进行详细讲解,以期大家可以尽快熟悉通信框架的设计要点并在实际工作中灵活使用。

第4章,序列化与反序列化
服务提供者和消费者通过网络进行通信,对象需要进行序列化和反序列化,常见的序列化和反序列化方式很多,如何选择是重点也是难点。

第5章,协议栈
不同服务在性能上适用不同协议进行传输。比如对接异构第三方服务时,通常会选择HTTP/Restful 等公有协议:对于内部不同模块之间的服务调用,往往会选择性能较高的二进制私有协议。

第6章,服务路由
分布式服务框架.上线运行时都是集群组网,这意味着集群中存在某个服务的多实例部署,消费者如何从服务列表中选择合适的服务提供者进行调用,这就涉及到服务路由。分布式服务框架要能够满足用户灵活的路由需求。

第7章,集群容错
集群服务调用失败后,服务框架需要能够在底层自动容错,容错策略很多,分别适用于不同场景。本章将对集群容错的功能和设计进行详细讲解。

第8章,服务调用
除了常用的同步服务调用之外,分布式服务框架还需要支持其他几种形式的服务调用,本章将对这些调用方式进行详细讲解。

第9章,服务注册中心
对于服务提供者,它需要发布服务,由于应用系统的复杂性,服务的数量、类型不断膨胀;对于服务消费者,它最关心的是如何获取到它所需要的服务。对于服务提供方和服务消费方来说,它们还有可能兼具这两种角色:既需要提供服务,又需要消费服务。
如何有效地管理服务订阅/发布,避免硬编码地址信息是分布式服务框架需要解决的一个问题。通过将服务统一管理起来, 可以有效地优化内部应用对服务发布/使用的流程和管理,服务注册中心就是专门用来管理服务订阅/发布的配置管理节点。

第10章,服务发布和引用
服务提供者需要支持通过配置、注解、API 调用等方式,把本地接口发布成远程服务:对于消费者,可以通过对等的方式引用远.程服务提供者,实现服务的发布和引用。

第11章,服务灰度发布
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式。
AB test 就是一种灰度发布方式:让一部分用户继续用A,一部分用户开始用B;如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。

第12章,参数传递
服务消费者和提供者之间进行通信时,除了接口定义的请求参数,往往还需要携带一些额外参数,例如消息提供者的IP地址、消息调用链的跟踪ID等;这些参数不能通过业务接口来进行传递,
需要底层的分布式服务框架支持这种参数传递方式。

第13章,服务多版本
服务上线之后,随着业务的发展需要对功能进行变更,或者修复线上的BUG;服务升级之后,往往需要对服务采用多版本管理。
服务多版本管理是分布式服务框架的重要特性,它涉及服务的开发、部署、在线升级和服务治理。

第14章,流量控制
当资源成为瓶颈时,服务框架需要对消费者做限流,启动流控保护机制。流量控制有多种策略,比较常用的有:针对访问速率的静态流控、针对资源占用的动态流控、针对消费者并发连接数的连接控制和针对并行访问数的并发控制。
在实践中,各种流量控制策略需要综合使用才能起到较好的效果,本章针对分布式服务框架的流量控制设计原则和实践进行讲解。

第15章,服务降级
大促或者业务高峰时,为了保证核心服务的SLA,往往需要停掉一些不太重要的业务,例如商品评论、论坛或者粉丝积分等。
另外一种场景就是某些服务因为某种原因不可用,但是流程不能直接失败,需要本地Mock服务端实现,做流程放通。以图书阅读为例,如果用户登录余额鉴权服务不能正常工作,需要做业务放通,记录消费话单,允许用户继续阅读,而不是返回失败。
上述两种场景,都使用到了分布式服务框架的一个重要服务治理功能:服务降级。服务降级主要包括容错降级和屏蔽降级两种模式,下面我们就两种服务降级的策略和设计进行讲解。

第16章,服务优先级调度
当系统当前资源非常有限时,为了保证高优先级的服务能够正常运行,保障服务SLA,需要降低一些非核心服务的调度频次,释放部分资源占用,保障系统的整体运行平稳。
服务优先级的调度策略非常多,对于分布式服务框架而言,需要能够支持服务发布时设置优先级策略,并在资源成为瓶颈时,按照用户配置的优先级策略调度执行服务。

第17章,服务治理
随着业务的发展,服务越来越多,如何协调线上运行的各个服务,保障服务的SLA,对服务架构和运维人员是一个很大的挑战。
随着业务规模的不断扩大,小服务资源浪费等问题逐渐显现,需要能够基于服务调用的性能KPI数据进行容量管理,合理分配各个服务的资源占用,提高机器的利用率。
线上业务发生故障时,需要对故障业务做服务降级、流量控制、流量迁移等,快速恢复业务。
随着开发团队的不断扩大,服务的上线越来越随意,甚至发生功能相同、服务名不同的服务同时上线。上线容易下线难,为了规范服务的上线和下线,在服务发布前,需要走服务预发布流程,由架构师或者项目经理对需要上线的服务做发布审核,审核通过的才能够上线。
为了满足服务线下管控、保障线上高效运行,需要有一个统一的服务治理框架对服务进行统一、有效管控,保障服务的高效、健康运行。

第18章,分布式消息跟踪
随着业务分布式架构的发展,系统间的系统调用日趋复杂,以电商的商品购买为例,前台界面的购买操作涉及到底层上百次服务调用,涉及到的中间件包括:
◎分布式服务框架
◎消息队列 .
◎分布式缓存
◎分布式数据访间中间件
◎分布式文件存储系统
◎分布式日志采集
◎其…
如果无法有效清理后端的分布式调用和依赖关系,故障定界将会非常困难。利用分布式消息跟踪系统可以有效解决服务化之后系统面临的运维挑战,提高运维效率。

第19章,可靠性设计
相对于传统的本地Java API调用,跨进程的分布式服务调用面临的故障风险更高。
1)网络类故障:链路闪断、读写超时等。
2)序列化和反序列化失败。
3)畸形码流。
4)服务端流控和拥塞保护导致的服务调用失败。
5)其 他异常…
对于应用而言,分布式服务框架需要具备足够的健壮性,在平台底层能够拦截并向上屏蔽故障,业务只需要配置容错策略,即可实现高可靠性。

第20章,微服务架构
过去十年,SOA ( Service-Oriented Architecture)架构得到了广泛的应用,现在,随着云计算、移动互联网、Docker 容器等技术的快速发展和应用,“微服务”架构(Micro Service Architecture) 这一全新的架构风格越来越受到大家的关注,也有越来越多的企业和平台服务提供商在实践中尝试并使用它来解决具体业务问题,微服务架构的流行已经成为未来技术发展趋势之一。

第21章,服务化最佳实践
在服务化之前,业务通常都是本地API调用,本地方法调用性能损耗较小。服务化之后,服务提供者和消费者之间采用远程网络通信,增加了额外的性能损耗,业务调用的时延将增大,同时由于网络闪断等原因,分布式调用失败的风险也增大。如果服务框架没有足够的容错能力,业务失败率将会大幅提升。
除了性能、可靠性等问题,跨节点的事务一致性问题、分布式调用带来的故障定界困难、海量微服务运维成本增加等也是分布式服务框架必须要解决的难题。本章节我们将对服务化之后面临的挑战进行分析,并给出解决方案和业务最佳实践。

其次,给大家介绍第二块儿内容是——微服务设计
======================
1.目录

2.主要内容
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。


既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
最后
对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
再分享一波我的Java面试真题+视频学习详解+技能进阶书籍

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
备注Java获取)**
最后
对于很多Java工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
整理的这些资料希望对Java开发的朋友们有所参考以及少走弯路,本文的重点是你有没有收获与成长,其余的都不重要,希望读者们能谨记这一点。
再分享一波我的Java面试真题+视频学习详解+技能进阶书籍
[外链图片转存中…(img-wB3MDqtw-1713553811319)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)