前言
分布式服务框架不仅仅包含核心的运行时类库,还包括服务划分原则、服务化最佳实践、服务治理、服务监控、服务开发框架等,它是一套完整的解决方案,用来协助应用做服务化改造,以及指导用户如何构建适合自己业务场景的服务化体系,将服务化的价值发挥到极致。.
基于分布式服务框架,业务终于可以把全部精力都放到应用层的逻辑开发,研发效率、系统可靠性都得到了极大的提升。目前,华为电信软件主要解决方案几乎所有的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.主要内容
第1章微服务
随着领域驱动设计、持续交付、按需虚拟化、基础设施自动化、小型自治团队、大型集群系统这些实践的流行,微服务也应运而生。它并不是被发明出来的,而是从现实世界中总结出来的一种趋势或模式。但是没有前面提及的这些概念,微服务也很难出现。在本书接下来的内容中,我会尝试把这些概念整合起来,从而给出一个涉及如何构建、管理和演化微服务的全景图。
很多组织发现细粒度的微服务架构可以帮助他们更快地交付软件,并且有更多机会尝试新技术。微服务在技术决策上给了我们极大的自由度,使我们能够更快地响应不可避免的变化。
第2章演化式架构师
目前为止可以看到,微服务给我们提供了很多选择,因此也需要我们做很多决定。比如应该使用多少种不同的技术,不同的团队是否应使用不同的编程规范,是应该合并多个服务还是把一-个服务拆成多个。我们应该如何做决定呢?这些架构支持在频繁变换的环境下以更快的节奏进行变化,因此架构师这个角色也需要做相应的改变。本章关于架构师职责的观点是我的个人见解,希望能对象牙塔中的定义发起最后的攻击。
第3章如何建模服务
现在你已经知道什么是微服务了,希望你对它的主要优点也有所理解。你可能已经迫不及待地想要实现它了,对吗?但是从何做起呢?在本章中,我们会讨论如何确定服务之间的边界,以期最大化微服务的好处,避开它的劣势。但是,首先我们需要有一个产品作为讨论的载体。
第4章集成
在我看来,集成是微服务相关技术中最重要的一-个。做得好的话,你的微服务可以保持自治性,你也可以独立地修改和发布它们:但做得不好的话会带来灾难。希望本章能够帮助你在微服务之旅中,避免曾经在SOA中遇到的那些问题。
第5章分解单块系统
前面几章讨论了什么是好的服务以及为什么小服务能达到更好的效果,还讨论了系统具有可演化性的重要性。但事实上,可能我们手中已经有了很多代码库,而它们无一例外都没有遵循上述的模式。如何才能循序渐进地把-一个单块系统分解开来呢?
单块系统的形成非一日之功。开发人员每天都对系统添加新功能和新代码。一段时间之后,它变成了组织中一个恐怖而巨大的存在,没人想去修改它。但别担心,它并不是无可救药。只要使用了正确的工具,我们就可以手刃这个怪兽。
第6章部署
部署一个单块系统的流程非常简单。然而在众多相互依赖的微服务中,部署却是完全不同的情况。如果部署的方法不合适,那么其带来的复杂程度会让你很痛苦。本章会讲解一些技巧和技术,从而帮助我们]在细粒度的架构中更好地部署微服务。
我会从持续集成和持续交付说起。这些概念与我们下面要讨论的主题并不相同,但又有所关联,了 解它们可以帮助我们在考虑构建什么、如何构建以及如何部署时,做出更好的决定。
第7章测试
从我开始接触编程至今,自动化测试的世界日新月异,并且几乎每个月都会出现新的工具和技术,不断推动这个世界向前发展。不过,如何高效且有效地测试分布式系统的功能依然是一个挑战。本章会剖析-下测试细粒度系统面临的问题和挑战,并提出- -些解决方案,帮助大家更有信心地发布新的功能。
测试的覆盖面很广,即使只讨论自动化测试,也需考虑甚多。使用微服务架构以后,测试的复杂度进-步增加。面对这样的挑战,了解测试有哪些不同的类型,对我们来说便非常重要了。它可以帮助我们实现尽早交付软件与保持软件高质量之间的平衡,因为有时鱼和熊掌是不可兼得的。
第8章监控
正如我之前所展示的,将系统拆分成更小的、细粒度的微服务会带来很多好处。然而,它也增加了生产系统的监控复杂性。在本章中,我将带大家看看细粒度的系统在系统监控和定位问题上所面临的挑战,同时还会介绍一些应对方法,让鱼和熊掌兼得!
设想一下这样的场景:一个安静的周五下午,团队期待着早点开溜去酒吧,开始一个远离工作的周末。然而,突然收到一-封邮件:网站工作异常! Twitter 上到处都是关于贵公司网站出问题的消息,而你的老板在旁边喋喋不休,一个安静的周末就这么没了。
你需要了解的第一件事情是什么?问题到底出在哪里?
在单块应用的世界里,我们至少要非常清楚该从哪里开始调查。网站慢?是单块应用的问题。网站有 异常?是单块应用的问题。CPU占用率100% ?还是单块应用的问题。烧焦的气味?你懂的,单一的故障点会极大地简化对问题的调查!
现在,让我们回到基于微服务的系统。我们提供给用户的功能,是由多个小的服务组合而成的,其中一些服务需要集成更多的服务来完成功能。这种方法有很多优点(这很好,否则这本书岂不是浪费时间? ),但在监控的世界里,我们面临的是一个更为复杂的问题。
我们现在有多个服务需要监控,有多个日志需要筛选,多个地方有可能因为网络延迟而出现问题。该如何应对呢?我们得好好梳理一下,否则很可能导致混乱,成为一团乱麻,而这是周五下午(或在任何时间! )我们最不想面对的情况。
这里的答案很简单:监控小的服务,然后聚合起来看整体。我们从最简单的系统一-个节点,来展示该如何做。
第9章安全
关于大型系统的安全漏洞导致数据暴露给各种危险人物的故事,我们已经听说了太多。最近的爱德华●斯诺登泄密事件,更加让我们意识到公司持有的用户信息的价值,以及保存在为客户构建的系统中的数据的价值。本章将简要概述设计系统时,在安全方面应该考虑的一些问题。虽然无法包含安全的方方面面,但会列出一-些主要的选项给你,为进一步研究提供一个很好的起点。
我们需要考虑,在数据从一个点到另一个点的传输过程中,如何保护它们,也需要考虑在其他情况下如何进行保护。我们需要考虑底层操作系统及网络的安全。有太多需要考虑的点,有太多可以做的事情!那到底需要多安全呢?我们如何知道什么是足够安全呢?
我们还需要考虑人的因素。谁在使用我们的系统,他又会做些什么?而这又与我们的服务器如何交互有什么关系?让我们从这里开始。
第10章康威定律和系统设计
到目前为止,本书大部分的内容集中在向细粒度架构迈进时所面临的技术挑战。但除此之外,我们也需要考虑组织方面的问题。在这一一章, 我们将了解到忽略公司的组织结构会带来什么样的危险。
我们的行业还很年轻,它似乎在不断地重塑自己。不过,一些关键定律还是经受住了时间的考验。例如摩尔定律,它表示集成电路上可容纳的晶体管数目每两年会增加一倍。该定律已经被证明准确得惊人(尽管有人预测,这种趋势已经放缓)。还有一条定律,我发现几乎普遍适用,在我的日常工作中也更有用,那就是康威定律。
第11章规模化微服务
当你处理书中的小例子时,一切似乎都很简单,但现实世界要复杂得多。当我们的微服务架构从刚开始的简单变得复杂后,会发生什么呢?当我们不得不处理发生故障的多个独立服务,或管理数以百计的服务时,该怎么办呢?当微服务的数量比人还多时,有什么应对的模式吗?让我们一起寻找答案吧!
第12章总结
在前面的章节我们已经讨论了相当多的内容,从微服务的定义到如何划分它的边界,从集成技术到安全和监控。我们甚至还探讨了微服务架构下,架构师的角色应该是什么样子的。虽然每个微服务本身很小,但是它对架构的影响却很广很大,所以还是需要学习很多东西。在本章,我会尝试总结一些贯穿全书的关键点。
总结
因为文章内容的限制,小编在这里就不做过多的介绍了,需要这两部分完整版实战技术文档的小伙伴,可以移步主页获取!!
你的过去我来不及参与,但是你的未来我奉陪到底!
持续给大家分享技术知识,希望大家能够喜欢!!
感谢大家的支持,感谢头条官方的支持!