阿里P8高级架构师带你领略阿里巴巴微服务架构——最后有惊喜哦

Dubbo微服务框架的核心功能

启动时检查

?Dubbo 缺省会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止 Spring 初始化完成,以便上线时,能及早发现问题,默认 check="true"

集群容错

failover 失败自动切换,当出现失败重试其它服务器。通常用于读操作,重试带来更长延迟。

failfast快速失败,只发起一次调用,失败立即报错。通常用于非幂等性写操作,如新增记录。

failsafe失败安全,出现异常时,直接忽略。通常用于写入审计日志等操作。

failback失败自动恢复,后台记录失败请求,定时重发。通常用于消息通知操作。

folking并行调用多个服务器,只要一个成功即返回。通常用于实时性要求较高的读操作,但需要浪费更多服务资源。

负载均衡

随机,按权重设置随机概率。调用量越大分布越均匀。

轮循,按公约后的权重设置轮循比率。存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二台时就卡在那,久而久之,所有请求都卡在调到第二台上。

最少活跃调用数,相同活跃数的随机,活跃数指调用前后计数差。使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。

一致性 Hash,相同参数的请求总是发到同一提供者。当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供者,不会引起剧烈变动。

线程模型

如果事件处理的逻辑能迅速完成,并且不会发起新的 IO 请求,比如只是在内存中记个标识,则直接在 IO 线程上处理更快,因为减少了线程池调度。

但如果事件处理逻辑较慢,或者需要发起新的 IO 请求,比如需要查询数据库,则必须派发到线程池,否则 IO 线程阻塞,将导致不能接收其它请求。

如果用 IO 线程处理事件,又在事件处理过程中发起新的 IO 请求,比如在连接事件中发起登录请求,会报“可能引发死锁”异常,但不会真死锁。

异步调用

基于NIO 的非阻塞实现并行调用,客户端不需要启动多线程即可完成并行调用多个远程服务,相对多线程开销较小。

事件通知

在调用之前、调用之后、出现异常时,会触发 oninvoke、onreturn、onthrow 三个事件,可以配置当事件发生时,通知哪个类的哪个方法 1。

并发连接控制

服务器端并发执行(或占用线程池线程数)不能超过 N 个
每客户端并发执行(或占用连接的请求数)不能超过 N个
限制服务器端接受的连接不能超过 N 个
限制客户端服务使用连接不能超过 N 个
延迟连接用于减少长连接数。当有调用发起时,再创建长连接。
粘滞连接用于有状态服务,让客户端总是调用同一服务方,除非服务方挂了,再连另一台。
令牌验证

通过令牌验证在注册中心控制权限,以决定要不要下发令牌给消费者,可以防止消费者绕过注册中心访问提供者,另外通过注册中心可灵活改变授权方式,而不需修改或升级提供者。

路由规则

排除预发布机:

=> host != 172.22.3.91
白名单:

host != 10.20.153.10,10.20.153.11 =>
黑名单:

host = 10.20.153.10,10.20.153.11 =>
读写分离:

method = find,list,get,is => host = 172.22.3.94,172.22.3.95,172.22.3.96
method != find,list,get,is => host = 172.22.3.97,172.22.3.98
为重要应用提供额外的机器:

application != kylin => host != 172.22.3.95,172.22.3.96
配置规则

禁用提供者:(通常用于临时踢除某台提供者机器,相似的,禁止消费者访问请使用路由规则)

override://10.20.153.10/service?disbaled=true
调整权重:(通常用于容量评估,缺省权重为 100)

override://10.20.153.10/service?weight=200
调整负载均衡策略:(缺省负载均衡策略为 random)

override://10.20.153.10/service?loadbalance=leastactive
服务降级

服务降级:(通常用于临时屏蔽某个出错的非关键服务)

override://10.20.153.10/service?&application=foo&mock=force:return+null
mock=force:return+null
表示消费方对该服务的方法调用都直接返回 null 值,不发起远程调用。用来屏蔽不重要服务不可用时对调用方的影响。
还可以改为
mock=fail:return+null
表示消费方对该服务的方法调用在失败后,再返回 null 值,不抛异常。用来容忍不重要服务不稳定时对调用方的影响。
访问日志

如果你想记录每一次请求信息,可开启访问日志,类似于apache的访问日志。注意:此日志量比较大,请注意磁盘容量。

服务容器

服务容器是一个 standalone 的启动程序,因为后台服务不需要 Tomcat 或 JBoss 等 Web 容器的功能,如果硬要用 Web 容器去加载服务提供方,增加复杂性,也浪费资源。

服务容器只是一个简单的 Main 方法,并加载一个简单的 Spring 容器,用于暴露服务。

分布式事务/2PC提交

事务协调者(事务管理器)给每个参与者(资源管理器)发送Prepare消息,每个参与者要么直接返回失败(如权限验证失败),要么在本地执行事务,写本地的redo和undo日志,但不提交,到达一种“万事俱备,只欠东风”的状态。

如果协调者收到了参与者的失败消息或者超时,直接给每个参与者发送回滚(Rollback)消息;否则,发送提交(Commit)消息;参与者根据协调者的指令执行提交或者回滚操作,释放所有事务处理过程中使用的锁资源。(注意:必须在最后阶段释放锁资源)

线程栈自动dump

当业务线程池满时,我们需要知道线程都在等待哪些资源、条件,以找到系统的瓶颈点或异常点。dubbo通过Jstack自动导出线程堆栈来保留现场,方便排查问题

1、SOA架构和微服务架构之间的区别和联系

2、如何设计微服务及其设计原则

3、解惑Spring Boot流行因素及能够解决什么问题

4、什么是Spring Cloud,为何要选择Spring Cloud

5、基于全局分析Spring Cloud各个组件所解决的问题

?

这里的视频是每天不断更新的,每天都有新的视频每天都有大牛讲解新的技术,如果想学习Java工程化、高性能及分布式、深入浅出。性能调优、Spring,MyBatis,Netty源码分析的朋友可以加Java进阶群:488048032,群里有阿里大牛直播讲解技术,以及Java大型互联网技术的视频免费分享给大家。

原文地址:http://blog.51cto.com/13636605/2084802

时间: 2024-11-05 19:11:16

阿里P8高级架构师带你领略阿里巴巴微服务架构——最后有惊喜哦的相关文章

阿里巴巴微服务架构到底有多牛逼?

微服务架构专题 围绕微服务的通用模式,讲解Spring Cloud的常见用法及原理.让微服务的开发更加方便.快捷,让微服务应用更加稳定.可用. 理论结合实战,透彻理解分布式架构及其解决方案. 面向人群 1.工作1-5年需要突破瓶颈 2.传统行业转型进入互联网行业的人群 在技术深度和技术广度上得到飞跃的提升.成为互联网行业所需要的IT型人才 微框架 1.与微服务之间的关系 2. 热部署实战 3.核心组件Starter.Actuator.AutoConfiguration.Cli 4.集成Mybat

应用架构的演进--MVC,RPC,SOA,微服务架构

MVC架构:垂直应用架构 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率. 当业务规模很小时,将所有功能都部署在同一个进程中,通过双机或者前置负载均衡器实现负载分流 此时,加速前端页面开发,分离前后台逻辑的mvc框架是关键. 代表技术:Struts2.SpringMVC.Spring.Mybatis 等等. RPC架构:分布式服务架构 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用

Java架构:一文读懂微服务架构的重构策略

你很有可能正在处理大型复杂的单体应用程序,每天开发和部署应用程序的经历都很缓慢而且很痛苦.微服务看起来非常适合你的应用程序,但它也更像是一项遥不可及的必杀技.如何才能走上微服务架构的道路?下面将介绍一些策略,帮你摆脱单体地狱,而无须从头开始重写你的应用程序. 通过开发所谓的绞杀者应用程序(strangler application),可以逐步将单体架构转换为微服务架构.绞杀者应用程序的想法来自绞杀式藤蔓,这些藤蔓在雨林中生长,它们包围绕树木生成,甚至有时会杀死树木.绞杀者应用程序是一个由微服务组

微服务架构幸运28出售理解及微服务架构局限性

虽然微服务幸运28出售 <Q> 2952777280[源码链接] hxforum.com 是降低整体结构的最佳方式.然而,它有其自身的一些缺点.但在得出任何结论之前,让我们来看看其中的一些. 1.开发环境超载 随着应用程序及其数据库的增长,代码库也在不断扩展.随着针对每个微服务的代码扩展,它会使每个加载的应用程序的开发环境过载.这可能导致生产力的重大延迟. DevOps复杂性 单功能微服务的开发和部署并非易事.使用多种技术并创建API来集中系统是一项挑战.这需要一个经验丰富的DevOps团队.

微服务架构的设计原则

微服务架构的设计原则如下:¶ 高内聚.低耦合. 无缝的 API 集成. 为每一项服务分配唯一的资源标识. 实时流量管理. 最小化数据表,以优化加载. 通过内/外部 API,执行持续监控. 为每个微服务隔离数据的存储.这对于限制数据的访问和避免“服务的耦合”是非常有用的. 例如:基于用户的分类数据,我们可以实施命令查询的责任分离(Command Query Responsibility Segregation,CQRS). 去中心化.设计微服务架构的首要原则是:将单体结构分解成独立的多个实体,而这

怎么成为java高级架构师?图灵学院总结的java架构师学习路线

怎么成为一个java高级架构师呢?相信这是很多java从业者,又或者说是coder/码农们比较感兴趣的问题,要回答这个问题,首先需要明白的是java架构师是什么?简单点说,架构师的主要任务不是从事具体的软件程序的编写,而是从事更高层次的开发构架工作.主要着眼于系统的"技术实现",工作内容就是确认和评估系统需求,给出开发规范,搭建系统实现的核心构架,并澄清技术细节.扫清主要难点的技术人员,并且需要有良好的组织管理能力.因此应该是特定的开发平台.语言.工具的大师,对常见应用场景能马上给出最

携程系统架构师带你手写spring mvc,解读spring核心源码!

讲师简介: James老师 系统架构师.项目经理 十余年Java经验,曾就职于携程.人人网等一线互联网公司,专注于java领域,精通软件架构设计,对于高并发.高性能服务有深刻的见解, 在服务化基础架构和微服务技术有大量的建设和设计经验. 课程内容: 1.为什么读Spring源码? 如果你是一名JAVA开发人员,你一定用过Spring Framework. 作为一款非常经典的开源框架,从2004年发布的1.0版本到现在的5.0版本,经历了14年的洗礼, 持久不衰 与其说现在是JAVA的天下, 不如

百度“百老汇”架构师深刻透视微服务架构

首先解释这个"百老汇"=百度老年架构师活动中心.......什么是微服务首先微服务并没有一个官方的定义,想要直接描述微服务比较困难,我们可以通过对比传统WEB应用,来理解什么是微服务.传统的WEB应用核心分为业务逻辑.适配器以及API或通过UI访问的WEB界面.业务逻辑定义业务流程.业务规则以及领域实体.适配器包括数据库访问组件.消息组件以及访问接口等.一个打车软件的架构图如下: 尽管也是遵循模块化开发,但最终它们会打包并部署为单体式应用.例如Java应用程序会被打包成WAR,部署在T

十年java架构师分享的一些干货,成为架构师的必备技能

十年java架构师教你怎么学好java架构一.分布式架构架构分布式的应用和工具,成熟目前的技术包括 J2EE,CORBA 和 DCOM,这些技术牵扯的内容非常广,相关的书籍也非常多.分布式系统是一个古老而宽泛的话题,而近几年因为"大数据"概念的兴起,又焕发出了新的青春与活力.除此之外,分布式系统也是一门理论模型与工程技法.学习分布式系统的同学往往会感觉:"入门容易,深入难"的确,学习分布式系统几乎不需要太多数学知识.分布式系统还是一个复杂且宽泛的研究领域,学习一两门